Kubernetes ReplicationController 的工作原理

ReplicationController 负责管理 Pod 的生命周期,并确保在任何给定时间都运行指定数量的 Pod。
42 位读者喜欢这篇文章。
Ships at sea on the web

你是否想过,是谁负责监督和管理 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 集群中实现复制非常重要,以便确定哪一种最适合您纳入您的应用程序架构考虑因素。

接下来要阅读的内容
标签
ID
Mike Calizo 是 Elastic.co 的首席客户成功经理,专注于政府客户,常驻澳大利亚堪培拉。 Mike 认为“数据就是力量”,利用这种力量可以改善组织,从而利用自己的见解通过创新来区分自己,并通过成本优化策略来提高效率。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可发布。
© . All rights reserved.