若通过 kubectl edit replicaset kubia-bc974964b 直接修改 Deployment 拥有的 ReplicaSet 实例。这样效果和直接修改 Deployment 类似,也会创建一个新的 ReplicaSet ,并使原有的 ReplocaSet 的副本数变为 0 。这样修改不会将新的 pod 模版同步回原有的 Deployment ,但删除 Deployment 时仍然会删除所有相关的 ReplocaSet 及其管理的 pod 。
水平缩放 pod P101kubectl 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 。
当通过 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 P107DaemonSet 可以让 pod 在集群中的每个节点上运行,并且每个节点正好有一个运行的 pod 实例。 P107
使用 DaemonSet 在每个节点上运行一个 pod P108DaemonSet 没有副本数的概念,它确保创建足够的 pod ,并在每一个节点上部署一个 pod 。如果节点下线, DaemonSet 不会重新创建 pod ;但新节点添加到集群中,它会立刻部署一个新的 pod 实例到该节点。 P108
使用 DaemonSet 只在特定的节点上运行 pod P109DaemonSet 将 pod 部署到集群的所有节点上,除非通过 pod 模版中的 spec.nodeSelector 属性指定这些 pod 只在部分节点上运行。 P109
注意:节点可以被设置为不可调度,防止 pod 被部署到节点上。但 DaemonSet 会将 pod 部署到这些节点上,因为无法调度但属性只会被调度器使用,而 DaemonSet 的目的是运行系统服务,即使在不可调度的节点上,系统服务通常也需要运行。 P109
用一个例子来解释 DaemonSet P109