{"id":"IL-0152","org":"DigitalOcean","date":"2024-01-23","docs":[],"title":{"en":"An incorrect configuration applied during maintenance made an internal infrastructure cluster automatically delete the control planes of 200 DOKS clusters in FRA1","ko":"정비 작업 중 FRA1 내부 인프라 클러스터에 잘못된 설정이 들어가 그 위에서 돌던 DOKS 클러스터 200개의 컨트롤 플레인이 자동으로 삭제됐다."},"domain":["kubernetes"],"impact":{"scope":"Control planes of 200 DOKS clusters deleted and restored from etcd backups up to 12 hours old; workloads on the nodes kept running","users":"Customers of the 200 affected DOKS clusters","region":"FRA1"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"When managed control planes run as resources in another cluster, one configuration mistake in that cluster can delete hundreds of control planes at once through ordinary automation. The etcd backups limited the damage, but their twice-daily schedule set the worst case at 12 hours of lost control plane state, and the recovery tooling itself needed patching during the incident.","ko":"컨트롤 플레인을 받치는 인프라 클러스터의 설정 변경 하나가 한 리전의 DOKS 클러스터 200개의 컨트롤 플레인을 한꺼번에 지웠다. 하루 두 번 받아 둔 etcd 백업으로 클러스터를 되살릴 수 있었지만, 컨트롤 플레인 데이터는 백업 주기만큼, 최대 12시간 전 상태로 돌아갔다. 컨트롤 플레인이 사라진 동안에도 노드의 워크로드는 계속 돌았다."},"related":[],"sources":[{"url":"https://status.digitalocean.com/incidents/s4kt15q6xq19","kind":"official-status","license":"unknown","archived":null}],"summary":{"en":"In FRA1, the control planes of a subset of DOKS clusters ran on an internal infrastructure cluster. During a maintenance operation an incorrect configuration was inadvertently applied to that cluster at 12:21 UTC. It set off an automatic deletion process on the compute resources hosting the control planes, and by 12:30 all DOKS control planes on that infrastructure cluster had been removed, with loss of control plane data.\n\nThe configuration was identified as the cause at 12:36. Recovery restored each cluster's etcd from its latest backup; every DOKS etcd cluster is backed up twice a day on a randomized schedule per cluster, so in the worst case a cluster's control plane data was up to 12 hours old. After etcd, the stateless control plane components were restored. Unexpected problems with the recovery mechanism from 13:00 needed extra patching and were fully addressed by 15:00. All affected highly available DOKS clusters were recovered by 20:31 and all affected clusters by 21:21. Customers might need to reconfigure some Kubernetes resources, and support contacted them directly.","ko":"2024-01-23 12:21 UTC 에 DigitalOcean 은 정비 작업 중 FRA1 리전의 내부 인프라 클러스터에 잘못된 설정을 적용했다. 이 인프라 클러스터는 FRA1 의 DOKS 클러스터 일부를 받치고 있었다. DOKS 는 DigitalOcean 의 관리형 쿠버네티스 서비스다. 설정 변경이 연쇄 반응을 일으켜, DOKS 컨트롤 플레인이 올라가 있던 하부 컴퓨트 자원이 자동으로 삭제되기 시작했다. 12:30 에는 이 인프라 클러스터 위의 DOKS 컨트롤 플레인이 모두 지워졌다. 영향받은 클러스터는 컨트롤 플레인에 접근할 수 없게 됐고 컨트롤 플레인 데이터 일부를 잃었다.\n\n12:36 에 잘못된 설정을 원인으로 짚고 복구 준비를 시작했고, 12:48 에 내부 장애 대응을 꾸려 영향받은 클러스터를 찾고 복구를 추적했다. DOKS 의 etcd 클러스터는 클러스터마다 무작위 일정으로 하루 두 번 백업되고 있었다. 복구는 각 클러스터의 가장 최근 백업으로 etcd 를 되살리는 방식이었고, 가장 나쁜 경우 컨트롤 플레인 데이터가 12시간 전 상태로 돌아갔다. etcd 를 되살린 뒤 상태가 없는 컨트롤 플레인 컴포넌트를 다시 올려 컨트롤 플레인 복구를 마쳤다. 13:00 에 복구 과정에서 예상하지 못한 문제가 생겨 복구 메커니즘을 추가로 패치해야 했고, 이 문제는 15:00 에 해결됐다. 20:31 에 HA DOKS 클러스터가 모두 복구됐고, 21:21 에 영향받은 DOKS 클러스터가 모두 복구됐다. 데이터 플레인의 기존 워크로드는 그동안 계속 동작했다."},"trigger":{"en":"An incorrect configuration was applied to an internal infrastructure cluster in FRA1 at 12:21 UTC during a maintenance operation.","ko":"정비 작업 중 FRA1 내부 인프라 클러스터에 잘못된 설정 변경이 실수로 적용됐다."},"severity":"unknown","symptoms":["resources-deleted","control-plane-unresponsive"],"timeline":{"detected_after":null,"resolved_after":"9h"},"date_kind":"incident","detection":{"en":"Engineers were investigating errors with Kubernetes clusters in FRA1 as of 12:18 UTC and identified the incorrect configuration as the cause at 12:36.","ko":"13:02 UTC 의 첫 상태 페이지 공지는 12:18 UTC 부터 조사 중이라고 했다. 사후 보고서의 타임라인에서는 12:36 에 잘못된 설정을 원인으로 확인했다."},"components":["etcd","kube-apiserver"],"root_cause":"config-change","remediation":[{"text":{"en":"restored each affected cluster's etcd from its latest twice-daily backup","ko":"영향받은 클러스터마다 가장 최근 백업으로 etcd 클러스터를 되살렸다."}},{"text":{"en":"restored the stateless control plane components after etcd","ko":"etcd 를 되살린 뒤 상태가 없는 컨트롤 플레인 컴포넌트를 다시 올려 컨트롤 플레인 복구를 마쳤다."}},{"text":{"en":"patched the recovery mechanism after unexpected problems during recovery","ko":"13:00 에 복구 중 예상하지 못한 문제가 생기자 복구 메커니즘을 추가로 패치했고, 15:00 에 문제를 모두 해결했다."}},{"text":{"en":"found and fixed an additional small bug during recovery","ko":"복구 도중 추가로 발견한 작은 버그를 고쳤다."}},{"text":{"en":"contacted affected customers directly with further instructions, since some might need to reconfigure Kubernetes resources","ko":"고객지원팀이 영향받은 고객에게 직접 연락해 다음 조치를 안내했다."}}],"action_items":[{"text":{"en":"Prevent automatic deletion of infrastructure cluster resources under any circumstances in the production environment","ko":"운영 환경에서 어떤 경우에도 인프라 클러스터 자원이 자동으로 삭제되지 않게 막는 수정을 배포했다."}}],"contributing":["automation-amplified","no-safeguard-on-destructive-change","blast-radius-too-wide"],"recurrence_of":null,"symptoms_text":{"en":"At 13:02 UTC on 2024-01-23 DigitalOcean posted that, as of 12:18 UTC, its engineers were investigating an issue with Kubernetes clusters in the FRA1 region and that users might see errors when communicating with their clusters. The control planes of the affected DOKS (DigitalOcean Kubernetes) clusters had become inaccessible.\n\nAt 15:12 UTC the status page said 200 clusters were affected and still inaccessible. At 18:44 about 10% of clusters had their access restored, and an additional small bug had been found and fixed. Workloads already running on the clusters' nodes kept running until recovery was complete.","ko":"2024-01-23 13:02 UTC 에 DigitalOcean 은 12:18 UTC 부터 FRA1 리전의 쿠버네티스 클러스터 문제를 조사하고 있다고 공지했다. 사용자는 FRA1 클러스터와 통신할 때 오류를 겪을 수 있었다.\n\n15:12 UTC 공지에서 원인을 찾았다고 밝혔다. 영향받은 클러스터는 200개였고, 사용자는 여전히 이 클러스터에 접근할 수 없었다. 컨트롤 플레인에는 접근할 수 없었지만, 노드에서 돌던 기존 워크로드는 복구가 끝날 때까지 계속 동작했다.\n\n18:44 UTC 공지에서는 작은 버그를 하나 더 찾아 고쳤고 클러스터의 약 10% 가 접근을 되찾았다고 알렸다. 22:50 UTC 에 해결을 발표하면서, 고객이 일부 쿠버네티스 리소스를 다시 구성해야 할 수 있다고 덧붙였다."},"updated_at":"2026-11-10T00:00:36.328526Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0152","org_slug":"digitalocean"}