官网直达:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。 共享名字空间并共享文件系统卷的一组容器。
Pod可以简单地理解为一组、一个或多个容器,每个Pod还包含一个Pause容器,Pause容器为Pod的父容器,通过Pause容器可以使同一个Pod里面的不同容器共享存储、网络、PID等。
1. 创建一个Pod
定义Pod
# vim nginx.yaml
apiVersion: v1 # 必选, API 的版本号
kind: Pod # 必选,类型 Pod
metadata: # 必选,元数据
name: nginx # 必选,符合 RFC 1035 规范的 Pod 名称
spec: # 必选,用于定义 Pod 的详细信息
containers: # 必选,容器列表
- name: nginx # 必选,符合 RFC 1035 规范的容器名称
image: registry.cn-beijing.aliyuncs.com/jiangxiaonan/nginx:1.22.1 # 必选,容器所用的镜像的地址
ports: # 可选,容器需要暴露的端口号列表
- containerPort: 80 # 端口号
创建pod
kubectl create -f nginx.yaml
查看 Pod 状态:
kubectl get po nginx
使用 kubectl run 创建一个 Pod:
kubectl run nginx-run --image=nginx:1.15.12
2. Pod 状态及 Pod 故障排查命令
说明:Pod的Pause字段只有Pending、Running、Succeeded、Failed、Unknown5种,其余的为处于上述状态的原因,可以通过kubectl get pod xxx -o yaml查看。
3. Pod的镜像拉取策略和重启策略
通过 spec.containers[].imagePullPolicy 参数可以指定镜像的拉取策略,目前支持的策略如下:
可以使用 spec.restartPolicy 指定容器的重启策略
4. Pod探针
在使用裸机或者裸容器部署时,一般很难对应用做很完善的健康检查,而Pod提供的探针可以很方便地用来检测容器内的应用是否正常。
探针的种类:
探针的实现方式:
Pod探针检查容器后可能得到的状态:
示例:
apiVersion: v1 # 必选, API 的版本号
kind: Pod # 必选,类型 Pod
metadata: # 必选,元数据
name: nginx # 必选,符合 RFC 1035 规范的 Pod 名称
spec: # 必选,用于定义 Pod 的详细信息
containers: # 必选,容器列表
- name: nginx # 必选,符合 RFC 1035 规范的容器名称
image: registry.cn-beijing.aliyuncs.com/jiangxiaonan/nginx:1.22.1 # 必选,容器所用的镜像的地址
imagePullPolicy: IfNotPresent # 镜像拉取策略
command: # 可选,容器启动执行的命令
- sh
- -c
- sleep 30; nginx -g "daemon off;"
startupProbe:
tcpSocket: # 端口检测方式
port: 80
initialDelaySeconds: 80 # 初始化时间
timeoutSeconds: 2 # 超时时间
periodSeconds: 5 # 检测间隔
successThreshold: 1 # 检查成功为 2 次表示就绪
failureThreshold: 5 # 检测失败 1 次表示未就绪
readinessProbe: # 可选,健康检查。注意三种检查方式同时只能使用一种。
httpGet: # 接口检测方式
path: /index.html # 检查路径
port: 80
scheme: HTTP # HTTP or HTTPS
#httpHeaders: # 可选, 检查的请求头
#- name: end-user
# value: Jason
initialDelaySeconds: 10 # 初始化时间, 健康检查延迟执行时间
timeoutSeconds: 2 # 超时时间
periodSeconds: 5 # 检测间隔
successThreshold: 1 # 检查成功为 2 次表示就绪
failureThreshold: 2 # 检测失败 1 次表示未就绪
livenessProbe: # 可选,健康检查
exec: # 端口检测方式
command:
- sh
- -c
- pgrep nginx
initialDelaySeconds: 10 # 初始化时间
timeoutSeconds: 2 # 超时时间
periodSeconds: 5 # 检测间隔
successThreshold: 1 # 检查成功为 2 次表示就绪
failureThreshold: 2 # 检测失败 1 次表示未就绪
ports: # 可选,容器需要暴露的端口号列表
- containerPort: 80 # 端口号
restartPolicy: Never # 容器重启策略
5. preStop 和 postStart
postStart用于容器创建完执行的指令。
preStop用于容器停止前执行的指令。
apiVersion: v1 # 必选, API 的版本号
kind: Pod # 必选,类型 Pod
metadata: # 必选,元数据
name: nginx-new1 # 必选,符合 RFC 1035 规范的 Pod 名称
spec: # 必选,用于定义 Pod 的详细信息
containers: # 必选,容器列表
- name: nginx # 必选,符合 RFC 1035 规范的容器名称
image: registry.cn-beijing.aliyuncs.com/jiangxiaonan/nginx:1.22.1 # 必选,容器所用的镜像的地址
imagePullPolicy: IfNotPresent
lifecycle:
postStart: # 容器创建完成后执行的指令, 可以是 exec httpGet TCPSocket
exec:
command:
- sh
- -c
- 'mkdir -p /data/hello/'
preStop:
exec:
command:
- sh
- -c
- sleep 10
ports: # 可选,容器需要暴露的端口号列表
- containerPort: 80 # 端口号
restartPolicy: Never