K8S 存活探针、就绪探针和钩子函数——筑梦之路
k8s 函数 筑梦之路 钩子 探针 存活 就绪
2023-09-14 09:09:35 时间
#存活探针
livenessProbe:
# 失败次数
failureThreshold: 5
# 初始化时间
initialDelaySeconds: 120
# 检测间隔时间
periodSeconds: 15
# 成功次数
successThreshold: 1
tcpSocket:
port: 8080
# 超时时间
timeoutSeconds: 2
#就绪探针
readinessProbe:
failureThreshold: 5
httpGet:
path: /health
port: 8080
initialDelaySeconds: 120
periodSeconds: 15
successThreshold: 1
timeoutSeconds: 2
#liveness是应用存活探测,readiness是应用启动就绪探测,只有就绪后才分配流量
#钩子函数
lifecycle:
preStop:
exec:
command:
- /bin/sh
- -c
- sleep 60
lifecycle:
postStart:
exec:
command:
- cat
- /tmp/healthy
#lifecycle 是启动和停止前执行脚本,postStart是启动前,preStop是停止前
K8S生命周期钩子函数
容器生命周期钩子(Container Lifecycle Hooks)监听容器生命周期的特定事件,并在事件发生时执行已注册的回调函数。
钩子函数:
postStart: 容器创建后立即执行,注意由于是异步执行,它无法保证一定在 ENTRYPOINT 之前运行。如果失败,容器会被杀死,并根据 RestartPolicy 决定是 否重启
preStop:容器终止前执行,常用于资源清理。执行完成之后容器将成功终止,如果失败,容器同样也会被杀死。在其完成之前 会阻塞删除容器的操作
支持三种定义方式:
# exec:在容器内执行命令,如果命令的退出状态码是 0 表示执行成功,否则表示失败
lifecycle:
postStart:
exec:
command:
- cat
- /tmp/healthy
# httpGet:向指定 URL 发起 GET 请求,如果返回的 HTTP 状态码在 [200, 400) 之间表示请求成功,否则表示失败
lifecycle:
postStart:
httpGet:
path: /login # URI地址
port: 80 # 端口号
host: 192.168.126.100 # 主机地址
scheme: HTTP # 支持的协议,http或https
# http://192.168.126.100:80/login
# TCPSocket:在容器尝试访问指定的socket
lifecycle:
postStart:
tcpSocket:
port: 8080
# 钩子函数的示例
# cat pod-hook-exec.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-hook-exec
namespace: test
spec:
containers:
- name: main-container
image: nginx:1.20.1
ports:
- name: nginx-port
containerPort: 80
lifecycle:
postStart:
exec: # 在容器启动的时候执行一个命令,修改nginx默认首页内容
command: ["/bin/sh","-c","echo postStart... > /usr/share/nginx/html/index.html"]
preStop:
exec: # 在容器停止之前停止nginx服务
command: ["/usr/sbin/nginx","-s","quit"]
# kubectl create -f pod-hook-exec.yaml
pod/pod-hook-exec created
# kubectl get pod -n test -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod-hook-exec 1/1 Running 0 19s 10.244.2.31 k8s-node02 <none> <none>
# curl 10.244.2.31
postStart...
注意:
- PostStart会阻塞容器成为Running状态
- PreStop会阻塞容器的删除,但是过了terminationGracePeriodSeconds时间后,容器会被强制删除
- 如果PreStop或者PostStart失败的话, 容器会被杀死
相关文章
- K8S搭建-1 Master 2 Workers(dashboard+ingress)
- 一文读懂 K8s 持久化存储流程
- 从零开始入门 K8s | Kubernetes 调度和资源管理
- operator-sdk实战开发K8S CRD自定义资源对象
- k8s kubectl create命令使用详解
- k8s secret使用方式:pod通过变量和volume方式使用secret
- 阿里云环境安装K8S步骤
- 非root用户管理k8s和docker容器
- 【K8S系列】第四讲:kubadm部署k8s时service-cidr网络和pod-network-cidr的地址如何定义
- K8S集群中Pod资源常见的异常状态以及排查思路
- openssl为k8s生成SSL证书
- 快速编写k8s资源清单yaml文件