Cloud/Docker & Kubernetes

쿠버네티스 노드 유지보수

DGO 2023. 4. 20. 02:55

쿠버네티스는 여러 가지 상황에서도 파드를 안정적으로 작동하도록 관리하며 노드의 관리도 가능하다.

 

만약 문제가 있는 노드에 파드를 할당하면 문제가 생길 가능성이 높으며 해당 노드에 영향도가 적은 파드를 할당 하여야 한

다.

 

cordon

 

쿠버네티스는 모든 노드에 균등하게 파드를 할당하려고 하므로 cordon 기능을 사용해 해당 노드에 더이상 파드가 할당 되지 않고 유지되도록 설정이 가능하다.

 

우선 이전 글의 nginx_spec.yaml (replicas=3) 을 활용해 디플로이먼트를 생성하면 노드별로 파드가 하나씩 배분된다

 

 

그리고 cordon 명령을 실행하면 할당되지 않게 스케줄되지 않는 상태로 변경된다(schedulingDisabled)

 

kubectl cordon <node>

 

이 상태에서 파드 수를 증가시키고 확인하면 cordon 명령이 실행된 노드에는 파드가 할당되지 않는 것을 확인 가능하다.

 

 

uncordon 명령으로 해제가 가능하다.

 

 

drain

 

쿠버네티스를  사용하다 보면 비정기적인 유지보수를 위해 노드를 꺼야 하는 상황이 발생하는데 이런 경우를 대비해 drain 기능이 제공된다. drain을 사용하면 지정된 노드의 파드를 전부 다른 곳으로 이동시켜 해당 노드를 유지보수가 가능할 수 있게 한다.

kubectl drain <node>

 

drain을 실행하면 데몬셋을 지울 수 없어서 명령을 수행 할 수 없다고 나오는데 drain은 실제로 파드를 옮기는 것이 아니라 노드에서 파드를 삭제하고 다른 곳에 다시 생성하는 개념이기 때문에 데몬셋은 각 노드에 1개만 존재하는 파드라서 제거 할 수가 없다.

 

ignore-daemonsets 옵션을 사용하여 무시하고 진행 뒤 pod를 확인하면 w3-k8s의 pod가 삭제되고 다른 노드에 할당된 것

확인 가능하다.

 

 

rollout

 

파드를 운영하다 보면 컨테이너에 새로운 기능을 추가하거나 치명적인 버그가 발생해 버전을 업데이트 하거나 롤백해야 하는데 rollout 기능을 활용 할 수 있다.

 

apply로 파드를 생성 할때 --record 옵션으로 생성하면 배포한 정보의 history를 rollout history 명령으로 확인이 가능하다.

 

 

파드 정보를 확인하고 해당 IP로 curl -I(헤더 정보를 가져옴) 명령을 실행시키면 현재 nginx 버전이 1.23.4인 것을 알 수 있다.

 

 

kubectl set image 명령어로 --record 옵션을 추가해 nginx의 버전을 1.16.1으로 업데이트하고 확인해 보면 버전 변경이 진행 되었고 rollout history 명령을 실행하면 아래와 같이 이력이 남게 된다.

 

 

복구 시에는 rollout undo 명령을 사용하여 전 단계로 롤백이 가능하다.

 

 

rollout history 명령을 실행하면 롤백된 이력을 확인 가능하고 rollout status 명령을 통해 변경이 정상적으로 적용 되었는지 확인 가능하다.

 

 

--to-revision= <REVISION> 옵션을 사용해 특정 시점으로도 롤백이 가능하다.