HPA를 Argo CD를 관리할 때 발생하는 스케일링 그룹을 방지하는 방법

소개



Horizontal Pod Autoscaler(HPA)를 Argo CD의 관리 대상(GitOps 대상)으로 했을 때 replica 수가 반복되는 현상이 발생했습니다.
이 기사에서는 문제를 해결하는 방법을 소개합니다.

환경 정보


  • Kubernetes
  • Docker Desktop 2.3.0.4
  • v1.16.6

  • Argo CD v1.8.2

  • 문제 상세



    재현 방법



    이하 매니페스트와 같은 deployment와 HPA를 Argo CD의 관리 대상으로 한다.
  • Deployment
  • 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
    
  • HPA
  • 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 관리 대상에서 제거의 방법을 사용해야합니다.

    참고문헌


  • htps : // 기주 b. 코 m / 아 r 고 p j / 아 r 고 cd / ぢ s 쿠시 온 s / 5105
  • htps : // 아 r고 p로j. 기주 b. 이오 / 아 r-cd / 우세 r 구이 데 / 베 st_p 등 c 치세 s / # ぇ 아 ぃ ㄴ ㅇ ㅇ
  • htps : // 아 r고 p로j. 기주 b. 이오 / 아 r-cd / 우세 r-gui / ぢふぃ g / # ぃ ぃ 카치 온 - ゔ ぇ l
  • 좋은 웹페이지 즐겨찾기