你是否想过,是谁负责监督和管理 Kubernetes 集群中运行的 Pod 的精确数量? Kubernetes 可以通过多种方式做到这一点,但一种常见的方法是使用 ReplicationController (rc)。 ReplicationController 负责管理 Pod 的生命周期,并确保在任何给定时间都运行指定数量的 Pod。 另一方面,它不负责高级集群功能,例如执行自动缩放、就绪性和活跃性探测以及其他高级复制功能。 Kubernetes 集群中的其他组件更好地执行这些功能。
简而言之,ReplicationController 的职责有限,通常用于不需要复杂逻辑来实现某些特定要求的实现(例如,确保所需数量的 Pod 始终与指定数量匹配)。 如果 Pod 数量多于所需数量,则 ReplicationController 会删除多余的 Pod,并确保即使在节点故障或 Pod 终止的情况下,也存在相同数量的 Pod
简单的事情不需要复杂的解决方案,对我来说,这是一个关于如何使用 ReplicationController 的完美比喻。
如何创建 ReplicationController
与大多数 Kubernetes 资源一样,您可以使用 YAML 或 JSON 格式创建 ReplicationController,然后将其发布到 Kubernetes API 端点。
$ kubectl create -f rcexample.yaml
replicationcontroller/rcexample created
现在,我将更深入地研究 rcexample.yaml
的样子.
apiVersion: v1
kind: ReplicationController → rc descriptor
metadata:
name: rcexample → Name of the replication controller
spec:
replicas: 3 → Desired number of pods
selector: → The pod selector for this rc
app: nginx
template: → The template for creating a new pod
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
为了进一步解释,当执行此文件以创建名为 rcexample
的 ReplicationController 时,可以确保始终运行三个名为 nginx
的 Pod 实例。 如果一个或所有 app=nginx
的 Pod 未运行,则将基于定义的 Pod 模板创建新的 Pod。
ReplicationController 有三个部分
- 副本数: 3
- Pod 模板: app=nginx
- Pod 选择器: app=nginx
请注意,Pod 模板与 Pod 选择器匹配,以防止 ReplicationController 无限期地创建 Pod。 如果您创建一个 Pod 选择器与模板不匹配的 ReplicationController,Kubernetes API 服务器会给出错误。
要验证 ReplicationController rcexample
是否已创建
$ kubectl get po
NAME READY STATUS RESTARTS AGE
rcexample-53thy 0/1 Running 0 10s
rcexample-k0xz6 0/1 Running 0 10s
rcexample-q3vkg 0/1 Running 0 10s
要删除 ReplicationController
$ kubectl delete rc rcexample
replicationcontroller "rcexample" deleted
请注意,您可以使用 滚动更新 策略,通过逐个替换 Pod 来更新 ReplicationController 中的服务。
复制容器的其他方法
在 Kubernetes 部署中,您可以通过多种方式实现容器的复制。 Kubernetes 成为容器平台的主要选择之一的主要原因是它具有复制容器以实现可靠性、负载平衡和扩展的本机能力。
我在上面展示了如何轻松创建一个 ReplicationController,以确保在任何给定时间都有一定数量的 Pod 可用。 您可以通过更新副本数来手动缩放 Pod。
实现复制的另一种可能方法是使用 ReplicaSet。
(kind: ReplicaSet)
ReplicaSet (rs) 的功能几乎与 ReplicationController 相同。 主要区别在于 ReplicaSet 不允许滚动更新策略。
实现复制的另一种方法是使用 Deployments。
(kind: Deployment)
Deployments 是一种更高级的容器复制方法。 在功能方面,Deployments 提供相同的功能,但如果需要,可以推出和回滚更改。 这种功能是可能的,因为 Deployments 具有 StrategyType 规范,可以替换旧的 Pod 为新的 Pod。 您可以定义两种类型的部署策略——Recreate 和 RollingUpdate。 您可以按如下所示指定部署策略
StrategyType: RollingUpdate
结论
容器复制是 Kubernetes 被大多数企业采用容器的主要原因之一。 复制允许您获得大多数关键应用程序作为生产的最低要求所需的可靠性和可伸缩性。
了解使用哪种方法在 Kubernetes 集群中实现复制非常重要,以便确定哪一种最适合您纳入您的应用程序架构考虑因素。
评论已关闭。