参考文档: https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
apiVersion: v1 # 必选,API的版本号 kind: Pod # 必选,类型Pod metadata: # 必选,元数据 name: nginx01 # 必选,符合RFC 1035规范的Pod名称 labels: # 可选,标签选择器,一般用于过滤和区分Pod app: nginx role: frontend # 可以写多个 annotations: # 可选,注释列表,可以写多个 app: nginx spec: # 必选,用于定义容器的详细信息 containers: # 必选,容器列表 - name: nginx01 # 必选,符合RFC 1035规范的容器名称 image: nginx:latest # 必选,容器所用的镜像的地址 imagePullPolicy: Always # 可选,镜像拉取策略 command: # 可选,容器启动执行的命令 - nginx - -g - "daemon off;" workingDir: /usr/share/nginx/html # 可选,容器的工作目录 ports: # 可选,容器需要暴露的端口号列表 - name: http # 端口名称 containerPort: 80 # 端口号 protocol: TCP # 端口协议,默认TCP env: # 可选,环境变量配置列表 - name: TZ # 变量名 value: Asia/Shanghai # 变量的值 - name: LANG value: en_US.utf8 startupProbe: # 可选,检测容器内进程是否完成启动。注意三种检查方式同时只能使用一种。 httpGet: # httpGet检测方式,生产环境建议使用httpGet实现接口级健康检查,健康检查由应用程序提供。 path: /api/successStart # 检查路径 port: 80 restartPolicy: Always # 可选,默认为Always root@k8s-master01[23:26:10]:~$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-startupprobe 0/1 Running 1 79s 创建后会无法启动,原因是无法检测到这个地址,通过日志可以看到: 2021/06/25 23:26:02 [error] 7#7: *3 open() "/usr/share/nginx/html/api/successStart" failed (2: No such file or directory), client: 192.168.3.84, server: localhost, request: "GET /api/successStart HTTP/1.1", host: "172.17.125.25:80" ReadinessProbe案例 [可以提供服务的状态]参考文档: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
apiVersion: v1 # 必选,API的版本号 kind: Pod # 必选,类型Pod metadata: # 必选,元数据 name: nginx-read # 必选,符合RFC 1035规范的Pod名称 labels: # 可选,标签选择器,一般用于过滤和区分Pod app: nginx role: frontend # 可以写多个 annotations: # 可选,注释列表,可以写多个 app: nginx spec: # 必选,用于定义容器的详细信息 containers: # 必选,容器列表 - name: nginx-read # 必选,符合RFC 1035规范的容器名称 image: nginx:latest # 必选,容器所用的镜像的地址 imagePullPolicy: Always # 可选,镜像拉取策略 command: # 可选,容器启动执行的命令 - nginx - -g - "daemon off;" workingDir: /usr/share/nginx/html # 可选,容器的工作目录 ports: # 可选,容器需要暴露的端口号列表 - name: http # 端口名称 containerPort: 80 # 端口号 protocol: TCP # 端口协议,默认TCP env: # 可选,环境变量配置列表 - name: TZ # 变量名 value: Asia/Shanghai # 变量的值 - name: LANG value: en_US.utf8 readinessProbe: httpGet: path: / port: 80 restartPolicy: Always # 可选,默认为Always kubectl apply -f readinessProbe-pod.yaml LivenessProbe检测容器中的应用是否正常运行参考文档:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
apiVersion: v1 # 必选,API的版本号 kind: Pod # 必选,类型Pod metadata: # 必选,元数据 name: nginx-live # 必选,符合RFC 1035规范的Pod名称 labels: # 可选,标签选择器,一般用于过滤和区分Pod app: nginx role: frontend # 可以写多个 annotations: # 可选,注释列表,可以写多个 app: nginx spec: # 必选,用于定义容器的详细信息 containers: # 必选,容器列表 - name: nginx-live # 必选,符合RFC 1035规范的容器名称 image: nginx:latest # 必选,容器所用的镜像的地址 imagePullPolicy: Always # 可选,镜像拉取策略 command: # 可选,容器启动执行的命令 - nginx - -g - "daemon off;" workingDir: /usr/share/nginx/html # 可选,容器的工作目录 ports: # 可选,容器需要暴露的端口号列表 - name: http # 端口名称 containerPort: 80 # 端口号 protocol: TCP # 端口协议,默认TCP env: # 可选,环境变量配置列表 - name: TZ # 变量名 value: Asia/Shanghai # 变量的值 - name: LANG value: en_US.utf8 livenessProbe: httpGet: path: / port: 80 kubectl apply -f livenessProbe.yaml #检查 nginx-live pod是否正常 root@k8s-master01[23:41:31]:~$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-live 1/1 Running 0 35s nginx-read 1/1 Running 0 10m nginx-startupprobe 0/1 Running 9 16m 混合配置 readinessProbe+livenessProbe案例 apiVersion: v1 # 必选,API的版本号 kind: Pod # 必选,类型Pod metadata: # 必选,元数据 name: nginx-read # 必选,符合RFC 1035规范的Pod名称 labels: # 可选,标签选择器,一般用于过滤和区分Pod app: nginx role: frontend # 可以写多个 annotations: # 可选,注释列表,可以写多个 app: nginx spec: # 必选,用于定义容器的详细信息 containers: # 必选,容器列表 - name: nginx-read # 必选,符合RFC 1035规范的容器名称 image: nginx:latest # 必选,容器所用的镜像的地址 imagePullPolicy: Always # 可选,镜像拉取策略 command: # 可选,容器启动执行的命令 - nginx - -g - "daemon off;" workingDir: /usr/share/nginx/html # 可选,容器的工作目录 ports: # 可选,容器需要暴露的端口号列表 - name: http # 端口名称 containerPort: 80 # 端口号 protocol: TCP # 端口协议,默认TCP env: # 可选,环境变量配置列表 - name: TZ # 变量名 value: Asia/Shanghai # 变量的值 - name: LANG value: en_US.utf8 readinessProbe: exec: command: - cat - /etc/hosts initialDelaySeconds: 5 timeoutSeconds: 2 successThreshold: 3 failureThreshold: 2 periodSeconds: 5 livenessProbe: #健康检查方式:[readinessProbe,livenessProbe,StartupProbe] failureThreshold: 5 #检测失败5次表示未就绪 httpGet: #请求方式 path: /health #请求路径 port: 8080 #请求端口 scheme: HTTP ##请求协议 initialDelaySeconds: 60 #初始化时间 periodSeconds: 10 #检测间隔 successThreshold: 1 #检查成功为2次表示就绪 timeoutSeconds: 5 #检测失败1次表示未就绪 startupprobe+readinessProbe+ 混合案例 apiVersion: v1 # 必选,API的版本号 kind: Pod # 必选,类型Pod metadata: # 必选,元数据 name: read-startup # 必选,符合RFC 1035规范的Pod名称 labels: # 可选,标签选择器,一般用于过滤和区分Pod app: nginx role: frontend # 可以写多个 annotations: # 可选,注释列表,可以写多个 app: nginx spec: # 必选,用于定义容器的详细信息 containers: # 必选,容器列表 - name: read-startup # 必选,符合RFC 1035规范的容器名称 image: nginx:latest # 必选,容器所用的镜像的地址 imagePullPolicy: Always # 可选,镜像拉取策略 command: # 可选,容器启动执行的命令 - nginx - -g - "daemon off;" workingDir: /usr/share/nginx/html # 可选,容器的工作目录 ports: # 可选,容器需要暴露的端口号列表 - name: http # 端口名称 containerPort: 80 # 端口号 protocol: TCP # 端口协议,默认TCP env: # 可选,环境变量配置列表 - name: TZ # 变量名 value: Asia/Shanghai # 变量的值 - name: LANG value: en_US.utf8 readinessProbe: exec: command: - cat - /etc/hosts initialDelaySeconds: 5 timeoutSeconds: 2 successThreshold: 3 failureThreshold: 2 periodSeconds: 5 startupProbe: httpGet: path: / port: 80 failureThreshold: 30 periodSeconds: 10 startupprobe+readinessProbe+ livenessProbe混合案例 apiVersion: v1 # 必选,API的版本号 kind: Pod # 必选,类型Pod metadata: # 必选,元数据 name: read-startup # 必选,符合RFC 1035规范的Pod名称 labels: # 可选,标签选择器,一般用于过滤和区分Pod app: nginx role: frontend # 可以写多个 annotations: # 可选,注释列表,可以写多个 app: nginx spec: # 必选,用于定义容器的详细信息 containers: # 必选,容器列表 - name: read-startup # 必选,符合RFC 1035规范的容器名称 image: nginx:latest # 必选,容器所用的镜像的地址 imagePullPolicy: Always # 可选,镜像拉取策略 command: # 可选,容器启动执行的命令 - nginx - -g - "daemon off;" workingDir: /usr/share/nginx/html # 可选,容器的工作目录 ports: # 可选,容器需要暴露的端口号列表 - name: http # 端口名称 containerPort: 80 # 端口号 protocol: TCP # 端口协议,默认TCP env: # 可选,环境变量配置列表 - name: TZ # 变量名 value: Asia/Shanghai # 变量的值 - name: LANG value: en_US.utf8 readinessProbe: exec: command: - cat - /etc/hosts initialDelaySeconds: 5 timeoutSeconds: 2 successThreshold: 3 failureThreshold: 2 periodSeconds: 5 startupProbe: httpGet: path: / port: 80 failureThreshold: 30 periodSeconds: 10 livenessProbe: httpGet: path: /healthz port: 80 failureThreshold: 1 periodSeconds: 10 检测时间计算 准确的时间计算:每次检查的间隔是10秒,最长超时时间是5秒,也就是单次检查应该是10 + 5 = 15秒(periodSeconds + timeoutSeconds),并不是10 * 5 所以最长的重启时间为(10 + 5)* 5 (periodSeconds + timeoutSeconds) * failureThreshold 此时又分为了两种情况: 1. 首次启动时:最长重启时间需要加上initialDelaySeconds,因为需要等待initialDelaySeconds秒后才会执行健康检查。最长重启时间:(periodSeconds + timeoutSeconds) * failureThreshold + initialDelaySeconds 2. 程序启动完成后: 此时不需要计入initialDelaySeconds,最长重启时间:(periodSeconds + timeoutSeconds) * failureThresholdkubernetes的三种探针startupprobe,ReadinessProbe,LivenessProbe记录
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)