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实现的
k8s中pod的重启策略和健康检查_第1张图片

检查示例

模拟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
k8s中pod的重启策略和健康检查_第2张图片
给这个deployment添加service暴露端口
kubectl expose deployment nginx --port=80 --target-port=80
查看创建成功
kubectl get pods,svc
k8s中pod的重启策略和健康检查_第3张图片
从日志上看检查一直在执行
k8s中pod的重启策略和健康检查_第4张图片
此时进入一个nginx的pod中,删除他的index.html命令
k8s中pod的重启策略和健康检查_第5张图片
从日志上看已经有了一个错误的日志
查看这个pod详情(pod名按实际生成来)
kubectl describe pod nginx-5b645dcb8b-5gwmk
k8s中pod的重启策略和健康检查_第6张图片
发现在详情中,由出现健康检查有403的错误日志,并重建了容器
pod中的nginx也有了重启记录
k8s中pod的重启策略和健康检查_第7张图片
删除的index.html也恢复了
k8s中pod的重启策略和健康检查_第8张图片
注意:这里的重启,实际是重新拉取镜像帮你重建了这个容器。但pod名不变

其他检查方式示例

k8s中pod的重启策略和健康检查_第9张图片

你可能感兴趣的:(k8s,k8s-pod,运维,kubernetes,运维开发,容器)