​Pod 生命周期​

本文详细介绍了Pod在Kubernetes中的生命周期,包括Init容器的使用和作用,如设置初始化任务、确保应用容器的先决条件。还讨论了各种探针如livenessProbe、readinessProbe和startupProbe在容器健康检查中的应用。
摘要由CSDN通过智能技术生成

目录

简介   

Init 容器

使用 Init 容器

 Init 初始化容器

 启动两个容器

 使用初始化容器

探针

 livenessProbe存活探针:

 readinessProbe就绪探针:

 startupProbe启动探针:


简介   

  pod 遵循一个预定义的生命周期,起始于 Pending 阶段,如果至少 其中有一个主要容器正常启动,则进入 Running,之后取决于 Pod 中是否有容器以 失败状态结束而进入 Succeeded 或者 Failed 阶段。

      在 Pod 运行期间,kubelet 能够重启容器以处理一些失效场景。 在 Pod 内部,Kubernetes 跟踪不同容器的状态 并确定使 Pod 重新变得健康所需要采取的动作。

       在 Kubernetes API 中,Pod 包含规约部分和实际状态部分。 Pod 对象的状态包含了一组 Pod 状况(Conditions)。 如果应用需要的话,你也可以向其中注入自定义的就绪性信息

       Pod 在其生命周期中只会被调度一次。 一旦 Pod 被调度(分派)到某个节点,Pod 会一直在该节点运行,直到 Pod 停止或者 被终止

Init 容器

每个 Pod 中可以包含多个容器, 应用运行在这些容器里面,同时 Pod 也可以有一个或多个先于应用容器启动的 Init 容器。

Init 容器与普通的容器非常像,除了如下两点:

  • 它们总是运行到完成。
  • 每个都必须在下一个启动之前成功完成。

如果 Pod 的 Init 容器失败,kubelet 会不断地重启该 Init 容器直到该容器成功为止。 然而,如果 Pod 对应的 restartPolicy 值为 "Never",并且 Pod 的 Init 容器失败, 则 Kubernetes 会将整个 Pod 状态设置为失败。

使用 Init 容器

因为 Init 容器具有与应用容器分离的单独镜像,其启动相关代码具有如下优势:

  • Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。 例如,没有必要仅为了在安装过程中使用类似 sedawkpythondig 这样的工具而去 FROM 一个镜像来生成一个新的镜像。

  • Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低。

  • 应用镜像的创建者和部署者可以各自独立工作,而没有必要联合构建一个单独的应用镜像。

  • Init 容器能以不同于 Pod 内应用容器的文件系统视图运行。因此,Init 容器可以访问 应用容器不能访问的 Secret 的权限。

  • 由于 Init 容器必须在应用容器启动之前运行完成,因此 Init 容器 提供了一种机制来阻塞或延迟应用容器的启动,直到满足了一组先决条件。 一旦前置条件满足,Pod 内的所有的应用容器会并行启动

 容器的启动:

初始化,init容器顺序启动,主容器启动,就绪探针和存活探针检测

 Init 初始化容器

pause镜像为pod提供了基础的初始化环境

 书写yml文件,添加init容器,主容器myapp1运行前先要运行myapp2

 无法运行,init容器无法运行,初始化容器编辑有问题

注释掉init

 启动两个容器

 查看日志端口冲突,myapp2起不来

 

交互式容器运行

kubectl explain pod.spec.containers

 终端标准输入打开

成功运行

换成busyboxplus,两个容器共享网络zhai

kubectl attach -it pod-example  -c myapp2

 

 使用初始化容器

svc解析,解析成功等待运行

 init运行,但svc解析,sleep2,重新运行,myapp1无法运行

 创建svc

[root@vm3 pod]# cat pod.yml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: myapp1
    image: myapp:v1
    imagePullPolicy: IfNotPresent
  initContainers:
  - name: initc
    image: busyboxplus
    imagePullPolicy: IfNotPresent
    command: ['sh', '-c', "until nslookup myservice.default.svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
---
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

 运行

 

 查看解析

 

 

探针

探针 是由 kubelet 对容器执行的定期诊断:

  • ExecAction:在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。
  • TCPSocketAction:对指定端口上的容器的 IP 地址进行 TCP 检查。如果端口打开,则诊断被认为是成功的。
  • HTTPGetAction:对指定的端口和路径上的容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码大于等于200且小于400,则诊断被认为是成功的。

每次探测都将获得以下三种结果之一:

  • 成功:容器通过了诊断。
  • 失败:容器未通过诊断。
  • 未知:诊断失败,因此不会采取任何行动。

 livenessProbe存活探针:

指示容器是否正在运行。如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其 重启策略的影响。如果容器不提供存活探针,则默认状态为 Success。

[root@vm3 pod]# kubectl apply -f livness.yml 
pod/liveness-http created
[root@vm3 pod]# cat livness.yml
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
    - name: liveness
      image: nginx
      imagePullPolicy: IfNotPresent 
      livenessProbe:   
        tcpSocket:
          port: 80
        initialDelaySeconds: 1   #启动等待1s
        periodSeconds: 3   #间隔3s
        timeoutSeconds: 1  # 超时

 将判断80修改为8080

 查看详细信息

 readinessProbe就绪探针:


指示容器是否准备好服务请求。如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service的端点中删除该 Pod 的 IP 地址。初始延迟之前的就绪状态默认为 Failure。如果容器不提供就绪探针,则默认状态为 Success。

[root@vm3 pod]# cat rediness.yml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
    - name: liveness
      image: nginx
      imagePullPolicy: IfNotPresent
      livenessProbe:   
        tcpSocket:
          port: 80
        initialDelaySeconds: 1
        periodSeconds: 3
        timeoutSeconds: 1
      readinessProbe:
        httpGet:
          path: /test.html
          port: 80
        initialDelaySeconds: 1
        periodSeconds: 3
        timeoutSeconds: 1

 kubectl describe pod liveness-http

 就绪探针找不到页面404,就绪决定svc发现,svc没有

 

如何就绪

[root@vm3 pod]#  kubectl exec -it liveness-http -- bash
root@liveness-http:/# cd /usr/share/nginx/html/
root@liveness-http:/usr/share/nginx/html# echo www.westos.org > test.html
root@liveness-http:/usr/share/nginx/html# 
exit
[root@vm3 pod]# kubectl get pod
NAME            READY   STATUS    RESTARTS   AGE
liveness-http   1/1     Running   0          18m

 startupProbe启动探针:

指示容器中的应用是否已经启动。如果提供了启动探测(startup probe),则禁用所有其他探测,直到它成功为止。如果启动探测失败,kubelet将杀死容器,容器服从其重启策略进行重启。如果容器没有提供启动探测,则默认状态为成功Success。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值