一、普通command命令
1、创建yaml
apiVersion: v1 kind: Pod metadata: name: busybox labels: app: busybox spec: containers: - name: busybox image: busybox command: ['sh', '-c', 'echo The app is running! > /tmp/test&& sleep 3600']
2、验证
二、postStart
简介:1、应用容器启动之后如果要做点配置之类的 ,可以使用postStart。
2、postStart 处理函数的调用不保证早于容器的入口点(entrypoint)的执行,postStart和entrypoint异步执行
3、Kubernetes 的容器管理逻辑会一直阻塞等待 postStart 处理函数执行完毕。只有 postStart 处理函数执行完毕,
容器的状态才会变成 RUNNING
1、举例
apiVersion: v1 kind: Pod metadata: name: lifecycle-demo spec: containers: - name: lifecycle-demo-container image: nginx lifecycle: postStart: exec: command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
2、验证结果
三、preStop
概念:1、Kubernetes 在容器结束前立即发送 preStop 事件
2、Kubernetes 的容器管理逻辑 会一直阻塞等待 preStop 处理函数执行完毕
1、举例
apiVersion: v1 kind: Pod metadata: name: hook-demo2 labels: app: hook spec: containers: - name: hook-demo2 image: nginx ports: - name: webport containerPort: 80 volumeMounts: - name: message mountPath: /usr/share/ lifecycle: preStop: exec: command: ['/bin/sh','-c','echo Hello from the preStop Handler > /usr/share/wuchang'] volumes: - name: message hostPath: path: /tmp
2、创建之后查看本地/tmp目录下文件
[root@k8s-master pod]# kubectl apply -f pod1.yaml pod "hook-demo2" created [root@k8s-master pod]# kubectl get pods NAME READY STATUS RESTARTS AGE hook-demo2 1/1 Running 0 1m
3、执行删除pod操作,再查看/tmp目录下,文件存在
[root@k8s-master pod]# kubectl delete pods --all pod "hook-demo2" deleted
四、探针
liveness探针:影响的是单个容器,
readiness探针:影响的是整个pod,即如果pod中有多个容器,只要有一个容器的readiness探针诊断失败,那么整个pod都会处于unready状态
ExecAction:在容器内执行指定命令,如果命令退出时返回码为0,则认为诊断成功
TCPSocketAction:kubelet尝试打开容器上的某个端口,如果连接成功建立则诊断通过,否则失败
HTTPGetAction:每进行一次HTTP健康检查都会curl访问一次指定的URL,如果返回的HTTP状态码在200和399之间,则认为容器运转正常,否则认为容器运转不正常
且小于400,则诊断被认为是成功的
Ⅰ、就绪探针(readinessProbe)
简介:指示容器是否准备好服务请求。如果就绪探测失败,断点控制器将从与pod匹配的所有service的端点中删除该
pod的ip地址。初始延迟之前的就绪状态为Failure。如果容器不提供就绪探测,则默认为Success
1、创建readinessProbe-httpget
apiVersion: v1 kind: Pod metadata: name: nginx-pod labels: app: nginx spec: containers: - name: nginx-container image: nginx readinessProbe: httpGet: port: 80 //通过http访问,访问的是/usr/share/nginx/html下的页面 path: /index1.html //检测根目录下是否有该文件 initialDelaySeconds: 1 periodSeconds: 3
2、查看pods的状态为running,但是ready为0/1,证明没有就绪
3、进入pod内创建文件
[root@k8s-master probe]# kubectl exec -it nginx-pod -- /bin/sh # cd /usr/share/nginx/html # echo "123" > index1.html
4、检测pod状态,已经就绪
Ⅱ、存活探针(livenessProbe)
简介:指示容器是否正在运行,如果存活探测失败,则kubelet会杀死容器,并且容器将收到其重启策略的影响。
如果容器不提供存活探针,则默认为success
1、livenessProbe-exec
apiVersion: v1 kind: Pod metadata: name: liveness-exec-pod labels: app: busybox spec: containers: - name: liveness-exec-container image: busybox imagePullPolicy: IfNotPresent command: ["/bin/sh","-c","touch /tmp/live ; sleep 60; rm -rf /tmp/live; se=leep 3600"] livenessProbe: exec: command: ["test","-e","/tmp/live"] initialDelaySeconds: 1 periodSeconds: 3