由于Argo CD会定时同步Git仓库和集群中应用的状态,会和通过容器水平伸缩(HPA)来控制Pod副本数的行为发生冲突。因此对于使用GitOps发布的应用,如果使用容器水平伸缩控制Pod副本数,您需要对应用进行相应配置避免产生冲突。配置方式按照副本数分为默认1个副本和默认多个副本两种场景。
默认1个副本
如果您的应用默认的Pod副本数为1,并且应用使用HPA来控制副本数,则仅需要将Git仓库应用中的Deployment资源的replicas
字段注释掉。
示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
# do not include replicas in the manifests if you want replicas to be controlled by HPA
# replicas: 1
template:
spec:
containers:
- image: nginx:1.7.9
name: nginx
ports:
- containerPort: 80
...
默认多个副本
如果您的应用需要默认使用多个副本,该场景下需要根据Diffing Customization进行配置,忽略spec.replicas
的Differences,这样Argo CD不会去管理Pod的副本数,副本数会被HPA单独管理。
以下为您提供应用级别和系统级别两种配置方式,更多信息,请参见Argo CD Diffing Customization。
Ignore Differences应用级别的配置
应用级别的配置是指仅对于指定Application中的资源生效,配置Application的.spec.ignoreDifferences
忽略Deployment资源的spec.replicas
。
如需对确定Deployment生效,可以指定其name和namespace。
示例如下:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: app-test
namespace: argocd
spec:
ignoreDifferences:
- group: apps
kind: Deployment
#name: test
#namespace: default
jsonPointers:
- /spec/replicas
...
Ignore Differences系统级别的配置
系统级别的配置是指对于整个舰队的资源生效。在argocd/argocd-cm
中配置,忽略由managers管理的Kubernetes资源的spec.replicas
。
配置示例如下,其中ACK One GitOps需要配置manager controlplane-kcm
:
apiVersion: v1
data:
...
resource.customizations.ignoreDifferences.all: |
managedFieldsManagers:
- kube-controller-manager
- controlplane-kcm
jsonPointers:
- /spec/replicas
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
相关文档
如何为应用开启HPA,请参见容器水平伸缩(HPA)。
有关Pod水平自动扩缩的算法,请参见算法细节。
文档内容是否对您有帮助?