Pod生命周期
    image.png

    1. 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 未知