Node 상태관리

노드에 대해 업데이트가 있거나 이전을 해야한다거나 어떠한 사유로 인해 노드를 내려야할때

drain을 사용하면 pod을 다른노드로 옮기고 더이상 스케쥴링이 안되게 할 수 있다.

아래 명령어 실행시 해당 노드의 팟을 삭제후 다른노드에 recreate한다.

1
kubectl drain {node-name}

그뒤에 노드의 상태를 cordon으로 변경한다.

  • cordon : 노드에 팟이 더이상 스케쥴링 되지않음
  • uncordon : 노드에 팟 스케쥴링 허용

노드에 팟들을 삭제하지 않고 스케줄링만 방지하려면 아래의 명령어를 통해

1
2
kubectl cordon {node-name}
kubectl uncordon {node-name}

DaemonSet이 있을경우 추가적으로 --ignore-daemonset 옵션을 줘야하며 rs,rc,deployment등 으로 관리되지 않는 팟의 경우 데이터가 손실된다.

Corodn과 Uncordon은 Taints와 다르게 어떠한 조건도없이 해당 노드에 스케쥴링을 할지 안할지를 지정해주는 명령어이다.

버전정보

쿠버네티스는 마스터노드의 컴포넌트는 모두 같은 버전을 가지고 있다.

현재 쿠버네트스는 최근 3개의 버전에 대해 지원을 한다.

ex) 최신버전 1.19라고 하면 1.18, 1.17까지 지원을 한다.

버전 업데이트시 한단계씩 버전 업데이트를 권장한다.

ex)1.16에서 1.19업데이트시 1.16 → 1.17 → 1.18 → 1.19 순으로 업데이트

별도의 HA 구성을 하지않았으면 마스터노드 업데이트시 기능이 정지되는데 이때 워커노드는 유지되므로 서비스가 가능하다.

다만, 팟의 재시작, 분배, 시작 등 은 동작하지않는다.

쿠버네티스 클러스터 업데이트 방법

  1. 마스터노드 업데이트
    1. 마스터노드 드레인

      1
      
       kubectl drain master
      
    2. kubeadm 업데이트

      1
      
       apt update && apt install kubeadm={version}
      
    3. 업그레이드 계획 및 실행

      1
      2
      3
      
       kubeadm upgrade plan
       kubeadm upgrade apply {version}
      
      
    4. 마스터노드에 kubelet이 설치되어 있는 경우 업데이트 후 재시작

      1
      
       apt install kubelet={version} && service kubelet restart
      
    5. 마스터노드 cordon에서 uncordon으로 변경

      1
      
       kubectl uncordon master
      
  2. 워커노드 업데이트
    1. 워커노드에 접속
    2. 마스터노드에서 아래 명령어 실행

      1
      
       kubectl drain {worker-node-name}
      
    3. kubeadm 업데이트

      1
      
       apt update && apt install kubeadm={version}
      
    4. 업그레이드 계획 및 실행

      1
      
       kubeadm upgrade node
      
    5. kubelet 업데이트 및 재시작

      1
      
       apt install kubelet={version} && service kubelet restart
      
    6. 마스터노드에서 WokerNode uncordon으로 변경

      1
      
       kubectl uncordon {worker-node-name}
      

백업 및 복구

쿠버네티스 클러스터에서 백업 해야할 정보는 아래와같다.

오브젝트 정보(yaml 파일), ETCD, PV(영구 볼륨)

아래명령어를 사용하여 생성된 오브젝트를 yaml파일로 변환하여 백업할 수 있다.

1
kubectl get all --all-namespace -o yaml > all-object.yaml

추후에 kubectl apply 명령어로 롤백시킬 수 있다.

ETCD는 buit-in 스냅샷을 지원한다. 자세한내용은 아래글에 더 자세히 설명되어있다. mmumshad/kubernetes-the-hard-way