Kubernetes 노드당 하나 이상의 ingress-nginx를 보장합니다.

Kubernetes 노드당 하나 이상의 ingress-nginx를 보장합니다.

Helm 차트를 통해 배포된 ingress-nginx에 대한 자동 크기 조정 구성을 작성하려고 합니다.

내 목표는 다음과 같습니다

  • 최소 복제본 3개(최소 노드가 3개이기 때문)
  • 노드당 하나의 nginx만 보장하십시오. 단, 다음을 수행하십시오.
  • 탄력적이어야 합니다. 자동 크기 조정에 4개의 nginx가 필요하다고 말하면 클러스터의 노드에 2개가 있도록 허용합니다.
  • 네 번째 노드가 추가되면 새 nginx가 생성되는지 확인하세요.

https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/values.yaml#L326 https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/values.yaml#L343 https://github.com/kubernetes/ingress-nginx/blob/main/charts/ingress-nginx/values.yaml#L256

아래 설정과 그 조합을 사용해 보았지만 항상 문제가 있습니다. 예를 들어 지금 어떤 이유로 생성하려는 네 번째 nginx가 있는데 반친화성 규칙 때문에 생성할 수 없습니다.

누구든지 그것을 달성하는 방법에 대한 몇 가지 아이디어를 공유할 수 있습니까?

  • 항상 노드당 하나의 nginx, 새 노드가 생성되면 새 nginx가 생성됩니다.
  • 자동 크기 조정을 유지합니다. hpa가 3노드 클러스터에 네 번째 nginx를 생성하려는 경우 자유롭게 그렇게 할 수 있습니다.
      replicaCount: 3
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app.kubernetes.io/name
                operator: In
                values:
                - ingress-nginx
              - key: app.kubernetes.io/instance
                operator: In
                values:
                - ingress-nginx
              - key: app.kubernetes.io/component
                operator: In
                values:
                - controller
            topologyKey: "kubernetes.io/hostname"

      topologySpreadConstraints:
        - maxSkew: 1
          topologyKey: topology.kubernetes.io/zone
          whenUnsatisfiable: ScheduleAnyway
          labelSelector:
            matchLabels:
              app.kubernetes.io/instance: ingress-nginx

      autoscaling:
        enabled: true
        minReplicas: 3
        maxReplicas: 6
        targetCPUUtilizationPercentage: 75
        targetMemoryUtilizationPercentage: 100

답변1

노드당 하나의 nginx 인스턴스만 필요한 경우 다음과 같이 배포하는 것이 더 쉽지 않을까요?데몬세트?

공식 문서에서 읽을 수 있듯이:

데몬세트모든(또는 일부) 노드가 포드 복사본을 실행하는지 확인합니다. 클러스터에 노드가 추가되면 해당 노드에 포드가 추가됩니다. 클러스터에서 노드가 제거되면 해당 포드는 가비지 수집됩니다. DaemonSet를 삭제하면 생성된 Pod가 정리됩니다.

그리고 이것은 귀하의 사용 사례에 적합한 솔루션인 것 같습니다.

귀하의 의견에서 올바르게 제안한 것처럼nginx-ingress 공식 헬름 차트Deployment또는 로 배포할 수 있습니다 DaemonSet. 그것은 할 수 있다values.yaml파일 을 조정하여.

관련 정보