Kubernetes - Gabage

우야·2021년 6월 17일
0
post-custom-banner

소유자(owner)와 종속(dependent)

  • 쿠버네티스는 ownerReference 값을 자동적으로 설정
  • 레플리카셋을 만들 때 쿠버네티스는 레플리카셋에 있는 각 파드의 ownerReference 필드를 자동으로 설정
  • ownerReference 필드를 수동으로 설정해서 소유자와 종속 항목 간의 관계를 지정할 수도 있음
apiVersion: v1
kind: Pod
metadata:
  ...
  ownerReferences:
  - apiVersion: apps/v1
    controller: true
    blockOwnerDeletion: true
    kind: ReplicaSet
    name: my-repset
    uid: d9607e19-f88f-11e6-a518-42010a800195
  ...

가비지 수집기의 종속 항목 삭제 방식 제어

  • 오브젝트를 삭제할 때, 오브젝트의 종속 항목을 자동으로 삭제하는지의 여부를 지정할 수 있음
  • 종속 항목을 자동으로 삭제하는 것을 캐스케이딩(cascading) 삭제라하고 2가지 있음
    • 백그라운드
    • 포어그라운드

포어그라운드 캐스케이딩 삭제

  • 루트 오브젝트가 먼저 "삭제 중(deletion in progress)" 상태
    • 오브젝트는 REST API를 통해 여전히 볼 수 있음
    • 오브젝트에 deletionTimestamp 가 설정됨
    • 오브젝트의 "foregroundDeletion"에 metadata.finalizers 값이 포함됨.
  • flow
    • "삭제 중" 상태가 설정되면, 가비지 수집기는 오브젝트의 종속 항목을 삭제
    • 가비지 수집기는 모든 "차단" 종속 항목(ownerReference.blockOwnerDeletion=true 가 있는 오브젝트)의 삭제가 완료되면, 소유자 오브젝트를 삭제

백그라운드 캐스케이딩 삭제

  • 소유자 오브젝트를 즉시 삭제하고, 가비지 수집기는 백그라운드에서 종속 항목을 삭제

케스케이딩 삭제 정책 설정

  • 기본 동작은 백그라운드의 종속 항목을 삭제하는 것이며, 이는 --cascade 를 생략하거나 명시적으로 background 를 설정한 경우의 동작에 해당
백그라운드에서 종속 항목을 삭제하는 예시
kubectl delete replicaset my-repset --cascade=backgroud


포어그라운드에서 종속 항목을 삭제하는 예시
kubectl delete replicaset my-repset --cascade=backgroud


종속 항목을 분리됨으로 하는 예시
kubectl delete replicaset my-repset --cascade=false
  • kubectl로 직접 케스케이딩 삭제 하기
    • 오브젝트를 삭제할 때 deleteOptions 인수를 propagationPolicy 필드에 설정
백그라운드에서 종속 항목을 삭제하는 예시
kubectl proxy --port=8080
curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/replicasets/my-repset \
  -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Background"}' \
  -H "Content-Type: application/json" 
  
  
포어그라운드에서 종속 항목을 삭제하는 예시
kubectl proxy --port=8080
curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/replicasets/my-repset \
  -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \
  -H "Content-Type: application/json"


종속 항목을 분리됨으로 하는 예시
kubectl proxy --port=8080
curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/replicasets/my-repset \
  -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Orphan"}' \
  -H "Content-Type: application/json"

참고:

  • 1.7 이전에서는 디플로이먼트와 캐스케이딩 삭제를 사용하면 반드시 propagationPolicy: Foreground 를 사용해서 생성된 레플리카셋뿐만 아니라 해당 파드도 삭제해야 한다. 만약 이 propagationPolicy 유형을 사용하지 않는다면, 레플리카셋만 삭제되고 파드는 분리된 상태로 남을 것
profile
Fullstack developer
post-custom-banner

0개의 댓글