ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Argo CD 高可用部署如何启用 Dynamic Cluster Distribution 动态分片

Argo CD 高可用部署如何启用 Dynamic Cluster Distribution 动态分片 Argo CD 高可用部署如何启用 Dynamic Cluster Distribution 动态分片【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd在多副本运行argocd-application-controller的 Argo CD 高可用部署中集群Cluster默认被静态分配到各个分片shard且不再变动使用默认的基于哈希的分片算法时问题不大但如果你使用 round-robin 等分片算法当控制器副本被增减时静态分配会导致各分片负载失衡。Argo CD v2.9 引入的 Dynamic Cluster Distribution 功能解决了这个问题副本数量变化时重新运行分片算法把集群按算法重新分配。从 v2.9 起分片数不再通过ARGOCD_CONTROLLER_REPLICAS环境变量控制修改它需要重启所有应用控制器 Pod而是直接读取控制器 Deployment 的replicas字段扩缩副本时无需重启。该功能自 v2.9.0 起为 Alpha 特性默认禁用未来版本可能移除或做向后不兼容的修改。以下操作路径适用于 Argo CD v2.9 及以上的 HA 安装。准备条件确认 HA 安装与分片算法Dynamic Cluster Distribution 的启用方式建立在 HA 安装之上先确认两点HA 安装要求HA manifests 因 Pod 反亲和规则要求至少 3 个不同节点仅支持 IPv6 的集群不受支持。分片算法动态重新分配只有在分片算法本身均衡时才有意义文档以 round-robin 为例。分片算法通过--sharding-method参数设置支持legacy基于 uid 的非均匀分布、round-robin均匀分布和consistent-hashing一致性哈希副本增删时减少集群重排。推荐通过argocd-cmd-params-cmConfigMap 中的controller.sharding.algorithm键覆盖文档标注 preferably或通过ARGOCD_CONTROLLER_SHARDING_ALGORITHM环境变量设置apiVersion: v1 kind: ConfigMap metadata: name: argocd-cmd-params-cm data: controller.sharding.algorithm: round-robin注意round-robin与consistent-hashing均为实验特性其中 round-robin 在移除 rank-0 集群时已知会发生全量重排可能带来短暂的性能影响见 High Availability 中的警告。启用步骤应用 Kustomize overlay 并设置环境变量功能在 Alpha 阶段默认关闭需要两步启用。第 1 步应用manifests/ha/base/controller-deployment/作为 Kustomize overlay。# 在 argo-cd 仓库根目录下执行路径相对于仓库根目录 kubectl apply -k manifests/ha/base/controller-deployment/根据该 overlay 的 kustomization.yaml它做了以下事情通过 argocd-application-controller-statefulset.yaml 把原有的 StatefulSet 副本数置为0同时把ARGOCD_CONTROLLER_REPLICAS置为0引入 base/application-controller-deployment把应用控制器改为以 Deployment 形式部署通过 argocd-cmd-params-cm.yaml 把redis.server指向argocd-redis-ha-haproxy:6379即 Redis HA 模式的 haproxy 入口。文档明确提示用 Deployment 替代 StatefulSet 是实现细节未来版本可能改变因此该 overlay 的目录名也可能随之变化升级时留意 release notes。第 2 步在应用控制器 Deployment 上设置环境变量ARGOCD_ENABLE_DYNAMIC_CLUSTER_DISTRIBUTION为true。文档要求以 Deployment 方式运行 Application Controller 时必须设置该环境变量以下命令等价于直接给 Deployment 追加这个 env 项kubectl -n argocd set env deployment/argocd-application-controller \ ARGOCD_ENABLE_DYNAMIC_CLUSTER_DISTRIBUTIONtrue该命令会滚动更新 Deployment。ARGOCD_ENABLE_DYNAMIC_CLUSTER_DISTRIBUTION与下文提到的ARGOCD_CONTROLLER_HEARTBEAT_TIME都归属于Deployment/argocd-application-controller组件见 feature-maturity.md。工作机制控制器如何通过 ConfigMap 管理分片理解下面的机制有助于验证和排查。Application Controller 使用名为argocd-app-controller-shard-cm的 ConfigMap 记录控制器 Pod ↔ 分片号的映射以及心跳每个分片条目的结构如下文档示例ShardNumber : 0 ControllerName : argocd-application-controller-hydrxyt HeartbeatTime : 2009-11-17 20:34:58.651387237 0000 UTCControllerName控制器 Pod 的主机名ShardNumber该控制器管理的分片号HeartbeatTime该心跳最后一次更新的时间映射在 Pod 的每次 readiness 探针检查时更新即默认每 10 秒一次如你调整了探针间隔则按实际间隔。每次检查时控制器都会尝试获取分片并更新 ConfigMap 中的HeartbeatTime。默认心跳周期HeartbeatDuration为10秒如果某个控制器 Pod 的心跳超过3 * HeartbeatDuration未更新其 readiness 探针将被标记为Unhealthy。需要加大这个默认值时设置环境变量ARGOCD_CONTROLLER_HEARTBEAT_TIME。副本变化时的重分配由 Deployment 副本数驱动ARGOCD_CONTROLLER_REPLICAS环境变量不再被监控副本增加ConfigMap 中新增一条映射并触发集群重新分配副本减少ConfigMap 中的映射被重置每个控制器重新获取分片从而触发集群重新分配。因此扩缩容只需修改 Deployment 的replicas例如kubectl -n argocd scale deployment argocd-application-controller --replicas3控制器通过比较 Deployment 中的副本数与argocd-app-controller-shard-cm中映射条目的数量来识别副本变化无需重启任何 Pod。验证检查分片映射与心跳状态检查映射内容确认每个分片都有对应的控制器且HeartbeatTime在持续更新kubectl -n argocd get configmap argocd-app-controller-shard-cm -o yaml等待若干秒后再次查看HeartbeatTime应当随之刷新超过约 30 秒默认3 * 10s心跳周期仍无更新对应 Pod 的 readiness 会变为Unhealthy。检查 Pod 状态所有控制器 Pod 应处于 Ready 状态kubectl -n argocd get pods -l app.kubernetes.io/nameargocd-application-controller若 Pod 反复在 Ready/NotReady 之间抖动而心跳周期本身偏长例如 readiness 探针间隔被调大可通过设置ARGOCD_CONTROLLER_HEARTBEAT_TIME提高默认的心跳周期来匹配。限制与注意事项Alpha 状态该功能可能在未来版本被移除或做向后不兼容修改Deployment 替代 StatefulSet 属实现细节overlay 目录名可能变化升级前查看 release notes。不再监控ARGOCD_CONTROLLER_REPLICAS动态分片机制直接从 Deployment 读取副本数overlay 中将该变量置为0属于预期配置不代表分片数为 0。round-robin 的已知问题移除 rank-0 的集群时所有集群会在分片间全量重排期间可能有负面性能影响如果集群增删频繁可评估consistent-hashing算法同为实验特性以减少重排。相关机制说明参见 Dynamic Cluster Distribution分片算法与静态分片的原有配置参见 High Availability。【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表