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


        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:  
        port: 8080  
      initialDelaySeconds: 15  
      periodSeconds: 20  

在上述的yaml配置文件中 , 两类探针都使用了 , 在容器启动5秒后 , kubelet将发送第一个readinessProbe探针 , 这将连接容器的8080端口 , 如果探测成功 , 则该pod为健康 , 十秒后 , kubelet将进行第二次连接 。
除了readinessProbe探针外 , 在容器启动15秒后 , kubelet将发送第一个livenessProbe探针 , 仍然尝试连接容器的8080端口 , 如果连接失败 , 则重启容器 。
探针探测的结果无外乎以下三者之一:

  • Success:Container通过了检查;
  • Failure:Container没有通过检查;
  • Unknown:没有执行检查 , 因此不采取任何措施(通常是我们没有定义探针检测 , 默认为成功) 。
若觉得上面还不够透彻 , 可以移步其官网文档:

https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
5、 如何控制滚动更新过程?答:可以通过下面的命令查看到更新时可以控制的参数:
[root@master yaml
# kubectl explain deploy.spec.strategy.rollingUpdate

maxSurge: 此参数控制滚动更新过程 , 副本总数超过预期pod数量的上限 。 可以是百分比 , 也可以是具体的值 。 默认为1 。
(上述参数的作用就是在更新过程中 , 值若为3 , 那么不管三七二一 , 先运行三个pod , 用于替换旧的pod , 以此类推)
maxUnavailable: 此参数控制滚动更新过程中 , 不可用的Pod的数量 。
(这个值和上面的值没有任何关系 , 举个例子:我有十个pod , 但是在更新的过程中 , 我允许这十个pod中最多有三个不可用 , 那么就将这个参数的值设置为3 , 在更新的过程中 , 只要不可用的pod数量小于或等于3 , 那么更新过程就不会停止) 。