[ko] Update outdated files in dev-1.23-ko.1 M34-37
This commit is contained in:
@@ -1,4 +1,11 @@
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
title: 스테이트풀셋
|
||||
content_type: concept
|
||||
weight: 30
|
||||
@@ -67,13 +74,14 @@ metadata:
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: nginx # has to match .spec.template.metadata.labels
|
||||
app: nginx # .spec.template.metadata.labels 와 일치해야 한다
|
||||
serviceName: "nginx"
|
||||
replicas: 3 # by default is 1
|
||||
replicas: 3 # 기본값은 1
|
||||
minReadySeconds: 10 # 기본값은 0
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: nginx # has to match .spec.selector.matchLabels
|
||||
app: nginx # .spec.selector.matchLabels 와 일치해야 한다
|
||||
spec:
|
||||
terminationGracePeriodSeconds: 10
|
||||
containers:
|
||||
@@ -105,9 +113,24 @@ spec:
|
||||
스테이트풀셋 오브젝트의 이름은 유효한
|
||||
[DNS 서브도메인 이름](/ko/docs/concepts/overview/working-with-objects/names/#dns-서브도메인-이름)이어야 한다.
|
||||
|
||||
## 파드 셀렉터
|
||||
### 파드 셀렉터
|
||||
|
||||
스테이트풀셋의 `.spec.selector` 필드는 `.spec.template.metadata.labels` 레이블과 일치하도록 설정해야 한다. 쿠버네티스 1.8 이전에서는 생략시에 `.spec.selector` 필드가 기본 설정 되었다. 1.8 과 이후 버전에서는 파드 셀렉터를 명시하지 않으면 스테이트풀셋 생성시 유효성 검증 오류가 발생하는 결과가 나오게 된다.
|
||||
스테이트풀셋의 `.spec.selector` 필드는 `.spec.template.metadata.labels` 레이블과 일치하도록 설정해야 한다. 1.8 버전 이상에서는, 해당되는 파드 셀렉터를 찾지 못하면 스테이트풀셋 생성 과정에서 검증 오류가 발생한다.
|
||||
|
||||
### 볼륨 클레임 템플릿
|
||||
|
||||
`.spec.volumeClaimTemplates` 를 설정하여, 퍼시스턴트볼륨 프로비저너에 의해 프로비전된 [퍼시스턴트볼륨](/ko/docs/concepts/storage/persistent-volumes/)을 이용하는 안정적인 스토리지를 제공할 수 있다.
|
||||
|
||||
|
||||
### 최소 준비 시간 초 {#minimum-ready-seconds}
|
||||
|
||||
{{< feature-state for_k8s_version="v1.23" state="beta" >}}
|
||||
|
||||
`.spec.minReadySeconds` 는 파드가 '사용 가능(available)'이라고 간주될 수 있도록 파드의 모든 컨테이너가
|
||||
문제 없이 실행되어야 하는 최소 시간(초)을 나타내는 선택적인 필드이다. 이 기능은 베타이며 기본적으로 활성화되어
|
||||
있음에 유의한다. 이 기능을 사용하지 않으려면 StatefulSetMinReadySeconds 플래그를 설정 해제한다.
|
||||
이 필드의 기본값은 0이다(이 경우, 파드가 Ready 상태가 되면 바로 사용 가능하다고 간주된다.)
|
||||
파드가 언제 사용 가능하다고 간주되는지에 대한 자세한 정보는 [컨테이너 프로브(probe)](/ko/docs/concepts/workloads/pods/pod-lifecycle/#컨테이너-프로브-probe)를 참고한다.
|
||||
|
||||
## 파드 신원
|
||||
|
||||
@@ -166,9 +189,7 @@ N개의 레플리카가 있는 스테이트풀셋은 스테이트풀셋에 있
|
||||
|
||||
### 안정된 스토리지
|
||||
|
||||
쿠버네티스는 각 VolumeClaimTemplate마다 하나의 [퍼시스턴트 볼륨](/ko/docs/concepts/storage/persistent-volumes/)을
|
||||
생성한다. 위의 nginx 예시에서 각 파드는 `my-storage-class` 라는 스토리지 클래스와
|
||||
1 Gib의 프로비전된 스토리지를 가지는 단일 퍼시스턴트 볼륨을 받게 된다. 만약 스토리지 클래스가
|
||||
쿠버네티스는 각 VolumeClaimTemplate마다 하나의 [퍼시스턴트 볼륨](/ko/docs/concepts/storage/persistent-volumes/)을 생성한다. 위의 nginx 예시에서 각 파드는 `my-storage-class` 라는 스토리지 클래스와 1 Gib의 프로비전된 스토리지를 가지는 단일 퍼시스턴트 볼륨을 받게 된다. 만약 스토리지 클래스가
|
||||
명시되지 않은 경우, 기본 스토리지 클래스가 사용된다. 파드가 노드에서 스케줄 혹은 재스케줄이 되면
|
||||
파드의 `volumeMounts` 는 퍼시스턴트 볼륨 클레임과 관련된 퍼시스턴트 볼륨이 마운트 된다.
|
||||
참고로, 파드 퍼시스턴트 볼륨 클레임과 관련된 퍼시스턴트 볼륨은
|
||||
@@ -279,25 +300,103 @@ web-0이 실패할 경우 web-1은 web-0이 Running 및 Ready 상태가
|
||||
실행하려고 시도한 모든 파드를 삭제해야 한다.
|
||||
그러면 스테이트풀셋은 되돌린 템플릿을 사용해서 파드를 다시 생성하기 시작한다.
|
||||
|
||||
### 최소 준비 시간 초 {#minimum-ready-seconds}
|
||||
|
||||
{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
|
||||
## 퍼시스턴트볼륨클레임 유보
|
||||
|
||||
`.spec.minReadySeconds`는 새로 생성된 파드가 사용가능하다고 간주되도록
|
||||
컨테이너가 충돌되지 않고 준비되는 최소 시간 초를 지정하는 선택적 필드이다.
|
||||
기본값은 0이다(파드는 준비되는 대로 사용 가능한 것으로 간주된다).
|
||||
파드가 준비가 되는 시기에 대해 더 자세히 알아보고 싶다면,
|
||||
[컨테이너 프로브](/ko/docs/concepts/workloads/pods/pod-lifecycle/#container-probes)를 참고한다.
|
||||
{{< feature-state for_k8s_version="v1.23" state="alpha" >}}
|
||||
|
||||
이 필드는 `StatefulSetMinReadySeconds` [기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/)를 사용하도록 설정한 경우에만 작동한다.
|
||||
선택적 필드인 `.spec.persistentVolumeClaimRetentionPolicy` 는
|
||||
스테이트풀셋의 생애주기동안 PVC를 삭제할 것인지,
|
||||
삭제한다면 어떻게 삭제하는지를 관리한다.
|
||||
이 필드를 사용하려면 `StatefulSetAutoDeletePVC` [기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/)를 활성화해야 한다.
|
||||
활성화 시, 각 스테이트풀셋에 대해 두 가지 정책을 설정할 수 있다.
|
||||
|
||||
`whenDeleted`
|
||||
: 스테이트풀셋이 삭제될 때 적용될 볼륨 유보 동작을 설정한다.
|
||||
|
||||
`whenScaled`
|
||||
: 스테이트풀셋의 레플리카 수가 줄어들 때, 예를 들면 스테이트풀셋을 스케일 다운할 때
|
||||
적용될 볼륨 유보 동작을 설정한다.
|
||||
|
||||
설정 가능한 각 정책에 대해, 그 값을 `Delete` 또는 `Retain` 으로 설정할 수 있다.
|
||||
|
||||
`Delete`
|
||||
: `volumeClaimTemplate` 스테이트풀셋으로부터 생성된 PVC는 정책에 영향을 받는 각 파드에 대해 삭제된다.
|
||||
`whenDeleted` 가 이 값으로 설정되어 있으면
|
||||
`volumeClaimTemplate` 으로부터 생성된 모든 PVC는 파드가 삭제된 뒤에 삭제된다.
|
||||
`whenScaled` 가 이 값으로 설정되어 있으면
|
||||
스케일 다운된 파드 레플리카가 삭제된 뒤, 삭제된 파드에 해당되는 PVC만 삭제된다.
|
||||
|
||||
`Retain` (기본값)
|
||||
: 파드가 삭제되어도 `volumeClaimTemplate` 으로부터 생성된 PVC는 영향을 받지 않는다.
|
||||
이는 이 신기능이 도입되기 전의 기본 동작이다.
|
||||
|
||||
이러한 정책은 파드의 삭제가 스테이트풀셋 삭제 또는 스케일 다운으로 인한 것일 때**에만** 적용됨에 유의한다.
|
||||
예를 들어, 스테이트풀셋의 파드가 노드 실패로 인해 실패했고,
|
||||
컨트롤 플레인이 대체 파드를 생성했다면, 스테이트풀셋은 기존 PVC를 유지한다.
|
||||
기존 볼륨은 영향을 받지 않으며,
|
||||
새 파드가 실행될 노드에 클러스터가 볼륨을 연결(attach)한다.
|
||||
|
||||
정책의 기본값은 `Retain` 이며, 이는 이 신기능이 도입되기 전의 스테이트풀셋 기본 동작이다.
|
||||
|
||||
다음은 정책 예시이다.
|
||||
|
||||
```yaml
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
...
|
||||
spec:
|
||||
persistentVolumeClaimRetentionPolicy:
|
||||
whenDeleted: Retain
|
||||
whenScaled: Delete
|
||||
...
|
||||
```
|
||||
|
||||
스테이트풀셋 {{<glossary_tooltip text="컨트롤러" term_id="controller">}}는 자신이 소유한 PVC에
|
||||
[소유자 정보(reference)](/docs/concepts/overview/working-with-objects/owners-dependents/#owner-references-in-object-specifications)를
|
||||
추가하며, 파드가 종료된 이후에는 {{<glossary_tooltip text="가비지 콜렉터" term_id="garbage-collection">}}가 이 정보를 삭제한다.
|
||||
이로 인해 PVC가 삭제되기 전에
|
||||
(그리고 유보 정책에 따라, 매칭되는 기반 PV와 볼륨이 삭제되기 전에)
|
||||
파드가 모든 볼륨을 깨끗하게 언마운트할 수 있다.
|
||||
`whenDeleted` 정책을 `Delete` 로 설정하면,
|
||||
해당 스테이트풀셋에 연결된 모든 PVC에 스테이트풀셋 인스턴스의 소유자 정보가 기록된다.
|
||||
|
||||
`whenScaled` 정책은 파드가 스케일 다운되었을 때에만 PVC를 삭제하며,
|
||||
파드가 다른 원인으로 삭제되면 PVC를 삭제하지 않는다.
|
||||
조정 상황 발생 시, 스테이트풀셋 컨트롤러는 목표 레플리카 수와 클러스터 상의 실제 파드 수를 비교한다.
|
||||
레플리카 카운트보다 큰 ID를 갖는 스테이트풀셋 파드는 부적격 판정을 받으며 삭제 대상으로 표시된다.
|
||||
`whenScaled` 정책이 `Delete` 이면, 부적격 파드는 삭제되기 전에,
|
||||
연결된 스테이트풀셋 템플릿 PVC의 소유자로 지정된다.
|
||||
이로 인해, 부적격 파드가 종료된 이후에만 PVC가 가비지 콜렉트된다.
|
||||
|
||||
이는 곧 만약 컨트롤러가 강제 종료되어 재시작되면,
|
||||
파드의 소유자 정보가 정책에 적합하게 업데이트되기 전에는 어떤 파드도 삭제되지 않을 것임을 의미한다.
|
||||
만약 컨트롤러가 다운된 동안 부적격 파드가 강제로 삭제되면,
|
||||
컨트롤러가 강제 종료된 시점에 따라 소유자 정보가 설정되었을 수도 있고 설정되지 않았을 수도 있다.
|
||||
소유자 정보가 업데이트되기까지 몇 번의 조정 절차가 필요할 수 있으며,
|
||||
따라서 일부 부적격 파드는 소유자 정보 설정을 완료하고 나머지는 그러지 못했을 수 있다.
|
||||
이러한 이유로, 컨트롤러가 다시 켜져서 파드를 종료하기 전에
|
||||
소유자 정보를 검증할 때까지 기다리는 것을 추천한다.
|
||||
이것이 불가능하다면, 관리자는 PVC의 소유자 정보를 확인하여 파드가 강제 삭제되었을 때 해당되는 오브젝트가 삭제되도록 해야 한다.
|
||||
|
||||
### 레플리카
|
||||
|
||||
`.spec.replicas` 은 필요한 파드의 수를 지정하는 선택적 필드이다. 기본값은 1이다.
|
||||
|
||||
예를 들어 `kubectl scale deployment deployment --replicas=X` 명령으로
|
||||
디플로이먼트의 크기를 수동으로 조정한 뒤,
|
||||
매니페스트를 이용하여 디플로이먼트를 업데이트하면(예: `kubectl apply -f deployment.yaml` 실행),
|
||||
수동으로 설정했던 디플로이먼트의 크기가
|
||||
오버라이드된다.
|
||||
|
||||
[HorizontalPodAutoscaler](/ko/docs/tasks/run-application/horizontal-pod-autoscale/)(또는 수평 스케일링을 위한 유사 API)가
|
||||
디플로이먼트 크기를 관리하고 있다면, `.spec.replicas` 를 설정해서는 안 된다.
|
||||
대신, 쿠버네티스
|
||||
{{< glossary_tooltip text="컨트롤 플레인" term_id="control-plane" >}}이
|
||||
`.spec.replicas` 필드를 자동으로 관리한다.
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
|
||||
* [스테이트풀 애플리케이션의 배포](/ko/docs/tutorials/stateful-application/basic-stateful-set/)의 예시를 따른다.
|
||||
* [카산드라와 스테이트풀셋 배포](/ko/docs/tutorials/stateful-application/cassandra/)의 예시를 따른다.
|
||||
* [레플리케이티드(replicated) 스테이트풀 애플리케이션 실행하기](/docs/tasks/run-application/run-replicated-stateful-application/)의 예시를 따른다.
|
||||
|
||||
* [파드](/ko/docs/concepts/workloads/pods)에 대해 배운다.
|
||||
* 스테이트풀셋을 사용하는 방법을 알아본다.
|
||||
* [스테이트풀셋 애플리케이션 배포](/ko/docs/tutorials/stateful-application/basic-stateful-set/) 예제를 따라한다.
|
||||
@@ -309,7 +408,6 @@ web-0이 실패할 경우 web-1은 web-0이 Running 및 Ready 상태가
|
||||
* [스토리지로 퍼시스턴트볼륨(PersistentVolume)을 사용하도록 파드 설정](/docs/tasks/configure-pod-container/configure-persistent-volume-storage/)하는 방법을 배운다.
|
||||
* `StatefulSet`은 쿠버네티스 REST API의 상위-수준 리소스이다.
|
||||
스테이트풀셋 API에 대해 이해하기 위해
|
||||
{{< api-reference page="workload-resources/stateful-set-v1" >}}
|
||||
오브젝트 정의를 읽는다.
|
||||
{{< api-reference page="workload-resources/stateful-set-v1" >}} 오브젝트 정의를 읽는다.
|
||||
* [PodDisruptionBudget](/ko/docs/concepts/workloads/pods/disruptions/)과
|
||||
이를 사용해서 어떻게 중단 중에 애플리케이션 가용성을 관리할 수 있는지에 대해 읽는다.
|
||||
|
||||
Reference in New Issue
Block a user