kubernetes基础学习(六)健康检查

思考一个问题,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值