본문 바로가기
IT 기술/k8s

[cka] OS Upgrades

by Geunny 2024. 7. 10.
반응형

1. Let us explore the environment first. How many nodes do you see in the cluster?
Including the controlplane and worker nodes.

 

controlplane ~ ➜  k get nodes
NAME           STATUS   ROLES           AGE     VERSION
controlplane   Ready    control-plane   8m43s   v1.30.0
node01         Ready    <none>          7m55s   v1.30.0

 

answer : 2

 

2. How many applications do you see hosted on the cluster?
Check the number of deployments in the default namespace.

 

controlplane ~ ➜  k get deployments.apps 
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
blue   3/3     3            3           86s

 

answer : 1

 

3. Which nodes are the applications hosted on?

 

controlplane ~ ➜  k get pods -o wide
NAME                   READY   STATUS    RESTARTS   AGE     IP           NODE           NOMINATED NODE   READINESS GATES
blue-fffb6db8d-chr86   1/1     Running   0          47s     10.244.0.5   controlplane   <none>           <none>
blue-fffb6db8d-dj8d7   1/1     Running   0          47s     10.244.0.6   node01         <none>           <none>
blue-fffb6db8d-klmz6   1/1     Running   0          4m26s   10.244.0.4   controlplane   <none>           <none>

 

answer : controlplane, node01

 

4. We need to take node01 out for maintenance. Empty the node of all applications and mark it unschedulable.

controlplane ~ ✖ k drain node01 --ignore-daemonsets
node/node01 already cordoned
Warning: ignoring DaemonSet-managed Pods: kube-flannel/kube-flannel-ds-vwp7x, kube-system/kube-proxy-4mjk4
evicting pod default/blue-fffb6db8d-p56pt
evicting pod default/blue-fffb6db8d-8lghd
pod/blue-fffb6db8d-8lghd evicted
pod/blue-fffb6db8d-p56pt evicted
node/node01 drained

 

https://kubernetes.io/docs/reference/kubectl/generated/kubectl_drain/

 

kubectl drain

Production-Grade Container Orchestration

kubernetes.io

 

 

5. What nodes are the apps on now?

controlplane ~ ➜  k get pods -o wide
NAME                   READY   STATUS    RESTARTS   AGE     IP           NODE           NOMINATED NODE   READINESS GATES
blue-fffb6db8d-chr86   1/1     Running   0          47s     10.244.0.5   controlplane   <none>           <none>
blue-fffb6db8d-dj8d7   1/1     Running   0          47s     10.244.0.6   controlplane   <none>           <none>
blue-fffb6db8d-klmz6   1/1     Running   0          4m26s   10.244.0.4   controlplane   <none>           <none>

 

answer : controlplane

 

6. The maintenance tasks have been completed. Configure the node node01 to be schedulable again.

controlplane ~ ➜  k uncordon node01
node/node01 uncordone

 

https://kubernetes.io/docs/tasks/administer-cluster/safely-drain-node/#use-kubectl-drain-to-remove-a-node-from-service

 

Safely Drain a Node

This page shows how to safely drain a node, optionally respecting the PodDisruptionBudget you have defined. Before you begin This task assumes that you have met the following prerequisites: You do not require your applications to be highly available during

kubernetes.io

 

 

7. How many pods are scheduled on node01 now in the default namespace?

controlplane ~ ➜  k get pods -o wide
NAME                   READY   STATUS    RESTARTS   AGE     IP           NODE           NOMINATED NODE   READINESS GATES
blue-fffb6db8d-chr86   1/1     Running   0          5m11s   10.244.0.5   controlplane   <none>           <none>
blue-fffb6db8d-dj8d7   1/1     Running   0          5m11s   10.244.0.6   controlplane   <none>           <none>
blue-fffb6db8d-klmz6   1/1     Running   0          8m50s   10.244.0.4   controlplane   <none>           <none>

 

answer : 0

 

8.  Why are there no pods on node01?

 

uncordon 하여도 이미 drain 되어진 pod는 옮겨지지 않는다.  

새로 만들어진 pod 인 경우에만 스케쥴링 될수 있다.

 

answer : Only when new pods are created they will be scheduled.

 

 

9. Why are the pods placed on the controlplane node?
Check the controlplane node details.

answer : controlplane node does not have any tains

10. Time travelling to the next maintenance window…

 

11. We need to carry out a maintenance activity on node01 again. Try draining the node again using the same command as before: kubectl drain node01 --ignore-daemonsets
Did that work?

 

answer : NO

 

12.  Why did the drain command fail on node01? It worked the first time!

controlplane ~ ➜  k get nodes
NAME           STATUS                     ROLES           AGE   VERSION
controlplane   Ready                      control-plane   24m   v1.30.0
node01         Ready,SchedulingDisabled   <none>          24m   v1.30.0

