Pod生命周期

  • 学习目标:初始化容器的应用及两个探针的应用
  • 探针 是由 kubelet 对容器执行的定期诊断:
  • Kubelet 可以选择是否执行在容器上运行的三种探针执行和做出反应:
  • liveness实例
  • readiness实例
  • 初始化容器+ svc

学习目标:初始化容器的应用及两个探针的应用

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

Init 容器与普通的容器非常像,除了如下两点:
它们总是运行到完成。
Init 容器不支持 Readiness(就绪探针),因为它们必须在 Pod 就绪之前运行完成,每个 Init 容器必须运行成功,下一个才能够运行。

如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成功为止。然而,如果 Pod 对应的 restartPolicy 值为 Never,它不会重新启动。

Init 容器能做什么?
Init 容器可以包含一些安装过程中应用容器中不存在的实用工具或个性化代码。让镜像更小
Init 容器可以安全地运行这些工具,避免这些工具导致应用镜像的安全性降低。
应用镜像的创建者和部署者可以各自独立工作,而没有必要联合构建一个单独的应用镜像。
Init 容器能以不同于Pod内应用容器的文件系统视图运行。因此,Init容器可具有访问 Secrets 的权限,而应用容器不能够访问。
由于 Init 容器必须在应用容器启动之前运行完成,因此 Init 容器提供了一种机制来阻塞或延迟应用容器的启动,直到满足了一组先决条件。一旦前置条件满足,Pod内的所有的应用容器会并行启动。

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

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

每次探测都将获得以下三种结果之一:
成功:容器通过了诊断。
失败:容器未通过诊断。
未知:诊断失败,因此不会采取任何行动。

Kubelet 可以选择是否执行在容器上运行的三种探针执行和做出反应:

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

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

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

重启策略
PodSpec 中有一个 restartPolicy 字段,可能的值为 Always、OnFailure 和 Never。默认为 Always。

Pod 的生命
一般Pod 不会消失,直到人为销毁他们,这可能是一个人或控制器。

建议创建适当的控制器来创建 Pod,而不是直接自己创建 Pod。因为单独的 Pod 在机器故障的情况下没有办法自动复原,而控制器却可以。

三种可用的控制器:
使用 Job 运行预期会终止的 Pod,例如批量计算。Job 仅适用于重启策略为 OnFailure 或 Never 的 Pod。
对预期不会终止的 Pod 使用 ReplicationController、ReplicaSet 和 Deployment ,例如 Web 服务器。 ReplicationController 仅适用于具有 restartPolicy 为 Always 的 Pod。
提供特定于机器的系统服务,使用 DaemonSet 为每台机器运行一个 Pod 。

官方文档
https://kubernetes.io/zh/docs/concepts/workloads/pods/pod-lifecycle/

https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

liveness实例

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

[root@server2 ~]# cat pod3.yml
apiVersion: v1
kind: Pod
metadata:labels:test: livenessname: liveness-exec
spec:containers:- name: livenessimage: busyboxplusargs:- /bin/sh- -c- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600livenessProbe:exec:command:- cat- /tmp/healthyinitialDelaySeconds: 5periodSeconds: 5

会重启


readiness实例

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

[root@server2 ~]# cat pod3.yml
apiVersion: v1
kind: Pod
metadata:labels:test: livenessname: liveness-exec
spec:containers:- name: livenessimage: myapp:v1livenessProbe:tcpSocket:port: 80initialDelaySeconds: 2   #启动需要2秒periodSeconds: 3  #间隔3秒readinessProbe:httpGet:path: /test.htmlport: 80initialDelaySeconds: 3   #启动需要3秒periodSeconds: 3  #间隔3秒

kubectl delete -f pod3.yml

kubectl create -f pod3.yml




[root@server2 ~]# cat pod3.yml
apiVersion: v1
kind: Pod
metadata:labels:test: livenessname: liveness-exec
spec:containers:- name: livenessimage: myapp:v1livenessProbe:tcpSocket:port: 8080    ###端口错误initialDelaySeconds: 2   #启动需要2秒periodSeconds: 3  #间隔3秒readinessProbe:httpGet:path: /hostname.htmlport: 80initialDelaySeconds: 3   #启动需要3秒periodSeconds: 3  #间隔3秒


https://kubernetes.io/zh/docs/concepts/workloads/pods/init-containers/
检测服务

创建初始化
初始化容器一直在初始化,

初始化容器+ svc

创建思路
创建service后会提供dns解析
service.yml就是创建一个svc
没有endpoint
访问不到,但可以解析。进入Demo,nslookup myserice通过域名会更加简单,
myapp一个应用容器,plus,初始化容器,一直nslook解析,解析过才能退出,才能运行myapp,

所以不能先创建svc,先创建初始化,正在初始化,init contaoners,没有得到相应的解析,看日志,一直停在初始化,
此时创建svc,可以解析到
初始化容器优先于普通容器myapp,而且必须运行成功后才能完成,解析到域名,退出,结束,此时才能运行应用容器myapp

[root@server2 ~]# cat service.yml
apiVersion: v1
kind: Service
metadata:name: myservice
spec:ports:- protocol: TCPport: 80targetPort: 80

