IL-0185 Hans H. Kim · 2023-05-07 (게시일)kubernetes
이 클러스터는 Kubespray 로 구성했고, master 노드 세 대로 HA 를 이루고 있었다. 하드웨어 장애로 첫 번째 control plane 노드인 master 1번이 죽었다. Kubespray 는 master 1번 노드에 특별한 권한을 주기 때문에, 이 노드를 복구하는 일은 매우 까다롭다.
복구는 Kubespray inventory 의 [kube_control_plane] 순서를 node-1, node-2, node-3 에서 node-2, node-3, node-1 로 바꿔 1번 역할을 다른 노드에 넘기는 데서 시작했다. 그다음 장애 난 장비를 클러스터에서 제거했다. kube-public 네임스페이스의 cluster-info ConfigMap 에서는 옛 control plane 장비의 IP 를 살아 있는 장비의 IP 로 바꾸고 certificate-authority-data 값도 바꿨다.
새 노드에서는 swap 을 끄고 systemd-resolved 를 실행한 뒤 docker, conntrack, kubeadm, kubelet 을 설치했다. 이어서 인증서를 복사하고 CNI 플러그인 v0.9.1 을 설치했다. 그런 다음 kubeadm join 에 --control-plane 과 --skip-phases control-plane-join/etcd 옵션을 주어 새 노드를 control plane 에 합류시켰고, 마지막으로 etcd 노드를 추가했다.
글쓴이는 control plane 세 대 가운데 한 대 이상이 죽으면 Kubernetes 에서 가장 중요한 etcd 의 쿼럼이 깨지므로, 다른 노드가 더 망가지기 전에 etcd 를 복구해야 한다고 적었다.
Kubernetes 클러스터의 master 노드에서 디스크 장애가 났다. 커널 로그에 "[HAWKEYE] kernel:: [22329228.540857] blk_update_request: I/O error, dev sda, sector 795030104 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0, at" 오류가 찍혔다.
디스크 장애로 sda 영역이 읽기 전용 상태로 바뀌었고, 디스크 교체와 OS 재설치가 필요해졌다. 장애 난 노드는 세 대로 HA 를 구성한 master 가운데 1번 노드였다.
증상 ? 노드 NotReady
커널 로그에 sda 디스크의 blk_update_request I/O 오류가 찍히면서 디스크 장애를 알았다.
–
Kubespray 는 첫 번째 control plane 노드에 특별한 권한을 주기 때문에, master 세 대로 HA 를 구성해도 1번 노드의 장애 복구는 매우 까다롭다. 복구하려면 inventory 순서를 바꿔 1번 역할부터 다른 노드로 넘겨야 한다. control plane 노드가 죽으면 etcd 쿼럼이 위험해지므로 다른 노드가 더 망가지기 전에 etcd 를 되살려야 한다.
–