[ko] translate onwers-dependents
parent
304003bb79
commit
85f91d666e
|
@ -0,0 +1,90 @@
|
|||
---
|
||||
title: 소유자와 종속 오브젝트
|
||||
content_type: concept
|
||||
weight: 90
|
||||
---
|
||||
|
||||
<!-- overview -->
|
||||
|
||||
쿠버네티스에서는 일부 {{<glossary_tooltip text="오브젝트" term_id="object" >}}는 다른 오브젝트들의
|
||||
*소유자*이다. 예를 들어,
|
||||
{{<glossary_tooltip text="레플리카셋(ReplicaSet)" term_id="replica-set">}} 은 일련의 파드의 소유자이다.
|
||||
이러한 소유된 오브젝트들은 소유자의 *종속 오브젝트*이다.
|
||||
|
||||
소유권은 일부 리소스들에서도 사용하는 [레이블과 셀렉터](/ko/docs/concepts/overview/working-with-objects/labels/)
|
||||
메커니즘과는 다르다. 예를 들어, `엔드포인트슬라이스(EndpointSlice)` 오브젝트를
|
||||
생성하는 서비스를 생각해보자. 이 서비스는 {{<glossary_tooltip text="레이블(Label)" term_id="label">}}을 사용하여 컨트롤 플레인이 어떤 `엔드포인트슬라이스` 오브젝트가 해당 서비스에 사용되는지
|
||||
결정할 수 있도록 한다.
|
||||
레이블 외에도, 서비스에 의해 관리되는 각 `엔드포인트슬라이스`는 소유자 참조를 가지고 있다.
|
||||
소유자 참조는 쿠버네티스의 다른 부분들이 자신이 제어하지 않는 오브젝트에
|
||||
간섭하지 않도록 도와준다.
|
||||
|
||||
## 오브젝트 사양의 소유자 참조
|
||||
|
||||
종속 오브젝트에는 해당 소유 오브젝트를 참조하는 `metadata.ownerReferences` 필드가 있다.
|
||||
올바른 소유자 참조는 종속 오브젝트와 동일한 {{<glossary_tooltip text="네임스페이스" term_id="namespace">}} 내에 있는 오브젝트 이름과 {{<glossary_tooltip text="UID" term_id="uid">}}로
|
||||
구성된다. 쿠버네티스는 레플리카셋(ReplicaSets), 데몬셋(DaemonSets), 디플로이먼트(Deployment), 잡(Job), 크론잡(CronJobs) 그리고
|
||||
레플리케이션컨트롤러(ReplicationControllers)와 같이 다른 오브젝트들에 종속 오브젝트에
|
||||
대해 필드의 값을 자동으로 설정한다.
|
||||
필드의 값을 변경하여 소유권을 가진 오브젝트와 종속 오브젝트의
|
||||
관계를 변경할 수 있다. 그러나, 일반적으로 쿠버네티스가 관계를 자동으로 관리해주기 때문에
|
||||
사용자가 직접 관계를 건드릴 필요가 없다.
|
||||
|
||||
종속 오브젝트에는 boolean 값을 취하고 특정 종속 오브젝트가
|
||||
가비지 컬렉션이 소유자 오브젝트를 삭제하지 못하도록 차단할 수 있는지
|
||||
여부를 제어하는 `ownerReferences.blockOwnerDeletion` 필드도 있다.
|
||||
만약 {{<glossary_tooltip text="컨트롤러(controller)" term_id="controller">}}
|
||||
(예를 들어, 디플로이먼트 컨트롤러)가 `metadata.ownerReferences` 필드 값을 설정하려고 하면 쿠버네티스는
|
||||
자동으로 필드의 값을 `true`로 설정한다. 또한 `blockOwnerDeletion` 필드의 값을 수동으로
|
||||
설정하여 가비지 수집을 막을
|
||||
종속 오브젝트를 제어할 수 있다.
|
||||
|
||||
쿠버네티스 어드미션 컨트롤러는 소유자의 삭제 권한에 따라 종속 리소스에 대해 해당 필드를 변경하려고
|
||||
하는 사용자의 접근을 관리할 수 있다. 해당 제어는 권한이 없는 사용자가 소유자의 오브젝트
|
||||
삭제를 지연시키는 것을 막는다.
|
||||
|
||||
{{< note >}}
|
||||
교차 네임스페이스(cross-namespace)의 소유자 참조는 디자인상 허용되지 않는다.
|
||||
네임스페이스 종속 오브젝트는 클러스터 범위 또는 네임스페이스 소유자를 지정할 수 있다.
|
||||
네임스페이스 소유자는 **반드시** 종속 오브젝트와 동일한 네임스페이스에 존재해야 한다.
|
||||
그렇지 않다면, 소유자 참조는 없는 것으로 간주되어, 종속 오브젝트는
|
||||
모든 소유자가 없는 것으로 확인되면 삭제될 수 있다.
|
||||
|
||||
클러스터 범위의 종속 오브젝트는 클러스터 범위의 소유자만 지정할 수 있다.
|
||||
v1.20 이상에서, 클러스터 범위의 종속 오브젝트가 네임스페이스 종류를 소유자로 지정하면,
|
||||
확인할 수 없는 소유자 참조가 있는 것으로 간주되어 가비지 수집이 될 수 없다.
|
||||
|
||||
v1.20 이상에서, 가비지 수집기가 잘못된 교차 네임스페이스 `ownerReference`
|
||||
또는 네임스페이스 종류를 참조하는 `ownerReference`가 있는 클러스터 범위의 종속 오브젝트를 감지하면,
|
||||
`OwnerRefInvalidNamespace`가 원인인 경고 이벤트와 유효하지 않은 종속 오브젝트의 `involvedObject`가 보고된다.
|
||||
`kubectl get events -A --field-selector=reason=OwnerRefInvalidNamespace`
|
||||
를 실행하여 이러한 종류의 이벤트를 확인할 수 있다.
|
||||
{{< /note >}}
|
||||
|
||||
## 소유권 및 파이널라이저
|
||||
|
||||
쿠버네티스에게 리소스를 삭제하라고 지시하면, API 서버는 관리 컨트롤러가 리소스에 대한 모든
|
||||
[파이널라이저 규칙](/ko/docs/concepts/overview/working-with-objects/finalizers/)을
|
||||
처리할 수 있도록 한다. {{<glossary_tooltip text="파이널라이저(Finalizer)" term_id="finalizer">}} 는 클러스터에서 올바르게
|
||||
작동해야 하는 리소스를 실수로 삭제하는 것을 방지한다. 예를 들어, 파드에서 여전히 사용 중인
|
||||
[퍼시스턴트 볼륨](/ko/docs/concepts/storage/persistent-volumes/)을 삭제하려고 하면 `퍼시스턴트 볼륨`에
|
||||
`kubernetes.io/pv-protection`파이널라이저가 있기 때문에
|
||||
즉시 삭제되지 않는다.
|
||||
대신, 쿠버네티스가 파이널라이저를 지울 때까지
|
||||
[볼륨](/ko/docs/concepts/storage/volumes/)은 `Terminating` 상태로 유지되며
|
||||
이는 `퍼시스턴트 볼륨`이 더 이상 파드에 바인딩 되지 않은 후에만 발생한다.
|
||||
|
||||
또한 쿠버네티스는 [포그라운드(foreground) 또는 고아(orphan) 캐스케이딩 삭제](/ko/docs/concepts/architecture/garbage-collection/#cascading-deletion)
|
||||
중 하나를 사용할 때 소유자 리소스에 파이널라이저를 추가한다.
|
||||
포그라운드 삭제 시에는 `foreground` 파이널라이저를
|
||||
추가하여 컨트롤러가 소유자를 삭제하기 전에
|
||||
`ownerReferences.blockOwnerDeletion=true`를 가진 종속 리소스도 삭제해야 한다.
|
||||
고아 삭제 정책을 지정하면 컨트롤러가 소유자 오브젝트를 삭제한 후
|
||||
종속 리소스를 무시하도록 쿠버네티스는 `orphan` 파이널라이저를
|
||||
추가한다.
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
* [쿠버네티스 파이널라이저](/ko/docs/concepts/overview/working-with-objects/finalizers/)에 대해 배워본다.
|
||||
* [가비지(Garbage) 수집](/ko/docs/concepts/architecture/garbage-collection)에 대해서 배워본다.
|
||||
* [오브젝트 메타데이터](/docs/reference/kubernetes-api/common-definitions/object-meta/#System)에 대한 API 참조를 읽어본다.
|
Loading…
Reference in New Issue