클러스터에서 캐스케이딩 삭제 사용하기

클러스터에서 캐스케이딩 삭제 사용하기 (Use Cascading Deletion in a Cluster)

이 페이지는 가비지 컬렉션 중에 클러스터에서 사용할 캐스케이딩 삭제(cascading deletion)의 유형을 지정하는 방법을 보여드려요.

출처: 문서

본문

시작하기 전에 (Before you begin)

쿠버네티스 클러스터가 필요하고, kubectl 명령줄 도구가 클러스터와 통신하도록 구성돼 있어야 해요. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 두 개 이상 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube로 만들거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있어요.

  • iximiuz Labs
  • Killercoda
  • KodeKloud

또한 다양한 유형의 캐스케이딩 삭제를 실험하기 위해 샘플 Deployment를 만들어야 해요. 각 유형에 대해 Deployment를 다시 만들어야 해요.

파드의 소유자 참조 확인하기 (Check owner references on your pods)

파드에 ownerReferences 필드가 있는지 확인해요.

kubectl get pods -l app=nginx --output=yaml

출력에는 다음과 비슷한 ownerReferences 필드가 있어요.

apiVersion: v1
    ...
    ownerReferences:
    - apiVersion: apps/v1
      blockOwnerDeletion: true
      controller: true
      kind: ReplicaSet
      name: nginx-deployment-6b474476c4
      uid: 4fdcd81c-bd5d-41f7-97af-3a3b759af9a7
    ...

전경 캐스케이딩 삭제 사용하기 (Use foreground cascading deletion)

기본적으로 쿠버네티스는 객체의 종속 항목을 삭제하기 위해 배경(background) 캐스케이딩 삭제를 사용해요. 클러스터가 실행하는 쿠버네티스 버전에 따라 kubectl 또는 쿠버네티스 API를 사용해 전경(foreground) 캐스케이딩 삭제로 전환할 수 있어요. 버전을 확인하려면 kubectl version을 입력하세요.

kubectl 또는 쿠버네티스 API를 사용해 전경 캐스케이딩 삭제로 객체를 삭제할 수 있어요.

kubectl 사용:

다음 명령을 실행해요.

kubectl delete deployment nginx-deployment --cascade=foreground

쿠버네티스 API 사용:

로컬 프록시 세션을 시작해요.

kubectl proxy --port=8080

curl로 삭제를 촉발해요.

curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deployment \
    -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \
    -H "Content-Type: application/json"

출력에는 다음과 같은 foregroundDeletion finalizer가 포함돼요.

"kind": "Deployment",
"apiVersion": "apps/v1",
"metadata": {
    "name": "nginx-deployment",
    "namespace": "default",
    "uid": "d1ce1b02-cae8-4288-8a53-30e84d8fa505",
    "resourceVersion": "1363097",
    "creationTimestamp": "2021-07-08T20:24:37Z",
    "deletionTimestamp": "2021-07-08T20:27:39Z",
    "finalizers": [
      "foregroundDeletion"
    ]
    ...

배경 캐스케이딩 삭제 사용하기 (Use background cascading deletion)

  • 샘플 Deployment를 만들어요.
  • 클러스터가 실행하는 쿠버네티스 버전에 따라 kubectl 또는 쿠버네티스 API를 사용해 Deployment를 삭제해요. 버전을 확인하려면 kubectl version을 입력하세요.

kubectl 또는 쿠버네티스 API를 사용해 배경 캐스케이딩 삭제로 객체를 삭제할 수 있어요. 쿠버네티스는 --cascade 플래그나 propagationPolicy 인자 없이 아래 명령을 실행해도 기본적으로 배경 캐스케이딩 삭제를 사용해요.

kubectl 사용:

다음 명령을 실행해요.

kubectl delete deployment nginx-deployment --cascade=background

쿠버네티스 API 사용:

로컬 프록시 세션을 시작해요.

kubectl proxy --port=8080

curl로 삭제를 촉발해요.

curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deployment \
    -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Background"}' \
    -H "Content-Type: application/json"

출력은 다음과 비슷해요.

"kind": "Status",
"apiVersion": "v1",
...

고아(orphan) 종속 항목 삭제하기 (Delete orphaned dependents)

기본 동작은 쿠버네티스가 객체의 종속 항목을 삭제하는 것이에요. 사용하는 쿠버네티스 버전에 따라 고아 종속 항목을 어떻게 삭제할지 결정할 수 있어요.

kubectl 사용:

kubectl delete deployment nginx-deployment --cascade=orphan

쿠버네티스 API 사용:

curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/deployments/nginx-deployment \
    -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Orphan"}' \
    -H "Content-Type: application/json"

더 알아보기 (Learn more)