Kubernetes 实战 —— 04. 副本机制和其他控制器:部署托管的 pod (2)

存活探测器应该检查什么:简易的存活探测器可以仅检查服务器是否响应,但为了更好地进行存活检查,需要将探测器配置为请求特定的 URL 路径(如 /health ),并让应用从内部对内部运行的所有重要组件执行状态检查,以确保它们都没有终止或停止响应。 P88

确保 /health 不需要认证,否则探测会一直失败,导致容器无限重启

检查应用的内部,检查结果不能受任何外部因素的影响。例如数据库连不上时,存活探测器不应该返回失败,如果问题在数据库,那么重启容器不会解决问题。

保持探测器轻量 P89

不应消耗太多计算资源

运行不应花太长时间。默认情况下,探测器执行的频率相对较高,必须在一秒之内执行完毕

无须在探测器中实现重试:探测器的失败阈值是可配置的,并且通常在容器被终止之前探测器必须失败多次 P89

存活探测器小结:存活探测由 pod 上的 Kubelet 执行, Kubernetes 控制面板不会参与。因此节点奔溃时,控制面板会为所有随节点停止运行的 pod 创建替代者,但不会为直接创建的 pod 创建替代者,因为这些 pod 只被节点上的 Kubelet 管理。为了避免这种情况发生,我们应该使用控制器或类似机制管理 pod 。 P89

了解 Deployment P89

:本节中提到的 pod 受 Deployment 管理等说法为简化说法,实际上 pod 由受 Deployment 管理创建的 ReplicaSet 进行管理创建。

Deployment 是一种 Kubernetes 资源,可确保它的 pod 始终保持运行状态。如果 pod 因为任何原因消失(例如节点从集群中消失或由于该 pod 已从节点中逐出),则 Deployment 会注意到缺少了 pod 并创建替代者。 P89

上图的节点 1 有两个节点, Pod A 是被直接创建的,而 Pod B 由 Deployment 管理。节点异常退出后, Deployment 会创建一个新的 Pod B2 来替换减少的 Pod B ,而 Pod A 由于没有东西负责重建而完全丢失。 P89

Deployment 的操作 P90

Deployment 会持续监控正在运行的 pod 列表,并保证匹配标签选择器(03. pod: 运行于 Kubernetes 中的容器 中介绍过标签选择器及使用方式)的 pod 数目与期望相符。 P90

介绍控制器的协调流程 P91

Deployment 的工作是确保 pod 数量始终与其标签选择器匹配。 P91

了解 Deployment 的三部分 P91

标签选择器 (label selector) :用于确定 Deployment 作用域中有哪些 pod

副本个数 (replica count) :指定应运行的 pod 数量

pod 模版 (pod template) :用于创建新的 pod 副本

Deployment 的副本个数、标签选择器和 pod 模版都可以随时修改,但只有副本数目但变更会影响现有的 pod 。 P92

更改控制器的标签选择器或 pod 模版的效果 P92

更改标签选择器和 pod 模版对现有的 pod 没有影响。更改标签选择器会使现有的 pod 脱离 Deployment 的范围,因此控制器会停止关注它们。更改模版仅影响由此 Deployment 创建的新 pod 。 P92

使用 Deployment 的好处 P92

确保 pod 持续运行:在现有 pod 丢失时启动一个新 pod

集群节点发生故障时,为故障节点上运行的受 Deployment 管理的所有 pod 创建替代副本

轻松实现 pod 水平伸缩——手动和自动都可以

注意: pod 实例永远不会重新安置到另一个节点。 Deployment 会创建一个全新的 pod 实例,它与正在替换的实例无关。 P92

创建一个 Deployment P92

我们可以通过以下描述文件 kubia-deployment.yaml 创建一个 Deployment ,它确保符合标签选择器 app=kubia 的 pod 实例始终是三个。

# 遵循 v1 版本的 Kubernetes API apiVersion: apps/v1 # 资源类型为 Deployment kind: Deployment metadata: # Deployment 的名称 name: kubia spec: # 指定与标签选择器匹配的 pod 数目为 3 replicas: 3 # 指定 Deployment 操作对象 selector: # 需要匹配以下指定的标签 matchLabels: app: kubia # 启动 pod 使用的模版(可以发现模版内容与 kubia-manual.yaml 对应部分一致) template: metadata: # 指定标签为 app=kubia labels: app: kubia spec: containers: # 容器的名称 - name: kubia # 创建容器所使用的镜像 image: idealism/kubia # 应用监听的端口 ports: - containerPort: 8080 protocol: TCP

模版中的 pod 标签必须和 Deployment 的标签选择器匹配, API 服务器会校验 Deployment 的定义,不会接受错误配置。 P93

若不指定选择器,它会自动根据 pod 模版中的标签自动配置,这样可以让描述文件更简洁。 P93

使用 Deployment P94

kubectl create -f kubia-deployment.yaml 会创建一个名为 kubia 的 Deployment ,它会根据 pod 模版启动三个新 pod 。 P94

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwdjsy.html