IL-0139 Google Cloud · 2022-09-15kubernetesgcpnetworking
Google Cloud 는 2022-09-15 16:01 US/Pacific 에 Calico 를 켠 GKE 클러스터를 1.22 이상으로 업그레이드하면 파드가 Terminating 에 멈출 수 있다고 공지했다. 첫 공지는 1.22 이상에서 특정 조건일 때 파드 종료에 문제가 생긴다고만 알렸다. 9월 21일 공지부터는 Pending 으로 멈추는 경우도 포함했고, 원인을 Calico 네트워크 정책을 쓸 때 생기는 경쟁 조건이라고 밝혔다. 문제는 Calico 컴포넌트에서 생겼고, GKE 는 Calico 프로젝트와 함께 수정을 만들었다.
수정은 먼저 1.24.4-gke.800 에 들어갔다. 9월 16일에는 검증이 끝나면 1.22 와 1.23 으로 백포트를 서두르겠다고 했고, 9월 23일에는 1.23 과 1.22 에 수정을 넣은 다음 릴리스가 시작됐다고 알렸다. 그사이 고객에게는 kubelet 과 calico-node 재시작, Calico 네트워크 정책 끄기, Google Cloud 지원팀을 통한 내부 패치, 1.24.4-gke.800 이상으로의 수동 업그레이드를 우회책으로 안내했다. 2022-09-29 13:45 US/Pacific 에 영향받은 모든 사용자에게서 문제가 해결됐다고 발표했다. 공지 페이지는 asia-east1 부터 us-west4 까지 34개 리전을 영향 지역으로 적었다.
GKE 를 1.22 이상으로 업그레이드한 뒤 Calico 네트워크 정책을 쓰는 클러스터에서 파드가 Terminating 이나 Pending 상태에서 빠져나오지 못했다. 실제로 파드가 멈춘 클러스터는 소수였다.
파드를 종료할 때 Calico CNI 플러그인이 다음 오류를 냈다. Warning FailedKillPod 36m (x389 over 121m) kubelet error killing pod: failed to "KillPodSandbox" for "af9ab8f9-d6d6-4828-9b8c-a58441dd1f86" with KillPodSandboxError: "rpc error: code = Unknown desc = networkPlugin cni failed to teardown pod "myclient-pod-6474c76996" network: error getting ClusterInformation: connection is unauthorized: Unauthorized" 이 예에서는 121분 동안 같은 실패가 389번 반복됐다.
영향받는 버전은 1.22 의 모든 GKE 버전, 1.23 의 모든 GKE 버전, 1.24.4-gke.800 이전의 1.24 버전이었다. 클러스터 오토스케일러를 쓰면 경쟁 조건에 걸릴 확률이 높아졌다.
–
클러스터 오토스케일러를 쓰면 이 경쟁 조건에 걸릴 확률이 높아진다. 수정 버전으로 올리기 전에는 kubelet 과 calico-node 를 재시작해 멈춘 파드를 풀 수 있고, Calico 가 꼭 필요하지 않다면 Calico 네트워크 정책을 끄는 방법도 있다.
같은 원인 · 공통 kubelet
같은 원인 · 공통 kubelet
같은 원인 · 공통 파드 종료 처리
같은 원인 · 공통 kubelet
같은 원인 · 공통 kubelet
같은 원인 · 공통 kubelet