노드 관리하기

페이지 이동경로

노드 관리하기

노드란 컨테이너 애플리케이션이 실행되는 서버로, Kubernetes Engine에서는 동일한 인스턴스 타입을 가지는 노드 그룹인 노드 풀 단위로 노드를 관리합니다.

노드 풀 관리하기

Kubernetes Engine 서비스에서 노드 풀을 관리하는 방법은 다음과 같습니다.

노드 풀 생성하기

클러스터에 노드 풀을 생성할 수 있습니다.

  1. 카카오 i 클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택합니다.

  2. Cluster 탭에서 노드 풀을 생성할 클러스터를 클릭합니다.
  3. 클러스터의 상세 페이지에서 노드 풀 탭을 클릭한 후, [노드 풀 만들기] 버튼을 클릭합니다.

    이미지. 노드 풀 만들기 이미지 노드 풀 만들기 버튼

  4. 노드 풀 만들기에서 정보를 입력하고, [만들기] 버튼을 클릭합니다.

    이미지. 노드 풀 만들기 이미지 노드 풀 만들기

    노드 풀 만들기

    구분 설명
    기본 설정 노드 풀의 기본 정보 설정
    - 노드 풀 이름: 영어 소문자, 숫자, 하이픈(-)을 사용해 4 ~ 20자 이내로 작성, 시작 문자는 영어 소문자만 가능하며 하이픈(-)으로 끝날 수 없음
    - 노드 풀 설명(선택): 60자 이내로 노드 풀 설명 작성
    - 인스턴스 타입: 노드 풀의 인스턴스 타입 선택
    - 볼륨 타입/크기: 인스턴스의 볼륨 타입과 크기를 설정, 현재 볼륨 타입은 SSD 타입으로 고정되어 있고, 볼륨 크기는 30 ~ 5,120GB 내에서 지정 가능
    - 노드 수: 노드 풀의 노드 개수 설정
    자동 확장 설정 (선택) 노드 풀의 가용 리소스가 부족해 파드를 스케줄링 할 수 없을 때 노드의 수를 자동으로 확장하고, 노드의 리소스 사용률이 일정 수준 이하로 유지될 때에는 노드의 수를 자동으로 축소하는 기능
    - 최소 노드 수: 자동 확장을 사용하여 자동으로 노드 수를 축소할 때 가능한 최소 노드 수
    - 최대 노드 수: 자동 확장을 사용하여 자동으로 노드 수를 확장할 때 가능한 최대 노드 수
    고급 설정(선택) 노드 풀의 고급 정보 설정
    - 키페어(선택): 노드 풀에 속한 노드 인스턴스에 SSH 접근이 필요한 경우 키페어 사용을 설정함
      ㄴ 기존 키페어를 선택 또는 신규 키페어를 생성 가능
      ㄴ 신규 키페어 생성 방법: 신규 키페어 생성을 클릭한 후, 키페어 이름 입력 후 [생성 및 다운로드]를 클릭하여 pem 파일을 다운로드
      * 노드 풀에 지정한 키페어는 인스턴스 세부 정보에 표시되지 않음
      * 클러스터 생성 후에는 키페어 변경이 불가하며, 변경 필요시 노드 풀을 새로 생성하여 설정해야 합니다.
    - 노드 레이블(선택): 노드 풀에 있는 모든 노드에 적용될 Kubernetes 레이블 지정, 설정한 레이블은 nodeSelector와 함께 사용 가능
    - 노드 테인트(선택): 노드 풀에 있는 모든 노드에 적용될 Kubernetes 테인트 지정 설정한 테인트는 toleration과 함께 사용 가능
    - 사용자 스크립트(선택): 노드 풀에 있는 모든 노드의 생성 시점에 실행할 쉘 스크립트 입력, 노드에 별도 구성이 필요할 때 사용하며 최대 16KB까지 입력 가능, 한 번 설정한 사용자 스크립트는 변경 불가

노드 풀 설정하기

