一、生命周期相关流程
二、生命周期配置
完整配置文件 nginx-prestop-po.yaml
apiVersion: v1 # api 文档版本
kind: Pod # 资源对象类型,也可以配置为像Deployment、StatefulSet这一类的对象
metadata: # Pod 相关的元数据,用于描述 Pod 的数据
name: nginx-prestop-po # Pod 的名称
labels: # 定义 Pod 的标签
type: app # 自定义 label 标签,名字为 type,值为 app
test: 1.0.0 # 自定义 label 标签,描述 Pod 版本号
namespace: 'default' # 命名空间的配置
spec: # 期望 Pod 按照这里面的描述进行创建
containers: # 对于 Pod 中的容器描述
- name: nginx # 容器的名称
image: nginx:1.7.9 # 指定容器的镜像
imagePullPolicy: IfNotPresent # 镜像拉取策略,指定如果本地有就用本地的,如果没有就拉取远程的
# 生命周期配置
lifecycle:
postStart: # 容创建完成后执行的动作,不能保证该操作一定在容器的 command 之前执行,一般不使用
exec: # 可以是 exec / httpGet / tcpSocket
command:
- sh
- -c
- 'mkdir /data'
preStop: # 在容器停止前执行的动作
#httpGet: # 发送一个 http 请求
# path: /
# port: 80
exec: # 执行一个命令
command:
- sh
- -c
- sleep 9
command: # 指定容器启动时执行的命令
- nginx
- -g
- 'daemon off;' # nginx -g 'daemon off;'
workingDir: /usr/share/nginx/html # 定义容器启动后的工作目录
ports:
- name: http # 端口名称
containerPort: 80 # 描述容器内要暴露什么端口
protocol: TCP # 描述该端口是基于哪种协议通信的
env: # 环境变量
- name: JVM_OPTS # 环境变量名称
value: '-Xms128m -Xmx128m' # 环境变量的值
resources:
requests: # 最少需要多少资源
cpu: 100m # 限制 cpu 最少使用 0.1 个核心
memory: 128Mi # 限制内存最少使用 128兆
limits: # 最多可以用多少资源
cpu: 200m # 限制 cpu 最多使用 0.2 个核心
memory: 256Mi # 限制 最多使用 256兆
restartPolicy: OnFailure # 重启策略,只有失败的情况才会重启
三、验证
1. postStart 生命周期验证
- 1) 修改yaml文件中的
lifecycle
生命周期的配置参数为以上内容 2) 根据配置文件创建pod, pod名为
nginx-prestop-po
kubectl create -f nginx-prestop-po.yaml
3) 查看pod
kubectl get po
4) 验证命令是否执行成功, 使用
kubectl exec -it nginx-prestop-po bash
进入容器查看/data
目录是否存在[root@k8s-master pods]# kubectl exec -it nginx-prestop-po bash kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead. root@nginx-prestop-po:/usr/share/nginx/html# root@nginx-prestop-po:/usr/share/nginx/html# cd /data/ root@nginx-prestop-po:/data# pwd /data root@nginx-prestop-po:/data#
综上, postStart 在容器启动后执行命令成功
2. preStop 生命周期验证
1) 修改yaml文件中的
lifecycle
生命周期下preStop
的配置参数# 生命周期配置 lifecycle: postStart: # 容创建完成后执行的动作,不能保证该操作一定在容器的 command 之前执行,一般不使用 exec: # 可以是 exec / httpGet / tcpSocket command: - sh - -c # 这里在容器启动时, 在/data/目录中创建了一个 stop.txt文件 - 'mkdir /data & touch /data/stop.txt' preStop: # 在容器停止前执行的动作 exec: # 执行一个命令 command: - sh - -c # 此处命令的含义是将 `stopping` 写入 `/data/stop.txt` 文件里, 为了更好验证, 我们将持续监听该文件 - "echo 'stopping' > /data/stop.txt "
2) 根据配置文件创建pod, pod名为
nginx-prestop-po
kubectl create -f nginx-prestop-po.yaml
3) 查看pod
kubectl get po
4) 验证
preStop
命令是否执行成功- 使用
kubectl exec -it nginx-prestop-po bash
进入容器 持续监听 /data/stop.txt 文件
tail -f /data/stop.txt
- 开启另一个窗口删除容器
综上, preStop 在容器关闭前执行命令成功
- 使用