Skip to content

使用 Kubectl 同步应用程序

您可以使用 "kubectl "来要求 Argo CD 同步应用程序,就像使用 CLI 或 UI 一样。 许多配置,如 "强制"、"剪枝"、"应用",甚至同步特定资源列表,都同样支持。 具体做法是通过定义 "操作 "的文档来引用或修补 Argo CD 应用程序。

该 "操作 "定义了同步的方式和同步的资源。

有许多配置选项可以添加到 "操作 "中。 接下来将对其中几个选项进行说明。 更多详情,请参阅 CRDapplications.argoproj.io其中有些是必需的,有些则是可选的。

我们可以要求 Argo CD 同步某个应用程序的所有资源: Argo

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: <app-name>
  namespace: <namespace>
spec:
  ...
operation:
  initiatedBy:
    username: <username>
  sync:
    syncStrategy:
      hook: {}
$ kubectl apply -f <apply-file>

最重要的部分是 "操作 "字段中的 "同步 "定义。 您可以传递 "信息 "或 "由谁发起 "等可选信息。"信息 "允许您以列表形式添加有关操作的信息。

或者,如果您愿意,也可以进行修补:

operation:
  initiatedBy:
    username: <username>
  sync:
    syncStrategy:
    hook: {}
$ kubectl patch -n <namespace> app <app-name> --patch-file <patch-file> --type merge

请注意,补丁(特别是使用合并策略的补丁)可能无法按照您的预期运行,尤其是在您更改同步策略或选项时。 在这种情况下,"kubectl apply "会带来更好的效果。

无论是使用 "kubectl patch "还是 "kubectl apply",同步状态都会在应用程序对象的 "operationState" 字段中报告。

$ kubectl get -n <namespace> get app <app-name> -o yaml
...
status:
  operationState:
    finishedAt: "2023-08-03T11:16:17Z"
    message: successfully synced (all tasks run)
    phase: Succeeded

应用和挂钩同步策略

同步策略有两种:"挂钩"(默认值)和 "应用"。

apply "同步策略会告诉 Argo CD "kubectl apply",而 "hook "同步策略则会通知 Argo CD 提交操作中引用的任何资源。 这样,这些资源的同步就会考虑到资源已注释的任何钩子。

operation:
  sync:
    syncStrategy:
      apply: {}
operation:
  sync:
    syncStrategy:
      hook: {}

这两种策略都支持 "强制",但需要注意的是,强制操作会在补丁重试 5 次后遇到冲突时删除资源。

operation:
  sync:
    syncStrategy:
      apply:
        force: true
operation:
  sync:
    syncStrategy:
      hook:
        force: true

Prune

如果您想在应用前修剪资源,可以指示 Argo CD 这样做:

operation:
  sync:
    prune: true

清单资源

您可以传递一个资源列表,该列表可以是应用程序管理的所有资源,也可以是一个子集,例如因某种原因不同步的资源。

在引用资源时,只有 "种类 "和 "名称 "是必填字段,但也可以定义 "组 "和 "名称空间 "字段:

operation:
  sync:
    resources:
      - kind: Namespace
        name: namespace-name
      - kind: ServiceAccount
        name: service-account-name
        namespace: namespace-name
      - group: networking.k8s.io
        kind: NetworkPolicy
        name: network-policy-name
        namespace: namespace-name

同步选项

在操作中,还可以传递同步选项。 每个选项都以 "name=values "对的形式传递,例如

operations:
  sync:
    syncOptions:
      - Validate=false
      - Prune=false

有关同步选项的更多信息,请参阅同步选项