클러스터 유지

Google Distributed Cloud 오프라인 어플라이언스 (GDC)를 사용하면 생성 후 Kubernetes 클러스터를 관리하여 변화하는 컨테이너 워크로드 요구사항에 적응할 수 있습니다.

노드 유지보수 실행

노드를 복구하거나 유지보수해야 하는 경우 먼저 노드를 유지보수 모드로 설정하세요. 노드를 유지보수 모드로 전환하면 포드/워크로드가 안전하게 드레이닝되고 포드 예약에서 노드가 제외됩니다. 유지보수 모드에서는 포드 트래픽을 방해할 위험 없이 노드에서 작업할 수 있습니다.

작동 방식

GDC 유지보수 모드는 특정 노드의 kubectl cordonkubectl drain 실행과 유사합니다. 다음은 유지보수 모드와 관련된 몇 가지 세부정보입니다.

  • 지정된 노드가 예약 불가능으로 표시됩니다. 이 작업은 kubectl cordon가 실행하는 작업입니다.
  • 지정된 노드에 노드 taint가 추가되어 노드에서 포드를 예약하거나 실행할 수 없음을 나타냅니다. 이 작업은 kubectl drain와 비슷합니다.
  • 포드가 종료될 때까지 노드가 중단되지 않도록 제한 시간 20분이 적용됩니다. 모든 taint를 허용하도록 구성되었거나 최종화가 있는 포드는 종료되지 않을 수 있습니다. GDC 클러스터는 모든 포드를 종료하려고 시도하지만 제한 시간이 초과되면 노드가 유지보수 모드로 전환됩니다. 이 제한 시간은 실행 중인 포드에서 업그레이드를 차단하지 못하게 합니다.
  • 노드에서 실행 중인 VM 기반 워크로드가 있으면 GDC 클러스터는 NodeSelector를 가상 머신 인스턴스 (VMI) 포드에 적용한 후 포드를 중지합니다. NodeSelector는 노드가 유지보수 모드에서 삭제될 때 VMI 포드가 동일한 노드에서 다시 시작되도록 합니다.

노드를 유지보수 모드로 전환

클러스터 구성 파일의 maintenanceBlocks 섹션에서 선택한 노드의 IP 주소 범위를 지정하여 유지보수 모드로 설정할 노드를 선택합니다. 선택한 노드가 Ready 상태이며 클러스터에서 작동해야 합니다.

노드를 유지보수 모드로 설정하려면 다음 안내를 따르세요.

  1. 클러스터 구성 파일을 수정하여 유지보수 모드로 설정할 노드를 선택합니다.

    원하는 편집기로 구성 파일을 수정하거나 다음 명령어를 실행하여 클러스터 커스텀 리소스를 직접 수정할 수 있습니다.

    kubectl -n CLUSTER_NAMESPACE edit cluster CLUSTER_NAME
    

    다음을 바꿉니다.

    • CLUSTER_NAMESPACE: 클러스터의 네임스페이스입니다.
    • CLUSTER_NAME: 클러스터의 이름입니다.
  2. maintenanceBlocks 섹션을 클러스터 구성 파일에 추가하여 유지보수 모드로 설정할 노드에 대해 단일 IP 주소 또는 주소 범위를 지정합니다.

    다음 샘플은 IP 주소 범위를 지정하여 여러 노드를 선택하는 방법을 보여줍니다.

    ...
    metadata:
      name: my-cluster
      namespace: cluster-my-cluster
    spec:
      maintenanceBlocks:
        cidrBlocks:
        - 172.16.128.1-172.16.128.64
    ...
    
  3. 업데이트된 클러스터 구성을 저장하고 적용합니다.

    kubectl apply -f my-cluster.yaml
    

    클러스터 구성이 적용되면 클러스터는 해당 노드를 유지보수 모드로 전환합니다.

  4. 다음 명령어를 실행하여 클러스터에서 노드 상태를 가져옵니다.

    kubectl get nodes -n CLUSTER_NAME
    

    응답은 다음과 같이 표시됩니다.

    NAME                STATUS                     ROLES    AGE     VERSION
    user-gdch-01        Ready                      master   2d22h   v1.23.5-gke.1502
    user-gdch-04        Ready                      none     2d22h   v1.23.5-gke.1502
    user-gdch-05        Ready,SchedulingDisabled   none     2d22h   v1.23.5-gke.1502
    user-gdch-06        Ready                      none     2d22h   v1.23.5-gke.1502
    

    SchedulingDisabled 상태는 노드가 유지보수 모드임을 나타냅니다.

  5. 다음 명령어를 실행하여 유지보수 모드에서 노드 수를 가져옵니다.

    kubectl get nodepools
    

    응답은 다음 출력과 유사합니다.

    NAME   READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
    np1    3       0             0         1                  0
    

    이 샘플에서 UNDERMAINTENANCE 열은 한 노드가 유지보수 모드에 있음을 보여줍니다.

    클러스터는 노드가 유지보수 모드로 설정될 때 노드에 다음 taint도 추가합니다.

  • baremetal.cluster.gke.io/maintenance:NoExecute
  • baremetal.cluster.gke.io/maintenance:NoSchedule

