k8s中pod的重启策略和健康检查

目录

k8s中pod的重启策略

pod中一共有以下三个重启策略(restartPolicy)

健康检查:

健康检查类型

支持的检查方法:

检查示例

其他检查方式示例


k8s中pod的重启策略

pod中一共有以下三个重启策略(restartPolicy)

1、Always:当容器终止退出后,总是重启容器,默认策略。
2、OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。 
3、Never:当容器终止退出,从不重启容器。
三种重启策略中,Always是默认策略,即当用户在配置文件中未配置关于重启的策略,则默认为Always.
当然,几种策略也按实际情况修改,即常驻容器肯定采用Always,例如nginx与mysql等
而一些预期终止的程序
  1、失败重新执行,例如定时任务,则适用于OnFailure
  2、失败不重新执行,例如一次性任务Neve

健康检查:

       健康检查是在pod中,可能容器进程存在,pod状态也为runing,但容器内部无法提供服务了(可能是因为堆内存溢出等)这种k8s自身无法判断,需要用户来提供检查方式从情况下使用的

健康检查类型

 1、livenessProbe(存活检查):如果检查失败,将杀死容器,根据Pod 的restartPolicy来操作。
 2、readinessProbe(就绪检查):如果检查失败,Kubernetes会把 Pod从service endpoints中剔除。(可以理解为提出k8s的负载均衡)
 3、startupProbe(启动检查):检查成功才由存活检查接手,用于保护 慢启动容器

支持的检查方法

 • httpGet:发送HTTP请求,返回200-400范围状态码为成功。
 • exec:执行Shell命令返回状态码是0为成功。
 • tcpSocket:发起TCP Socket建立成功。
检查方式分同机器检查与不同机器检查(一般采用curl靠谱)
不同机器检查方式:curl、wget、telnet
同机器检查:netstat、ps
检查的实现是由kubelet实现的

检查示例

模拟http请求与存活检查
先创建一个nginx的deployment.yaml
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deployment.yaml
如果是一个生产环境,应该需要开发人员在代码中加一个健康检查页面
修改这个yaml,在这个yaml中的pod加入了存活检查与启动检查,路径为根目录与80端口
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
        livenessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 3 #启动容器后多少秒健康检查
          periodSeconds: 10 #以后每间隔多少秒检查一次
        readinessProbe:
          httpGet:
            path: /
            port: 80
          initialDelaySeconds: 3
          periodSeconds: 10
启动
kubectl apply -f deployment.yaml
查看启动成功
kubectl get pods
给这个deployment添加service暴露端口
kubectl expose deployment nginx --port=80 --target-port=80
查看创建成功
kubectl get pods,svc
从日志上看检查一直在执行
此时进入一个nginx的pod中,删除他的index.html命令
从日志上看已经有了一个错误的日志
查看这个pod详情(pod名按实际生成来)
kubectl describe pod nginx-5b645dcb8b-5gwmk
发现在详情中,由出现健康检查有403的错误日志,并重建了容器
pod中的nginx也有了重启记录
删除的index.html也恢复了
注意:这里的重启,实际是重新拉取镜像帮你重建了这个容器。但pod名不变

其他检查方式示例

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值