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 |
댓글