生命周期流程
  • 创建主容器(containers)是必现的操作;
  • 初始化容器(initContainers)
  • 容器启动后钩子
  • 启动探测、存活性探测(livenessprobe)、就绪性探测(readnessprobe)
  • 容器终止前钩子
Pod声明周期几个状态
  • Pending:创建pod资源并存入etcd中,尚未完成调度
  • ContainerCreating: Pod调度完成,被分配到指定Node上。处于容器创建过程中,通常是在拉取镜像的过程中
  • Running:Pod 包含所有容器都已经成功创建,并且成功运行起来
  • Succeeded:Pod中的所有容器都已经成功终止且不会被重启
  • Failed: 所有容器都意见终止,但至少有一个容器终止失败
容器探测
  • Startup: 探测容器是否正常运行
  • Liveness:判断容器师傅处于running 状态,根据重启策略决定是否重启容器
  • Readiness:判断容器是否准备就绪并对外提供服务,可将容器设置为不可用,不接受service转发的请求
三种探测Pod探针
  • ExecAction: 容器中执行一个命令,并根据返回的状态码进行诊断,只有返回0为成功
  • TCPSocketAction: 通过与容器的某个TCP端口尝试建立连接
  • HTTPGetAction: 通过向容器IP地址的某个端口的path发起HTTP GET请求
initContainer案例
  • Yaml

[root@k8smaster4 ~]# cat init-demo.yaml 
apiVersion: v1
kind: Pod
metadata:
name: initcontainer-demo
namespace: default
labels:
kubernetes.io/name: MyApp
name: init-test
spec:
initContainers:
- name: init-myservice
image: docker.io/library/busybox:1.28
imagePullPolicy: IfNotPresent
command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
- name: init-mydb
image: docker.io/library/busybox:1.28
imagePullPolicy: IfNotPresent
command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]
containers:
- name: myapp-container
image: docker.io/library/busybox:1.28
imagePullPolicy: IfNotPresent
command: ['sh', '-c', 'echo The app is running! && sleep 3600']

  • 查看Pod状态

[root@k8smaster4 ~]# kubectl get -f init-demo.yaml

  • 查看Pod详细信息

[root@k8smaster4 ~]# kubectl describe -f init-demo.yaml

  • 查看指定容器日志

[root@k8smaster4 ~]# kubectl logs initcontainer-demo -c init-myservice