본문 바로가기
Kubernetes/Management

K8s - Master node의 role이 '<none>' 일 때

by 여행을 떠나자! 2021. 9. 30.

1. Environments

- Kubernetes 1.16.15

- Master node list : iap01, iap02, iap03

 

2. Problem

- iap02 Master node(Control plane)의 Role이 master가 아닌 <none> 상태로 되어 있음

$ k get nodes iap01 iap02 iap03
NAME    STATUS   ROLES    AGE     VERSION
iap01   Ready    master   421d    v1.16.15
iap02   Ready    <none>   6d21h   v1.16.15
iap03   Ready    master   420d    v1.16.15
$

 

3. Cause analysis

- iap02 노드는 'node-role.kubernetes.io/master=' 라벨이 누락되어 있음

- 일시적으로 리소스가 부족하여 Master 노드에서 POD 스케줄링 하도록 변경해서 운영 중, iap02 서버를 재 기동한 내역이 있음

$ k describe node iap01 iap02 iap03 | grep Taints
Taints:             node-role.kubernetes.io=master:NoSchedule
Taints:             node-role.kubernetes.io=master:NoSchedule
Taints:             node-role.kubernetes.io=master:NoSchedule
$ k describe node iap01 | sed -e '/Labels:/,/Annotations:/!d'
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=iap01
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/master=
Annotations:        csi.volume.kubernetes.io/nodeid: {"rook-ceph.cephfs.csi.ceph.com":"iap01","rook-ceph.rbd.csi.ceph.com":"iap01"}
$ k describe node iap02 | sed -e '/Labels:/,/Annotations:/!d'
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=iap02
                    kubernetes.io/os=linux
Annotations:        csi.volume.kubernetes.io/nodeid: {"rook-ceph.cephfs.csi.ceph.com":"iap02"}
$ k describe node iap03 | sed -e '/Labels:/,/Annotations:/!d'
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=iap03
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/master=
Annotations:        csi.volume.kubernetes.io/nodeid: {"rook-ceph.cephfs.csi.ceph.com":"iap03","rook-ceph.rbd.csi.ceph.com":"iap03"}
$

 

 

4. Solution

- iap02 노드에 라벨을 추가하였으며, role이 master로 변경 되었음

$ k label nodes iap02 node-role.kubernetes.io/master=
node/iap02 labeled
$ k get nodes iap02
NAME    STATUS   ROLES    AGE     VERSION
iap02   Ready    master   6d21h   v1.16.15
$

 

 

5. Taint 테스트

- Master node에서 POD 스케줄링할 수 있도록 변경

$ kubectl taint nodes iap03 node-role.kubernetes.io=master:NoSchedule-
node/iap03 untainted
$ k get nodes iap03
NAME    STATUS   ROLES    AGE    VERSION
iap03   Ready    master   421d   v1.16.15
$ kubectl describe node iap03 | grep Taints
Taints:             <none>
$

- POD들이 iap03 노드에 스케줄링 되어 동작

$ k describe nodes iap03 | egrep 'Non-terminated' -A 7
Non-terminated Pods:          (32 in total)
  Namespace                   Name                                                               CPU Requests  CPU Limits   Memory Requests  Memory Limits  AGE
  ---------                   ----                                                               ------------  ----------   ---------------  -------------  ---
  ccp                         test-0                                                             600m (7%)     2500m (31%)  1152Mi (3%)      2Gi (6%)       7d2h
  elastic-cluster             emo-dev-es-data-nodes-2                                            100m (1%)     100m (1%)    2Gi (6%)         2Gi (6%)       7d1h
  elastic-cluster             emo-dev-es-master-nodes-1                                          100m (1%)     100m (1%)    2Gi (6%)         2Gi (6%)       7d1h
  elastic-cluster             observer-es-data-nodes-1                                           100m (1%)     100m (1%)    2Gi (6%)         2Gi (6%)       7d5h
  elastic-cluster             observer-es-master-nodes-0                                         100m (1%)     100m (1%)    2Gi (6%)         2Gi (6%)       7d5h
$

- Master node에서 POD 스케줄링할 수 없도록 변경

   기 동작중인 POD들은 계속 실행 중이며, 제거하기 위해서는 'k rollout restart deployments ...' 명령어를 실행 해야 함

$ k taint nodes iap03 node-role.kubernetes.io=master:NoSchedule
node/iap03 tainted
$

'Kubernetes > Management' 카테고리의 다른 글

Knative 이해  (0) 2021.10.05
K8s - No more than 110 pods per node  (0) 2021.10.02
Istio - Virtual service config  (0) 2021.09.23
Istio 1.5 구성  (0) 2021.09.23
Cert-manager with LetsEncrypt (HTTP challenge)  (0) 2021.09.23

댓글