실제 운영을 할 떄 여러 노드에 파드를 할당하고 처리하다보면 노드에 문제가 생겨 스케줄러가 해당 노드에 파드를 할당하지 않도록 해야할 때가 있다.
쿠버네티스에 해당 노드가 문제가 있으니 파드를 할당받지 않게 해달라고 하는 기능이 cordon이다.
예시로 설명을 해보자.
가령 우리가 다음처럼 3개의 노드가 있다고 해보자.
사진의 Node열을 보면 node가 3개이며 디플로이먼트로 생성한 3개의 pod가 각 노드에 균등하게 1개씩 할당된 것을 볼 수 있다.
이 중 하나의 노드에 cordon을 걸어보겠다.
다음처럼 해당 node에 schedulineDisabled로 더 이상 파드가 할당되지 않은 상태로 변경되었다.
kubectl cordon 노드명
이렇게 한 상태로 파드 수를 늘려보겠다.
kubectl scale deployment 디플로이먼트명 --replicas=수
늘린 결과를 보면 기존에 생성되어있었던 노드안의 파드 외에(기존 1개)
나머지 scale up으로 생긴 pod는 다른 2 노드에 할당된 것을 볼 수 있습니다.
cordon을 해제하면 정상 노드로 돌아옵니다.
kubectl uncordon 노드명
쿠버네티스를 사용하다보면 유지보수를 해야하는 상황이 생기고 이 때문에 잠시 노드를 꺼야할 수 있습니다. 그 때 꺼야하는 노드에 있는 파드를 다른곳으로 이동시켜두어야겠죠.
이 때 사용하는 것이 drain 입니다.
그러나 노드에는 각 노드에 1개씩만 존재하는 데몬셋이라는 것이 있어 에러가 날 수 있습니다.
따라서 다음 옵션을 추가해서 진행하면 됩니다.
kubectl drain 노드명 --ignore-daemonsets
# schedulingDisable 걸렸는지 확인
kubectl get nodes
# 해제
kubectl uncordon 노드명
버그 등의 이유로 버전 업데이트를 해야하는 경우가 있습니다.
업데이트할 내용으로 .yaml 파일을 작성 후 다시 디플로이 하면됩니다.
다만 배포한 정보의 히스토리를 기록하기 위해 --record 옵션을 추가하는 것이 중요합니다.
kubectl apply -f 디플로이먼트명.yaml --record
# rollout history 보기
kubectl rollout history deployment 디플로이먼트명
실패 이유 상황을 좀 더 자세히 보아야 합니다.
kubectl describe deployment 디플로이먼트명
# 업데이트 취소하기
kubectl rollout undo deployment 디플로이먼트명
reference 참조 : 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커