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


        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 , 那么更新过程就不会停止) 。
6、K8s中镜像的下载策略是什么?答:可通过命令“kubectl explain pod.spec.containers”来查看imagePullPolicy这行的解释 。
K8s的镜像下载策略有三种:Always、Never、IFNotPresent;
  • Always:镜像标签为latest时 , 总是从指定的仓库中获取镜像;
  • Never:禁止从仓库中下载镜像 , 也就是说只能使用本地镜像;
  • IfNotPresent:仅当本地没有对应镜像时 , 才从目标仓库中下载 。
  • 默认的镜像下载策略是:当镜像标签是latest时 , 默认策略是Always;当镜像标签是自定义时(也就是标签不是latest) , 那么默认策略是IfNotPresent 。
7、 image的状态有哪些?
  • Running:Pod所需的容器已经被成功调度到某个节点 , 且已经成功运行 ,
  • Pending:APIserver创建了pod资源对象 , 并且已经存入etcd中 , 但它尚未被调度完成或者仍然处于仓库中下载镜像的过程
  • Unknown:APIserver无法正常获取到pod对象的状态 , 通常是其无法与所在工作节点的kubelet通信所致 。
8、 pod的重启策略是什么?答:可以通过命令`kubectl explain pod.spec查看pod的重启策略 。 (restartPolicy字段)
  • Always:但凡pod对象终止就重启 , 此为默认策略 。
  • OnFailure:仅在pod对象出现错误时才重启
9、 Service这种资源对象的作用是什么?答:用来给相同的多个pod对象提供一个固定的统一访问接口 , 常用于服务发现和服务访问 。
10、版本回滚相关的命令?[root@master httpd-web
# kubectl apply -f httpd2-deploy1.yaml  --record    
#运行yaml文件 , 并记录版本信息;
[root@master httpd-web
# kubectl rollout history deployment httpd-devploy1    
#查看该deployment的历史版本
[root@master httpd-web
# kubectl rollout undo deployment httpd-devploy1 --to-revision=1      
#执行回滚操作 , 指定回滚到版本1
   
#在yaml文件的spec字段中 , 可以写以下选项(用于限制最多记录多少个历史版本):
spec:  
  revisionHistoryLimit: 5              
#这个字段通过 kubectl explain deploy.spec  命令找到revisionHistoryLimit   <integer>行获得