Merge pull request #28947 from kubernetes/dev-1.21-ko.6
[ko] 6th Korean localization work for v1.21
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
---
|
||||
|
||||
|
||||
|
||||
title: 노드
|
||||
content_type: concept
|
||||
weight: 10
|
||||
@@ -8,7 +11,8 @@ weight: 10
|
||||
|
||||
쿠버네티스는 컨테이너를 파드내에 배치하고 _노드_ 에서 실행함으로 워크로드를 구동한다.
|
||||
노드는 클러스터에 따라 가상 또는 물리적 머신일 수 있다. 각 노드는
|
||||
{{< glossary_tooltip text="컨트롤 플레인" term_id="control-plane" >}}에 의해 관리되며
|
||||
{{< glossary_tooltip text="컨트롤 플레인" term_id="control-plane" >}}에
|
||||
의해 관리되며
|
||||
{{< glossary_tooltip text="파드" term_id="pod" >}}를
|
||||
실행하는 데 필요한 서비스를 포함한다.
|
||||
|
||||
@@ -272,17 +276,18 @@ kubelet은 `NodeStatus` 와 리스 오브젝트를 생성하고 업데이트 할
|
||||
#### 안정성
|
||||
|
||||
대부분의 경우, 노드 컨트롤러는 초당 `--node-eviction-rate`(기본값 0.1)로
|
||||
축출 비율을 제한한다. 이 말은 10초당 1개의 노드를 초과하여
|
||||
축출 속도를 제한한다. 이 말은 10초당 1개의 노드를 초과하여
|
||||
파드 축출을 하지 않는다는 의미가 된다.
|
||||
|
||||
노드 축출 행위는 주어진 가용성 영역 내 하나의 노드가 상태가 불량할
|
||||
경우 변화한다. 노드 컨트롤러는 영역 내 동시에 상태가 불량한 노드의 퍼센티지가 얼마나 되는지
|
||||
체크한다(NodeReady 컨디션은 ConditionUnknown 또는
|
||||
ConditionFalse 다.).
|
||||
- 상태가 불량한 노드의 일부가 최소 `--unhealthy-zone-threshold`
|
||||
(기본값 0.55)가 되면 축출 비율은 감소한다.
|
||||
ConditionFalse 다).
|
||||
- 상태가 불량한 노드의 비율이 최소 `--unhealthy-zone-threshold`
|
||||
(기본값 0.55)가 되면 축출 속도가 감소한다.
|
||||
- 클러스터가 작으면 (즉 `--large-cluster-size-threshold`
|
||||
노드 이하면 - 기본값 50) 축출은 중지되고, 그렇지 않으면 축출 비율은 초당
|
||||
노드 이하면 - 기본값 50) 축출이 중지된다.
|
||||
- 이외의 경우, 축출 속도는 초당
|
||||
`--secondary-node-eviction-rate`(기본값 0.01)로 감소된다.
|
||||
|
||||
이 정책들이 가용성 영역 단위로 실행되어지는 이유는 나머지가 연결되어 있는 동안
|
||||
@@ -293,7 +298,7 @@ ConditionFalse 다.).
|
||||
노드가 가용성 영역들에 걸쳐 퍼져 있는 주된 이유는 하나의 전체 영역이
|
||||
장애가 발생할 경우 워크로드가 상태 양호한 영역으로 이전되어질 수 있도록 하기 위해서이다.
|
||||
그러므로, 하나의 영역 내 모든 노드들이 상태가 불량하면 노드 컨트롤러는
|
||||
`--node-eviction-rate` 의 정상 비율로 축출한다. 코너 케이스란 모든 영역이
|
||||
`--node-eviction-rate` 의 정상 속도로 축출한다. 코너 케이스란 모든 영역이
|
||||
완전히 상태불량 (즉 클러스터 내 양호한 노드가 없는 경우) 한 경우이다.
|
||||
이러한 경우, 노드 컨트롤러는 마스터 연결에 문제가 있어 일부 연결이
|
||||
복원될 때까지 모든 축출을 중지하는 것으로 여긴다.
|
||||
@@ -347,7 +352,8 @@ Kubelet은 노드가 종료되는 동안 파드가 일반 [파드 종료 프로
|
||||
사용하여 주어진 기간 동안 노드 종료를 지연시키므로 systemd에 의존한다.
|
||||
|
||||
그레이스풀 노드 셧다운은 1.21에서 기본적으로 활성화된 `GracefulNodeShutdown`
|
||||
[기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/)로 제어된다.
|
||||
[기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/)로
|
||||
제어된다.
|
||||
|
||||
기본적으로, 아래 설명된 두 구성 옵션,
|
||||
`ShutdownGracePeriod` 및 `ShutdownGracePeriodCriticalPods` 는 모두 0으로 설정되어 있으므로,
|
||||
@@ -371,6 +377,20 @@ Kubelet은 노드가 종료되는 동안 파드가 일반 [파드 종료 프로
|
||||
유예 종료에 할당되고, 마지막 10초는
|
||||
[중요 파드](/docs/tasks/administer-cluster/guaranteed-scheduling-critical-addon-pods/#marking-pod-as-critical)의 종료에 할당된다.
|
||||
|
||||
{{< note >}}
|
||||
그레이스풀 노드 셧다운 과정에서 축출된 파드는 `Failed` 라고 표시된다.
|
||||
`kubectl get pods` 명령을 실행하면 축출된 파드의 상태가 `Shutdown`으로 표시된다.
|
||||
그리고 `kubectl describe pod` 명령을 실행하면 노드 셧다운으로 인해 파드가 축출되었음을 알 수 있다.
|
||||
|
||||
```
|
||||
Status: Failed
|
||||
Reason: Shutdown
|
||||
Message: Node is shutting, evicting pods
|
||||
```
|
||||
|
||||
실패한 파드 오브젝트는 명시적으로 삭제하거나 [가비지 콜렉션에 의해 정리](/ko/docs/concepts/workloads/pods/pod-lifecycle/#pod-garbage-collection)되기 전까지는 보존된다.
|
||||
이는 갑작스러운 노드 종료의 경우와 비교했을 때 동작에 차이가 있다.
|
||||
{{< /note >}}
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ kubectl apply -f https://k8s.io/examples/application/nginx/
|
||||
URL을 구성 소스로 지정할 수도 있다. 이는 GitHub에 체크인된 구성 파일에서 직접 배포하는 데 편리하다.
|
||||
|
||||
```shell
|
||||
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/application/nginx/nginx-deployment.yaml
|
||||
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/application/nginx/nginx-deployment.yaml
|
||||
```
|
||||
|
||||
```shell
|
||||
|
||||
@@ -17,6 +17,11 @@ kubeconfig 파일들을 사용하여 클러스터, 사용자, 네임스페이스
|
||||
`kubeconfig`라는 이름의 파일이 있다는 의미는 아니다.
|
||||
{{< /note >}}
|
||||
|
||||
{{< warning >}}
|
||||
신뢰할 수 있는 소스의 kubeconfig 파일만 사용한다. 특수 제작된 kubeconfig 파일을 사용하면 악성 코드가 실행되거나 파일이 노출될 수 있다.
|
||||
신뢰할 수 없는 kubeconfig 파일을 사용해야 하는 경우 셸 스크립트를 사용하는 경우처럼 먼저 신중하게 검사한다.
|
||||
{{< /warning>}}
|
||||
|
||||
기본적으로 `kubectl`은 `$HOME/.kube` 디렉터리에서 `config`라는 이름의 파일을 찾는다.
|
||||
`KUBECONFIG` 환경 변수를 설정하거나
|
||||
[`--kubeconfig`](/docs/reference/generated/kubectl/kubectl/) 플래그를 지정해서
|
||||
@@ -154,4 +159,3 @@ kubeconfig 파일에서 파일과 경로 참조는 kubeconfig 파일의 위치
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -77,6 +77,20 @@ weight: 10
|
||||
|
||||
`imagePullPolicy` 가 특정값 없이 정의되면, `Always` 로 설정된다.
|
||||
|
||||
### 이미지풀백오프(ImagePullBackOff)
|
||||
|
||||
kubelet이 컨테이너 런타임을 사용하여 파드의 컨테이너 생성을 시작할 때,
|
||||
`ImagePullBackOff`로 인해 컨테이너가
|
||||
[Waiting](/ko/docs/concepts/workloads/pods/pod-lifecycle/#container-state-waiting) 상태에 있을 수 있다.
|
||||
|
||||
`ImagePullBackOff`라는 상태는 (이미지 이름이 잘못됨, 또는 `imagePullSecret` 없이
|
||||
비공개 레지스트리에서 풀링 시도 등의 이유로) 쿠버네티스가 컨테이너 이미지를
|
||||
가져올 수 없기 때문에 컨테이너를 실행할 수 없음을 의미한다. `BackOff`라는 단어는
|
||||
쿠버네티스가 백오프 딜레이를 증가시키면서 이미지 풀링을 계속 시도할 것임을 나타낸다.
|
||||
|
||||
쿠버네티스는 시간 간격을 늘려가면서 시도를 계속하며, 시간 간격의 상한은 쿠버네티스 코드에
|
||||
300초(5분)로 정해져 있다.
|
||||
|
||||
## 이미지 인덱스가 있는 다중 아키텍처 이미지
|
||||
|
||||
바이너리 이미지를 제공할 뿐만 아니라, 컨테이너 레지스트리는 [컨테이너 이미지 인덱스](https://github.com/opencontainers/image-spec/blob/master/image-index.md)를 제공할 수도 있다. 이미지 인덱스는 컨테이너의 아키텍처별 버전에 대한 여러 [이미지 매니페스트](https://github.com/opencontainers/image-spec/blob/master/manifest.md)를 가리킬 수 있다. 아이디어는 이미지의 이름(예를 들어, `pause`, `example/mycontainer`, `kube-apiserver`)을 가질 수 있다는 것이다. 그래서 다른 시스템들이 사용하고 있는 컴퓨터 아키텍처에 적합한 바이너리 이미지를 가져올 수 있다.
|
||||
|
||||
@@ -116,7 +116,7 @@ kubectl edit SampleDB/example-database # 일부 설정을 수동으로 변경하
|
||||
* [Charmed Operator Framework](https://juju.is/)
|
||||
* [kubebuilder](https://book.kubebuilder.io/) 사용하기
|
||||
* [KUDO](https://kudo.dev/) (Kubernetes Universal Declarative Operator)
|
||||
* 웹훅(WebHook)과 함께 [Metacontroller](https://metacontroller.app/)를
|
||||
* 웹훅(WebHook)과 함께 [Metacontroller](https://metacontroller.github.io/metacontroller/intro.html)를
|
||||
사용하여 직접 구현하기
|
||||
* [오퍼레이터 프레임워크](https://operatorframework.io)
|
||||
* [shell-operator](https://github.com/flant/shell-operator)
|
||||
@@ -124,6 +124,7 @@ kubectl edit SampleDB/example-database # 일부 설정을 수동으로 변경하
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
|
||||
* {{< glossary_tooltip text="CNCF" term_id="cncf" >}} [오퍼레이터 백서](https://github.com/cncf/tag-app-delivery/blob/eece8f7307f2970f46f100f51932db106db46968/operator-wg/whitepaper/Operator-WhitePaper_v1-0.md) 읽어보기
|
||||
* [사용자 정의 리소스](/ko/docs/concepts/extend-kubernetes/api-extension/custom-resources/)에 대해 더 알아보기
|
||||
* [OperatorHub.io](https://operatorhub.io/)에서 유스케이스에 맞는 이미 만들어진 오퍼레이터 찾기
|
||||
* 다른 사람들이 사용할 수 있도록 자신의 오퍼레이터를 [게시](https://operatorhub.io/)하기
|
||||
|
||||
@@ -11,7 +11,8 @@ weight: 30
|
||||
|
||||
{{< feature-state for_k8s_version="v1.21" state="deprecated" >}}
|
||||
|
||||
파드시큐리티폴리시(PodSecurityPolicy)는 쿠버네티스 v1.21부터 더이상 사용되지 않으며, v1.25에서 제거된다.
|
||||
파드시큐리티폴리시(PodSecurityPolicy)는 쿠버네티스 v1.21부터 더이상 사용되지 않으며, v1.25에서 제거된다. 사용 중단에 대한 상세 사항은
|
||||
[파드시큐리티폴리시 사용 중단: 과거, 현재, 그리고 미래](/blog/2021/04/06/podsecuritypolicy-deprecation-past-present-and-future/)를 참조한다.
|
||||
|
||||
파드 시큐리티 폴리시를 사용하면 파드 생성 및 업데이트에 대한 세분화된 권한을
|
||||
부여할 수 있다.
|
||||
@@ -48,10 +49,9 @@ _Pod Security Policy_ 는 파드 명세의 보안 관련 측면을 제어하는
|
||||
|
||||
## 파드 시큐리티 폴리시 활성화
|
||||
|
||||
파드 시큐리티 폴리시 제어는 선택 사항(하지만 권장함)인
|
||||
[어드미션
|
||||
컨트롤러](/docs/reference/access-authn-authz/admission-controllers/#podsecuritypolicy)로
|
||||
구현된다. [어드미션 컨트롤러 활성화](/docs/reference/access-authn-authz/admission-controllers/#how-do-i-turn-on-an-admission-control-plug-in)하면
|
||||
파드 시큐리티 폴리시 제어는 선택 사항인 [어드미션
|
||||
컨트롤러](/docs/reference/access-authn-authz/admission-controllers/#podsecuritypolicy)로 구현된다.
|
||||
[어드미션 컨트롤러를 활성화](/docs/reference/access-authn-authz/admission-controllers/#how-do-i-turn-on-an-admission-control-plug-in)하면
|
||||
파드시큐리티폴리시가 적용되지만,
|
||||
정책을 승인하지 않고 활성화하면 클러스터에
|
||||
**파드가 생성되지 않는다.**
|
||||
@@ -110,11 +110,15 @@ roleRef:
|
||||
name: <role name>
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
subjects:
|
||||
# Authorize specific service accounts:
|
||||
# 네임스페이스의 모든 서비스 어카운트 승인(권장):
|
||||
- kind: Group
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
name: system:serviceaccounts:<authorized namespace>
|
||||
# 특정 서비스 어카운트 승인(권장하지 않음):
|
||||
- kind: ServiceAccount
|
||||
name: <authorized service account name>
|
||||
namespace: <authorized pod namespace>
|
||||
# Authorize specific users (not recommended):
|
||||
# 특정 사용자 승인(권장하지 않음):
|
||||
- kind: User
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
name: <authorized user name>
|
||||
@@ -124,21 +128,55 @@ subjects:
|
||||
실행되는 파드에 대해서만 사용 권한을 부여한다. 네임스페이스에서 실행되는 모든 파드에 접근 권한을
|
||||
부여하기 위해 시스템 그룹과 쌍을 이룰 수 있다.
|
||||
```yaml
|
||||
# Authorize all service accounts in a namespace:
|
||||
# 네임스페이스의 모든 서비스 어카운트 승인:
|
||||
- kind: Group
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
name: system:serviceaccounts
|
||||
# Or equivalently, all authenticated users in a namespace:
|
||||
# 또는 동일하게, 네임스페이스의 모든 승인된 사용자에게 사용 권한 부여
|
||||
- kind: Group
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
name: system:authenticated
|
||||
```
|
||||
|
||||
RBAC 바인딩에 대한 자세한 예는,
|
||||
[역할 바인딩 예제](/docs/reference/access-authn-authz/rbac#role-binding-examples)를 참고하길 바란다.
|
||||
[역할 바인딩 예제](/docs/reference/access-authn-authz/rbac#role-binding-examples)를 참고한다.
|
||||
파드시큐리티폴리시 인증에 대한 전체 예제는
|
||||
[아래](#예제)를 참고하길 바란다.
|
||||
[아래](#예제)를 참고한다.
|
||||
|
||||
### 추천 예제
|
||||
|
||||
파드시큐리티폴리시는 새롭고 간결해진 `PodSecurity` {{< glossary_tooltip
|
||||
text="어드미션 컨트롤러" term_id="admission-controller" >}}로 대체되고 있다.
|
||||
이 변경에 대한 상세사항은
|
||||
[파드시큐리티폴리시 사용 중단: 과거, 현재, 그리고 미래](/blog/2021/04/06/podsecuritypolicy-deprecation-past-present-and-future/)를 참조한다.
|
||||
다음 가이드라인을 참조하여 파드시큐리티폴리시를 새로운 어드미션 컨트롤러로 쉽게 전환할 수 있다.
|
||||
|
||||
1. 파드시큐리티폴리시를 [파드 보안 표준](/docs/concepts/security/pod-security-standards/)에 의해 정의된 폴리시로 한정한다.
|
||||
- {{< example file="policy/privileged-psp.yaml" >}}Privileged{{< /example >}}
|
||||
- {{< example file="policy/baseline-psp.yaml" >}}Baseline{{< /example >}}
|
||||
- {{< example file="policy/restricted-psp.yaml" >}}Restricted{{< /example >}}
|
||||
|
||||
2. `system:serviceaccounts:<namespace>` (여기서 `<namespace>`는 타겟 네임스페이스) 그룹을 사용하여
|
||||
파드시큐리티폴리시를 전체 네임스페이스에만 바인드한다. 예시는 다음과 같다.
|
||||
|
||||
```yaml
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
# 이 클러스터롤바인딩(ClusterRoleBinding)을 통해 "development" 네임스페이스의 모든 파드가 기준 파드시큐리티폴리시(PSP)를 사용할 수 있다.
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: psp-baseline-namespaces
|
||||
roleRef:
|
||||
kind: ClusterRole
|
||||
name: psp-baseline
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
subjects:
|
||||
- kind: Group
|
||||
name: system:serviceaccounts:development
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
- kind: Group
|
||||
name: system:serviceaccounts:canary
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
```
|
||||
|
||||
### 문제 해결
|
||||
|
||||
@@ -567,7 +605,7 @@ spec:
|
||||
리눅스 기능은 전통적으로 슈퍼유저와 관련된 권한을 보다 세밀하게 분류한다.
|
||||
이러한 기능 중 일부는 권한 에스컬레이션 또는 컨테이너 분류에 사용될 수 있으며
|
||||
파드시큐리티폴리시에 의해 제한될 수 있다. 리눅스 기능에 대한 자세한 내용은
|
||||
[기능(7)](http://man7.org/linux/man-pages/man7/capabilities.7.html)을
|
||||
[기능(7)](https://man7.org/linux/man-pages/man7/capabilities.7.html)을
|
||||
참고하길 바란다.
|
||||
|
||||
다음 필드는 대문자로 표기된 기능 이름 목록을
|
||||
@@ -661,5 +699,10 @@ spec:
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
- [파드시큐리티폴리시 사용 중단: 과거, 현재, 그리고
|
||||
미래](/blog/2021/04/06/podsecuritypolicy-deprecation-past-present-and-future/)에서
|
||||
파드시큐리티폴리시의 미래에 대해 알아본다.
|
||||
|
||||
- 폴리시 권장 사항에 대해서는 [파드 보안 표준](/docs/concepts/security/pod-security-standards/)을 참조한다.
|
||||
|
||||
- API 세부 정보는 [파드 시큐리티 폴리시 레퍼런스](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podsecuritypolicy-v1beta1-policy) 참조한다.
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
title: 테인트(Taints)와 톨러레이션(Tolerations)
|
||||
content_type: concept
|
||||
weight: 40
|
||||
@@ -260,13 +264,27 @@ tolerations:
|
||||
|
||||
이렇게 하면 이러한 문제로 인해 데몬셋 파드가 축출되지 않는다.
|
||||
|
||||
## 컨디션별 노드 테인트하기
|
||||
## 컨디션을 기준으로 노드 테인트하기
|
||||
|
||||
노드 라이프사이클 컨트롤러는 `NoSchedule` 이펙트가 있는 노드 컨디션에 해당하는
|
||||
테인트를 자동으로 생성한다.
|
||||
마찬가지로 스케줄러는 노드 컨디션을 확인하지 않는다. 대신 스케줄러는 테인트를 확인한다. 이렇게 하면 노드 컨디션이 노드에 스케줄된 내용에 영향을 미치지 않는다. 사용자는 적절한 파드 톨러레이션을 추가하여 노드의 일부 문제(노드 컨디션으로 표시)를 무시하도록 선택할 수 있다.
|
||||
컨트롤 플레인은 노드 {{<glossary_tooltip text="컨트롤러" term_id="controller">}}를 이용하여
|
||||
[노드 조건](/docs/concepts/scheduling-eviction/node-pressure-eviction/)에 대한 `NoSchedule` 효과를 사용하여 자동으로 테인트를 생성한다.
|
||||
|
||||
쿠버네티스 1.8 버전부터 데몬셋 컨트롤러는 다음의 `NoSchedule` 톨러레이션을
|
||||
스케줄러는 스케줄링 결정을 내릴 때 노드 조건을 확인하는 것이 아니라 테인트를 확인한다.
|
||||
이렇게 하면 노드 조건이 스케줄링에 직접적인 영향을 주지 않는다.
|
||||
예를 들어 `DiskPressure` 노드 조건이 활성화된 경우
|
||||
컨트롤 플레인은 `node.kubernetes.io/disk-pressure` 테인트를 추가하고 영향을 받는 노드에 새 파드를 할당하지 않는다.
|
||||
`MemoryPressure` 노드 조건이 활성화되면
|
||||
컨트롤 플레인이 `node.kubernetes.io/memory-pressure` 테인트를 추가한다.
|
||||
|
||||
새로 생성된 파드에 파드 톨러레이션을 추가하여 노드 조건을 무시하도록 할 수 있다.
|
||||
또한 컨트롤 플레인은 `BestEffort` 이외의
|
||||
{{< glossary_tooltip text="QoS 클래스" term_id="qos-class" >}}를 가지는 파드에
|
||||
`node.kubernetes.io/memory-pressure` 톨러레이션을 추가한다.
|
||||
이는 쿠버네티스가 `Guaranteed` 또는 `Burstable` QoS 클래스를 갖는 파드(메모리 요청이 설정되지 않은 파드 포함)를
|
||||
마치 그 파드들이 메모리 압박에 대처 가능한 것처럼 다루는 반면,
|
||||
새로운 `BestEffort` 파드는 영향을 받는 노드에 할당하지 않기 때문이다.
|
||||
|
||||
데몬셋 컨트롤러는 다음의 `NoSchedule` 톨러레이션을
|
||||
모든 데몬에 자동으로 추가하여, 데몬셋이 중단되는 것을 방지한다.
|
||||
|
||||
* `node.kubernetes.io/memory-pressure`
|
||||
@@ -278,7 +296,6 @@ tolerations:
|
||||
이러한 톨러레이션을 추가하면 이전 버전과의 호환성이 보장된다. 데몬셋에
|
||||
임의의 톨러레이션을 추가할 수도 있다.
|
||||
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
* [리소스 부족 다루기](/docs/concepts/scheduling-eviction/node-pressure-eviction/)와 어떻게 구성하는지에 대해 알아보기
|
||||
|
||||
@@ -50,7 +50,7 @@ options ndots:5
|
||||
```
|
||||
|
||||
요약하면, _test_ 네임스페이스에 있는 파드는 `data.prod` 또는
|
||||
`data.prod.cluster.local` 중 하나를 통해 성공적으로 해석될 수 있다.
|
||||
`data.prod.svc.cluster.local` 중 하나를 통해 성공적으로 해석될 수 있다.
|
||||
|
||||
### DNS 레코드
|
||||
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
title: 볼륨
|
||||
content_type: concept
|
||||
weight: 10
|
||||
@@ -13,7 +18,6 @@ weight: 10
|
||||
파일을 공유할 때 발생한다.
|
||||
쿠버네티스 {{< glossary_tooltip text="볼륨" term_id="volume" >}} 추상화는
|
||||
이러한 문제를 모두 해결한다.
|
||||
|
||||
[파드](/ko/docs/concepts/workloads/pods/)에 대해 익숙해지는 것을 추천한다.
|
||||
|
||||
<!-- body -->
|
||||
@@ -40,7 +44,6 @@ weight: 10
|
||||
|
||||
볼륨을 사용하려면, `.spec.volumes` 에서 파드에 제공할 볼륨을 지정하고
|
||||
`.spec.containers[*].volumeMounts` 의 컨테이너에 해당 볼륨을 마운트할 위치를 선언한다.
|
||||
|
||||
컨테이너의 프로세스는 도커 이미지와 볼륨으로 구성된 파일시스템
|
||||
뷰를 본다. [도커 이미지](https://docs.docker.com/userguide/dockerimages/)는
|
||||
파일시스템 계층의 루트에 있다. 볼륨은 이미지 내에 지정된 경로에
|
||||
@@ -117,6 +120,7 @@ EBS 볼륨이 파티션된 경우, 선택적 필드인 `partition: "<partition n
|
||||
베타 기능을 활성화해야 한다.
|
||||
|
||||
#### AWS EBS CSI 마이그레이션 완료
|
||||
|
||||
{{< feature-state for_k8s_version="v1.17" state="alpha" >}}
|
||||
|
||||
컨트롤러 관리자와 kubelet에 의해 로드되지 않도록 `awsElasticBlockStore` 스토리지
|
||||
@@ -257,6 +261,9 @@ spec:
|
||||
`path` 에서 파생된다.
|
||||
|
||||
{{< note >}}
|
||||
* [컨피그맵](/docs/tasks/configure-pod-container/configure-pod-configmap/)을 사용하기 위해서는
|
||||
먼저 컨피그맵을 생성해야 한다.
|
||||
|
||||
* 컨피그맵을 [`subPath`](#subpath-사용하기) 볼륨 마운트로 사용하는 컨테이너는 컨피그맵
|
||||
업데이트를 수신하지 않는다.
|
||||
|
||||
@@ -522,6 +529,15 @@ glusterfs 볼륨에 데이터를 미리 채울 수 있으며, 파드 간에 데
|
||||
|
||||
### hostPath {#hostpath}
|
||||
|
||||
{{< warning >}}
|
||||
HostPath 볼륨에는 많은 보안 위험이 있으며, 가능하면 HostPath를 사용하지 않는
|
||||
것이 좋다. HostPath 볼륨을 사용해야 하는 경우, 필요한 파일 또는 디렉터리로만
|
||||
범위를 지정하고 ReadOnly로 마운트해야 한다.
|
||||
|
||||
AdmissionPolicy를 사용하여 특정 디렉터리로의 HostPath 액세스를 제한하는 경우,
|
||||
`readOnly` 마운트를 사용하는 정책이 유효하려면 `volumeMounts` 가 반드시 지정되어야 한다.
|
||||
{{< /warning >}}
|
||||
|
||||
`hostPath` 볼륨은 호스트 노드의 파일시스템에 있는 파일이나 디렉터리를
|
||||
파드에 마운트 한다. 이것은 대부분의 파드들이 필요한 것은 아니지만, 일부
|
||||
애플리케이션에 강력한 탈출구를 제공한다.
|
||||
@@ -538,7 +554,6 @@ glusterfs 볼륨에 데이터를 미리 채울 수 있으며, 파드 간에 데
|
||||
|
||||
필드가 `type` 에 지원되는 값은 다음과 같다.
|
||||
|
||||
|
||||
| 값 | 행동 |
|
||||
|:------|:---------|
|
||||
| | 빈 문자열 (기본값)은 이전 버전과의 호환성을 위한 것으로, hostPath 볼륨은 마운트 하기 전에 아무런 검사도 수행되지 않는다. |
|
||||
@@ -552,6 +567,9 @@ glusterfs 볼륨에 데이터를 미리 채울 수 있으며, 파드 간에 데
|
||||
|
||||
다음과 같은 이유로 이 유형의 볼륨 사용시 주의해야 한다.
|
||||
|
||||
* HostPath는 권한있는 시스템 자격 증명 (예 : Kubelet 용) 또는 권한있는 API
|
||||
(예 : 컨테이너 런타임 소켓)를 노출 할 수 있으며, 이는 컨테이너 이스케이프 또는
|
||||
클러스터의 다른 부분을 공격하는 데 사용될 수 있다.
|
||||
* 동일한 구성(파드템플릿으로 생성한 것과 같은)을
|
||||
가진 파드는 노드에 있는 파일이 다르기 때문에 노드마다 다르게 동작할 수 있다.
|
||||
* 기본 호스트에 생성된 파일 또는 디렉터리는 root만 쓸 수 있다.
|
||||
@@ -909,7 +927,8 @@ API 서버에 대해 `--service-account-max-token-expiration` 옵션을 지정
|
||||
상대 경로를 지정한다.
|
||||
|
||||
{{< note >}}
|
||||
projected 볼륨 소스를 [`subPath`](#subpath-사용하기) 볼륨으로 마운트해서 사용하는 컨테이너는 해당 볼륨 소스의 업데이트를 수신하지 않는다.
|
||||
projected 볼륨 소스를 [`subPath`](#subpath-사용하기) 볼륨으로 마운트해서 사용하는 컨테이너는
|
||||
해당 볼륨 소스의 업데이트를 수신하지 않는다.
|
||||
{{< /note >}}
|
||||
|
||||
### quobyte
|
||||
@@ -1103,7 +1122,6 @@ vmware-vdiskmanager -c -t 0 -s 40GB -a lsilogic myDisk.vmdk
|
||||
|
||||
{{< /tabs >}}
|
||||
|
||||
|
||||
#### vSphere VMDK 구성 예시 {#vsphere-vmdk-configuration}
|
||||
|
||||
```yaml
|
||||
@@ -1133,8 +1151,7 @@ spec:
|
||||
{{< feature-state for_k8s_version="v1.19" state="beta" >}}
|
||||
|
||||
`vsphereVolume` 용 `CSIMigration` 기능이 활성화되면, 기존 인-트리 플러그인에서
|
||||
`csi.vsphere.vmware.com` {{< glossary_tooltip text="CSI" term_id="csi" >}} 드라이버로 모든 플러그인 작업을 리디렉션한다.
|
||||
이 기능을 사용하려면,
|
||||
`csi.vsphere.vmware.com` {{< glossary_tooltip text="CSI" term_id="csi" >}} 드라이버로 모든 플러그인 작업을 리디렉션한다. 이 기능을 사용하려면,
|
||||
[vSphere CSI 드라이버](https://github.com/kubernetes-sigs/vsphere-csi-driver)가
|
||||
클러스터에 설치되어야 하며 `CSIMigration` 및 `CSIMigrationvSphere`
|
||||
[기능 게이트](/ko/docs/reference/command-line-tools-reference/feature-gates/)가 활성화되어 있어야 한다.
|
||||
|
||||
@@ -32,10 +32,10 @@ _파드_ (고래 떼(pod of whales)나 콩꼬투리(pea pod)와 마찬가지로)
|
||||
## 파드란 무엇인가?
|
||||
|
||||
{{< note >}}
|
||||
[도커](https://www.docker.com/)가 가장 일반적으로
|
||||
잘 알려진 런타임이지만, 쿠버네티스는 도커보다
|
||||
{{< glossary_tooltip text="컨테이너 런타임" term_id="container-runtime" >}}을
|
||||
더 많이 지원하며, 도커의 일부 용어를 사용하면 파드를 설명하는 데 도움이 된다.
|
||||
[도커](https://www.docker.com/)가 가장 일반적으로 잘 알려진
|
||||
{{< glossary_tooltip text="컨테이너 런타임" term_id="container-runtime" >}}이지만,
|
||||
쿠버네티스는 도커 외에도 다양한 컨테이너 런타임을 지원하며,
|
||||
파드를 설명할 때 도커 관련 용어를 사용하면 더 쉽게 설명할 수 있다.
|
||||
{{< /note >}}
|
||||
|
||||
파드의 공유 콘텍스트는 리눅스 네임스페이스, 컨트롤 그룹(cgroup) 및
|
||||
|
||||
@@ -82,12 +82,11 @@ spec:
|
||||
사용자는 하나 또는 다중 `topologySpreadConstraint` 를 정의해서 kube-scheduler 에게 클러스터에 걸쳐 있는 기존 파드와 시작하는 각각의 파드와 연관하여 배치하는 방법을 명령할 수 있다. 필드는 다음과 같다.
|
||||
|
||||
- **maxSkew** 는 파드가 균등하지 않게 분산될 수 있는 정도를 나타낸다.
|
||||
이것은 주어진 토폴로지 유형의 임의의 두 토폴로지 도메인에 일치하는
|
||||
파드의 수 사이에서 허용되는 차이의 최댓값이다. 이것은 0보다는 커야
|
||||
한다. 그 의미는 `whenUnsatisfiable` 의 값에 따라 다르다.
|
||||
이것은 0보다는 커야 한다. 그 의미는 `whenUnsatisfiable` 의 값에 따라 다르다.
|
||||
- `whenUnsatisfiable` 이 "DoNotSchedule"과 같을 때, `maxSkew` 는
|
||||
대상 토폴로지에서 일치하는 파드 수와 전역 최솟값 사이에
|
||||
허용되는 최대 차이이다.
|
||||
대상 토폴로지에서 일치하는 파드 수와 전역 최솟값
|
||||
(토폴로지 도메인에서 레이블 셀렉터와 일치하는 최소 파드 수. 예를 들어 3개의 영역에 각각 0, 2, 3개의 일치하는 파드가 있으면, 전역 최솟값은 0)
|
||||
사이에 허용되는 최대 차이이다.
|
||||
- `whenUnsatisfiable` 이 "ScheduleAnyway"와 같으면, 스케줄러는
|
||||
왜곡을 줄이는데 도움이 되는 토폴로지에 더 높은 우선 순위를 부여한다.
|
||||
- **topologyKey** 는 노드 레이블의 키다. 만약 두 노드가 이 키로 레이블이 지정되고, 레이블이 동일한 값을 가진다면 스케줄러는 두 노드를 같은 토폴로지에 있는것으로 여기게 된다. 스케줄러는 각 토폴로지 도메인에 균형잡힌 수의 파드를 배치하려고 시도한다.
|
||||
@@ -96,6 +95,8 @@ spec:
|
||||
- `ScheduleAnyway` 는 스케줄러에게 차이(skew)를 최소화하는 노드에 높은 우선 순위를 부여하면서, 스케줄링을 계속하도록 지시한다.
|
||||
- **labelSelector** 는 일치하는 파드를 찾는데 사용된다. 이 레이블 셀렉터와 일치하는 파드의 수를 계산하여 해당 토폴로지 도메인에 속할 파드의 수를 결정한다. 자세한 내용은 [레이블 셀렉터](/ko/docs/concepts/overview/working-with-objects/labels/#레이블-셀렉터)를 참조한다.
|
||||
|
||||
파드에 2개 이상의 `topologySpreadConstraint`가 정의되어 있으면, 각 제약 조건은 AND로 연결된다 - kube-scheduler는 새로운 파드의 모든 제약 조건을 만족하는 노드를 찾는다.
|
||||
|
||||
사용자는 `kubectl explain Pod.spec.topologySpreadConstraints` 를 실행해서 이 필드에 대한 자세한 내용을 알 수 있다.
|
||||
|
||||
### 예시: 단수 토폴로지 분배 제약 조건
|
||||
@@ -387,7 +388,8 @@ profiles:
|
||||
|
||||
## 알려진 제한사항
|
||||
|
||||
- 디플로이먼트를 스케일링 다운하면 그 결과로 파드의 분포가 불균형이 될 수 있다.
|
||||
- 파드가 제거된 이후에도 제약 조건이 계속 충족된다는 보장은 없다. 예를 들어 디플로이먼트를 스케일링 다운하면 그 결과로 파드의 분포가 불균형해질 수 있다.
|
||||
[Descheduler](https://github.com/kubernetes-sigs/descheduler)를 사용하여 파드 분포를 다시 균형있게 만들 수 있다.
|
||||
- 파드와 일치하는 테인트(taint)가 된 노드가 존중된다. [이슈 80921](https://github.com/kubernetes/kubernetes/issues/80921)을 본다.
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
Reference in New Issue
Block a user