首页 > 其他分享 >K8S之Pod对象

K8S之Pod对象

时间:2024-08-23 14:18:20浏览次数:14  
标签:容器 name 对象 image volume Pod K8S data

Pod是一组紧密关联的容器组合,共享PID,NETWORK,UTS namespace。一个Pod
里可以运行多个容器。一个Pod里多个容器共享网络和文件系统

原理

K8S真正处理的还是宿主机操作系统上的namespace和Cgroups,而不存在一个
Pod边界或者隔离环境。Pod里所有的容器共享的是同一个Network NameSpace
并且可以共享同一个volume。 在K8S项目里需要一个中间容器,这个容器叫
Infra容器,在这个Pod里,Infra容器永远是第一个被创建的容器,其他用户定义
容器则是通过join network NameSpace方式与Infra容器建立关联

Infra容器占用很小的资源,是一个特殊的镜像,名称:http://k8s.gcri/pause
这个镜像处于一个暂停的状态。在Infra容器hold住Network NameSapce后,用户
容器就可以加入到Infra容器的Network NameSpace中

示例

  • 创建Pod
apiVersion: v1
kind: Pod
metadata:
  name: pod-test
  labels:
    name: redis-master
spec:
  containers:
  - name: master01
    image: redis
    ports:
    - containerPort: 6379
      hostPort: 6388
  - name: master02
    image: paubo/sshd
    ports:
    - containerPort: 22
      hostPort: 8888        

执行命令: kubectl apply -f pod-test.yaml

对于同一个Pod里所有容器,它们进出的流量可以认为都是通过Infra容器完成的。在配置网络
只需关注Pod的网络还不是容器的网络即Infra的Network NameSpace即可。共享volume也只需
把volume定于在Pod层。一个volume对应的宿主机的目录对于Pod来说只有一个,Pod容器只需声明
挂载这个volume即可共享这个volume对应的宿主极目录

apiVersion: v1
kind: Pod
metadata:
  name: java-web
spec:
  restartPolicyL: Never
  volumes:
  - name: shared-data
    hostPath:
      path: /data
  containers:
  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html
  - name: debian-container
    image: debian
    volumeMounts:
    - name:shared-data
      mountPath: /pod-data
    command: ["/bin/sh"]         
    args: ["-c","echo hello from debian container > /pod-data/index.html"]

如上Pod中有两个容器nginx-container,debian-container,都声明挂载同一个volume
而这个volume是一个hostPath类型,也就是宿主机上的目录/data,这样两个容器都挂载了这个
宿主机目录/data。这样设计可以在一个容器跑多个不相关应用


apiVersion: v1
kind: Pod
metadata:
  name: java-web
spec:
  initContainers:
  - image: geetime/sample:v2
    name: war
    command: ["cp", "/sample.war", "/app"]  
    volumeMouts:
    - mountPath: /app
      name: app-volume
  containers:
  - image: geetime/tomcat:7.0
    name: tomcat
    command: ["sh","-c","/tomcat/bin/start.sh"]    
    volumeMounts:
    - mountPath: /tomcat/webapps
      name: app-volume
    ports:
    - containerPort: 8080
      hostPort: 8001
  volumes:
  - name: app-volume
    emptyDir: {}      

定义两个容器,第一个容器只有一个war包放在根目录下,声明initContainers将war包
拷贝到/app目录下,第二个容器的作用是启动一个tomcat,和initContainers挂载同一
个volume,而且initContainers一定逼containers里的容器先启动。这样在tomcat启动时
其webapps目录下就有war包

Pod重要参数说明

  1. NodeSelector 提供Node和Pod绑定
apiVersion: v1
kind: Pod
spec:
  nodeSelector:
    disktype:ssd
  1. NodeName 如果Pod该参数被赋值,K8S就会认为这个Pod已经经过调度了,调度的结果
    就是赋值的节点名称,一般由调度器负责设置

  2. HostAliases 定义Pod的hosts文件里的内容

  3. shareProcessNamespace 如果设置为true,表示开启共享Pid NameSpace

  4. LivenessProbe 健康检测

apiVersion: v1
kind: Pod
metadata:
  name: pod-health-check
  labels:
    name: pod-health-check
  namespace: default
spec:
  containers:
  - name: xx-health-check
    image: xx
    command:
    - "/bin/sh"    
    - "-c"
    - "touch /tmp/health; sleep 30; rm -f /tmp/health; sleep 600"
    livenessProbe:
      exec:
        command:
        - "/bin/sh" 
        - "-c"
        - "cat /tmp/health"
      initialDelaySeconds: 5
      periodSeconds: 5  

容器启动后exec进入容器执行cat /tmp/health命令,如果文件存在则返回0表示健康,如果返回值不为0,
则表示异常。容器启动5秒后开始检测,并且每5秒检查一次
除了在容器执行命令外,livenessProbe也可以定义发起http和TCP请求

livenessProbe:
  httpGet:
    path: /xxx-url
    port: xxx
    httpHeaders:
    - name:X-Custom-Header
      value: xxx
    initialDelaySeconds: 3
    periodSeconds: 3  
livenessProbe:
  tcpSocket:
    port: xxx
    httpHeaders:
    initialDelaySeconds: 5
    periodSeconds: 10  
  1. restartPolicy 指的是容器的恢复机制,有以下几种恢复策略