[root@server2 ~]# cat init.yml
apiVersion: v1
kind: Pod
metadata:name: myapp-podlabels:app: myapp
spec:containers:- name: myapp-containerimage: myapp:v1initContainers:- name: init-myserviceimage: busyboxpluscommand: ['sh', '-c', "until nslookup myservice.default.svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
[root@server2 ~]# kubectl create -f init.yml
pod/myapp-pod created
[root@server2 ~]# kubectl  get pod
NAME                     READY   STATUS             RESTARTS   AGE
demo                     1/1     Running            6          17h
liveness-exec            0/1     CrashLoopBackOff   87         3h43m
myapp-pod                0/1     Init:0/1           0          5s
nginx-597468cf8f-p9m6z   2/2     Running            3          13h
[root@server2 ~]# kubectl  create -f service.yml
service/myservice created
[root@server2 ~]# kubectl  get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   9d
myservice    ClusterIP   10.100.197.241   <none>        80/TCP    10s
[root@server2 ~]# kubectl get pod
NAME                     READY   STATUS             RESTARTS   AGE
demo                     1/1     Running            6          17h
liveness-exec            0/1     CrashLoopBackOff   87         3h45m
myapp-pod                1/1     Running            0          2m19s
nginx-597468cf8f-p9m6z   2/2     Running            3          13h


查看日志:

kubectl logs myapp-pod -c init-myservice # 查看第一个 Init 容器

Kubernetes(k8s)四、Pod生命周期(初始化容器的应用,探针liveness、readliness应用,)相关推荐

  1. K8S之pod生命周期

    K8S之pod生命周期 Pod的生命周期是通过Replication Controller来管理的.Pod的生命周期过程包括:通过模板进行定义,然后分配到一个Node上运行,在Pod所含容器运行结束后 ...

  2. k8s 查看pod流量_Kubernetes K8S之Pod生命周期与探针检测

    K8S中Pod的生命周期与ExecAction.TCPSocketAction和HTTPGetAction探针检测 主机配置规划 Pod容器生命周期 Pause容器说明 每个Pod里运行着一个特殊的被 ...

  3. K8s中Pod生命周期和重启策略

    这周项目组提到了POD 的健康检查,自己在春节之中刚好度过,现在认真复习一下 复习以下<K8s权威指南>中第三章节深入理解pod中的关于POD 声明周期和重启策略的内容 一.POD状态: ...

  4. 【云原生 | 从零开始学Kubernetes】十二、k8spod的生命周期与容器钩子

    该篇文章已经被专栏<从零开始学k8s>收录 上一篇文章:k8s污点.容忍度和pod状态 点击跳转 pod生命周期 Init 容器 主容器 容器钩子 创建 pod 需要经过哪些阶段? Pod ...

  5. k8s pod生命周期、初始化容器、钩子函数、容器探测、重启策略

    pod结构 Pause容器 Pause容器是每个Pod都会有的一个根容器,它的作用有两个 可以以它为根据,评估整个pod的健康状态 可以在根容器上设置IP地址,其他容器都以此IP(Pod IP),以实 ...

  6. @kubernetes(k8s)的kubectl的使用及资源类型pod生命周期与资源清单详解

    文章目录 kubernetes 一.kubernetes kubectl的使用 1.kubectl 的概述: 2.kubectl的使用 2.kubectl可操作的资源对象类型 3.kubectl子命令 ...

  7. k8s 详解 pod 生命周期 容器探测(live and ready) 钩子函数 pod的重启策略

    pause 容器, 每个pod的都有的根容器,评估pod 的健康状态,设置ip地址,ip+端口可以访问到指定的容器 pod pod 之间采用 flannel 通信 pod 定义 yaml 资源清单 一 ...

  8. 容器编排技术 -- Kubernetes Pod 生命周期

    容器编排技术 -- Kubernetes Pod 生命周期 1 Pod phase 2 Pod 状态 3 容器探针 3.1 该什么时候使用存活(liveness)和就绪(readiness)探针? 4 ...

  9. Kubernetes各组件工作原理 Pod 生命周期

    一.kubernets 组件工作原理 - 概述: 在集群管理方面,kubernetes 将集群中的机器分为 Master(主)节点和一些 node(工作)节点.在 Master 节点上运行这一些集群管 ...

最新文章

  1. 科研团队如何探索商业化落地?这家语音AI公司用十年科学试验打了样
  2. django解决跨域问题
  3. 关于set sql_trace=ture 的一些用法
  4. sys.getsizeof(), 字节之间的换算关系
  5. C和指针之字符串编程练习11(统计一串字符包含the的个数)
  6. 制作根文件系统时的错误解决
  7. 信息学奥赛一本通(1052:计算邮资)
  8. Linux中断子系统
  9. Mybatis缓存的使用和注意事项
  10. C++ primer 5th 读完的一点心得体会
  11. Android app客户端性能测试工具Emmagee 浅析
  12. mysql数据库常用的增删改查sql语句
  13. android的otg功能,怎么打开手机OTG功能?
  14. java做类似于qq空间动态加载_Android仿QQ空间动态界面分享功能
  15. 【USACO】山峰暸望
  16. Android 手机上获取手机当前上网IP地址(手机网关给手机号分配的IP)
  17. 【ubuntu】Ubuntu系统下安装石墨文档
  18. PHP Fatal error: Class 'Illuminate\Foundation\Console\Kernel' not found in D:\phpstudy\PHPTutorial
  19. 使用Guardium和Privileged Identity Manager(PIM)缓解内部威胁
  20. C语言 深度剖析数据在内存中的存储(2)

热门文章

  1. 2020.7.18 T3Ocd(jz暑假训练day4)
  2. remove debug symbols to a seperate file
  3. xd使用技巧_adobe xd高级技巧
  4. Balanced Array
  5. 用GitHub Actions自动部署Hexo
  6. 论文阅读:CVPR 2022 Object Localization under Single Coarse Point Supervision
  7. 如何在WordPress中显示链接的实时预览
  8. 智能驾驶功能软件平台设计规范 第一部分:系统架构
  9. ARM Uboot经历——makefile与uboot目录
  10. 三分钟集成连连支付方法(以认证支付为例)