HPA를 Argo CD를 관리할 때 발생하는 스케일링 그룹을 방지하는 방법
소개
Horizontal Pod Autoscaler(HPA)를 Argo CD의 관리 대상(GitOps 대상)으로 했을 때 replica 수가 반복되는 현상이 발생했습니다.
이 기사에서는 문제를 해결하는 방법을 소개합니다.
환경 정보
문제 상세
재현 방법
이하 매니페스트와 같은 deployment와 HPA를 Argo CD의 관리 대상으로 한다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: argocd-hpa
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: nginx
namespace: argocd-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageValue: 1
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/nakkoh/argocd_hpa.git
targetRevision: master
path: nginx
destination:
server: https://kubernetes.default.svc
namespace: argocd-hpa
문제 내용
매니페스트의 replicas와 HPA가 충돌하기 때문에 deployment의 상태가
Sync OK
회피 방법
다음 두 가지 방법이 있습니다.
replicas를 정의하지 않음
아래 매니페스트와 같이 deployment OutOfSync
를 정의하지 않으면이 문제를 피할 수 있습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: argocd-hpa
labels:
app: nginx
spec:
# replicas: 1 ★ 定義しない
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
replicas만 Argo CD 관리 대상에서 제거
아래 application 매니페스트 과 같이 spec.replicas
를 정의하여 replicas 만 Argo CD 관리에서 제외하여이 문제를 피할 수 있습니다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/nakkoh/argocd_hpa.git
targetRevision: master
path: nginx
destination:
server: https://kubernetes.default.svc
namespace: argocd_hpa
ignoreDifferences: # ★ 以下行を追加
- group: apps #
kind: Deployment #
name: nginx #
namespace: argocd-hpa #
jsonPointers: #
- /spec/replicas #
syncPolicy:
automated: {}
Helm chart를 사용할 때 문제가 발생하면 replicas를 정의하지 않음의 방법을 사용할 수 없으므로 replicas만 Argo CD 관리 대상에서 제거의 방법을 사용해야합니다.
참고문헌
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: argocd-hpa
labels:
app: nginx
spec:
# replicas: 1 ★ 定義しない
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/nakkoh/argocd_hpa.git
targetRevision: master
path: nginx
destination:
server: https://kubernetes.default.svc
namespace: argocd_hpa
ignoreDifferences: # ★ 以下行を追加
- group: apps #
kind: Deployment #
name: nginx #
namespace: argocd-hpa #
jsonPointers: #
- /spec/replicas #
syncPolicy:
automated: {}
Reference
이 문제에 관하여(HPA를 Argo CD를 관리할 때 발생하는 스케일링 그룹을 방지하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nakkoh/items/1d2e79c8682719ad413e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)