클러스터에 속한 노드 풀의 정보 및 노드 수를 확인하거나 수정할 수 있습니다.

  1. 카카오 i 클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택합니다.
  2. Cluster 탭에서 노드 풀 설정을 확인할 클러스터를 클릭합니다.
  3. 클러스터 상세 페이지의 노드 풀 탭에서 설정할 노드 풀의 [더보기] 아이콘 > 노드 풀 설정을 클릭합니다.

    이미지. 노드 풀 설정
    이미지 노드 풀 설정하기

  4. 노드 풀 설정 팝업창에서 정보를 확인합니다.
    • 설정 수정 시, 정보를 입력하고 [저장] 버튼을 클릭합니다.

    이미지. 노드 풀 설정 팝업창 이미지 노드 풀 설정 팝업창

    구분 설명
    노드 풀 정보 노드 풀의 정보
    - 노드 풀 이름: 변경 불가
    - 노드 풀 설명(선택): 현재 노드 풀 설명을 확인하거나 60자 이내로 수정 가능
    노드 수 현재 노드 풀의 노드 수
    - 노드 수 변경 가능

노드 풀 상세 보기

노드 풀의 세부 정보와 해당 노드 풀에 속한 노드의 정보를 확인할 수 있습니다.

  1. 카카오 i 클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택합니다.
  2. Cluster 탭에서 상세 정보를 확인할 노드 풀이 속한 클러스터를 클릭합니다.
  3. 클러스터 상세 페이지에서 노드 풀 탭을 클릭한 후, 세부 정보를 확인할 노드 풀을 클릭합니다.
  4. 노드 풀의 상세 페이지에서 정보를 확인합니다.

    이미지. 노드 풀 상세 페이지

    이미지 노드 풀 세부 정보 탭

    구분 설명
    세부 정보 Kubernetes 버전 노드 풀의 노드가 현재 사용 중인 Kubernetes 버전 정보
      키페어 노드 풀의 노드에 설정된 키페어 정보
      생성일 노드 풀의 생성일 정보
      볼륨 타입 노드 풀에 설정된 볼륨 타입 정보
      자동 확장 설정 노드 풀의 자동 확장 설정 정보
      노드 레이블 노드 풀에 설정된 노드 레이블 정보
      노드 테인트 노드 풀에 설정된 노드 테인트 정보
      사용자 스크립트 노드 풀에 설정된 사용자 스크립트 정보
    노드 노드 노드의 정보
    - 노드 이름 클릭 시, 노드 상세 페이지에서 노드 정보 확인 가능
      노드 상태 노드 상태의 정보
    - Running: 노드가 준비되어 실행 중
    - Running (Scheduling Disable): 해당 노드로 신규 스케줄링 차단된 상태 (이미 할당되어 실행 중인 파드와는 무관)
    - Provisioned: 노드 프로비저닝 완료
    - Deleted: 노드 삭제 완료
    - Pending: 노드 프로비저닝 준비 중
    - Provisioning: 노드 프로비저닝 중
    - Deleting: 노드 삭제 중
    - Failed: 사용자의 개입이 필요한 실패 상태
      노드 풀 노드가 속한 노드 풀 정보
      사설 IP 노드의 사설 IP 정보
      생성 요청 시간 노드가 생성 요청된 시점부터 현재까지의 시간의 합으로, 노드의 생성일을 의미하지 않음

노드 풀 자동 확장 설정하기

노드 풀 자동 확장 설정은 노드 풀의 리소스 사용에 따라 노드의 수를 자동으로 확장 또는 축소하는 기능입니다. 노드의 가용 리소스 부족으로 파드가 스케줄링 될 수 없을 경우에는 노드의 수를 자동으로 확장하고, 노드의 리소스 사용률이 일정 수준 이하로 유지될 경우에는 노드의 수를 자동으로 축소합니다. 해당 기능은 Kubernetes 프로젝트의 공식 지원 기능인 Cluster-autoscaler 기능을 기반으로 합니다. 자세한 사항은 Cluster Autoscaler를 참고하시기 바랍니다.

안내
- 자동 확장은 노드 풀 단위로 조건을 설정할 수 있으며 서로 독립적으로 동작합니다.
- 자동 축소는 클러스터 단위로 조건 설정 가능하며, 클러스터/노드풀 생성 시 자동 확장을 설정한 경우, 클러스터에 설정된 조건으로 적용 됩니다.

