Pod在整个生命周期中被系统定义为各类状态,熟悉Pod的各类状态对于理解如何设置Pod的调度策略,重启策略颇有必要html
Pending
API Server已经建立Pod 但在Pod内还有一个或多个的镜像没有建立,包括正在下载镜像的过程。node
Running
Pod内全部容器已经建立完成,且至少有一个容器处于运行状态python
Successded
Pod内全部容器均成功执行退出,而且不会再重启nginx
Faild
Pod内全部容器均已退出,但至少有一个容器为退出失败状态api
Pod的重启策略应用于Pod内全部的容器,而且仅在Pod所处的Node上由kubelet进行判断和重启操做tomcat
重启策略app
配置在spec与containers同级中socket
........ containers: - name: tomcat-app1-container image: harbor.magedu.local/tomcat-app1:v1 command: ["/apps/tomcat/bin/run_tomcat.sh"] imagePullPolicy: IfNotPresent #imagePullPolicy: Always ports: - containerPort: 8080 protocol: TCP name: http env: - name: "password" value: "123456" resources: limits: cpu: 1 memory: "512Mi" requests: cpu: 500m memory: "512Mi" restartPolicy: Always #重启策略
Pod健康检查和服务可用性检查tcp
Kubernetes对Pod的健康检查能够经过两类探针检查LivenessProbe,ReadinessProbe,kubelet按期执行这两类探针来诊断容器的监控状态oop
LivenessProber探针
用于判断容器是否存活(Running状态),若是LivenessProbe探针探测到容器不健康,则kubelete将杀掉该容器,并根据容器的重启策略作相应的处理,若是一个容器不包含LivenessProbe探针,那么kubelet认为该容器的LivenessProbe弹指值返回永远时Seccess
ReadinessProbe探针
用于判断容器服务是否可用(Ready状态),达到Ready状态的Pod才能够接受请求,流量能够接入。对于service管理的Pod service与Pod Endpoint的关联关系也会将基于Pod是否Ready进行设置
ExecAction
在容器内执行一个命令,若是该命令的返回值为0 则代表容器健康
TCPSocketActio
经过容器的IP地址和端口号执行TCP检
查,若是可以创建TCP链接,则代表容器健康
HTTPGetAction
经过容器的IP地址,端口号及路径调用Http Get方法,若是状态码大于等于200且小于400,则认为容器健康
生产建议使用此方法调用你的程序接口进行检测
辅助探测的其它配置项目
initialDelaySeconds: 5 #启动容器后的多长时间进行探测
periodSeconds: 3 #间隔多长时间执行一次探测
timeoutSeconds: 5 #探测超时等待多少秒进行下一次探测
successThreshold: 1 #从失败转为成功的重试次数,探测器在失败后,被视为成功的最小连续成功数,默认值是1,存活探测的这个值必须是1,最小值是 1
failureThreshold: 3 #从成功转为失败的重试次数,当Pod启动了而且探测到失败,Kubernetes的重试次数,存活探测状况下的放弃就意味着从新启动容器,就绪探测状况下的放弃Pod 会被打上未就绪的标签,默认值是3,最小值是1
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: #rs or deployment app: ng-deploy-80 template: metadata: labels: app: ng-deploy-80 spec: containers: - name: ng-deploy-80 image: nginx:1.17.5 ports: - containerPort: 80 livenessProbe: httpGet: path: /index.html port: 80 initialDelaySeconds: 5 #启动容器后的多长时间进行探测 periodSeconds: 3 #间隔多长时间执行一次探测 timeoutSeconds: 5 #探测超时等待多少秒进行下一次探测 successThreshold: 1 #从失败转为成功的重试次数,探测器在失败后,被视为成功的最小连续成功数,默认值是1,存活探测的这个值必须是1,最小值是 1 failureThreshold: 3 #从成功转为失败的重试次数,当Pod启动了而且探测到失败,Kubernetes的重试次数,存活探测状况下的放弃就意味着从新启动容器,就绪探测状况下的放弃Pod 会被打上未就绪的标签,默认值是3,最小值是1
kubelet定时发送HTTP请求到 localhost:80/index.html 来进行容器应用的健康检查
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: #rs or deployment app: ng-deploy-80 template: metadata: labels: app: ng-deploy-80 spec: containers: - name: ng-deploy-80 image: nginx:1.17.5 ports: - containerPort: 80 livenessProbe: tcpSocket: port: 80 initialDelaySeconds: 5 periodSeconds: 3 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 3
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: #rs or deployment app: ng-deploy-80 template: metadata: labels: app: ng-deploy-80 spec: containers: - name: ng-deploy-80 image: nginx:1.17.5 ports: - containerPort: 80 livenessProbe: exec: command: - cat - /root/ initialDelaySeconds: 5 periodSeconds: 3 timeoutSeconds: 5 successThreshold: 1 failureThreshold: 3
配置参数同样
livenessProbe 连续探测失败会重启、重建pod,readinessProbe不会执行重启或者重建Pod操做
livenessProbe 连续检测指定次数失败后会将容器置于(Crash Loop BackOff)且不可用,readinessProbe不
会
readinessProbe 连续探测失败会从service的endpointd中删除该Pod,livenessProbe不具有此功能,可是会将容器挂起livenessProbe
livenessProbe用户控制是否重启pod,readinessProbe用于控制pod是否添加至service
建议:
两个探针都配置
imagePullPolicy: IfNotPresent
node节点没有此镜像就去指定的镜像仓库拉取,node有就使用node本地镜像。
imagePullPolicy: Always
每次重建pod都会从新拉取镜像
imagePullPolicy: Never 从不到镜像中心拉取镜像,只使用本地镜像