1. 什么是Pod
Pod是Kubernetes中最小单位,它由一个或者多个容器组成,每个Pod还包含了一个Pause容器,Pause容器是Pod的父容器,主要负责僵尸进程的回收管理,同事通过Pause容器可以使同一个Pod里面的多个容器共享存储、网络、PID、IPC等.
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 #查看所有命名空间