pod를 upgrade할 때, pod들은 자동으로 down 되었다가 up이 된다.
그런데 이때, default 타이머가 5분으로, k8s는 5분동안 pod가 살아나지 않으면 죽었다고 판단 후 다른 node에 pod를 생성한다.
그럼, Node가 down될 경우는 어떨까?
(지금은 아무것도 없는) 2번째 Node에 파랑, 초록 pod들이 있었다.
그런데, Node 2가 down되면, replica에 속한 파란 노드의 경우 다른 node에 생성될 수 있다.
그런데, 초록이는 혼자 있던 pod(=daemon set)이고 replicaset에 속하지 않았기 때문에 다른 node로 생성될 수 없다.
그런데, 그림 상에는 왜 초록색pod가 4번째 pod에 있냐면,
# kubectl drain node-2
위 drain command를 통해, Node-2에 속한 pod들을 다른 Node로 이동시킨 것이다.
* drain: 해당Node에서 실행 중인 pod들을 다른 곳으로 이동시키는 명령어
직접 수행해보자.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker-for-desktop Ready master 4d v1.10.3
$ kubectl drain docker-for-desktopnode
"docker-for-desktop" cordonederror: unable to drain node "docker-for-desktop", aborting command...There are pending nodes to be drained:docker-for-desktoperror: DaemonSet-managed pods (use --ignore-daemonsets to ignore): kube-proxy-4s52d
우선 kubectl drain을 해보면 다음처럼 에러가 납니다. 데몬셋으로 떠 있는 포드가 존재하기 때문입니다.
// DaemonSet의 경우 drain을 사용할 경우 반드시 아래 옵션을 줘야한다.
** --ignore-daemonsets=true 옵션을 주고 다시 실행하면 정상적으로 실행되는걸 확인할 수 있습니다.
$ kubectl drain docker-for-desktop --ignore-daemonsets=true
node "docker-for-desktop" already cordonedWARNING: Ignoring DaemonSet-managed pods: kube-proxy-4s52dpod "compose-api-6fbc44c575-k6fz8" evictedpod "compose-7447646cf5-w4mzb" evictedpod "kubernetes-simple-app-57585656fc-nvkxm" evictedpod "kube-dns-86f4d74b45-dt5rb" evictednode "docker-for-desktop" drained
출처:
https://arisu1000.tistory.com/27845 [아리수]
그럼 cordon 명령어는 뭘까?
* cordon: 해당 노드에 더이상 pod들이 scheduling되지 않게 하는 것(존재하던 pod는 유지)
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker-for-desktop Ready master 4d v1.10.3
$ kubectl cordon docker-for-desktop
node "docker-for-desktop" cordoned
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
docker-for-desktop Ready,SchedulingDisabled master 4d v1.10.3
$ kubectl uncordon docker-for-desktop// scheduling되게 다시 변경
그럼 새로운 pod가 생성될 때, 해당 node에는 scheduling이 되지 않는다.
그리고, cordon 속성을 제거하거나 / drain 속성을 풀려면 'uncordon'을 수행하면 된다.
$ kubectl uncordon docker-for-desktop// scheduling되게 다시 변경
출처: https://arisu1000.tistory.com/27845 [아리수]
출처: Udemy 사이트의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의