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

若通过 kubectl edit replicaset kubia-bc974964b 直接修改 Deployment 拥有的 ReplicaSet 实例。这样效果和直接修改 Deployment 类似,也会创建一个新的 ReplicaSet ,并使原有的 ReplocaSet 的副本数变为 0 。这样修改不会将新的 pod 模版同步回原有的 Deployment ,但删除 Deployment 时仍然会删除所有相关的 ReplocaSet 及其管理的 pod 。

水平缩放 pod P101

kubectl scale deployment kubia --replicas=10: 可以修改 Deployment 需要保持的 pod 实例的数量(02. 开始使用 Kubernetes 和 Docker中介绍过使用该命令进行伸缩)。 P101

也可以通过 kubectl edit deployment kubia 修改 spec.replicas 的数量,从而更改需要保持的 pod 实例的数量。 P102

删除一个 Deployment

当通过 kubectl delete deployment kubia 删除 Deployment 时,对应的 ReplicaSet 和 pod 都会被删除。

而通过 kubectl delete replicaset kubia-bc974964b 删除 ReplicaSet 时,对应的 pod 会被删除,但由于 Deployment 会重新创建一个 Replicaset ,所以又会自动创建对应数量的 pod 。

图 4.7 使用 --cascade=false 删除 ReplicaSet 使 pod 不受管理.png

当通过 kubectl delete deployment kubia --cascade=false 删除 Deployment 时,会保留对应的 ReplicaSet 和 pod ,这样ReplicaSet 不再受管理,但是 pod 仍然受 ReplicaSet 管理。当重新创建符合要求的 Deployment 时, ReplicaSet 又会受到管理。

同样地,通过 kubectl delete replicaset kubia-bc974964b --cascade=false 删除 ReplicaSet 时,也会保留对应的 pod 。这样 pod 不再受管理。当创建符合要求的 ReplicaSet 时,这些 pod 又会受到管理。

使用 ReplicaSet P104

:书中原本上一节讲得是 ReplicationController ,但我直接使用 Deployment 进行实践,并依照现在的结果进行了修改。目前推荐使用 Deployment ,并且 ReplicaSet 是受 Deployment 管理的,所以不再详细实践本节内容。

使用更富有表达力的标签选择器 P106

基于 kubia-deployment.yaml 创建一个新的描述文件 kubia-deployment-matchexpressions.yaml ,并将 spec.selector.matchLabels 属性替换为 spec.selector.matchExpressions : P107

... spec: ... # 指定 Deployment 操作对象 selector: # 需要匹配满足以下要求的标签 matchExpressions: # 标签名为 app 的值在 ["kubia"] 中 - app: app operator: In values: - kubia ...

matchExpressions 运行给选择器添加额外的表达式。每个表达式都必须包含一个 key 、一个 operator ,并且可能还有一个 values 的列表(取决于 operator )。共有四个有效的运算符: P107

In: 标签的值必须与其中一个指定的 values 匹配

NotIn: 标签的值与任何指定的 values 都不匹配

Exists: pod 必须包含一个指定名称的标签(不关心值)。使用此运算符时,不应指定 values 字段

DoesNotExist: pod 不得包含指定名称的标签。使用此运算符时,不应指定 values 字段

如果指定了多个表达式,则所有这些表达式都必须为 true 才能使选择器与 pod 匹配。如果同时指定 matchLabels 和 matchExpressions ,则所有标签都必须匹配,且所有表达式都必须为 true 才能使选择器与 pod 匹配。 P107

使用 DaemonSet 在每个节点上运行一个 pod P107

DaemonSet 可以让 pod 在集群中的每个节点上运行,并且每个节点正好有一个运行的 pod 实例。 P107

图 4.8 DaemonSet 在每个节点上只运行一个 pod 副本.png

使用 DaemonSet 在每个节点上运行一个 pod P108

DaemonSet 没有副本数的概念,它确保创建足够的 pod ,并在每一个节点上部署一个 pod 。如果节点下线, DaemonSet 不会重新创建 pod ;但新节点添加到集群中,它会立刻部署一个新的 pod 实例到该节点。 P108

使用 DaemonSet 只在特定的节点上运行 pod P109

DaemonSet 将 pod 部署到集群的所有节点上,除非通过 pod 模版中的 spec.nodeSelector 属性指定这些 pod 只在部分节点上运行。 P109

注意:节点可以被设置为不可调度,防止 pod 被部署到节点上。但 DaemonSet 会将 pod 部署到这些节点上,因为无法调度但属性只会被调度器使用,而 DaemonSet 的目的是运行系统服务,即使在不可调度的节点上,系统服务通常也需要运行。 P109

用一个例子来解释 DaemonSet P109

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

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