两种健康检查机制

Liveness探测:用户自定义判断容器是否健康。如果判断失败,则重启容器,使用restart策略。
Readiness探测:根据Deployment控制器的Rollingupdate作为判断条件

三种检查方式:
httpGet: 发送HTTP请求,返回200-400范围状态码表示成功
exec: 执行Shell命令返回状态码为0表示成功
tcpSocket: 发起TCP Socket建立成功
使用exec命令方式做liveness检查
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness # 测试活着
  name: liveness
spec:
  restartPolicy: OnFailure # 使用 restart 判断容器是否活着
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30s; rm -rf /tmp/healthy; sleep 300000000 # 创建一个文件30秒后删除
    livenessProbe: # 创建一个健康检查
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 10 # 10秒后开始检查
      periodSeconds: 5 # 每隔5秒检查一次

在这里插入图片描述

使用httpGet命令方式做liveness检查
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      restartPolicy: Always
      containers:
      - image: nginx
        imagePullPolicy: IfNotPresent
        name: web
        ports:
        - containerPort: 80
        livenessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 5
          failureThreshold: 2
          periodSeconds: 5
        readinessProbe:
          httpGet:
            path: /index.html
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5
        startupProbe:  # startupProbe
	      httpGet:
	        path: /healthz
	        port: liveness-port
	      failureThreshold: 30
	      periodSeconds: 10  # 容器启动30*10=300s内liveness和readiness探针不会执行,300s后startup探针还没成
使用exec命令方式做 readiness检查,结果是直接将容器杀死,置为不可用
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: readiness # 测试活着
  name: readiness
spec:
  restartPolicy: OnFailure # 使用 restart 判断容器是否活着
  containers:
  - name: readiness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30s; rm -rf /tmp/healthy; sleep 300000000 # 创建一个文件30秒后删除
    readinessProbe: # 创建一个健康检查
      exec:
        command:
        - cat
        - /tmp/healthy
      initialDelaySeconds: 10 # 10秒后开始检查
      periodSeconds: 5 # 每隔5秒检查一次

在这里插入图片描述

滚动更新Rollingupdate对判断上的应用
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
spec:
  strategy:  #滚动更新策略
    rollingUpdate:
      maxSurge: 35%  # maxSurge:和期望ready的副本数比,超过期望副本数最大比例(或最大值),这个值调的越大,副本更新速度越快
      maxUnavailable: 35% #maxUnavailable:和期望ready的副本数比,不可用副本数最大比例(或最大值),这个值越小,越能保证服务稳定,更新越平滑
  selector: 
    matchLabels:
      run: app
  replicas: 10
  template:
    metadata:
      labels:
        run: app
    spec:
      containers:
      - name: app
        image: busybox
        args:
        - /bin/sh
        - -c
        - sleep 10; touch /tmp/healthy; sleep 3000000
        readinessProbe:
          exec:
            command:
            - cat 
            - /tmp/healthy
          initialDelaySeconds: 10
          periodSeconds: 5

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