StatefulSet 삭제하기
StatefulSet 삭제하기 (Delete a StatefulSet)
이 작업은 StatefulSet을 삭제하는 방법을 보여 줘요.
출처: 문서
본문
시작하기 전에
- 이 작업은 클러스터에 StatefulSet으로 표현되는 애플리케이션이 실행 중이라고 가정해요.
StatefulSet 삭제하기
쿠버네티스에서 다른 리소스를 삭제하는 것과 같은 방식으로 StatefulSet을 삭제할 수 있어요. kubectl delete 명령을 사용하고, 파일 또는 이름으로 StatefulSet을 지정하세요.
kubectl delete -f <file.yaml>
kubectl delete statefulsets <statefulset-name>
StatefulSet 자체를 삭제한 후에는 관련 헤드리스 서비스(headless service)를 별도로 삭제해야 할 수도 있어요.
kubectl delete service <service-name>
kubectl로 StatefulSet을 삭제하면 StatefulSet은 0으로 스케일 다운돼요. 이 워크로드의 일부인 모든 파드도 삭제돼요. StatefulSet만 삭제하고 파드는 삭제하고 싶지 않다면 --cascade=orphan을 사용하세요. 예를 들어:
kubectl delete -f <file.yaml> --cascade=orphan
kubectl delete에 --cascade=orphan을 전달하면, StatefulSet 객체 자체가 삭제된 후에도 StatefulSet이 관리하던 파드는 남아 있어요. 파드에 app.kubernetes.io/name=MyApp 라벨이 있다면 다음과 같이 삭제할 수 있어요.
kubectl delete pods -l app.kubernetes.io/name=MyApp
영구 볼륨 (Persistent Volumes)
StatefulSet의 파드를 삭제해도 관련 볼륨은 삭제되지 않아요. 이는 볼륨을 삭제하기 전에 데이터를 복사할 기회를 갖도록 보장하기 위한 것이에요. 파드가 종료된 후 PVC를 삭제하면, 저장소 클래스와 회수 정책(reclaim policy)에 따라 뒷받침하는 영구 볼륨의 삭제가 촉발될 수 있어요. 클레임 삭제 후에도 볼륨에 접근할 수 있다고 가정해서는 절대 안 돼요.
참고:
StatefulSet의 완전한 삭제
관련 파드를 포함해 StatefulSet의 모든 것을 삭제하려면, 다음과 유사한 일련의 명령을 실행할 수 있어요.
grace=$(kubectl get pods <stateful-set-pod> --template '{{.spec.terminationGracePeriodSeconds}}')
kubectl delete statefulset -l app.kubernetes.io/name=MyApp
sleep $grace
kubectl delete pvc -l app.kubernetes.io/name=MyApp
위 예시에서 파드에는 app.kubernetes.io/name=MyApp 라벨이 있고, 상황에 맞게 자신의 라벨로 대체하세요.
StatefulSet 파드의 강제 삭제
StatefulSet의 일부 파드가 오랫동안 Terminating 또는 Unknown 상태에 갇혀 있다면, apiserver에서 파드를 강제로 삭제하기 위해 수동으로 개입해야 할 수 있어요. 이것은 잠재적으로 위험한 작업이에요. 자세한 내용은 'StatefulSet 파드 강제 삭제'를 참고하세요.
더 알아보기 (Learn more)
- StatefulSet 파드 강제 삭제에 대해 더 배워 보세요.