HPA によって管理される spec.replicas の値が上書きされるのを防ぐため、Argo CD の同期から spec.replicas を除外します。
デフォルトでレプリカが 1 つのアプリケーション
Deployment マニフェストで replicas フィールドをコメントアウトします。Argo CD は Git に存在するフィールドのみを同期するため、replicas を省略すると HPA がそれを管理できるようになります。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
# HPA でレプリカを制御する場合、マニフェストに replicas を含めないでください
# replicas: 1
template:
spec:
containers:
- image: nginx:1.7.9
name: nginx
ports:
- containerPort: 80
...
デフォルトで複数のレプリカを持つアプリケーション
複数のレプリカを持つマニフェストの場合、フィールドをコメントアウトするとデフォルト設定が機能しなくなります。代わりに、Diffing Customization を介して spec.replicas を無視するように Argo CD を設定し、HPA がレプリカ数を制御できるようにします。
スコープには、アプリケーションレベル (単一のアプリケーション) とシステムレベル (フリートインスタンス内のすべてのアプリケーション) の 2 つがあります。
アプリケーションレベルの設定
Application リソースで .spec.ignoreDifferences を設定します。これは、そのアプリケーションにのみ適用されます。
デフォルトでは、このルールはアプリケーション内のすべての Deployment に適用されます。特定の Deployment をターゲットにするには、name フィールドと namespace フィールドのコメントを解除して設定します。
groupフィールドは、バージョンを含まない Kubernetes API グループを指します (例:apps/v1ではなくapps)。
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
...
システムレベルの設定
フリートインスタンス内のすべてのアプリケーションで spec.replicas を無視するように、argocd-cm ConfigMap を設定します。
ACK One GitOps の場合、managedFieldsManagers で controlplane-kcm を kube-controller-manager とともに設定する必要があります。
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 は、ターゲットのレプリカ数を計算するために、特定の スケーリングアルゴリズム を使用します。