주의
- 노드 풀 자동 확장은 파드 리소스의 request에 정의된 값을 기준으로 동작합니다.
- 파드 리소스의 request 값을 정의하지 않았다면, 자동 확장 기능을 사용해도 동작하지 않습니다.

  1. 카카오 i 클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택합니다.
  2. Cluster 탭에서 자동 확장 설정할 클러스터를 클릭합니다.
  3. 클러스터의 상세 페이지의 노드 풀 탭에서 설정할 노드 풀의 [더보기] 아이콘 > 자동 확장 설정을 클릭합니다.

    이미지. 노드 풀 상세 페이지

    이미지 자동 확장 설정

  4. 자동 확장 설정 팝업창에서 정보를 확인합니다.
    • 설정 수정 시, 정보를 입력하고 [저장] 버튼을 클릭합니다.

    이미지. 노드 풀 상세 페이지

    이미지 자동 확장 설정 팝업창

    항목 설명
    노드 풀 자동 확장 노드 리소스 사용에 따라 노드 풀의 노드 수를 자동으로 확장 또는 축소 여부를 설정
    최소 노드 수 자동으로 노드 수를 축소할 때 가능한 최소 노드 수
    - 자동 축소 조건은 클러스터 단위로 설정 가능하며, 자세한 설명은 클러스터 자동 축소 설정하기를 참고
    최대 노드 수 자동으로 노드 수를 확장할 때 가능한 최대 노드 수

HPA 설정 및 부하 테스트

HPA(HorizontalPodAutoscale)를 자동 확장(Cluster Autoscaler)과 함께 설정하면 더욱 효과적으로 리소스를 관리할 수 있습니다. HPA를 함께 적용하여 자동 확장이 정상적으로 동작하는지 테스트하는 예시를 통해 안내합니다.

안내
HPA(HorizontalPodAutoscale) 기능은 CPU 등의 리소스 사용량을 관찰하여 워크로드 리소스(디플로이먼트(Deployment), 스테이트풀셋(StatefulSet) 등)의 파드 개수를 자동으로 확장합니다. HPA에 대한 자세한 설명은 Kubernetes 공식 문서를 참고하시기 바랍니다.

  1. HPA 설정하기 하기 전, Helm client를 설치합니다. 운영체제별 Helm 설치에 대한 자세한 설명은 Helm 공식 문서 > 헬름 설치하기를 참고하시기 바랍니다.

  2. HPA 부하 테스트를 위해 파드를 모니터링하는 metrics-server를 설치합니다.
    • metrics-server chart repository를 추가한 후, metrics-server를 설치합니다.

      코드 예제 metrics-server 설치 명령어

      helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
      helm upgrade --install metrics-server metrics-server/metrics-server --set hostNetwork.enabled=true
      
  3. 노드의 리소스 사용량을 정상적으로 모니터링 하는지 확인합니다.
    • metrics-server 설치 후 모니터링 정보가 수집되기까지 최대 5분 정도 소요될 수 있습니다.

      코드 예제 노드의 리소스 사용량 확인 명령어

      kubectl top node
      
  4. HPA와 자동 확장(Cluster Autoscaler)을 설정한 후, 부하 테스트를 진행하기 위한 php-server를 배포합니다.

    코드 예제 php-server App 배포 명령어

      apiVersion: apps/v1
      kind: Deployment
      metadata:
       name: php-apache
      spec:
      selector:
          matchLabels:
           run: php-apache
      replicas: 1
      template:
          metadata:
          labels:
              run: php-apache
          spec:
          containers:
          - name: php-apache
            image: ike-controlplane-provider.kr-central-1.kcr.dev/ike-cr/hpa-example:latest
              ports:
            - containerPort: 80
            resources:
               limits:
                   cpu: 500m
               requests:
                   cpu: 500m
             
      ---
             
      apiVersion: v1
      kind: Service
       metadata:
       name: php-apache
       labels:
          run: php-apache
      spec:
       ports:
       - port: 80
       selector:
          run: php-apache 
    

    코드 예제 php-server App 배포 확인 명령어

    kubectl apply -f php-apache.yaml
    
  5. 부하 테스트를 위해 HPA를 생성합니다.

    코드 예제 HPA 생성 명령어

    kubectl autoscale deployment php-apache --cpu-percent=10 --min=1 --max=10  // HPA 생성
    kubectl get hpa  // HPA 설정 확인
    

    코드 예제 실행 결과

    NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
    php-apache   Deployment/php-apache   46%/50%   1         10        5          28m
    
  6. HPA 및 자동 확장 설정 테스트를 위해 부하를 일으키는 파드를 실행합니다.

    코드 예제 파드 실행 명령어

    kubectl run -i --tty load-generator --rm --image=ike-controlplane-provider.kr-central-1.kcr.dev/ike-cr/busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
    
  7. 부하가 커지며 파드와 노드 개수가 정상적으로 증가하는 것을 확인합니다.
    • php-apache 서버 HPA가 발생하며, 리소스가 부족하여 스케줄링 되지 못한 일부 파드들은 Pending 상태가 됩니다.
    • 일부 파드가 스케줄링 되지 못하므로 리소스 추가를 위해 노드가 3개로 자동 확장됩니다.

      코드 예제 HPA 및 자동 확장 동작 결과 확인 명령어

      kubectl get pods -w  // 파드 개수 변경 확인
      kubectl get nodes -w // 노드 개수 변경 확인
      

      코드 예제 실행 결과

      NAME                             READY   STATUS    RESTARTS      AGE     
      php-apache-766d5cdd5b-2t5p8      0/1     Pending   0             44s
      php-apache-766d5cdd5b-5mhlk      0/1     Pending   0             29s
      php-apache-766d5cdd5b-5vjt6      0/1     Pending   0             14s
      php-apache-766d5cdd5b-74z87      1/1     Running   0             44s
      php-apache-766d5cdd5b-d49g9      0/1     Pending   0             29s
      php-apache-766d5cdd5b-fnlld      1/1     Running   0             44s
      php-apache-766d5cdd5b-nr5f2      0/1     Pending   0             29s
      php-apache-766d5cdd5b-t7zr8      0/1     Pending   0             29s
      php-apache-766d5cdd5b-vjjlz      1/1     Running   0             2m49s
      php-apache-766d5cdd5b-whjhw      0/1     Pending   0             14s
      
      
      NAME                STATUS     ROLES    AGE   VERSION
      host-10-187-5-177   Ready      <none>   51s    v1.24.6
      host-10-187-5-189   Ready      <none>   9m5s   v1.24.6
      host-10-187-5-98    Ready      <none>   69s    v1.24.6
      
  8. 노드가 추가되면 Pending 상태였던 파드들이 모두 Running 상태로 변경됩니다.

노드 풀 스케줄링 설정하기

노드 풀의 모든 노드에 대한 파드 스케줄링 여부를 설정할 수 있습니다.

  1. 카카오 i 클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택합니다.
  2. Cluster 탭에서 노드 풀 설정을 확인할 클러스터를 클릭합니다.
  3. 클러스터의 상세 페이지의 노드 풀 탭에서 설정할 노드 풀의 [더보기] 아이콘 > 노드 풀 스케줄링 설정을 클릭합니다.

    이미지. 노드 풀 상세 페이지

    이미지 노드 풀 스케줄링 설정

  4. 노드 풀 스케줄링 설정 팝업창에서 정보를 확인합니다.
    • 설정 수정 시, 변경할 정보를 선택하고 [저장] 버튼을 클릭합니다.
    • 노드 풀 상태와 관계없이 노드 풀 스케줄링 허용 또는 노드 풀 스케줄링 차단을 적용할 수 있습니다. 노드 풀 스케줄링 설정 팝업창에서 적용한 허용 또는 차단 설정에 따라 노드 풀 내 모든 노드의 스케줄링 상태가 일괄 변경됩니다.

    이미지. 노드 풀 상세 페이지 이미지 노드 풀 스케줄링 팝업창

노드 풀 삭제하기

더 이상 사용하지 않는 노드 풀을 삭제할 수 있습니다.

주의
노드 풀 삭제 시, 노드 풀에 포함된 모든 노드가 삭제되며 복구할 수 없습니다.

  1. 카카오 i 클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택합니다.
  2. Cluster 탭에서 삭제할 노드 풀이 속한 클러스터를 클릭합니다.
  3. 노드 풀 탭을 클릭한 후, 삭제할 노드 풀의 [더보기] 아이콘 > 노드 풀 삭제를 클릭합니다.

    이미지. 노드 풀 삭제 버튼 이미지 노드 풀 삭제

  4. 노드 풀 삭제 팝업창에서 정보를 입력하고, [삭제] 버튼을 클릭합니다.

    이미지. 노드 풀 삭제 이미지 노드 풀 삭제 버튼

노드 관리하기

Kubernetes Engine 서비스에서 노드를 관리하는 방법은 다음과 같습니다.

노드 상세 보기

노드의 상세 정보를 확인할 수 있습니다.

  1. 카카오 i 클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택합니다.
  2. Cluster 탭에서 상세 정보를 확인할 노드 풀이 속한 클러스터를 클릭합니다.
  3. 클러스터의 상세 페이지에서 노드 탭을 클릭한 후, 확인할 노드를 클릭합니다.
    • 또는 노드 풀 탭 > 노드 탭에서 상세 정보를 확인할 노드를 클릭합니다.
  4. 세부 정보 탭에서 정보를 확인합니다.

    이미지. 노드 세부 정보탭 이미지 노드 세부 정보 탭

    구분 설명
    인스턴스 ID 노드에 해당하는 VM 인스턴스 ID 정보
    - 인스턴스 ID 클릭 시 VM 인스턴스 페이지로 이동
    인스턴스 타입 노드에 해당하는 VM 인스턴스 타입
    인스턴스 생성일 노드에 해당하는 VM 인스턴스 생성 날짜
    Kubernetes 버전 노드의 쿠버네티스 버전
    키페어 노드에 설정된 키페어 정보
    - 노드 풀을 통해 지정한 키페어는 인스턴스 세부 정보에 노출되지 않음
    볼륨 노드에 해당하는 VM 인스턴스에 연결된 볼륨 정보
    사설 IP 노드의 사설 IP 정보
    노드 상세 요약 노드 성능과 상태 정보를 제공하며, [새로고침] 아이콘 클릭 시, 노드의 최신 정보를 갱신
    - 파드: 현재 노드에 실행 중인 파드 정보
    - 노드 컨디션: 현재 노드의 상세한 상태 정보
    - 테인트: 현재 노드에 설정된 테인트 정보
    - 레이블: 현재 노드에 설정된 레이블 정보
    - 어노테이션: 현재 노드에 설정된 어노테이션 정보
    - 할당 가능 리소스: 현재 노드에 할당 가능한 리소스 현황 정보
    - 이벤트: 현재 노드에 발생한 이벤트 정보

노드 모니터링하기

노드 리소스의 사용량 및 추세 정보 등 모니터링 정보를 특정 기간의 차트로 확인할 수 있습니다.

안내
Kubernetes Engine의 노드 모니터링을 위해 노드의 59100 포트에 node-exporter가 설치됩니다. node-exporter가 설치되는 59100 포트는 별도 사용할 수 없으니 참고해 주세요.

  1. 카카오 i 클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택합니다.
  2. Cluster 탭에서 상세 정보를 확인할 노드 풀이 속한 클러스터를 클릭합니다.
  3. 클러스터의 상세 페이지에서 노드 탭을 클릭한 후, 확인할 노드를 클릭합니다.
    • 또는 노드 풀 탭 > 노드 탭에서 상세 정보를 확인할 노드를 클릭합니다.
  4. 모니터링 탭에서 기간과 노드/파드를 선택하고, 정보를 확인합니다.

노드 모니터링

노드 선택 시, 해당 노드의 리소스 사용량과 추세 정보를 확인할 수 있습니다.

이미지. 노드 모니터링 정보 이미지 노드 모니터링 정보

구분 설명
CPU 사용량(millicores) 해당 노드의 CPU 사용량
Memory 사용량(Bytes) 해당 노드의 Memory 사용량
Disk 사용량(Bytes) 해당 노드의 Disk 사용량
RX Networ(byte/s) 해당 노드가 네트워크를 통해 수신받은 바이트 수
TX Network(byte/s) 해당 노드가 네트워크를 통해 전송하는 바이트 수
예약된 CPU 컴퓨팅 용량(%) 해당 노드 구성 요소에 예약된 CPU의 비율
예약된 Memory 컴퓨팅 용량(%) 해당 노드 구성 요소에 예약된 Memory의 비율
파드(개) 해당 노드에서 실행 중인 파드 개수
컨테이너(개) 해당 노드에서 실행 중인 컨테이너 개수

파드 모니터링

파드 선택 시, 노드에서 실행 중인 파드의 리소스 사용량과 추세 정보를 확인할 수 있습니다.

이미지. 파드 모니터링 정보

이미지 파드 모니터링 정보

구분 설명
CPU 사용량(millicores) 해당 파드의 CPU 사용량
Memory 사용량(Bytes) 해당 파드의 Memory 사용량
RX Network(byte/s) 해당 파드가 네트워크를 통해 수신받은 바이트 수
TX Network(byte/s) 해당 파드가 네트워크를 통해 전송하는 바이트 수
예약된 CPU 컴퓨팅 용량(%) 해당 파드에 예약된 CPU의 비율
예약된 Memory 컴퓨팅 용량(%) 해당 파드에 예약된 Memory의 비율

노드 스케줄링 설정하기

해당 노드에 대한 파드를 스케줄링 여부를 설정합니다.

안내
노드 스케줄링 설정은 노드 풀 스케줄링 설정보다 우선 적용되지 않습니다. 최종적으로 적용한 노드 풀 스케줄링 또는 노드 스케줄링 설정에 따라 개별 노드의 스케줄링 상태가 적용됩니다.

노드 설명
스케줄링 차단된 노드 스케줄링 차단된 노드는 차단 설정한 이후 시점부터 더 이상 파드가 할당되지 않으며 기존 할당된 파드는 정상적으로 실행됨
스케줄링 허용된 노드 스케줄링 허용된 노드의 경우 파드가 정상적으로 할당됨
  1. 카카오 i 클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택합니다.
  2. Cluster 탭에서 상세 정보를 확인할 노드 풀이 속한 클러스터를 클릭합니다.
  3. 클러스터 상세 페이지의 노드 탭에서 스케줄링을 설정한 노드의 [더보기] 아이콘 > 노드 스케줄링 차단을 클릭합니다.
    • 노드의 스케줄링 상태에 따라, 설정 가능한 스케줄링 차단 또는 스케줄링 허용이 노출됩니다.

    이미지. 노드 세부 정보탭 이미지 노드 스케줄링 허용/차단

  4. 노드 스케줄링 설정 팝업창에서 정보를 확인한 후 [확인] 버튼을 클릭합니다.
    • 노드의 현재 스케줄링 상태에 따라 허용 또는 차단에 대한 확인을 진행합니다.

    이미지. 노드 세부 정보탭 이미지 노드 스케줄링 설정 팝업창

노드 복구하기

Failed 상태인 노드를 복구할 수 있습니다.

주의
노드 복구 시, 해당 노드를 drain 후 새로운 노드를 생성하며 기존 노드는 삭제됩니다. 실행 중인 서비스가 영향을 받을 수 있으며 삭제된 노드는 복구할 수 없습니다. 복구하여 신규 생성된 노드는 노드에 해당하는 VM의 IP가 변경되니 유의하여 진행해야 합니다.

  1. 카카오 i 클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택합니다.
  2. Cluster 탭에서 상세 정보를 확인할 노드 풀이 속한 클러스터를 클릭합니다.
  3. 클러스터 상세 페이지의 노드 탭에서 복구할 노드의 [더보기] 아이콘 > 노드 복구를 클릭합니다.

    이미지. 노드 복구 이미지 노드 복구

  4. 노드 복구 팝업창에서 정보를 입력하고, [복구] 버튼을 클릭합니다.

    이미지. 노드 복구 팝업창 이미지 노드 복구 팝업창

노드 업데이트하기

클러스터에서 최신 Kubernetes 버전으로 업데이트 완료된 경우 또는 OS 버전 등 최신 노드 컴포넌트 업데이트로 노드에서 최신 이미지를 사용할 수 있는 경우, 노드를 업데이트할 수 있습니다.

