kubernetes ds6000cOm 之RC 18669144449 RSDeploy

上一篇文章主要讲了pod,Kubernetes Pod 是有生命周期的,它们可以被创建,也可以被销毁,然而一旦被销毁生命就永远结束。 通过 ReplicationController 能够动态地创建和销毁 Pod(例如,需要进行扩缩容,或者执行 滚动升级)。实际开发中很少会去单独创pod,我们回去创建一个ReplicationController(简称RC),副本控制器,使用它来控制pod的副本数量,RS是ReplicaSets,Deploy是Deployment,他们都是k8s的一种资源,为什么我要把他们放到一起呢?因为他们非常相似,最早是RC,后来出现了RS,最后有了Deploy,一代比一代完善,所以现在通常都是使用Deploy部署服务的。本篇文章主要以Deploy为例子进行讲解。

废话不多说,直接上demo,通过上一篇一本也了解 yaml键值对的含义,这里就不一一介绍了。

deploy.yaml
kubernetes ds6000cOm 之RC 18669144449 RSDeploy
通过kubectl create命令创建,创建deploy的时候,它创建了一个 ReplicaSet 来启动3个 nginx pod。
kubernetes ds6000cOm 之RC 18669144449 RSDeploy
然后立即执行kubectl get 将获得如下结果:
kubernetes ds6000cOm 之RC 18669144449 RSDeploy
我们可以看到Deployment已经创建了3个 replica,所有的 replica 都已经是最新的了(包含最新的pod template),可用的(根据Deployment中的.spec.minReadySeconds声明,处于已就绪状态的pod的最少个数)。执行kubectl get rs和kubectl get pods会显示Replica Set(RS)和Pod已创建。
kubernetes ds6000cOm 之RC 18669144449 RSDeploy
您可能会注意到 ReplicaSet 的名字总是<Deployment名字>-<pod template的hash值>。
kubernetes ds6000cOm 之RC 18669144449 RSDeploy

注意: 您必须在 Deployment 中的 selector 指定正确的 pod template label(在该示例中是 app = nginx),不要跟其他的 controller 的 selector 中指定的 pod template label 搞混了(包括 Deployment、Replica Set、Replication Controller 等)。Kubernetes 本身并不会阻止您任意指定 pod template label ,但是如果您真的这么做了,这些 controller 之间会相互打架,并可能导致不正确的行为。

猜你喜欢

转载自blog.51cto.com/14114139/2324887