본문 바로가기

공부기록/MLOps | Infra

[k8s] drain and cordon

반응형

OS Upgrades

: cluster의 노드를 유지보수(ex. Security path)를 위해 안정적으로 내리려면 어떻게 해야할까?

  • node를 내리려고 할 때 5분안에 node를 살리면 pod가 실행되지만 5분이 지나면 pod는 terminated 된다.
  • 이것은 kube-controller-manager에서 --pod-eviction-timeout=5m0s이 defalut 값이 5분으로 설정되어 있기 때문이다.
  • pod eviction time이후 노드가 다시 생성되었을 때 replica set에 있는 pod들은 다른 노드에서 살아나지만, 그렇지 않은 pod들은 복원되지 못한다.
  • 만약 노드가 다운되는 시간이 5분 이내일 것으로 예상되면 quick upgradereboot가 가능하지만, 그렇지 않을 것으로 예상될 경우 사용할 수 있는 안전한 방법은 다음과 같다.
    • drain
    • cordon



kubectl drain

  • drain은 노드 관리 등의 이유로 지정된 노드에 있는 파드들을 다른 노드로 이동시키는 명령이다.

 

kubectl drain node-name

 

  • 먼저 새로운 파드를 노드에 스케줄링해서 실행하지 않도록 설정한다.
  • 기존 해당 노드에서 실행중이던 파드들을 삭제한다.

 

  • 이떄, 노드에 daemon set로 실행한 파드들이 있으면 drain설정을 적용할 수 었다. daemon set로 실행한 파드들은 삭제해도 daemon set가 즉시 재실행 시키기 때문이다.
  • --ignore-daemonsets=true option을 설정하면 데몬세트로 실행한 파드들을 무시하고 드레인 설정을 적용할 수 있다.

 

  • controller를 이용하지 않고 실행한 파드들도 드레인 설정을 적용할 수 없다.
  • controller가 관리하는 pod들은 삭제되더라도 클러스터 안 다른 노드에 재생성되는데 --force option을 설정하면 드레인 설정을 적용해 파드를 강제로 삭제할 수 있다.


- static pod들은 kubelet이 실행하고, kube-apiserver를 이용해서 실행되지 않았으므로 삭제되지 않는다.

kubectl cordon

  • cordon 명령은 지정된 노드에 추가로 파드를 스케줄링해서 실행하지 않도록 한다.

 

kubectl cordon node-name

 

uncordon

  • uncordon할 경우 cordon 된 상태를 해제시켜준다.

 

kubectl uncordon node-name



반응형

'공부기록 > MLOps | Infra' 카테고리의 다른 글

[k8s] Backup and Restore Methods  (0) 2022.08.29
[k8s] Cluster Upgrade Process  (0) 2022.08.29
[k8s] Multi Container PODs  (0) 2022.08.28
[k8s] Application Lifecycle Management  (0) 2022.08.28
[k8s] Rolling Updates and Rollbacks  (0) 2022.08.28