노드 풀 크기 조절

GDC 환경의 모든 사용자 클러스터는 워크로드 변경에 따라 확장되도록 노드 풀의 크기를 조절할 수 있습니다. 사용자 클러스터에서 노드 풀을 관리하려면 사용자 클러스터 관리자 (user-cluster-admin) 역할이 있어야 합니다.

기존 클러스터에서 노드 풀을 확장하려면 다음 단계를 완료하세요.

콘솔

  1. 대시보드에서 수정할 클러스터가 있는 프로젝트를 선택합니다.
  2. 탐색 메뉴에서 클러스터를 선택합니다.
  3. 노드 풀이 연결된 클러스터 이름을 선택합니다. 클러스터 세부정보 페이지가 표시됩니다.
  4. 노드 풀 탭을 클릭합니다.
  5. 크기를 조정할 노드 풀의 수정 아이콘을 선택합니다. 노드 풀 수정 프롬프트가 표시됩니다.
  6. 노드 풀에 필요한 새 노드 수를 반영하도록 노드 수 필드를 업데이트합니다. 워크로드 요구사항에 맞게 노드 수를 늘리거나 줄일 수 있습니다.

  7. 저장을 클릭합니다.

  8. 클러스터의 노드 풀 탭으로 다시 이동하여 크기가 조절된 노드 풀의 상태가 Ready이고 노드 수가 올바른지 확인합니다. 노드 풀이 사양에 따라 확장되는 데 몇 분 정도 걸릴 수 있습니다.

    콘솔을 사용하여 노드 풀이 준비되었는지 확인합니다.

API

  1. 대화형 편집기를 사용하여 kubectl CLI로 Cluster 커스텀 리소스 사양을 엽니다.

    kubectl edit clusters.cluster.gdc.goog/USER_CLUSTER_NAME -n platform \
          --kubeconfig ORG_ADMIN_CLUSTER_KUBECONFIG
    
  2. 크기를 조절할 노드 풀의 nodeCount 필드를 업데이트합니다.

    nodePools:
    ...
    - machineTypeName: n2-standard-2-gdc
      name: nodepool-1
      nodeCount: NUMBER_OF_WORKER_NODES
    

    NUMBER_OF_WORKER_NODES을 노드 풀에서 프로비저닝할 업데이트된 워커 노드 수로 바꿉니다.

  3. 파일을 저장하고 편집기를 종료합니다.

  4. 노드 풀의 구성을 확인하여 노드 확장 완료 여부를 확인합니다.

    kubectl get clusters.cluster.gdc.goog/USER_CLUSTER_NAME -n platform -o json \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG | jq .status.workerNodePoolStatuses
    

    readyNodes 번호가 노드 풀에 설정한 노드 수를 반영하는지 확인합니다. 노드 풀이 사양에 따라 확장되는 데 몇 분 정도 걸릴 수 있습니다.

조직의 모든 클러스터 보기

