Pod生命周期
1.Init C Pod 第一次创建时 运行 可以N个 并且串行<br /> 2.START STOP MainC启动结束是 执行的操作<br /> 3.readiness 就绪检测 检测容器是否启动完成 就绪<br /> 4.Liveness 当容器不能提供服务时候 就需要Liveness 操作
3.1 Init C
说明:
InitC 也是一个单独的镜像 前一个InitC 成功执行后 才执行下一个
Init容器 会在网络和数据初始化之后启动(Pause)
Pod重启 Init容器必须重新执行
init容器name 不能更Main容器 重复
测试:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh','-c','echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox
command: ['sh','-c','until nslookup myservice; do echo waiting for myservice; sleep 2;done;']
- name: init-mydb
image: busybox
command: ['sh','-c','until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
kind: Service
apiVersion: v1
metadata:
name: myservice
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
---
kind: Service
apiVersion: v1
metadata:
name: mydb
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9377
3.2 探针
探针是由于kubelet对容器执行的定期诊断 kubelet调用由容器实现的Handler 有三种数据处理程序
ExecAction
TCPSocketAction
HTTPGetAction
readinessProbe 就绪探测
apiVersion: v1
kind: Pod
metadata:
name: readiness-httpget-pod
namespace: default
spec:
containers:
- name: readiness-httpget-container
image: wangyanglinux/myapp:v1
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
port: 80
path: /index1.html
initialDelaySeconds: 1
periodSeconds: 3
livenessProbe 存活探测
apiVersion: v1
kind: Pod
metadata:
name: liveness-exec-pod
namespace: default
spec:
containers:
- name: liveness-exec-container
image: hub.atguigu.com/library/busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","touch /tmp/live ; sleep 60; rm -rf /tmp/live; sleep3600"]
livenessProbe:
exec:
command: ["test","-e","/tmp/live"]
initialDelaySeconds: 1
periodSeconds: 3
HTTP检测
apiVersion: v1
kind: Pod
metadata:
name: liveness-httpget-pod
namespace: default
spec:
ontainers:
- name: liveness-httpget-container
image: hub.atguigu.com/library/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
livenessProbe:
httpGet:
port: http
path: /index.html
initialDelaySeconds: 1
periodSeconds: 3
timeoutSeconds: 1
TCP检测
apiVersion: v1
kind: Pod
metadata:
name: probe-tcp
spec:
containers:
- name: nginx
image: hub.atguigu.com/library/myapp:v1
livenessProbe:
initialDelaySeconds: 5
timeoutSeconds: 1
tcpSocket:
port: 80
3.3 Start/Stop操作
启动退出操作
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"]
preStop:
exec:
command: ["/bin/sh", "-c", "echo Hello from the poststop handler >/usr/share/message"]
3.4 运行状态
Pending 挂起 Pod已被K8S系统接受 但有一个或者多个容器镜像 未创建 等待时间包括调度Pod的时间和网络下载镜像时间
Running 运行 Pod已经绑定到一个节点上 Pod中所有容器已经被创建 至少一个容器在运行 或者处于启动或重启状态(不可用)
Succeeded 成功 Pod中所有容器都被成功终止 不会再重启
Failed 失败 Pod中所有容器都已经终止 且至少有一个容器因为失败而终止 容器非0状态退出
Unknow 未知