总结
下面是一个关于 Kubernetes 中 Deployment、StatefulSet 和 DaemonSet 的更新策略的比较表格:
特性 / 更新策略 | Deployment | StatefulSet | DaemonSet |
升级策略 | 滚动升级(Rolling Update) | 有序升级(Ordered Update) | 全局升级(Global Update) |
更新时的可用性 | 部分中断,Pod 逐步替换 | 部分中断,按顺序更新 Stateful Pod | 无中断,每个节点一个 Pod |
稳定的网络标识 | 不保证,Pod 可能会有不同的 IP | 保证,每个 Pod 都有稳定的标识 | 不保证,每个节点一个 Pod |
持久化存储的支持 | 通常与 PVC 配合使用 | 有 PVC 支持,每个 Pod 有唯一的 PV | 通常与 PVC 配合使用 |
更新时的顺序 | 并行更新多个 Pod,按副本数比例 | 按顺序更新,一个一个更新 | 并行更新,每个节点一个 Pod |
是否支持无状态 Pod | 是 | 是 | 是 |
这张表格总结了 Deployment、StatefulSet 和 DaemonSet 在更新策略方面的一些关键差异。在选择适合您应用需求的控制器类型和更新策略时,考虑这些差异非常重要。请注意,每个控制器类型都有其适用的使用场景和优劣势,根据实际需求做出选择。
稳定的网络标识是指在 Kubernetes 集群中,每个 Pod 在其生命周期内都拥有一个不变的网络标识,使其能够通过固定的网络地址和主机名进行识别和访问。这样的网络标识对于应用程序的可靠性、网络通信以及基于服务的架构非常重要。
在 Kubernetes 中,Pod 默认情况下没有稳定的网络标识。这是因为在一些场景下,Pod 可能会被删除、重新创建或重新调度到不同的节点上,导致其**网络标识(如 IP 地址和主机名)**发生变化。
然而,有些应用场景中,稳定的网络标识是必需的。这时就可以使用 StatefulSet 控制器来确保每个 Pod 都有稳定的网络标识。StatefulSet 会为每个 Pod 分配一个稳定的网络标识,通常通过设置 DNS 子域名来实现。这样,无论 Pod 被重新创建或重新调度到哪个节点,它都会保持相同的 DNS 名称和网络标识。
StatefulSet 的稳定网络标识特性对于需要保持持久化存储、有序启动和关闭、节点有限制的应用程序非常有用,例如数据库集群或消息队列系统。
总之,稳定的网络标识确保在 Kubernetes 集群中每个 Pod 都有一个不变的网络标识,从而使得应用程序能够以可靠的方式进行通信和访问。这对于某些应用场景非常关键。
下面是有关Deployment、StatefulSet和DaemonSet的更新策略的详细说明:
Deployment 更新策略:
更新Deployment的注意事项
在Deployment对象中,可以使用.spec.strategy.type
字段来定义更新策略。以下是几种常见的更新策略:
- RollingUpdate(默认):这是默认的更新策略。在进行滚动更新时,Deployment会逐步升级或回滚Pods。新的Pods会被创建并且在它们就绪后,旧的Pods会被逐个删除。您可以通过
.spec.strategy.rollingUpdate.maxUnavailable
字段指定允许的不可用Pods的最大数量。 - Recreate:此策略会将所有旧的Pods一次性删除,然后创建新的Pods。在这种情况下,会有一个短暂的应用程序中断期。该策略通常用于无状态应用程序,对于有状态应用程序可能导致数据丢失。
StatefulSet 更新策略:
StatefulSet更新策略
StatefulSet具有两个更新策略,即.spec.updateStrategy.type
字段:
- OnDelete:这是默认值,StatefulSet在手动触发更新时遵循此策略。当您手动删除StatefulSet控制器时,控制器将按顺序删除每个Pod,并创建新的Pod以替换它们。
- RollingUpdate:您可以将此策略用于自动滚动更新。它使用两个参数:
.spec.updateStrategy.rollingUpdate.partition
和.spec.updateStrategy.rollingUpdate.maxUnavailable
。Partition指定在升级期间要同时删除的Pods数量,而maxUnavailable则定义了允许的不可用Pods的最大数量。
DaemonSet 更新策略:
更新和回滚DaemonSet
DaemonSet通常用于在集群中的每个节点上运行一个Pod副本。由于每个节点只有一个副本,所以更新策略相对简单。DaemonSet的更新策略可以通过.spec.updateStrategy.type
字段进行控制:
- RollingUpdate:这是默认值,表示使用滚动更新策略。在这种策略下,新的Pods会被创建并且在就绪后旧的Pods会被逐个删除。
- OnDelete:该策略将在手动触发更新时使用。当您手动删除DaemonSet时,Kubernetes将按顺序删除每个Pod,并创建新的Pod以替换它们。
注意:更新策略可能因Kubernetes版本或集群配置而有所不同。请查阅Kubernetes文档以获取更多详细信息。
ks rollout restart ds cilium
在给定的上下文中,updateStrategy
是一个用于控制 Kubernetes DaemonSet 的更新策略的部分。DaemonSet 是一种 Kubernetes 控制器,用于确保集群中的每个节点都运行一个实例副本。
rollingUpdate
是其中的一种更新策略类型,通过逐步更新 DaemonSet 的实例来实现滚动更新。它具有以下参数:
-
maxUnavailable
:指定在进行滚动更新时可以同时不可用的最大实例数。在这里,设置为2,表示在进行滚动更新过程中,最多允许同时有2个实例不可用。
type
指定了更新策略的类型,这里设置为 RollingUpdate
,表示使用滚动更新策略。
综合起来,该配置指示 Kubernetes 使用滚动更新策略来更新 DaemonSet。通过在更新期间最多允许2个实例不可用,Kubernetes 将逐步更新 DaemonSet 的实例,以确保高可用性和服务的持续运行。