k8s部署-36-k8s的健康检查带你了解下

图片

怎么判断我们的pod运行正常呢?怎么判断pod里面运行的程序正常呢?是由什么逻辑来判断的呢?到底是什么情况下会通过重启来验证服务的可用性呢?下来我们看看k8s是如何做的吧。

图片

上一篇的问题

上一篇中针对不同的deployment,运行相同的标签,我们最后的建议是不建议那么配置,但是在有些情况中也是可以这么操作的哈,不能说直接定论就不行。

例如:我们在不同版本的时候,就可以按照这种方式来配置哈。

默认的健康检查

k8s默认的健康检查就是简单的判断下你容器中启动的程序是否存在,如果存在,pod就正常运行,但是这种判断很多情况下并不满足我们的实际需求,比如说进程存在但是无法提供服务的情况(服务假死),像这种就无法准确的判断了。那么我们来看下k8s提供的常见健康检查方式都有什么。

cmd命令检测

[root@node1 ~]# cd namespace/
[root@node1 namespace]# mkdir healthcheck/
[root@node1 namespace]# cd healthcheck/
[root@node1 healthcheck]# vim healthcheck-cmd.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-demo
  namespace: dev
spec:
  selector:
    matchLabels:
      app: web-demo
  replicas: 1
  template:
    metadata:
      labels:
        app: web-demo
    spec:
      containers:
      - name: web-demo
        image: yunweijia.com/kubernetes/web:v1
        ports:
        - containerPort: 8080
        livenessProbe:
          exec:
            command:
            - /bin/sh
            - -c
            - ps -ef|grep java|grep -v grep
          initialDelaySeconds: 10  # 等待时长,即pod容器启动多少秒之后检查
          periodSeconds: 10  # 健康检查的间隔时长
          failureThreshold: 2  # 失败几次认为完全失败,然后重启pod
          successThreshold: 1  # 成功几次认为没问题,正常
          timeoutSeconds: 5  # 执行命令的超时时间
[root@node1 healthcheck]# kubectl apply -f healthcheck-cmd.yaml

这个探针的意义相当于,执行如下命令:

/bin/sh -c ps -ef|grep java|grep -v grep

如果返回执行正常,则表示程序存活,如果失败两次,则重启该pod。

http请求检测

[root@node1 healthcheck]# vim healthcheck-http.yaml
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-demo
  namespace: dev
spec:
  selector:
    matchLabels:
      app: web-demo
  replicas: 1
  template:
    metadata:
      labels:
        app: web-demo
    spec:
      containers:
      - name: web-demo
        image: yunweijia.com/kubernetes/web:v1
        ports:
        - containerPort: 8080
        livenessProbe:
          httpGet:
            path: /examples/index.html
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 5
          periodSeconds: 5
          failureThreshold: 1
          successThreshold: 1
          timeoutSeconds: 5
[root@node1 healthcheck]#

这个探针的意思是相当于执行了如下命令:

curl http://127.0.0.1:8080/examples/index.html

如果能正常返回就表示正常,反之则失败。需要注意的是一定要能返回200状态码。

Port端口检测

[root@node1 healthcheck]# vim healthcheck-port.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-demo
  namespace: dev
spec:
  selector:
    matchLabels:
      app: web-demo
  replicas: 1
  template:
    metadata:
      labels:
        app: web-demo
    spec:
      containers:
      - name: web-demo
        image: yunweijia.com/kubernetes/web:v1
        ports:
        - containerPort: 8080
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 20
          periodSeconds: 10
          failureThreshold: 2
          successThreshold: 1
          timeoutSeconds: 5
[root@node1 healthcheck]#

这个探针的意思是说检测自己的8080端口是否存活,相当于执行了如下命令:

剩余内容请转至VX公众号 “运维家” ,回复 “143” 查看。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值