pod进阶版(2)

发布时间:2024年01月05日

startupProbe启动探针

如果探测失败,pod的状态是notready,启动探针会重启容器

启动探针没有成功之前,后续的探针都不会执行。启动探针成功之后,在pod的后续生命周期不会用启动探针

exec方式

正确示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    startupProbe:
      exec:
        command: ["/usr/bin/test","-e","/etc/passwd"]
      initialDelaySeconds: 4
      periodSeconds: 2

故障模拟

httpGet方式

正确示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    startupProbe:
      httpGet:
        port: 8080
        path: /index.jsp
      initialDelaySeconds: 4
      periodSeconds: 2

错误示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    startupProbe:
      httpGet:
        port: 8080
        path: /index.html
      initialDelaySeconds: 4
      periodSeconds: 2

tcpSocket方式

正确示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    startupProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 4
      periodSeconds: 2

故障示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    startupProbe:
      tcpSocket:
        port: 8081
      initialDelaySeconds: 4
      periodSeconds: 2

存活容器 livenessProbe

探测失败,杀死容器重启。

exec方式

正确示范

故障示范

httpGet方式

正确示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    startupProbe:
      httpGet:
        port: 8080
        path: /index.html
      initialDelaySeconds: 4
      periodSeconds: 2

故障示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    livenessProbe:
      httpGet:
        port: 8080
        path: /index.html
      initialDelaySeconds: 4
      periodSeconds: 2

tcpSocket方式

正常示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    livenessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 4
      periodSeconds: 2

故障模拟

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    livenessProbe:
      tcpSocket:
        port: 8081
      initialDelaySeconds: 4
      periodSeconds: 2

readinessProbe就绪探针

pod的状态是running ready状态是notready,容器不可以提供正常的务访问,就绪探针不会重启容器。

tcpSocket只是监听容器上的业务端口能否正常通信。Tomcat 8081没有,8080还在,也就是正常的端口还是可以访问。


为什么要指定端口检测??????更改了服务端口,探测需要指定端口检测。

注意点:

存活探针和就绪探针会伴随整个pod的生命周期。
就绪探针不重启容器

exec方式

正确示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    readinessProbe:
      exec:
        command: ["/usr/bin/test","-e","/etc/passwd"]
      initialDelaySeconds: 4
      periodSeconds: 2

故障示范

kubectl exec -it tomcat3 -- rm -rf /etc/passwd

httpGet方式

正确示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    readinessProbe:
      httpGet:
        port: 8080
        path: /index.jsp
      initialDelaySeconds: 4
      periodSeconds: 2

故障示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    readinessProbe:
      httpGet:
        port: 8080
        path: /index.html
      initialDelaySeconds: 4
      periodSeconds: 2

tcpSocket方式

?正确示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 4
      periodSeconds: 2

故障示范

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: tomcat3
  name: tomcat3
spec:
  containers:
  - image: tomcat:8.0.52
    name: tomcat3
    readinessProbe:
      tcpSocket:
        port: 8081
      initialDelaySeconds: 4
      periodSeconds: 2

容器启动和退出时的动作:

postStart:容器启动的钩子,容器启动之后触发的条件
preStop: 容器退出的钩子,容器退出之后触发的条件

总结

1、在一个yaml文件当中可以有多个探针,启动 存活 就绪都针对一个容器。
2、启动探针优先级最高,只有启动探针"成功",后续的探针才会执行
3、启动探针成功之后,后续除非重启pod,否则不会再触发启动探针。
4、在生命周期中,一直存在的探针只有:存活探针和就绪探针。
5、在pod的生命周期当中,后续的条件是满足哪个探针的条件,触发哪个探针的条件。
6、就绪探针如果不影响容器运行,状态是running,此时不会重启。容器退出的话,就绪探针也会重启。

挂载卷

容器内部挂载

      volumeMounts:
      - name: test1
        mountPath: /opt
        readOnly: false

声明容器内部的挂载目录
要给这个挂载卷取名,不同挂在卷的名字不能重复
readOnly: false 可读写

节点上挂载

  volumes:
  - name: test1
    hostPath:
      path: /opt/test
      type: DirectoryOrCreate

声明的是node节点上和容器内的/opt的挂载目录
挂载卷的名称和要挂载的容器内挂载卷名称要一一对应
hostPath:指定和容器的挂载目录
type: DirectoryOrCreate: 如果节点上的目录不存在,自动创建该目录。
pod会经常被重启,销毁,一旦容器和node节点做了挂载卷,数据不会丢失。

poststart和prestop

启动和退出的作用:
1、启动可以自定义配置容器的内的环境变量
2、通知机制,告诉用户容器启动完毕
3、退出时,可以执行自定义命令,删除或者生成一些必要的程序,自定义销毁方式以及自定义资源回收的方式以及容器退出的等待时间。

apiVersion: v1
kind: Pod
metadata:
  name: nginx2
spec:
  containers:
    - name: nginx2
      image: centos:7
      command: ["/bin/bash","-c","sleep 3600"]
#容器内挂载卷
      volumeMounts:
      - name: test1
        mountPath: /opt
        readOnly: false
      lifecycle:
#poststart
        postStart:
           exec:
             command: ["/bin/bash","-c","echo lyw from start >> /opt/123.txt ; sleep 10"]
#prestop
        preStop:
           exec:
             command: ["/bin/bash","-c","echo hello from stop >> /opt/123.txt"]
#node节点挂在卷
  volumes:
  - name: test1
    hostPath:
      path: /opt/test
      type: DirectoryOrCreate

在这个pod的生命周期事件当中,把启动探针,存活探针和就绪探针加入到yaml文件当中。

文章来源:https://blog.csdn.net/qq_61843057/article/details/135406287
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。