删除|23 个必知必会的 Kubernetes 高频面试题( 二 )

  • periodSeconds:检查间隔 , 多久执行probe检查 , 默认为10s;
  • timeoutSeconds:检查超时时长 , 探测应用timeout后为失败;
  • successThreshold:成功探测阈值 , 表示探测多少次为健康正常 , 默认探测1次 。
  • 上面两种探针都支持以下三种探测方法:
    1)Exec: 通过执行命令的方式来检查服务是否正常 , 比如使用cat命令查看pod中的某个重要配置文件是否存在 , 若存在 , 则表示pod健康 。 反之异常 。
    Exec探测方式的yaml文件语法如下:
    spec:  
      containers:  
      - name: liveness  
        image: k8s.gcr.io/busybox  
        args:  
        - /bin/sh  
        - -c  
        - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600  
        livenessProbe:         #选择livenessProbe的探测机制
          exec:                      #执行以下命令
            command:  
            - cat  
            - /tmp/healthy  
          initialDelaySeconds: 5          #在容器运行五秒后开始探测
          periodSeconds: 5               #每次探测的时间间隔为5秒

    在上面的配置文件中 , 探测机制为在容器运行5秒后 , 每隔五秒探测一次 , 如果cat命令返回的值为“0” , 则表示健康 , 如果为非0 , 则表示异常 。
    2)Httpget: 通过发送http/htps请求检查服务是否正常 , 返回的状态码为200-399则表示容器健康(注http get类似于命令curl -I) 。
    Httpget探测方式的yaml文件语法如下:
    spec:  
      containers:  
      - name: liveness  
        image: k8s.gcr.io/liveness  
        livenessProbe:              #采用livenessProbe机制探测
          httpGet:                  #采用httpget的方式
        scheme:HTTP         #指定协议 , 也支持https
            path: /healthz          #检测是否可以访问到网页根目录下的healthz网页文件
            port: 8080              #监听端口是8080
          initialDelaySeconds: 3     #容器运行3秒后开始探测
          periodSeconds: 3                #探测频率为3秒

    上述配置文件中 , 探测方式为项容器发送HTTP GET请求 , 请求的是8080端口下的healthz文件 , 返回任何大于或等于200且小于400的状态码表示成功 。 任何其他代码表示异常 。
    3)tcpSocket: 通过容器的IP和Port执行TCP检查 , 如果能够建立TCP连接 , 则表明容器健康 , 这种方式与HTTPget的探测机制有些类似 , tcpsocket健康检查适用于TCP业务 。
    tcpSocket探测方式的yaml文件语法如下:
    spec:  
      containers:  
      - name: goproxy  
        image: k8s.gcr.io/goproxy:0.1  
        ports:  
    - containerPort: 8080  
    #这里两种探测机制都用上了 , 都是为了和容器的8080端口建立TCP连接
        readinessProbe:  
          tcpSocket:  
            port: 8080  
          initialDelaySeconds: 5  
          periodSeconds: 10  
        livenessProbe:  
          tcpSocket: