十个关于 ArgoCD 的优秀实践

十个关于 ArgoCD 的优秀实践

作者:Noaa Barki 2022-08-12 07:48:49

云计算

云原生 在本文中,我们将探索我发现的一些 Argo 优秀实践。

在本文中,我们将探索我发现的一些 Argo 优秀实践。

1. 不允许提供空的 retryStrategy

项目:Argo Workflows

优秀实践: 用户可以指定一个retryStrategy​来指示如何在工作流中重试失败或错误的步骤。提供一个空的retryStrategy(即retryStrategy: {})将导致容器重试直到完成并最终导致 OOM 问题。

2. 确保未将 Workflow pod 配置为使用默认服务帐户

项目:Argo Workflows

优秀实践: 工作流中的所有 pod 都可以使用在workflow.spec.serviceAccountName​ 中指定的服务帐户运行。如果省略,Argo 将使用工作流命名空间的默认服务帐户。这为工作流(即 pod)提供了与 Kubernetes API 服务器交互的能力。这允许访问单个容器的攻击者通过使用AutomountServiceAccountToken​滥用 Kubernetes 。禁用了AutomountServiceAccountToken选项,那么 Argo 将使用的默认服务帐户将没有任何权限,并且工作流将失败。

建议创建具有适当角色的专用用户管理服务帐户。

3. 确保 ConfigMaps label 中存在 part-of: argocd

项目:Argo CD

优秀实践: Argo CD 不会使用未标记app.kubernetes.io/part-of: argocd 的相关 ConfigMap 资源。

安装 Argo CD 时,其原子配置包含一些services和configMaps​。对于每种特定类型的 ConfigMap 和 Secret 资源,只有一个受支持的资源名称,如果您需要在创建它们之前合并您需要做的事情。使用标签 app.kubernetes.io/part-of: argocd 注释您的 ConfigMap 资源很重要,否则 Argo CD 将无法使用它们。

4. 用 DAG 禁用以设置 FailFast = false

项目:Argo Workflows

优秀实践: 作为在Workflow​中指定步骤序列的替代方法,您可以通过指定每个任务的依赖关系将工作流定义为有向无环图 (DAG)。DAG 逻辑具有内置的快速故障功能,可在检测到其中一个 DAG 节点发生故障时立即停止调度新步骤。然后它会等到所有 DAG 节点都完成后才会使 DAG 本身失败。FailFast[4]标志默认为true​。如果设置为false,它将允许 DAG 运行 DAG 的所有分支以完成(成功或失败),而不管 DAG 中分支的失败结果。

5. 确保 Rollout 暂停步骤具有配置的持续时间

项目:Argo Rollouts

优秀实践: 对于每个 Rollout,我们可以定义一个步骤列表。每个步骤都可以有两个字段之一:setWeight和pause。setWeight​字段指示应该发送到金丝雀的流量百分比,而 pause字面意思是指示部署暂停。

在幕后,Argo 控制器使用这些步骤在推出期间操作 ReplicaSet​。当控制器达到推出的暂停步骤时,它会将PauseCondition​结构添加到.status.PauseConditions字段。如果设置了暂停结构中的持续时间字段,则在等待持续时间字段的值之前,部署不会进行到下一步。但是,如果省略了持续时间字段,则推出可能会无限期地等待,直到添加的暂停条件被删除。

6. 指定 Rollout 的 revisionHistoryLimit

项目:Argo Rollouts

优秀实践: .spec.revisionHistoryLimit​ 是一个可选字段,指示应保留的旧 ReplicaSet 的数量以允许回滚。这些旧的 ReplicaSet 消耗 etcd 中的资源并挤占kubectl get rs的输出。每个 Deployment 修订的配置都存储在它的 ReplicaSets 中;因此,一旦删除了旧的 ReplicaSet,您就无法回滚到该版本的 Deployment。

默认情况下,会保留 10 个旧 ReplicaSet,但其理想值取决于新 Deployment 的频率和稳定性。更具体地说,将此字段设置为零意味着将清除所有具有 0 个副本的旧 ReplicaSet。在这种情况下,新的部署无法撤消,因为它的修订历史已被清除。

7. 将 scaleDownDelaySeconds 设置为 30s 以确保 iptables 跨集群中的节点传播

项目:Argo Rollouts

优秀实践: 当 rollout​ 更改service​上的selector​时,在所有节点更新其 iptables​以将流量发送到新 Pod 而不是旧 Pod 之前存在传播延迟。如果在此延迟期间节点尚未更新,则流量将被定向到旧 pod。为了防止数据包被发送到杀死旧 pod 的节点,rollout 使用scaleDownDelaySeconds​字段给节点足够的时间广播 iptables 的变化。如果省略,Rollout 会等待 30 秒,然后再缩减之前的 ReplicaSet。

建议将scaleDownDelaySeconds​设置为至少 30 秒,以确保 iptables在集群中的节点间传播。原因是 Kubernetes 等待一个称为终止宽限期的指定时间。默认情况下,这是 30 秒。

8. 确保在 Error 和 TransientError 时重试

项目:Argo Workflows

优秀实践:  retryStrategy是Workflow​ CRD 的一个可选字段,它提供了用于重试工作流步骤的控件。retryStrategy​的字段之一是retryPolicy​,它定义了将被重试的 NodePhase 状态的策略(NodePhase 是当前节点的状态)。retryPolicy​的选项可以是:Always、OnError或OnTransientError。此外,用户可以使用表达式[9]来控制更多的重试次数。

  • retryPolicy=Always:用户只想重试系统级错误(例如,节点死亡或被抢占),但不想重试用户级代码中发生的错误,因为这些失败表明存在错误。此外,与作为作业的工作流相比,此选项更适合长时间运行的容器。
  • retryPolicy=OnError:不处理抢占,处理一些系统级错误,例如节点消失或 pod 被删除。但是,在 Pod 正常终止期间,kubelet 会为终止的 Pod 分配一个失败状态和一个关闭原因。因此,节点抢占导致节点状态为Failure​,而不是Error,因此不会重试抢占。

我们建议设置retryPolicy: “Always”并使用以下表达式:

'lastRetry.status == "Error" or (lastRetry.status == "Failed" and asInt(lastRetry.exitCode) not in [0])'

9. 确保 progressDeadlineAbort 设置为 true,特别是如果 progressDeadlineSeconds 已设置

项目:Argo Rollouts

优秀实践: 用户可以设置progressDeadlineSeconds,它以秒为单位说明在更新期间推出必须取得进展的最长时间,然后才被认为失败。

如果 rollout pod 陷入错误状态(例如image pull back off​),则 rollout 会在超过进度期限后降级,但错误的replica set/pods​ 不会按比例缩小。Pod 将不断重试,最终推出消息将显示ProgressDeadlineExceeded: The replicaset has timed out progressing​。要中止推出,用户应同时设置progressDeadlineSeconds​和设置progressDeadlineAbort: true

10. 确保自定义资源与 ArgoCD 实例的命名空间匹配

项目:Argo CD

优秀实践: 在每个存储库中,所有Application和AppProject​清单都应匹配相同的metadata.namespace。原因实际上取决于您如何安装 Argo CD。

如果您在典型部署中部署了 Argo CD,则 Argo CD 会在后台创建两个ClusterRoles和ClusterRoleBinding​,默认情况下它们引用argocd​命名空间。在这种情况下,建议不仅要确保所有 Argo CD 资源与 Argo CD 实例的命名空间匹配,还要使用argocd命名空间,否则,您需要确保更新所有 Argo CD 内部资源中的命名空间引用。

但是,如果您为外部集群部署 Argo CD(在“命名空间隔离模式”中),那么 Argo 会在部署 Argo CD 的命名空间中创建角色和关联的RoleBinding​,而不是ClusterRole和ClusterRoleBinding​。创建的服务帐户被授予有限级别的管理访问权限,因此要使 Argo CD 能够按需要运行,必须明确授予对命名空间的访问权限。在这种情况下,建议确保所有资源,包括 Application和AppProject,使用 ArgoCD 实例的正确命名空间。

原文:https://datree.io/resources/argocd-best-practices-you-should-know​

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/254561.html<

(0)
运维的头像运维
上一篇2025-04-30 10:36
下一篇 2025-04-30 10:38

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注