6.1 Always 任何情况下,只要容器不在运行状态,就会自动重启容器
6.2 OnFailure 只在容器异常的情况下才会重启容器
6.3 Never 从来不重启容器

加入一个Pod里只有一个容器,这个容器异常推出了,只有当restartPolicy=Nerver时
Pod才会进入Failed状态。而其他情况下,因为有重启策略存在,这个Pod会一直保持
running状态。而如果这个Pod有多个容器,如果只有一个容器异常退出,即使restartPolicy=never
只有当这个Pod里所以的容器都异常的情况下,这个Pod才会进入Failed状态

  1. ReadinessProbe 就绪性检查,检查我们应用是否就绪。ReadinessProbe 的健康检测和 LivenessProbe 一样
apiVersion: v1
kind: Pod
metadata:
  name: httpget-readinessprobe
  namespace: default
spec:
  containers:
  - name: httpget-pod
    image: nginx
    ports:
    - name: nginx-port
      containerPort: 80
    readinessProbe:
      httpGet:
        path: /index.html
        port: nginx-port
      initialDelaySeconds: 3
  1. lifecycle用于容器启动后,停止前的操作

postStart 容器启动后立即执行
preStop 容器停止前立即执行

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-test
  namespace: default
spec:
  containers:
  - name: lifecycle-test
    image: busybox
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "mkdir -p /data/web/html; echo 'lifecycle test' >> /data/web/html/index.html "]
    command:
    - "/bin/sh"
    - "-c"
    - "sleep 3600"

标签:容器,name,对象,image,volume,Pod,K8S,data
From: https://www.cnblogs.com/codechange/p/17832330.html

相关文章

  • K8S之Service
    对于K8S整个集群来说,Pod地址是可变的。一个Pod因某些原因退出了,而其设置了副本数replicas大于1那么该Pod就会在集群的任意节点重新启动。重新启动后的Pod的IP与原IP地址不同,这样就不能根据Pod的IP来进行调度。于是K8S引入了Service概念,它为Pod提供了一个入口,主要通过Labels标签来......
  • K8S之配置信息应用
    在K8S中,为容器提供预先定义好的数据,K8S支持四种volume:Secret、ConfigMap、DownloadAPI、ServiceAccountTokenSecret把Pod想要访问的加密数据存放到etcd中,然后可以在Pod容器通过挂载的方式访问secret里保存的数据一旦secret被创建,我们可以通过三种方式使用在创建Pod时,通过......
  • Django集成腾讯COS对象存储
    前言最近遇到一个场景需要把大量的资源文件存储到OSS里,这里选的是腾讯的COS对象存储(话说我接下来想搞的SnapMix项目也是需要大量存储的,我打算搭个MinIO把24T的服务器利用起来~)为啥腾讯不搞个兼容AmazonS3协议的啊……官方的SDK和文档都奇奇怪怪的,感觉国内的厂......
  • 编程创建一个Cale计算类,在其中定义2个变量表示两个操作数,定义四个方法实现求和、差、
    1publicclassHomework06{2//编写一个main方法3publicstaticvoidmain(String[]args){45Calecale=newCale(2,10);6System.out.println("和="+cale.sum());7System.out.println("差="+cale.minus());......
  • Java查看对象头大小
    添加依赖<dependency><groupId>org.openjdk.jol</groupId><artifactId>jol-core</artifactId><version>0.17</version></dependency>查看对象头大小@Testvoidhe......
  • 面向对象的设计原则--依赖倒置原则
    依赖倒置原则这是面向对象设计中非常重要的一个原则,它是SOLID原则中的一个,SOLID代表了五个设计原则的首字母缩写,用于指导开发者编写可维护和可扩展的代码。以下是依赖倒置原则的详细解释:抽象不应该依赖于细节,细节应该依赖于抽象这意味着在设计中,我们应该尽量让高层模块(......
  • 05-02 Relationships Between Objects(对象之间的关系 )
    RelationshipsBetweenObjects(对象之间的关系)XPOsupportsthreetypesofrelationshipsbetweenobjects.Thetypeofarelationshipthatiscreateddependsuponhowrelatedobjectsaredefined.XPO支持对象之间的三种类型的关系。创建的关系类型取决于相关对......
  • 05-03 Map Persistent Objects to Database Views(将持久对象映射到数据库视图 )
    MapPersistentObjectstoDatabaseViews(将持久对象映射到数据库视图)CreateaPersistentClass(创建持久类)Createapersistentclass.Theclassnameshouldmatchtheviewname.创建一个持久类。类名应与视图名匹配。AssignthePersistentattributetotheper......
  • 05-04 Basics of Creating Persistent Objects for Existing Data Tables(为现有数据表
    BasicsofCreatingPersistentObjectsforExistingDataTables(为现有数据表创建持久对象的基础知识)ToaccessanexistingdatatableinadatabaseandworkwithitusingthefunctionalityprovidedbyeXpressPersistentObjects(XPO),youneedtocreateap......
  • 05-01 Create a Persistent Object(创建持久对象)
    CreateaPersistentObject(创建持久对象)TheXPOORMcanloadandsavetoadatastoreonlypersistentobjects.XPOORM只能加载持久对象并将其保存到数据存储中。Youmakeyourbusinessobjectspersistentinanyofthefollowingways:您可以通过以下任何方式......