我有一个
ApplicationSet
,它在 Kubernetes 中创建了一些资源。它运行良好。但是,当我删除这个 ApplicationSet
时,相关的 Application
也会从 Argo 及其资源中删除。 (我知道这是应用程序集控制器所期望的)。但是,我想阻止这种情况发生。
场景:有时,当
ApplicationSet
被损坏时,它会破坏与其关联的Application
。删除 ApplicationSet
时也一样。
我正在阅读此 document,在 ApplicationSet 中将
.syncPolicy.preserveResourcesOnDeletion
添加到 true,但它没有按预期工作。这是我当前的同步政策:
syncPolicy:
automated:
selfHeal: true
syncOptions:
- Validate=true
- CreateNamespace=true
- preserveResourcesOnDeletion=true
问题:即使
Application
被删除/损坏,我怎样才能保证我的ApplicationSet
安全?
您可以在两个不同的位置设置同步策略:
spec.template
中)您正在寻找第二个。在您的 ApplicationSet 资源中进行设置:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
spec:
syncPolicy:
preserveResourcesOnDeletion: true
安装 argocd 时,您可以设置如下值:
applicationSet:
args:
policy: create-only
因此Argocd只会创建应用程序集一次,即使应用程序集发生问题应用程序也不会受到影响
我刚刚注意到用于此目的的syncPolicy应该写成
syncPolicy:
preserveResourcesOnDeletion: true
automated:
selfHeal: true
syncOptions:
- Validate=true
- CreateNamespace=true
如果要确保在 ApplicationSet 被删除或损坏时 Kubernetes 资源不被删除,可以考虑以下几种策略:
applicationsSync
设置修改策略 [create-only
, create-update
, create-delete
,sync
] (link)resources-finalizer
来防止应用控制器在删除ApplicationSet时删除Application(链接)preserveResourcesOnDeletion
防止子资源被删除(link)为了安全起见,我已经实施了上述所有策略。
这是我的应用程序集配置的示例:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: myappset
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
syncPolicy:
applicationsSync: create-update
preserveResourcesOnDeletion: true
...
generators:
...
template:
...
更多信息可以在这里找到:
默认情况下,ArgoCD 删除操作默认是级联的,这意味着 AppSet 创建的所有资源都将被删除。
当您尝试删除应用程序/应用程序集时,您需要将级联选项设置为 false ,类似于下面的内容
kubectl 删除应用程序集(名称)--cascade=false
有关更多信息,请查看此处的文档 https://argocd-applicationset.readthedocs.io/en/stable/Application-Deletion/