controlplane ~ ➜  k get pods -o wide
NAME                   READY   STATUS    RESTARTS   AGE     IP           NODE           NOMINATED NODE   READINESS GATES
blue-fffb6db8d-chr86   1/1     Running   0          13m     10.244.0.5   controlplane   <none>           <none>
blue-fffb6db8d-dj8d7   1/1     Running   0          13m     10.244.0.6   controlplane   <none>           <none>
blue-fffb6db8d-klmz6   1/1     Running   0          16m     10.244.0.4   controlplane   <none>           <none>
hr-app                 1/1     Running   0          3m33s   10.244.1.4   node01         <none>           <none>

controlplane ~ ➜  k drain node01
node/node01 already cordoned
error: unable to drain node "node01" due to error:[cannot delete cannot delete Pods that declare no controller (use --force to override): default/hr-app, cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-flannel/kube-flannel-ds-vwp7x, kube-system/kube-proxy-4mjk4], continuing command...
There are pending nodes to be drained:
 node01
cannot delete cannot delete Pods that declare no controller (use --force to override): default/hr-app
cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-flannel/kube-flannel-ds-vwp7x, kube-system/kube-proxy-4mjk4

 

hr-app 은 replicaset 으로 만들어진 pod 가 아니기 때문에 삭제후에 drain 해야한다.

 

answer : there is a pod in node01 which is not part of a replicaset

 

 

13. What is the name of the POD hosted on node01 that is not part of a replicaset?

answer : hr-app

 

14. What would happen to hr-app if node01 is drained forcefully?
Try it and see for yourself.

force 로 drain 한다면 해당 파드는 삭제되고 재 스케쥴링 될수 없다.

 

answer : hr-app will be lost forever

 

15. Oops! We did not want to do that! hr-app is a critical application that should not be destroyed. We have now reverted back to the previous state and re-deployed hr-app as a deployment.

16. hr-app is a critical app and we do not want it to be removed and we do not want to schedule any more pods on node01.
Mark node01 as unschedulable so that no new pods are scheduled on this node.
Make sure that hr-app is not affected.

 

controlplane ~ ➜  k cordon node01
node/node01 cordoned

 

 

drain 과 cordon 차이

 

cordon

cordon 명령어는 특정 노드에 새로운 Pod가 스케줄링되지 않도록 설정합니다. 이 명령어는 기존에 노드에 있는 Pod에는 영향을 주지 않으며, 단순히 해당 노드에 새로운 Pod가 할당되지 않도록 막는 역할을 합니다.

 

주요 특징:

 

새로운 Pod 스케줄링 방지: cordon된 노드에는 새로운 Pod가 스케줄링되지 않습니다.

기존 Pod 유지: 기존에 노드에 있는 Pod는 그대로 유지됩니다.

비파괴적: 노드의 상태를 변경하지 않고 단순히 새로운 Pod 할당을 방지합니다.

 

drain

 

drain 명령어는 특정 노드에서 모든 Pod를 안전하게 제거합니다. 이는 노드를 유지보수 모드로 전환하거나 클러스터에서 제거할 때 주로 사용됩니다. drain 명령어는 ReplicaSet, Deployment, DaemonSet, StatefulSet 등에 의해 관리되는 Pod를 다른 노드로 이동시키고, ReplicaSet으로 관리되지 않는 Pod는 기본적으로 삭제하지 않습니다.

 

주요 특징:

 

Pod 제거: 노드에서 모든 Pod를 제거합니다.

Pod 이동: ReplicaSet, Deployment, DaemonSet, StatefulSet 등에 의해 관리되는 Pod를 다른 노드로 이동시킵니다.

강제 옵션: --force 옵션을 사용하여 관리되지 않는 Pod도 제거할 수 있습니다.

데이터 보존 옵션: --delete-emptydir-data 옵션을 사용하여 emptyDir 볼륨의 데이터를 삭제할 수 있습니다.

 

 

요약 비교

특성 cordon drain
새로운 Pod 스케줄링 차단 차단
기존 Pod 유지 제거
ReplicaSet 관리 Pod 영향을 주지 않음 다른 노드로 이동
관리되지 않는 Pod 영향을 주지 않음 기본적으로 영향을 주지 않음 (--force 필요)
주 용도 노드 유지보수 전 스케줄링 방지 노드 유지보수 또는 제거 시 안전한 Pod 이동
주요 옵션 없음 --ignore-daemonsets, --force, --delete-emptydir-data

'IT 기술 > k8s' 카테고리의 다른 글

[cka] Backup and Restore Methods  (0) 2024.07.12
[cka] Cluster Upgrade Process  (0) 2024.07.11
[cka] Init Containers  (0) 2024.07.06
[cka] Multi Container PODs  (0) 2024.07.05
[cka] Secrets  (0) 2024.07.05

댓글