#云原生征文#深入了解k8s的Pod

网友投稿 271 2022-09-10

#云原生征文#深入了解k8s的Pod

深入了解k8s的Pod

一、什么是Pod

Pod对容器有自恢复能力(Pod自动重启失败的容器)Pod自己不能恢复自己,Pod被删除就真的没了(100,MySQL、Redis、Order)还是希望k8s集群能自己在其他地方再启动这个Pod单容器Pod多容器协同Pod。我们可以把另外的容器称为​​SideCar(为应用赋能)​​Pod 天生地为其成员容器提供了两种共享资源:网络和存储

一个Pod由一个Pause容器设置好整个Pod里面所有容器的网络、名称空间等信息systemctl status可以观测到。Pod和容器进程关系

二、Pod使用

可以编写deploy等各种工作负载的yaml文件,最终创建出pod,也可以直接创建Pod的模板如下

# 这里是 Pod 模版 apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: hello image: busybox command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600'] restartPolicy: OnFailure # 以上为 Pod 模版

三、Pod生命周期

Pod启动,会先依次执行所有初始化容器,有一个失败,则Pod不能启动接下来启动所有的应用容器(每一个应用容器都必须能一直运行起来),Pod开始正式工作,一个启动失败就会尝试重启Pod内的这个容器,Pod只要是NotReady,Pod就不对外提供服务了

编写yaml测试生命周期应用容器生命周期钩子初始化容器(也可以有钩子)

临时容器:线上排错。

有些容器基础镜像。线上没法排错。使用临时容器进入这个Pod。临时容器共享了Pod的所有。临时容器有Debug的一些命令,排错完成以后,只要exit退出容器,临时容器自动删除

例如:

Java:dump, jre 50mb。jdk 150mb

jre 50mb: jdk作为临时容器

临时容器需要开启特性门控 --feature-gates="EphemeralContainers=true"在所有组件,api-server、kubelet、scheduler、controller-manager都得配置

使用临时容器的步骤:

{ "apiVersion": "v1", "kind": "EphemeralContainers", "metadata": { "name": "my-nginx666" //指定Pod的名字 }, "ephemeralContainers": [{ "command": [ "sh" ], "image": "busybox", //jre的需要jdk来调试 "imagePullPolicy": "IfNotPresent", "name": "debugger", "stdin": true, "tty": true, "terminationMessagePolicy": "File" }]}

2、使用临时容器,应用一下即可

kubectl replace --raw /api/v1/namespaces/default/pods/my-nginx666【pod名】/ephemeralcontainers  -f ec.json

四、静态Pod

在 /etc/kubernetes/manifests 位置放的所有Pod.yaml文件,机器启动kubelet自己就把它启动起来。

静态Pod一直守护在这个机器上

五、Probe 探针机制(健康检查机制)

每个容器三种探针(Probe)

启动探针(后来才加的)一次性成功探针。只要启动成功了

kubelet 使用启动探针,来检测应用是否已经启动。如果启动就可以进行后续的探测检查。慢容器一定指定启动探针。启动探针 成功以后就不用了,剩下存活探针和就绪探针持续运行

存活探针

kubelet 使用存活探针,来检测容器是否正常存活。(有些容器可能产生死锁【应用程序在运行,但是无法继续执行后面的步骤】),​​如果检测失败就会重新启动这个容器​​initialDelaySeconds: 3600(长了导致可能应用一段时间不可用) 5(短了陷入无限启动循环)

就绪探针

kubelet 使用就绪探针,来检测容器是否准备好了可以接收流量。当一个 Pod 内的所有容器都准备好了,才能把这个 Pod 看作就绪了。用途就是:Service后端负载均衡多个Pod,如果某个Pod还没就绪,就会从service负载均衡里面剔除

谁利用这些探针探测

kubelet会主动按照配置给Pod里面的所有容器发送响应的探测请求

Probe配置项

​​initialDelaySeconds​​:容器启动后要等待多少秒后存活和就绪探测器才被初始化,默认是 0 秒,最小值是 0。这是针对以前没有​​periodSeconds​​:执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1。​​successThreshold​​:探测器在失败后,被视为成功的最小连续成功数。默认值是 1。

存活和启动探针的这个值必须是 1。最小值是 1。

​​failureThreshold​​:当探测失败时,Kubernetes 的重试次数。 存活探测情况下的放弃就意味着重新启动容器。 就绪探测情况下的放弃 Pod 会被打上未就绪的标签。默认值是 3。最小值是 1。​​timeoutSeconds​​:探测的超时后等待多少秒。默认值是 1 秒。最小值是 1。

官方参考文档:​​配置存活、就绪和启动探测器 | Kubernetes​​

编写yaml测试探针机制

apiVersion: v1kind: Podmetadata: name: "nginx-start-probe02" namespace: default labels: app: "nginx-start-probe02"spec: volumes: - name: nginx-vol hostPath: path: /app - name: nginx-html hostPath: path: /html containers: - name: nginx image: "nginx" ports: - containerPort: 80 startupProbe: exec: command: ["/bin/sh","-c","cat /app/abc"] ## 返回不是0,那就是探测失败 # initialDelaySeconds: 20 ## 指定的这个秒以后才执行探测 periodSeconds: 5 ## 每隔几秒来运行这个 timeoutSeconds: 5 ##探测超时,到了超时时间探测还没返回结果说明失败 successThreshold: 1 ## 成功阈值,连续几次成才算成功 failureThreshold: 3 ## 失败阈值,连续几次失败才算真失败 volumeMounts: - name: nginx-vol mountPath: /app - name: nginx-html mountPath: /usr/share/nginx/html livenessProbe: ## nginx容器有没有 /abc.html,就绪探针 # # host: 127.0.0.1 # path: /abc.html # port: 80 # scheme: HTTP # periodSeconds: 5 ## 每隔几秒来运行这个 # successThreshold: 1 ## 成功阈值,连续几次成才算成功 # failureThreshold: 5 ## 失败阈值,连续几次失败才算真失败 exec: command: ["/bin/sh","-c","cat /usr/share/nginx/html/abc.html"] ## 返回不是0,那就是探测失败 # initialDelaySeconds: 20 ## 指定的这个秒以后才执行探测 periodSeconds: 5 ## 每隔几秒来运行这个 timeoutSeconds: 5 ##探测超时,到了超时时间探测还没返回结果说明失败 successThreshold: 1 ## 成功阈值,连续几次成才算成功 failureThreshold: 3 ## 失败阈值,连续几次失败才算真失败 readinessProbe: ##就绪检测,都是 # host: 127.0.0.1 ###不行 path: /abc.html ## 给容器发请求 port: 80 scheme: HTTP ## 返回不是0,那就是探测失败 initialDelaySeconds: 2 ## 指定的这个秒以后才执行探测 periodSeconds: 5 ## 每隔几秒来运行这个 timeoutSeconds: 5 ##探测超时,到了超时时间探测还没返回结果说明失败 successThreshold: 3 ## 成功阈值,连续几次成才算成功 failureThreshold: 5 ## 失败阈值,连续几次失败才算真失败 # livenessProbe: # exec: ["/bin/sh","-c","sleep 30;abc "] ## 返回不是0,那就是探测失败 # initialDelaySeconds: 20 ## 指定的这个秒以后才执行探测 # periodSeconds: 5 ## 每隔几秒来运行这个 # timeoutSeconds: 5 ##探测超时,到了超时时间探测还没返回结果说明失败 # successThreshold: 5 ## 成功阈值,连续几次成才算成功 # failureThreshold: 5 ## 失败阈值,连续几次失败才算真失败

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:四次蝉联中国容器云市场TOP5!为应用赋能
下一篇:网红雪糕持续霸屏,景区纷纷创意营销,旅游+文创成为新热潮!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~