| 对线上业务来说,保证服务的正常稳定是重中之重,对故障服务的及时处理避免影响业务以及快速恢复一直是开发运维的难点。Kubernetes提供了健康检查服务,对于检测到故障服务会被及时自动下线,以及通过重启服务的方式使服务自动恢复。 |
| 怎样保证pod中的容器正常启动? |
| 怎样保证pod中容器能够正常对外提供服务? |
| 只有容器启动了并且能够正常对外提供服务了,才能放到负载均衡上供给用户访问 |
| 用于判断容器是否存活,即Pod是否为running状态,如果LivenessProbe探针探测到容器不健康,则kubelet将kill掉容器,并根据容器的重启策略判断按照那种方式重启,如果一个容器不包含LivenessProbe探针,则Kubelet认为容器的LivenessProbe探针的返回值永远成功。存活性探测支持的方法有三种:ExecAction,TCPSocketAction,HTTPGetAction。 |
| |
| pod中所有容器的status=Running时,Pod的状态才会是Running状态。 |
| |
| 当存活性检查检测失败的时候,kebulet会删除容器,重新启动一个新的容器。继续检查。 |
通过执行一条命令,探测服务是否可以正常对外提供服务。
| kind: Service |
| apiVersion: v1 |
| metadata: |
| name: name-mysql |
| spec: |
| ports: |
| - name: http |
| port: 80 |
| targetPort: 80 |
| selector: |
| app: mysql |
| --- |
| apiVersion: apps/v1 |
| kind: Deployment |
| metadata: |
| name: name-mysql |
| spec: |
| selector: |
| matchLabels: |
| app: mysql |
| template: |
| metadata: |
| labels: |
| app: mysql |
| spec: |
| containers: |
| - name: mysql |
| image: alvinos/django:v1 |
| livenessProbe: |
| exec: |
| command: |
| - cat |
| - /root/test/manage.py |
通过访问某个URL的方式探测当前POD是否可以正常对外提供服务。
| apiVersion: apps/v1 |
| kind: Deployment |
| metadata: |
| name: name-mysql |
| spec: |
| selector: |
| matchLabels: |
| app: mysql |
| template: |
| metadata: |
| labels: |
| app: mysql |
| spec: |
| containers: |
| - name: mysql |
| image: alvinos/django:v1 |
| livenessProbe: |
| httpGet: |
| port: 80 |
| path: /index |
通过ping某个端口的方式,探测服务是否可以正常对外提供服务。
| --- |
| kind: Service |
| apiVersion: v1 |
| metadata: |
| name: name-mysql |
| spec: |
| ports: |
| - name: http |
| port: 80 |
| targetPort: 80 |
| selector: |
| app: mysql |
| --- |
| apiVersion: apps/v1 |
| kind: Deployment |
| metadata: |
| name: name-mysql |
| spec: |
| selector: |
| matchLabels: |
| app: mysql |
| template: |
| metadata: |
| labels: |
| app: mysql |
| spec: |
| containers: |
| - name: mysql |
| image: alvinos/django:v1 |
| livenessProbe: |
| tcpSocket: |
| port: 80 |
| apiVersion: apps/v1 |
| kind: Deployment |
| metadata: |
| name: name-mysql |
| spec: |
| selector: |
| matchLabels: |
| app: mysql |
| template: |
| metadata: |
| labels: |
| app: mysql |
| spec: |
| containers: |
| - name: mysql |
| image: alvinos/django:v1 |
| livenessProbe: |
| tcpSocket: |
| port: 80 |
| |
| |
| |
| delay=10s : 探测延时时间initialDelaySeconds |
| timeout=1s :探测的超时时间 |
| period=10s :探测的频率 |
| success=1 :成功多少次才算成功 |
| failure=1 :失败多少次才算失败 |
| |
| failureThreshold:最少连续几次探测失败的次数,满足该次数则认为fail |
| initialDelaySeconds:容器启动之后开始进行存活性探测的秒数。不填立即进行 |
| periodSeconds:执行探测的频率(秒)。默认为10秒。最小值为1。 |
| successThreshold:探测失败后,最少连续探测成功多少次才被认定为成功,满足该次数则认为success。(但是如果是liveness则必须是 1。最小值是 1。) |
| timeoutSeconds:每次执行探测的超时时间,默认1秒,最小1秒。 |
| 用于判断容器是否正常提供服务,即容器的Ready是否为True,是否可以接收请求,如果ReadinessProbe探测失败,则容器的Ready将设置为False,控制器将此Pod的Endpoint从对应的service的Endpoint列表中移除,从此不再将任何请求调度此Pod上,直到下次探测成功。(剔除此pod,不参与接收请求不会将流量转发给此Pod) |
| 探测失败移出service的Endpoint的健康列表 |
通过访问某个URL的方式探测当前POD是否可以正常对外提供服务。
| kind: Pod |
| apiVersion: v1 |
| metadata: |
| name: readinessprobe-nginx |
| namespace: default |
| labels: |
| provider: aliyun |
| business: pms |
| environmental: dev |
| spec: |
| containers: |
| - name: readinessprobe-nginx |
| image: nginx |
| imagePullPolicy: Always |
| ports: |
| - containerPort: 80 |
| name: http |
| protocol: TCP |
| - containerPort: 443 |
| name: https |
| protocol: TCP |
| readinessProbe: |
| httpGet: |
| port: 80 |
| path: /demo.html |