Rolling 업데이트 절차

노드 업데이트 실행 시 다음 절차에 따라 Rolling 업데이트가 진행됩니다.

  1. 최신 이미지 버전의 신규 노드를 생성합니다.

  2. 기존 노드에서 실행되는 파드를 축출(Eviction)하고 노드를 스케줄 불가능(Unschedulable)한 상태로 전환합니다.

  3. 축출된 파드는 신규 노드에서 실행되며, 축출이 끝나면 기존 노드는 삭제합니다.

  4. 해당 과정을 모든 기존 노드에 대해 순차적으로 반복합니다.

업데이트 전 고려사항

업데이트하기 전 다음의 조건 중 하나라도 충족하지 않는 경우 업데이트가 진행되지 않습니다.

업데이트 시작 조건

조건 설명
클러스터 상태 Provisioned 상태
- 그 외 상태인 경우 업데이트 버튼이 노출되지 않음
노드 풀 상태 Running 상태
- 그 외 상태인 경우 업데이트 버튼이 노출되지 않음

업데이트하기

노드 풀이 업데이트 시작 조건을 만족한 경우 노드 풀을 업데이트할 수 있습니다.

주의
업데이트 시작 시 취소할 수 없으며, 업데이트 전으로 되돌릴 수 없습니다.

  1. 카카오 i 클라우드 콘솔에서 Kubernetes Engine 메뉴를 선택합니다.
  2. Cluster 탭에서 삭제할 노드 풀이 속한 클러스터를 클릭합니다.
  3. 노드 풀 탭을 클릭한 후, 업데이트 할 노드 풀의 Kubernetes 버전 > [업데이트] 버튼을 클릭합니다.
  4. 노드 풀 버전 업데이트 팝업창에서 정보를 확인하고 [업데이트] 버튼을 클릭합니다.

    이미지. 노드 풀 버전 업데이트 이미지 노드 풀 버전 업데이트

  5. 클러스터가 업데이트를 시작하면 클러스터의 상태는 Updating으로 전환됩니다. 클러스터 업데이트가 완료되면 Provisioned상태로 전환됩니다. 업데이트 중에는 신규 노드 풀의 추가와 기존 노드 풀 설정이 불가합니다.

업데이트 실패 시 확인사항

  • Rolling 업데이트 실행 중 노드를 drain 하는 과정에서 PDB(PodDisruptionBudget) 설정으로 인해 파드를 정상적으로 drain 할 수 없는 경우, 업데이트가 실패할 수 있습니다. 업데이트 실패 시 다음과 같은 방법으로 시도해볼 수 있습니다. 자세한 설명은 공식 Kubernetes 문서를 참고하시기 바랍니다.
  • 파드를 정상적으로 drain 하기 위해 PDB의 Min AvailableMax unavailable 값을 수정합니다. Max unavailable 값이 0일 경우 업데이트를 위한 노드 drain이 실패하므로 유의해야 합니다.
  • PDB를 백업한 후 PDB를 삭제합니다. 업데이트가 완료된 후 PDB를 다시 설정합니다.
  • Deployment, StatefulSet 등으로 배포되어 ReplicaSet으로 파드의 개수가 조절되는 경우 파드 drain이 실패할 수 있습니다. 이러한 경우 Deployment, StatefulSet 등을 미리 백업 후 삭제합니다.
  • 추가로 노드를 안전하게 drain 하는 방법에 대한 가이드는 공식 Kubernetes 문서에서 확인할 수 있습니다.
  • 노드 풀의 업데이트는 Rolling 업데이트 방식으로, 현재 노드와 동일한 수의 노드를 생성할 수 있어야 합니다. 따라서 사용자의 프로젝트에서 사용할 수 있는 VM 및 IaaS 리소스가 부족하면 업데이트가 실패할 수 있습니다.
  • 업데이트 중 노드가 Failed 상태로 전환되어 UpdatingPending 되는 경우, 노드 복구를 진행할 수 있습니다. 노드가 복구되면 업데이트가 정상적으로 다시 진행됩니다. 노드 풀이 Updating 상태로 장시간 지속 시, 헬프데스크의 기술 문의를 통해 문의하시기 바랍니다.