思考一个问题,pod running之后是否能保证pod内的nginx在工作
[root@k8s-master ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created
[root@k8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-b5cwb 0/1 ContainerCreating 0 4s
[root@k8s-master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-b5cwb 1/1 Running 0 20s
1、pod启动了,但是内部的nginx还没有启动,无法对外提供服务
2、pod启动了,但是内部的nginx处于假死状态,此时nginx也无法对外提供服务
此时该如何解决这个问题
这就需要我们接下来的重启策略+健康检查
重启策略(restartPolicy):
• Always:当容器终止退出后,总是重启容器,默认策略。
• OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
• Never:当容器终止退出,从不重启容器。
健康检查有以下两种类型
• livenessProbe(存活检查):如果检查失败,将杀死容器,根据Pod
的restartPolicy来操作。
• readinessProbe(就绪检查):如果检查失败,Kubernetes会把
Pod从service endpoints中剔除。
支持以下三种检查方法
• httpGet:发送HTTP请求,返回200-400范围状态码为成功。
• exec:执行Shell命令返回状态码是0为成功。
• tcpSocket:发起TCP Socket建立成功。
实操:
存活探测
1、修改deployment.yaml
kubectl create deployment pod-check --image=nginx --dry-run=client -o yaml > deployment.yaml
vim deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: pod-check
name: pod-check
spec:
replicas: 3
selector:
matchLabels:
app: pod-check
strategy: {}
template:
metadata:
labels:
app: pod-check
spec:
containers:
- image: nginx
name: nginx
resources: {}
livenessProbe:
httpGet:
path: /index.html
port: 80
initialDelaySeconds: 10 #启动容器后多少秒健康检查
periodSeconds: 10 #以后每间隔多少秒检查一次
readinessProbe:
httpGet:
path: /index.html
port: 80
initialDelaySeconds: 10 #启动容器后多少秒健康检查
periodSeconds: 5 #以后每间隔多少秒检查一次
启动容器
kubectl apply -f deployment.yaml
[root@k8s-master ~]# kubectl get pod,deploy
NAME READY STATUS RESTARTS AGE
pod/pod-check-fbc8b4468-gmrst 1/1 Running 0 3m34s
pod/pod-check-fbc8b4468-nsvxd 1/1 Running 0 3m34s
pod/pod-check-fbc8b4468-s57m9 1/1 Running 0 3m34s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/pod-check 3/3 3 3 3m34s
打开主节点另一个终端,实时观察pod动态
[root@k8s-master ~]# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
pod-check-fbc8b4468-gmrst 1/1 Running 0 3d2h
pod-check-fbc8b4468-nsvxd 1/1 Running 0 3d2h
pod-check-fbc8b4468-s57m9 1/1 Running 0 3d2h
删除其中一个pod的页面,可以看到pod退出
[root@k8s-master ~]# kubectl exec -it pod-check-fbc8b4468-gmrst sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
# cd /usr/share/nginx/html
# ls
50x.html index.html
# rm -f index.html
# command terminated with exit code 137
在另一个监听终端可以看到pod重启,重启数为1
[root@k8s-master ~]# kubectl get pod -w
NAME READY STATUS RESTARTS AGE
pod-check-fbc8b4468-gmrst 1/1 Running 0 3d2h
pod-check-fbc8b4468-nsvxd 1/1 Running 0 3d2h
pod-check-fbc8b4468-s57m9 1/1 Running 0 3d2h
pod-check-fbc8b4468-gmrst 0/1 Running 0 3d2h
pod-check-fbc8b4468-gmrst 0/1 Running 1 3d2h
pod-check-fbc8b4468-gmrst 1/1 Running 1 3d2h
也可以通过 kubectl describe pod pod-check-fbc8b4468-gmrst 查看具体日志
就绪探测
创建service
[root@k8s-master ~]# kubectl expose deployment pod-check --port=80 --target-port=80 --type=NodePort --dry-run=client -o yaml > service.yaml
[root@k8s-master ~]# vim service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: pod-check
name: pod-check
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: pod-check
type: NodePort
[root@k8s-master ~]# kubectl apply -f service.yaml
service/pod-check created
[root@k8s-master ~]# kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d6h <none>
pod-check NodePort 10.105.163.2 <none> 80:31268/TCP 4s app=pod-check
[root@k8s-master ~]# kubectl get endpoints
NAME ENDPOINTS AGE
kubernetes 192.168.11.81:6443 5d6h
pod-check 10.244.169.156:80,10.244.169.157:80,10.244.169.158:80 4m54s
删除一个pod内的页面
[root@k8s-master ~]# kubectl exec -it pod-check-fbc8b4468-s57m9 /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@pod-check-fbc8b4468-s57m9:/# rm -f /usr/share/nginx/html/index.html
root@pod-check-fbc8b4468-s57m9:/# command terminated with exit code 137
在另一个监听终端可以看到pod先被剔除然后加进来
[root@k8s-master ~]# kubectl get ep -w
NAME ENDPOINTS AGE
kubernetes 192.168.11.81:6443 5d6h
pod-check 10.244.169.156:80,10.244.169.157:80,10.244.169.158:80 6m44s
pod-check 10.244.169.156:80,10.244.169.157:80 7m35s
pod-check 10.244.169.156:80,10.244.169.157:80,10.244.169.158:80 8m15s