해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.
⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.
이 강의에서는 기반 소프트웨어를 업그레이드하거나 보안 패치와 같은 패치를 클러스터에 적용하는 것과 같은 유지 관리 목적으로 클러스터의 일부 노드를 중단하는 시나리오에 대해 논의합니다.
이러한 경우를 처리하는 데 사용할 수 있는 옵션을 살펴보겠습니다.
애플리케이션을 제공하는 몇 개의 노드와 파드가 있는 클러스터가 있습니다. 이러한 노드 중 하나가 다운되면 어떻게 될까요? 물론 노드에 있던 파드(Pod)에 액세스할 수 없게 될 것입니다. 그런데 해당 파드를 배포한 방법에 따라 사용자가 영향을 받을 수 있습니다.
예를 들어, blue 파드의 replicas가 여러 개 있으므로 blue 애플리케이션에 액세스하는 사용자는 온라인 상태인 다른 blue 파드를 통해 서비스를 받을 수 있으므로 서비스 영향을 받지 않습니다.
그러나 green 파드에 액세스하는 사용자는 green 애플리케이션을 실행하는 파드가 유일했기 때문에 영향을 받습니다.
이 경우에 Kubernetes는 무엇을 할까요? 노드가 즉시 다시 온라인 상태가 되면 kubelet 프로세스가 시작되고 파드가 다시 온라인 상태가 됩니다. 그러나 노드가 5분 이상 다운된 경우 파드는 해당 노드에서 종료됩니다. Kubernetes는 그것들을 죽은 것으로 간주하는 것입니다. 파드가 replicas 세트의 일부인 경우 다른 노드에서 다시 생성됩니다. 파드가 다시 온라인 상태가 될 때까지 기다리는 시간을 pod-eviction-timeout이라고 하며 컨트롤러 매니저에서 default값 5분으로 설정됩니다. 노드가 오프라인 상태가 될 때마다 마스터 노드는 노드가 죽은 것으로 간주하기 전에 최대 5분 동안 기다립니다.
pod-eviction-timeout 후 노드가 다시 온라인 상태가 되면 노드는 스케쥴링된 pod 없이 비어 있게 됩니다. blue 파드는 replia set의 일부였기 때문에 다른 노드에서 생성된 새 파드가 있었습니다. 그러나 green 파드는 replicas set의 일부가 아니므로 그냥 사라졌습니다.
따라서 노드에서 수행할 유지 관리 작업이 있는 경우, 노드에서 실행 중인 워크로드에 다른 replicas가 있음을 알고 있는 경우, 짧은 시간 동안 중단해도 괜찮은 경우, 노드가 다시 돌아올 것이 확실한 경우, 5분 이내에 온라인으로 빠르게 업그레이드하고 재부팅할 수 있습니다.
그러나 노드가 5분 안에 다시 온라인 상태가 될지는 확실하지 않습니다. 따라서 더 안전한 방법이 있습니다. 워크로드가 클러스터의 다른 노드로 이동되도록 의도적으로 모든 워크로드의 노드를 비울 수 있습니다.
$ kubectl drain node-1
기술적으로는 파드가 움직이는 것이 아니라, 노드를 drain하면 Pod가 해당노드에서 정상적으로 종료되고 다른 노드에서 다시 생성됩니다. 또한 노드는 cordoned되거나 unschedulabled로 표시됩니다. 즉, 특별히 제한을 제거할 때까지 이 노드에서 파드를 예약할 수 없습니다.
이제 노드를 재부팅할 수 있습니다. 다시 온라인 상태가 되었지만 여전히 unschedulabled입니다. Pod가 다시 스케쥴링될 수 있도록 uncordon해야 합니다.
$ kubectl uncordon node-1
다른 노드로 이동된 파드는 자동으로 대체되지 않습니다. 해당 파드가 삭제되었거나 클러스터에 새 파드가 생성된 경우 이 노드에 생성됩니다.
drain 및 uncordon 외에도 cordon이라는 또 다른 커맨드가 있습니다. Cordon은 단순히 노드를 unschedulable로 표시합니다. drain과 달리 기존 노드에서 파드를 종료하거나 이동하지 않습니다. 단순히 새 파드가 해당 노드에 스케쥴링되지 않았는지를 확인합니다.
'MLOps > Doker & Kubernetes' 카테고리의 다른 글
Udemy CKA 강의 정리 124: References (0) | 2023.01.13 |
---|---|
Udemy CKA 강의 정리 123: Kubernetes Software Versions (0) | 2023.01.13 |
Udemy CKA 강의 정리 119: Download Presentation Deck (0) | 2023.01.13 |
Udemy CKA 강의 정리 118: Cluster Maintenance - Section Introduction (0) | 2023.01.13 |
Udemy CKA 강의 정리 117: If you like it, Share it! (0) | 2023.01.13 |
댓글