目录
20.简述 Kubernetes 创建一个 Pod 的主要流程?
20.简述 Kubernetes 创建一个 Pod 的主要流程?
Kubernetes 中创建一个 Pod 涉及多个组件之间联动,主要流程如下:
(1)用户通过 kubectl 命名发起请求。
(2)apiserver 通过对应的 kubeconfig 进行认证,认证通过后将 yaml 中的 Pod 信息存到 etcd。
(3)Controller-Manager 通过 apiserver 的 watch 接口发现了 Pod 信息的更新,执行该资源所依赖的拓扑结构整合,整合后将对应的信息交给 apiserver,apiserver 写到 etcd,此时 Pod 已经可以被调度了。
(4)Scheduler 同样通过 apiserver 的 watch 接口更新到 Pod 可以被调度,通过算法给 Pod 分配节点,并将 pod 和对应节点绑定的信息交给 apiserver,apiserver 写到 etcd,然后将 Pod 交给 kubelet。
(5)kubelet 收到 Pod 后,调用 CNI 接口给 Pod 创建 Pod 网络,调用 CRI 接口去启动容
器,调用 CSI 进行存储卷的挂载。
(6)网络,容器,存储创建完成后 Pod 创建完成,等业务进程启动后,Pod 运行成功。
21.简述 Kubernetes 中 Pod 的重启策略?
(1)Pod 重启策略(RestartPolicy)应用于 Pod 内的所有容器,并且仅在 Pod 所处的 Node 上由 kubelet 进行判断和重启操作。当某个容器异常退出或者健康检查失败时 kubelet 将根据 RestartPolicy 的设置来进行相应操作。
(2)Pod 的重启策略包括 Always、OnFailure 和 Never,默认值为 Always。
① Always:当容器失效时,由 kubelet 自动重启该容器;
② OnFailure:当容器终止运行且退出码不为 0 时,由 kubelet 自动重启该容器;
③ Never:不论容器运行状态如何,kubelet 都不会重启该容器。
(3)同时 Pod 的重启策略与控制方式关联,当前可用于管理 Pod 的控制器包括 ReplicationController、Job、DaemonSet 及直接管理 kubelet 管理(静态 Pod)。
(4)不同控制器的重启策略限制如下:
① RC 和 DaemonSet:必须设置为 Always,需要保证该容器持续运行;
② Job:OnFailure 或 Never,确保容器执行完成后不再重启;
③ kubelet:在 Pod 失效时重启,不论将 RestartPolicy 设置为何值,也不会对 Pod 进行健康检查。