apiVersion: v1kind: Podmetadata:name: expodpostprespec:containers:- name: postprecontainerimage: busyboximagePullPolicy: IfNotPresentcommand: ['sh', '-c']args: ['echo "Hello Kubernetes!"; sleep 3600']lifecycle:postStart:httpGet:host: www.baidu.compath: /port: 80scheme: HTTPpreStop:exec:command: ['sh', '-c', 'echo "preStop callback done!"; sleep 60']
postStart 中我们执行 HttpGet 回调,访问了百度首页,preStop 则执行命令输出一段文本,然后停留 60s 。我们执行创建命令,观察一下 Pod 的状态 。
kubectl apply -f expodpostpre.yml
正常情况下是和之前的是一样的,我们做一些测试操作,例如把 postStart 的网址写一个不可访问的网址,比如:
host: www.fackbook.com
创建后,查看日志信息
kubectl logs expodpostpre
文章插图
还可以通过 kubectl describe 来查看详细情况
文章插图
Pod 的健康检查在容器运行的过程中,我们可以通过探针来持续检查容器的状况,kubernetes 为我们提供了两种探针:存活探针、就绪探针 。
- 存活探针livenessProbe:检测容器是否正在运行,如果返回 Failure,kubelet 会终止容器,然后容器会按照重启策略执行 。如果没有提供存活探针,默认状态就是 Success 。
- 就绪探针readlinessProbe:检测容器是否已经可以启动了应用服务,如果返回 Failure,Endpoint 控制器就会从所有 Service 的 Endpoint 中移除此 Pod 的 IP 地址 。从容器启动到第一次探测之前,默认的就绪状态是 Failure 。如果没有提供就绪探针,默认状态就是 Success 。
- exec:在容器内部执行指定的命令,如果命令以状态码“0”退出,则表示诊断成功 。配置如下:
livenessProbe/readlinessProbe:exec:command: [xxxx] # 命令列表
- tcpSocket:对容器的指定端口执行 TCP 检测 。如果端口是打开的,则诊断成功 。配置如下:
livenessProbe/readlinessProbe:tcpSocket:port: Number # 指定端口号
- httpGet:对容器内的 HTTP 服务进行检测,如果响应的状态码范围为 200~400,则诊断成功 。配置如下:
livenessProbe/readlinessProbe:httpGet:port: Number # 指定的端口号path: String # 指定路径
下面举几个例子来展示一下探针的使用 。存活探针的使用
apiVersion: v1kind: Podmetadata:name: expodlivespec:containers:- name: livecontainerimage: busyboximagePullPolicy: IfNotPresentcommand: ['sh', '-c']args: ['mkdir /files_dir; echo "Hello Kubernetes!" > /files_dir/newfile; sleep 3600']livenessProbe:exec:command: ['cat', '/files_dir/newfile']
先创建一个文件夹 files_dir,再新建一个文件 newfile,写入 Hello Kubernetes! 内容,然后在存活探针中使用 cat 查看文件内容 。执行创建 Pod 命令:kubectl apply -f expodlive.yml
文章插图
目前 Pod 运行一切正常,现在我们可以做一些破坏性的操作,进入 Pod 内部,删除 newfile 文件 。
[root@k8s-master]# kubectl exec -it expodlive -- /bin/sh/# rm -f /files_dir/newfile/# exit
由于探针定期检查 /files_dir/newfile 文件是否存在,而我们的 Pod 默认是异常后重启,因此可以通过以下命令查看 Pod 详细信息:kubectl describe pods expodlive
文章插图
可以看到 Event 中打印了存活探针的运行情况:存活探针失败,并且准备重启 。
就绪探针的使用
apiVersion: v1kind: Podmetadata:name: expodreadspec:containers:- name: readcontainerimage: nginximagePullPolicy: IfNotPresentports:- name: portnginxcontainerPort: 80readinessProbe:httpGet:port: 80path: /
我们创建了一个 Nginx 容器,通过 containerPort 属性,将 80 端口暴露出来,然后设置一个就绪探针定期向 80 端口发送 HttpGet 请求,检测响应范围是否为 200~400 。使用 apply 命令创建成功后,我们同样要进行一些测试性的操作 。[root@k8s-master]# kubectl apply -f expodread.yml[root@k8s-master]# kubectl exec -it expodread -- /bin/sh/# nginx -s stop
推荐阅读
- 除了WIFI,你所不知道的低成本私有无线网络组网解决方案
- 老茶头是怎么形成的,老茶头是如何形成的呢
- 猴菇丁香沙棘茶的功效,猴头丁香沙棘茶的功效与作用
- 苦荞茶品牌排行,黑苦荞茶的价格
- 韭菜子泡茶的功效,刺五加叶茶的功效与作用
- 经常喝六安瓜片的好处,六安瓜片的功效与作用
- 荷叶茶的功效与作用,茉莉荷叶茶功效
- 好白茶的主要品种,白茶是什么茶品种
- 后起八大茶山现状简介,古六大茶山之革登茶山的地理渊源
- 花草蜜桃茶的做法,蜜桃果茶的做法