Pod

243 阅读3分钟

1. 什么是Pod

Pod是Kubernetes中最小单位,它由一个或者多个容器组成,每个Pod还包含了一个Pause容器,Pause容器是Pod的父容器,主要负责僵尸进程的回收管理,同事通过Pause容器可以使同一个Pod里面的多个容器共享存储、网络、PID、IPC等.

image.png

2. 定义一个Pod

kubectl create -f pod.yaml

apiVersion: v1 # 必选,api版本号
kind: Pod   # 必选,资源对象名称
metadata: # b必选,元数据 map类型
  name: <your-pod-name> # 必选,pod名称
  namespace: <your-pod-namespace>   # 默认default,pod所属的命名空间
  labels: 
    name: <your-labes-name>  #自定义的pod标签
spec:   # 必选,pod中container的详细属性
  containers: # 必选,pod中容器列表,list类型
  - name: <your-container-name>  # 必选,容器名称
    image: <your-container-name>  # 必选,容器镜像
    imagePullPolicy: {Always | Never | IfNotPresent}  # Always表示下载镜像,Never表示本地镜像,IfNotPresent表示优先使用本地镜像,否则下载
    volumeMounts: 
    - name: <your-pod-volume-name> # 引用pod定义的共享存储卷名
      mountPath: <your-path>   # 存储卷在容器内Mount的绝对路径
    ports:  # 容器需要暴露的端口列表
    - name: <your-port-name>  # 需要暴露的端口名称
      containerPort: <your-container-port> # 容器需要监听的端口
    env: # 容器运行前 需要设置的环境变量列表
      - name: <your-env-name>  # 环境变量的名称
        value: <your-env-value>  # 环境变量的值
    livenessProbe:  # 对容器进行健康检查
      tcpSocket:   # 对Pod容器内检查方式设置为tcpSocket方式
        port: <your-container-port>  # 需要健康检查的端口
      initialDelaySeconds: 15   # 容器启动十五秒开始发起第一次探针
      periodSeconds: 20      # 每隔二十秒进行探针一次
    readinessProbe:
      tcpSocket:
        port: <your-container-port>  # 需要健康检查的端口
      initialDelaySeconds: 5  # 容器启动五秒开始发起第一次探针
      periodSeconds: 10   # 每隔十秒进行探针一次
  nodeSelector:  # NodeSelector表示将该Pod调度到包含这个label的node上
    hostname: k8snode-1  # 调度到指定的标签Node上
  volumes:
  - name: <your-volume-name> #  共享存储卷名称
  emptyDir: { }  # 类型为emptyDir的存储卷,与Pod同生命周期的一个临时目录,为空值
  hostpath:  # 类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录
    path: <your-host-path> 

3. Pod探针

StartupProbe:k8s1.16版本之后新加的探测方式,用于判断容器内应用程序 是否已启动,如果配置了startupProbe,就会禁止其它的 探测,直到它成功为止,成功后将不在探测

LivenessProbe:用于探测容器是否运行,如果探测失败,kubelet会根据配 置的重启策略进行相应的处理。若没有配置该探针,默认就是 success

ReadinessProbe:一般用于探测容器内的程序是否健康,它的返回值为 success,那么代表这个容器已经启动,并且已经是可以接 受流量的状态

4. Pod探针的检测方式

ExecAction:在容器内执行一个命令,如果返回值为0,则认为容器健康

TCPSocketAction:通过TCP链接检查容器内端口是否是通的,如果是通的就认为容器健康

HTTPGetAction: 通过应用程序暴露的API地址来检测程序是否正常的,如果状态码为200~400之间,则认为容器健康

5. 探针参数

initialDelaySeconds:60  #初始化时间
timeoutSeconds:2        #超时时间
periodSeconds:5         #检测间隔
successThreshold:1      #检查成功为1次表示就绪
failureThreshold:2      #检测失败2次表示未就绪

6. Pod基础命令

kubectl get pod --all-namespaces #查看所有命名空间下的Pod kubectl get ns #查看所有命名空间

7. 资源清单格式

image.png