k8s健康检测

8. 健康检测

健康 检测机制liveness和readiness

好处,避免0停机部署、避免无效镜像、更加安全回滚

restartPolicy规则,默认always,Onfailure

1.livenness使用.(程序异常,但是并没有退出)

分析判断容器健康条件,如果失败就重启

案例

cat headlth.yml

apiVersion: v1

kind: Pod

metadata:

labels:

test: liveness

name: liveness

spec:

restartPolicy: OnFailure                      #重启规则

containers:

- name: liveness

image: docker.io/nginx:latest

args:

- /bin/sh

- -c

- touch /tmp/healthy;  sleep 100  ;rm -rf /tmp/healthy ; sleep 1000                   #判断依据文件是否存在,可根据条件自己设计

livenessProbe:                                              #定义如何执行探测

exec:

command:

- cat

- /tmp/healthy

initialDelaySeconds: 50                                   #指定容器启动多久后执行,根据容器启动时间相应调整

periodSeconds: 20                                          #探测间隔

2.readiness

readiness何时加入到service实现负载均衡,(升级时用的多)

cat readiness.yml

apiVersion: v1

kind: Pod

metadata:

labels:

test: readiness

name: readiness

spec:

restartPolicy: OnFailure                      #重启规则

containers:

- name: readiness

image: docker.io/nginx:latest

args:

- /bin/sh

- -c

- touch /tmp/healthy;  sleep 100  ;rm -rf /tmp/healthy ; sleep 1000                   #判断依据文件是否存在,可根据条件自己设计

readinessProbe:                                              #定义如何执行探测

exec:

command:

- cat

- /tmp/healthy

initialDelaySeconds: 50                                   #指定容器启动多久后执行,根据容器启动时间相应调整

periodSeconds: 20                                          #探测间隔

readiness检测如下图

先检测为不可用,条件成功之后为可用,当条件失败之后变为不可用,和liveness相反

两种机制完全一样,语法和参数也一样,唯一不同是一个重启容器,一个设置为不可用

3.健康检测在应用服务(service)中的应用

对于多副本,新副本会被添加到service提供负载均衡,从容器启动到提供服务需要一段时间,考虑使用readiness

cat nginx.yml

apiVersion: apps/v1beta1

kind: Deployment

metadata:

name: web

spec:

replicas: 4

template:

metadata:

labels:

run: web

spec:

containers:

- name: web

image: nginx

ports:

- containerPort: 80

readinessProbe:

httpGet:                                                                         #c此处不同于exec,的另一种探测方法httpGet

scheme: HTTP                                                                   #指定协议,支持http与https

path: /                                                                 #指定访问路径

port: 80                                                                       #访问端口

initialDelaySeconds: 10

periodSeconds: 5

---

apiVersion: v1

kind: Service

metadata:

name: web-svc

spec:

selector:

run: web

ports:

-  protocol: TCP

port: 8080

targetPort: 80

过程为,pod只有变为可用状态,才会加入service提供服务,初始时,状态不可用。下图的步骤2 ,当ready为可用状态时,加入service,提供服务。该判断为readiness

4.健康检测在滚动升级中的应用

案例

cat update.yml

apiVersion: apps/v1beta1

kind: Deployment

metadata:

name: app

spec:

replicas: 10

template:

metadata:

labels:

run: app

spec:

containers:

- name: web

image: nginx

args:

- /bin/sh

- -c

- sleep 10; touch /tmp/healthy; sleep 3000

readinessProbe:

exec:

command:

- cat

- /tmp/healthy

initialDelaySeconds: 10

periodSeconds: 5

kubectl apply -f update.yml  --record

升级操作

cat update2.yml

apiVersion: apps/v1beta1

kind: Deployment

metadata:

name: app

spec:

replicas: 10

template:

metadata:

labels:

run: app

spec:

containers:

- name: web

image: nginx

args:

- /bin/sh

- -c

- sleep 1000

readinessProbe:

exec:

command:

- cat

- /tmp/healthy

initialDelaySeconds: 10

periodSeconds: 5

kubectl apply -f update2.yml  --record

kubectl get deployment app

回滚

kubectl  rollout undo deployment app --to-revision=1

对于创建的新副本为5个,就副本销毁2个,此处有两个参数限制的

5.maxSurge和maxUnavailable

maxSurge控制更新过程中超过DESIRED(期望)的数字,可以为整数或百分数(向上去整),默认值25%  计算公式roundUp(10 + 10*25%)=13

maxUnavailable此参数控制滚动更新过程中,不可用的副本想占DESIRED的最大比例。可以为整数或百分数(向下去整),默认值25%

公式 10 - roundDown(10 * 25%)=8

设置上述两个值

cat update2.yml

apiVersion: apps/v1beta1

kind: Deployment

metadata:

name: app

spec:

strategy:

rollingUpdate:

maxSurge: 35%

maxUnavailable: 35%

replicas: 10

template:

metadata:

labels:

run: app

spec:

containers:

- name: web

image: nginx

args:

- /bin/sh

- -c

- sleep 1000

readinessProbe:

exec:

command:

- cat

- /tmp/healthy

initialDelaySeconds: 10

periodSeconds: 5

原文地址:http://blog.51cto.com/13272050/2156055

时间: 2024-07-30 19:40:44

k8s健康检测的相关文章

集群及系统扩展之三:持久连接及健康检测

一.FWM FWM: firewall mark iptables/netfilter: filter, nat, mangle, raw mangle: 防火墙标记 前提:在ipvs生效之前的netfilter的某hook function上定义iptables规则,实现给报文打上防火墙标记: 定义方法: (1) 打标:在Director上mangle表的PREROUTING链上实现 # iptables -t mangle -A PREROUTING -d $vip -p $protocol

lvs的健康检测脚本

lvs的健康检测脚本 写得不怎么样,基本实现吧,因为基本不会用到,有时间再改进了,嘻嘻 1 #!/bin/bash 2 3 rs=('192.168.61.130' '192.168.61.132') 4 vip="192.168.61.100" 5 dip="192.168.61.131" 6 checkcount=1 7 checkloop=4 8 i=1 9 10 11 while [ $i -lt 2 ];do 12     #sorry server检测,

nginx下后端realserver健康检测模块ngx_http_upstream_check_module

想用Nginx或者Tengine替代LVS,即能做七层的负载均衡,又能做监控状态检测,一旦发现后面的realserver挂了就自动剔除,恢复后自动加入服务池里,可以用Tengine的ngx_http_upstream_check_module模块.本文主要介绍在工作中,搭建遇到问题及处理方法,便以后查询. 首先,我们大多数站点都是nginx+tomcat这个比较常见模式,其实nginx本身也有自己的健康检测模块,本人觉得不好用,故使用ngx_http_upstream_check_module.

部署AlwaysOn第三步:集群资源组的健康检测和故障转移

资源组是由一个或多个资源组成的组,WSFC的故障转移是以资源组为单位的,资源组中的资源是相互依赖的.一个资源所依赖的其他资源必须和该资源处于同一个资源组,跨资源组的依赖关系是不存在的.在任何时刻,每个资源组都仅属于集群中的一个结点,该结点就是资源组的活跃结点(Active Node),由活跃结点为应用程序提供服务.AlwaysOn建立在WSFC的健康检测和故障转移的特性之上,和故障转移集群有了不可分割的关系,因此,从底层的集群资源来理解可用性组,知其然知,其所以然,有助于更好地维护AlwaysO

AD健康检测

1.dcdiag /v >>c:\dcdiag-v.txt将AD健康检测信息导出到C盘根目录下dcdiag-v的记事本中. 原文地址:http://blog.51cto.com/jschinamobile/2089789

LVS健康检测脚本分享

1.真实服务器健康状态检测 我们可以通过Shell脚本,实现对LVS后端的真实服务器开放服务的健康状态检测功能.当真实服务器服务出现问题,则自动将其从集群服务中移除,当真实服务器服务恢复,则自动将其加入到负载均衡集群服务中. 1.1 基于端口的健康检测 脚本思路: 通过扫描后端服务器的端口来判断真实服务器是否健康! 若端口开放则表示真实服务器健康,则将其加入到LVS集群中.若已存在集群中则不做任何操作. 若端口未开发则表示真实服务器故障,则将其从LVS集群中移除.若不存在则不做任何操作. She

nginx实现反向代理+健康检测

说明 tengine官方说明文档 nginx 对于后端RS的检查机制不完善所有用Tengine进行反向代理12 一.反向代理 1.定义后端real-server(在http段) upstream static_server { server 192.168.17.175:80 weight=5; server 192.168.17.176:80 weight=3; } upstream basic_server { server 192.168.17.175:80 weight=2; serve

k8s健康检查(9)

一.默认的健康检查 强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性.自愈的默认实现方式是自动重启发生故障的容器.除此之外,用户还可以利用 Liveness 和 Readiness 探测机制设置更精细的健康检查,进而实现如下需求: (1)零停机部署. (2)避免部署无效的镜像. (3)更加安全的滚动升级. 每个容器启动时都会执行一个进程,此进程由 Dockerfile 的 CMD 或 ENTRYPOINT 指定.如果进程退出时返回码非零,则认为容器发生故障,Kubernet

k8s之Pod健康检测

对于Pod的健康状态检测,kubernetes提供了两类探针(Probes)来执行对Pod的健康状态检测:LivenessProbe和ReadinessProb. LivenessProbe:用于判断容器是否存活,即running状态,如果LivenessProbe探针探测到容器不健康,则kubelet将kill掉容器,并根据容器的重启策略是否重启,如果一个容器不包含LivenessProbe探针,则Kubelet认为容器的LivenessProbe探针的返回值永远成功.ReadinessPro