조직에서 사용할 수 있는 모든 사용자 클러스터와 상태, Kubernetes 버전, 기타 세부정보를 확인할 수 있습니다.

콘솔

  • 탐색 메뉴에서 클러스터를 선택합니다.

    조직에서 사용할 수 있는 모든 클러스터가 상태 및 기타 정보와 함께 표시됩니다.

    조직의 각 사용자 클러스터에 대한 상태 및 기타 정보가 표시되는 클러스터 세부정보 페이지

kubectl

  • 조직에서 사용 가능한 사용자 클러스터를 나열합니다.

    kubectl get clusters.cluster.gdc.goog -n platform \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    출력은 다음과 비슷합니다.

    NAME        STATE     K8S VERSION
    user-vm-1   Running   1.25.10-gke.2100
    user-test   Running   1.26.5-gke.2100
    

업데이트 가능한 속성 보기

각 사용자 클러스터의 경우 생성된 후 변경할 수 있는 속성 집합이 있습니다. Cluster 커스텀 리소스의 spec에 있는 변경 가능한 속성만 변경할 수 있습니다. spec의 일부 속성은 클러스터가 프로비저닝된 후 업데이트할 수 없습니다. 업데이트 가능한 속성을 보려면 다음 단계를 완료하세요.

콘솔

  1. 탐색 메뉴에서 클러스터를 선택합니다.

  2. 사용자 클러스터 목록에서 클러스터 이름을 클릭하여 속성을 확인합니다.

  3. 수정 가능한 속성에는 수정 아이콘이 있습니다.

kubectl

  • Cluster 사양의 속성 목록과 각 속성에 해당하는 유효한 값을 확인합니다.

    kubectl explain clusters.cluster.gdc.goog.spec \
        --kubeconfig ORG_ADMIN_CLUSTER_KUBECONFIG
    

    출력은 다음과 비슷합니다.

    KIND:     Cluster
    VERSION:  cluster.gdc.goog/v1
    
    RESOURCE: spec <Object>
    
    DESCRIPTION:
        <empty>
    
    FIELDS:
      clusterNetwork    <Object>
        The cluster network configuration. If unset, the default configurations
        with pod and service CIDR sizes are used. Optional. Mutable.
    
      initialVersion    <Object>
        The GDCH version information of the user cluster during cluster creation.
        Optional. Default to use the latest applicable version. Immutable.
    
      loadBalancer  <Object>
        The load balancer configuration. If unset, the default configuration with
        the ingress service IP address size is used. Optional. Mutable.
    
      nodePools <[]Object>
        The list of node pools for the cluster worker nodes. Optional. Mutable.
    
      releaseChannel    <Object>
        The release channel a cluster is subscribed to. When a cluster is
        subscribed to a release channel, GDCH maintains the cluster versions for
        users. Optional. Mutable.
    

    GDC 콘솔 또는 kubectl CLI를 사용하여 이러한 설정을 업데이트합니다. 예를 들어 노드 풀의 크기를 조절할 수 있습니다.

인그레스 서비스 IP 주소 크기 조정

사용자 클러스터를 만든 후 인그레스 서비스 IP 주소 크기를 확장할 수 있습니다.

  1. 대화형 편집기를 사용하여 kubectl CLI로 Cluster 커스텀 리소스 사양을 엽니다.

    kubectl edit clusters.cluster.gdc.goog/USER_CLUSTER_NAME -n platform \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    
  2. ingressServiceIPSize 필드를 새 IP 주소 크기로 업데이트합니다.

    ...
    spec:
    ...
      loadBalancer:
        ingressServiceIPSize: INGRESS_SERVICE_IP_SIZE
    ...
    

    INGRESS_SERVICE_IP_SIZE를 업데이트된 인그레스 서비스 IP 주소 크기로 바꿉니다.

  3. 파일을 저장하고 편집기를 종료합니다.

수신 서비스 IP 주소 크기에 설정된 제한은 없습니다. 요청한 IP 주소 수는 조직에 따라 충족됩니다. 요청을 처리할 수 없는 경우 클러스터에서 오류를 보고합니다.