go语言面试真题及解析 golang语言面试( 三 )


象分配到不同的 Namespace 中,形成逻辑上的不同项目、小组或用户组 , 便于
不同的 Namespace 在共享使用整个集群的资源的同时还能被分别管理 。
简述 Kubernetes RC 的机制?
答:Replication Controller 用来管理 Pod 的副本,保证集群中存在指定数量的 Pod
副本 。当定义了 RC 并提交至 Kubernetes 集群中之后 , Master 节点上的 Controller
Manager 组件获悉 , 并同时巡检系统中当前存活的目标 Pod,并确保目标 Pod 实例的数量刚好等于此 RC 的期望值 , 若存在过多的 Pod 副本在运行,系统会停止一些
Pod , 反之则自动创建一些 Pod 。
简述 Kubernetes 中 Pod 的重启策略?
答:Pod 重启策略(RestartPolicy)应用于 Pod 内的所有容器,并且仅在 Pod 所处
的 Node 上由 kubelet 进行判断和重启操作 。当某个容器异常退出或者 健康 检查失败
时 , kubelet 将根据 RestartPolicy 的设置来进行相应操作 。
Pod 的重启策略包括 Always、OnFailure 和 Never,默认值为 Always 。
l Always:当容器失效时,由 kubelet 自动重启该容器;
l OnFailure:当容器终止运行且退出码不为 0 时,由 kubelet 自动重启该容器;
l Never:不论容器运行状态如何,kubelet 都不会重启该容器 。
同时 Pod 的重启策略与控制方式关联 , 当前可用于管理 Pod 的控制器包括
ReplicationController、Job、DaemonSet 及直接管理 kubelet 管理(静态 Pod) 。
不同控制器的重启策略限制如下:
l RC 和 DaemonSet:必须设置为 Always,需要保证该容器持续运行;
l Job:OnFailure 或 Never , 确保容器执行完成后不再重启;
l kubelet:在 Pod 失效时重启,不论将 RestartPolicy 设置为何值 , 也不会对 Pod
进行 健康 检查 。
简述 Kubernetes Pod 的 LivenessProbe 探针的常见方式?
答:kubelet 定期执行 LivenessProbe 探针来诊断容器的 健康 状态,通常有以下三种
方式:
l ExecAction:在容器内执行一个命令,若返回码为 0 , 则表明容器 健康。
l TCPSocketAction:通过容器的 IP 地址和端口号执行 TCP 检查 , 若能建立 TCP
连接,则表明容器 健康。
l HTTPGetAction:通过容器的 IP 地址、端口号及路径调用 HTTP Get 方法 , 若响
应的状态码大于等于 200 且小于 400 , 则表明容器 健康。
.简述 Kubernetes Pod 的常见调度方式?
答:Kubernetes 中,Pod 通常是容器的载体,主要有如下常见调度方式:
l Deployment 或 RC:该调度策略主要功能就是自动部署一个容器应用的多份副本,
以及持续监控副本的数量,在集群内始终维持用户指定的副本数量 。
l NodeSelector:定向调度,当需要手动指定将 Pod 调度到特定 Node 上,可以
通过 Node 的标签(Label)和 Pod 的 nodeSelector 属性相匹配 。
l NodeAffinity 亲和性调度:亲和性调度机制极大的扩展了 Pod 的调度能力,目前
有两种节点亲和力表达:
l requiredDuringSchedulingIgnoredDuringExecution:硬规则,必须满足指定
的规则 , 调度器才可以调度 Pod 至 Node 上(类似 nodeSelector , 语法不同) 。
l preferredDuringSchedulingIgnoredDuringExecution:软规则,优先调度至满
足的 Node 的节点,但不强求 , 多个优先级规则还可以设置权重值 。
l Taints 和 Tolerations(污点和容忍):
l Taint:使 Node 拒绝特定 Pod 运行;
l Toleration:为 Pod 的属性,表示 Pod 能容忍(运行)标注了 Taint 的 Node 。

推荐阅读