Merge pull request #27728 from jihoon-seo/210426_Update_outdated_files_in_dev-1.20-ko.8_p1
[ko] Update outdated files in dev-1.20-ko.8 (p1)pull/27901/head
commit
5f1bdf56b9
|
@ -222,7 +222,7 @@ pod2 1/1 Running 0 36s
|
|||
## 레플리카셋 매니페스트 작성하기
|
||||
|
||||
레플리카셋은 모든 쿠버네티스 API 오브젝트와 마찬가지로 `apiVersion`, `kind`, `metadata` 필드가 필요하다.
|
||||
레플리카셋에 대한 kind 필드의 값은 항상 레플리카셋이다.
|
||||
레플리카셋에 대한 `kind` 필드의 값은 항상 레플리카셋이다.
|
||||
쿠버네티스 1.9에서의 레플리카셋의 kind에 있는 API 버전 `apps/v1`은 현재 버전이며, 기본으로 활성화 되어있다. API 버전 `apps/v1beta2`은 사용 중단(deprecated)되었다.
|
||||
API 버전에 대해서는 `frontend.yaml` 예제의 첫 번째 줄을 참고한다.
|
||||
|
||||
|
@ -237,7 +237,7 @@ API 버전에 대해서는 `frontend.yaml` 예제의 첫 번째 줄을 참고한
|
|||
우리는 `frontend.yaml` 예제에서 `tier: frontend`이라는 레이블을 하나 가지고 있다.
|
||||
이 파드를 다른 컨트롤러가 취하지 않도록 다른 컨트롤러의 셀렉터와 겹치지 않도록 주의해야 한다.
|
||||
|
||||
템플릿의 [재시작 정책](/ko/docs/concepts/workloads/pods/pod-lifecycle/#재시작-정책) 필드인
|
||||
템플릿의 [재시작 정책](/ko/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy) 필드인
|
||||
`.spec.template.spec.restartPolicy`는 기본값인 `Always`만 허용된다.
|
||||
|
||||
### 파드 셀렉터
|
||||
|
|
|
@ -54,7 +54,9 @@ kubectl 명령에서 숏컷으로 사용된다.
|
|||
```shell
|
||||
kubectl apply -f https://k8s.io/examples/controllers/replication.yaml
|
||||
```
|
||||
|
||||
출력 결과는 다음과 같다.
|
||||
|
||||
```
|
||||
replicationcontroller/nginx created
|
||||
```
|
||||
|
@ -64,7 +66,9 @@ replicationcontroller/nginx created
|
|||
```shell
|
||||
kubectl describe replicationcontrollers/nginx
|
||||
```
|
||||
|
||||
출력 결과는 다음과 같다.
|
||||
|
||||
```
|
||||
Name: nginx
|
||||
Namespace: default
|
||||
|
@ -103,14 +107,16 @@ Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
|
|||
pods=$(kubectl get pods --selector=app=nginx --output=jsonpath={.items..metadata.name})
|
||||
echo $pods
|
||||
```
|
||||
|
||||
출력 결과는 다음과 같다.
|
||||
|
||||
```
|
||||
nginx-3ntk0 nginx-4ok8v nginx-qrm3m
|
||||
```
|
||||
|
||||
여기서 셀렉터는 레플리케이션컨트롤러(`kubectl describe` 의 출력에서 보인)의 셀렉터와 같고,
|
||||
다른 형식의 파일인 `replication.yaml` 의 것과 동일하다. `--output=jsonpath` 옵션은
|
||||
반환된 목록의 각 파드에서 이름을 가져오는 표현식을 지정한다.
|
||||
다른 형식의 파일인 `replication.yaml` 의 것과 동일하다. `--output=jsonpath` 은
|
||||
반환된 목록의 각 파드 이름을 출력하도록 하는 옵션이다.
|
||||
|
||||
|
||||
## 레플리케이션 컨트롤러의 Spec 작성
|
||||
|
@ -118,7 +124,7 @@ nginx-3ntk0 nginx-4ok8v nginx-qrm3m
|
|||
다른 모든 쿠버네티스 컨피그와 마찬가지로 레플리케이션 컨트롤러는 `apiVersion`, `kind`, `metadata` 와 같은 필드가 필요하다.
|
||||
레플리케이션 컨트롤러 오브젝트의 이름은 유효한
|
||||
[DNS 서브도메인 이름](/ko/docs/concepts/overview/working-with-objects/names/#dns-서브도메인-이름)이어야 한다.
|
||||
컨피그 파일의 동작에 관련된 일반적인 정보는 [쿠버네티스 오브젝트 관리](/ko/docs/concepts/overview/working-with-objects/object-management/)를 참고한다.
|
||||
환경 설정 파일의 동작에 관련된 일반적인 정보는 [쿠버네티스 오브젝트 관리](/ko/docs/concepts/overview/working-with-objects/object-management/)를 참고한다.
|
||||
|
||||
레플리케이션 컨트롤러는 또한 [`.spec` section](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status)도 필요하다.
|
||||
|
||||
|
@ -198,7 +204,7 @@ REST API나 Go 클라이언트 라이브러리를 사용하는 경우 레플리
|
|||
|
||||
### 레플리케이션 컨트롤러에서 파드 격리
|
||||
|
||||
파드는 레이블을 변경하여 레플리케이션 컨트롤러의 대상 셋에서 제거될 수 있다. 이 기술은 디버깅, 데이터 복구 등을 위해 서비스에서 파드를 제거하는데 사용될 수 있다. 이 방법으로 제거된 파드는 자동으로 교체된다 (레플리카 수가 변경되지 않는다고 가정).
|
||||
파드는 레이블을 변경하여 레플리케이션 컨트롤러의 대상 셋에서 제거될 수 있다. 이 기술은 디버깅과 데이터 복구를 위해 서비스에서 파드를 제거하는 데 사용될 수 있다. 이 방법으로 제거된 파드는 자동으로 교체된다 (레플리카 수가 변경되지 않는다고 가정).
|
||||
|
||||
## 일반적인 사용법 패턴
|
||||
|
||||
|
@ -208,8 +214,7 @@ REST API나 Go 클라이언트 라이브러리를 사용하는 경우 레플리
|
|||
|
||||
### 스케일링
|
||||
|
||||
레플리케이션컨트롤러는 `replicas` 필드를 설정하여 레플리카의 수를 늘리거나 줄인다.
|
||||
레플리카를 수동으로 또는 오토 스케일링 제어 에이전트로 관리하도록 레플리케이션컨트롤러를 구성할 수 있다.
|
||||
레플리케이션컨트롤러는 `replicas` 필드를 업데이트하여, 수동으로 또는 오토 스케일링 제어 에이전트를 통해, 레플리카의 수를 늘리거나 줄일 수 있다.
|
||||
|
||||
### 롤링 업데이트
|
||||
|
||||
|
@ -246,7 +251,6 @@ REST API나 Go 클라이언트 라이브러리를 사용하는 경우 레플리
|
|||
|
||||
레플리케이션 컨트롤러는 조합 가능한 빌딩-블록 프리미티브가 되도록 고안되었다. 향후 사용자의 편의를 위해 더 상위 수준의 API 및/또는 도구와 그리고 다른 보완적인 기본 요소가 그 위에 구축 될 것으로 기대한다. 현재 kubectl이 지원하는 "매크로" 작업 (실행, 스케일)은 개념 증명의 예시이다. 예를 들어 [Asgard](https://techblog.netflix.com/2012/06/asgard-web-based-cloud-management-and.html)와 같이 레플리케이션 컨트롤러, 오토 스케일러, 서비스, 정책 스케줄링, 카나리 등을 관리할 수 있다.
|
||||
|
||||
|
||||
## API 오브젝트
|
||||
|
||||
레플리케이션 컨트롤러는 쿠버네티스 REST API의 최상위 수준의 리소스이다.
|
||||
|
@ -261,8 +265,7 @@ API 오브젝트에 대한 더 자세한 것은
|
|||
이것은 주로 [디플로이먼트](/ko/docs/concepts/workloads/controllers/deployment/)에 의해 파드의 생성, 삭제 및 업데이트를 오케스트레이션 하는 메커니즘으로 사용된다.
|
||||
사용자 지정 업데이트 조정이 필요하거나 업데이트가 필요하지 않은 경우가 아니면 레플리카셋을 직접 사용하는 대신 디플로이먼트를 사용하는 것이 좋다.
|
||||
|
||||
|
||||
### 디플로이먼트 (권장되는)
|
||||
### 디플로이먼트 (권장됨)
|
||||
|
||||
[`Deployment`](/ko/docs/concepts/workloads/controllers/deployment/)는 기본 레플리카셋과 그 파드를 업데이트하는 상위 수준의 API 오브젝트이다. 선언적이며, 서버 사이드이고, 추가 기능이 있기 때문에 롤링 업데이트 기능을 원한다면 디플로이먼트를 권장한다.
|
||||
|
||||
|
|
|
@ -313,17 +313,16 @@ myapp-pod 1/1 Running 0 9m
|
|||
파드는 다음과 같은 사유로, 초기화 컨테이너들의 재-실행을 일으키는, 재시작을 수행할 수
|
||||
있다.
|
||||
|
||||
* 사용자가 초기화 컨테이너 이미지의 변경을 일으키는 파드 스펙 업데이트를 수행했다.
|
||||
Init Container 이미지를 변경하면 파드가 다시 시작된다. 앱 컨테이너
|
||||
이미지의 변경은 앱 컨테이너만 재시작시킨다.
|
||||
* 파드 인프라스트럭처 컨테이너가 재시작되었다. 이는 일반적인 상황이 아니며 노드에
|
||||
* 파드 인프라스트럭처 컨테이너가 재시작된 상황. 이는 일반적인 상황이 아니며 노드에
|
||||
대해서 root 접근 권한을 가진 누군가에 의해서 수행됐을 것이다.
|
||||
* 파드 내의 모든 컨테이너들이, 재시작을 강제하는 `restartPolicy` 가 항상(Always)으로 설정되어 있는,
|
||||
동안 종료되었다. 그리고 초기화 컨테이너의 완료 기록이 가비지 수집
|
||||
때문에 유실되었다.
|
||||
|
||||
|
||||
|
||||
초기화 컨테이너 이미지가 변경되거나 초기화 컨테이너의 완료 기록이 가비지 수집
|
||||
때문에 유실된 상태이면 파드는 재시작되지 않는다. 이는 쿠버네티스 버전 1.20 이상에
|
||||
적용된다. 이전 버전의 쿠버네티스를 사용하는 경우 해당 쿠버네티스 버전의 문서를
|
||||
참고한다.
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
|
|
|
@ -312,8 +312,8 @@ kubelet은 실행 중인 컨테이너들에 대해서 선택적으로 세 가지
|
|||
준비성 프로브는 활성 프로브와는 다르게 준비성에 특정된 엔드포인트를 확인한다.
|
||||
|
||||
{{< note >}}
|
||||
파드가 삭제될 때 단지 요청들을 흘려 보낼(drain) 목적으로,
|
||||
준비성 프로브가 필요하지는 않다는 점을 유념해야 한다. 삭제 시에, 파드는
|
||||
파드가 삭제될 때 요청들을 흘려 보내기(drain) 위해
|
||||
준비성 프로브가 꼭 필요한 것은 아니다. 삭제 시에, 파드는
|
||||
프로브의 존재 여부와 무관하게 자동으로 스스로를 준비되지 않은 상태(unready)로 변경한다.
|
||||
파드는 파드 내의 모든 컨테이너들이 중지될 때까지 준비되지 않은 상태로
|
||||
남아 있다.
|
||||
|
|
|
@ -21,8 +21,6 @@ no_list: true
|
|||
|
||||
* [표준 용어집](/ko/docs/reference/glossary/) - 포괄적이고, 표준화 된 쿠버네티스 용어 목록
|
||||
|
||||
|
||||
|
||||
* [쿠버네티스 API 레퍼런스](/docs/reference/kubernetes-api/)
|
||||
* [쿠버네티스 {{< param "version" >}}용 원페이지(One-page) API 레퍼런스](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/)
|
||||
* [쿠버네티스 API 사용](/ko/docs/reference/using-api/) - 쿠버네티스 API에 대한 개요
|
||||
|
@ -50,16 +48,35 @@ no_list: true
|
|||
|
||||
## 컴포넌트
|
||||
|
||||
* [kubelet](/docs/reference/command-line-tools-reference/kubelet/) - 각 노드에서 구동되는 주요한 *노드 에이전트*. kubelet은 PodSpecs 집합을 가지며 기술된 컨테이너가 구동되고 있는지, 정상 작동하는지를 보장한다.
|
||||
* [kube-apiserver](/docs/reference/command-line-tools-reference/kube-apiserver/) - 파드, 서비스, 레플리케이션 컨트롤러와 같은 API 오브젝트에 대한 검증과 구성을 수행하는 REST API.
|
||||
* [kubelet](/docs/reference/command-line-tools-reference/kubelet/) - 각
|
||||
노드에서 구동되는 주요한 에이전트. kubelet은 PodSpecs 집합을 가지며
|
||||
기술된 컨테이너가 구동되고 있는지, 정상 작동하는지를 보장한다.
|
||||
* [kube-apiserver](/docs/reference/command-line-tools-reference/kube-apiserver/) -
|
||||
파드, 서비스, 레플리케이션 컨트롤러와 같은 API 오브젝트에 대한 검증과 구성을
|
||||
수행하는 REST API.
|
||||
* [kube-controller-manager](/docs/reference/command-line-tools-reference/kube-controller-manager/) - 쿠버네티스에 탑재된 핵심 제어 루프를 포함하는 데몬.
|
||||
* [kube-proxy](/docs/reference/command-line-tools-reference/kube-proxy/) - 간단한 TCP/UDP 스트림 포워딩이나 백-엔드 집합에 걸쳐서 라운드-로빈 TCP/UDP 포워딩을 할 수 있다.
|
||||
* [kube-proxy](/docs/reference/command-line-tools-reference/kube-proxy/) - 간단한
|
||||
TCP/UDP 스트림 포워딩이나 백-엔드 집합에 걸쳐서 라운드-로빈 TCP/UDP 포워딩을
|
||||
할 수 있다.
|
||||
* [kube-scheduler](/docs/reference/command-line-tools-reference/kube-scheduler/) - 가용성, 성능 및 용량을 관리하는 스케줄러.
|
||||
|
||||
## 스케줄링
|
||||
* [kube-scheduler 정책](/ko/docs/reference/scheduling/policies)
|
||||
* [kube-scheduler 프로파일](/ko/docs/reference/scheduling/config/#여러-프로파일)
|
||||
|
||||
* [kube-scheduler 정책](/ko/docs/reference/scheduling/policies)
|
||||
* [kube-scheduler 프로파일](/docs/reference/scheduling/config#profiles)
|
||||
## 환경설정 API
|
||||
|
||||
이 섹션은 쿠버네티스 구성요소 또는 도구를 환경설정하는 데에 사용되는
|
||||
"미발표된" API를 다룬다. 이 API들은 사용자나 관리자가 클러스터를
|
||||
사용/관리하는 데에 중요하지만, 이들 API의 대부분은 아직 API 서버가
|
||||
제공하지 않는다.
|
||||
|
||||
* [kubelet 환경설정 (v1beta1)](/docs/reference/config-api/kubelet-config.v1beta1/)
|
||||
* [kube-scheduler 환경설정 (v1beta1)](/docs/reference/config-api/kube-scheduler-config.v1beta1/)
|
||||
* [kube-scheduler 정책 레퍼런스 (v1)](/docs/reference/config-api/kube-scheduler-policy-config.v1/)
|
||||
* [kube-proxy 환경설정 (v1alpha1)](/docs/reference/config-api/kube-proxy-config.v1alpha1/)
|
||||
* [`audit.k8s.io/v1` API](/docs/reference/config-api/apiserver-audit.v1/)
|
||||
* [클라이언트 인증 API (v1beta1)](/docs/reference/config-api/client-authentication.v1beta1/)
|
||||
* [WebhookAdmission 환경설정 (v1)](/docs/reference/config-api/apiserver-webhookadmission.v1/)
|
||||
|
||||
## 설계 문서
|
||||
|
||||
|
|
|
@ -546,7 +546,6 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능
|
|||
생성된 리소스에서 스키마 기반 유효성 검사를 활성화한다.
|
||||
- `CustomResourceWebhookConversion`: [커스텀리소스데피니션](/ko/docs/concepts/extend-kubernetes/api-extension/custom-resources/)에서
|
||||
생성된 리소스에 대해 웹 훅 기반의 변환을 활성화한다.
|
||||
실행 중인 파드 문제를 해결한다.
|
||||
- `DefaultPodTopologySpread`: `PodTopologySpread` 스케줄링 플러그인을 사용하여
|
||||
[기본 분배](/ko/docs/concepts/workloads/pods/pod-topology-spread-constraints/#내부-기본-제약)를 수행한다.
|
||||
- `DevicePlugins`: 노드에서 [장치 플러그인](/ko/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/)
|
||||
|
@ -725,11 +724,9 @@ kubelet과 같은 컴포넌트의 기능 게이트를 설정하려면, 기능
|
|||
있도록 한다. 자세한 내용은
|
||||
[서비스토폴로지(ServiceTopology)](/ko/docs/concepts/services-networking/service-topology/)를
|
||||
참고한다.
|
||||
- `SizeMemoryBackedVolumes`: kubelet 지원을 사용하여 메모리 백업 볼륨의 크기를 조정한다.
|
||||
자세한 내용은 [volumes](/ko/docs/concepts/storage/volumes)를 참조한다.
|
||||
- `SetHostnameAsFQDN`: 전체 주소 도메인 이름(FQDN)을 파드의 호스트 이름으로
|
||||
설정하는 기능을 활성화한다.
|
||||
[파드의 `setHostnameAsFQDN` 필드](/ko/docs/concepts/services-networking/dns-pod-service/#파드의-sethostnameasfqdn-필드)를 참고한다.
|
||||
[파드의 `setHostnameAsFQDN` 필드](/ko/docs/concepts/services-networking/dns-pod-service/#pod-sethostnameasfqdn-field)를 참고한다.
|
||||
- `StartupProbe`: kubelet에서
|
||||
[스타트업](/ko/docs/concepts/workloads/pods/pod-lifecycle/#언제-스타트업-프로브를-사용해야-하는가)
|
||||
프로브를 활성화한다.
|
||||
|
|
|
@ -11,10 +11,10 @@ tags:
|
|||
- architecture
|
||||
- operation
|
||||
---
|
||||
클라우드별 컨트롤 로직을 포함하는 쿠버네티스
|
||||
클라우드별 컨트롤 로직을 포함하는 쿠버네티스
|
||||
{{< glossary_tooltip text="컨트롤 플레인" term_id="control-plane" >}} 컴포넌트이다.
|
||||
클라우드 컨트롤러 매니저를 통해 클러스터를 클라우드 공급자의 API에 연결하고,
|
||||
해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와 상호 작용하는 컴포넌트를 분리할 수 있다.
|
||||
해당 클라우드 플랫폼과 상호 작용하는 컴포넌트와 클러스터와만 상호 작용하는 컴포넌트를 구분할 수 있게 해 준다.
|
||||
|
||||
<!--more-->
|
||||
|
||||
|
|
|
@ -357,7 +357,7 @@ API 리소스를 탐색하기 위한 다른 작업:
|
|||
```bash
|
||||
kubectl api-resources --namespaced=true # 네임스페이스를 가지는 모든 리소스
|
||||
kubectl api-resources --namespaced=false # 네임스페이스를 가지지 않는 모든 리소스
|
||||
kubectl api-resources -o name # 모든 리소스의 단순한 (리소스 이름 만) 출력
|
||||
kubectl api-resources -o name # 모든 리소스의 단순한 (리소스 이름만) 출력
|
||||
kubectl api-resources -o wide # 모든 리소스의 확장된 ("wide"로 알려진) 출력
|
||||
kubectl api-resources --verbs=list,get # "list"와 "get"의 요청 동사를 지원하는 모든 리소스 출력
|
||||
kubectl api-resources --api-group=extensions # "extensions" API 그룹의 모든 리소스
|
||||
|
@ -384,7 +384,10 @@ kubectl api-resources --api-group=extensions # "extensions" API 그룹의 모든
|
|||
# 클러스터에서 실행 중인 모든 이미지
|
||||
kubectl get pods -A -o=custom-columns='DATA:spec.containers[*].image'
|
||||
|
||||
# "k8s.gcr.io/coredns:1.6.2" 를 제외한 모든 이미지
|
||||
# `default` 네임스페이스의 모든 이미지를 파드별로 그룹지어 출력
|
||||
kubectl get pods --namespace default --output=custom-columns="NAME:.metadata.name,IMAGE:.spec.containers[*].image"
|
||||
|
||||
# "k8s.gcr.io/coredns:1.6.2" 를 제외한 모든 이미지
|
||||
kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="k8s.gcr.io/coredns:1.6.2")].image'
|
||||
|
||||
# 이름에 관계없이 메타데이터 아래의 모든 필드
|
||||
|
|
|
@ -18,12 +18,10 @@ weight: 20
|
|||
각 단계는 익스텐션 포인트(extension point)를 통해 노출된다. 플러그인은 이러한
|
||||
익스텐션 포인트 중 하나 이상을 구현하여 스케줄링 동작을 제공한다.
|
||||
|
||||
컴포넌트 구성 API([`v1alpha1`](https://pkg.go.dev/k8s.io/kube-scheduler@v0.18.0/config/v1alpha1?tab=doc#KubeSchedulerConfiguration)
|
||||
또는 [`v1alpha2`](https://pkg.go.dev/k8s.io/kube-scheduler@v0.18.0/config/v1alpha2?tab=doc#KubeSchedulerConfiguration))를
|
||||
사용하고, `kube-scheduler --config <filename>`을 실행하여
|
||||
[KubeSchedulerConfiguration (v1beta1)](/docs/reference/config-api/kube-scheduler-config.v1beta1/)
|
||||
구조에 맞게 파일을 작성하고,
|
||||
`kube-scheduler --config <filename>`을 실행하여
|
||||
스케줄링 프로파일을 지정할 수 있다.
|
||||
`v1alpha2` API를 사용하면 [여러 프로파일](#여러-프로파일)을
|
||||
실행하도록 kube-scheduler를 구성할 수 있다.
|
||||
|
||||
최소 구성은 다음과 같다.
|
||||
|
||||
|
@ -249,3 +247,4 @@ profiles:
|
|||
|
||||
* [kube-scheduler 레퍼런스](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/) 읽어보기
|
||||
* [스케줄링](/ko/docs/concepts/scheduling-eviction/kube-scheduler/)에 대해 알아보기
|
||||
* [kube-scheduler configuration (v1beta1)](/docs/reference/config-api/kube-scheduler-config.v1beta1/) 레퍼런스 읽어보기
|
||||
|
|
|
@ -8,9 +8,7 @@ weight: 10
|
|||
|
||||
스케줄링 정책을 사용하여 {{< glossary_tooltip text="kube-scheduler" term_id="kube-scheduler" >}}가 각각 노드를 필터링하고 스코어링(scoring)하기 위해 실행하는 *단정(predicates)* 및 *우선순위(priorities)* 를 지정할 수 있다.
|
||||
|
||||
`kube-scheduler --policy-config-file <filename>` 또는 `kube-scheduler --policy-configmap <ConfigMap>`을 실행하고 [정책 유형](https://pkg.go.dev/k8s.io/kube-scheduler@v0.18.0/config/v1?tab=doc#Policy)을 사용하여 스케줄링 정책을 설정할 수 있다.
|
||||
|
||||
|
||||
`kube-scheduler --policy-config-file <filename>` 또는 `kube-scheduler --policy-configmap <ConfigMap>`을 실행하고 [정책 유형](/docs/reference/config-api/kube-scheduler-policy-config.v1/)을 사용하여 스케줄링 정책을 설정할 수 있다.
|
||||
|
||||
<!-- body -->
|
||||
|
||||
|
@ -110,9 +108,9 @@ weight: 10
|
|||
- `EvenPodsSpreadPriority`: 선호된
|
||||
[파드 토폴로지 분배 제약 조건](/ko/docs/concepts/workloads/pods/pod-topology-spread-constraints/)을 구현한다.
|
||||
|
||||
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
* [스케줄링](/ko/docs/concepts/scheduling-eviction/kube-scheduler/)에 대해 배우기
|
||||
* [kube-scheduler 프로파일](/docs/reference/scheduling/profiles/)에 대해 배우기
|
||||
* [kube-scheduler configuration 레퍼런스 (v1beta1)](/docs/reference/config-api/kube-scheduler-config.v1beta1) 읽어보기
|
||||
* [kube-scheduler Policy 레퍼런스 (v1)](/docs/reference/config-api/kube-scheduler-policy-config.v1/) 읽어보기
|
||||
|
|
|
@ -67,9 +67,8 @@ _A_ 영역에 있는 컨트롤 플레인 호스트로만 전달한다. 단일
|
|||
|
||||
쿠버네티스 [리소스 제한](/ko/docs/concepts/configuration/manage-resources-containers/)은
|
||||
파드와 컨테이너가 다른 컴포넌트에 영향을 줄 수 있는 메모리 누수 및 기타 방식의 영향을
|
||||
최소화하는 데 도움이 된다. 이러한 리소스 제한은 애플리케이션 워크로드에 적용되는 것과 마찬가지로
|
||||
{{< glossary_tooltip text="애드온" term_id="addons" >}}에도 적용될 수 있으며
|
||||
적용되어야 한다.
|
||||
최소화하는 데 도움이 된다. 이러한 리소스 제한은 애플리케이션 워크로드에 적용될 수 있는 것처럼
|
||||
{{< glossary_tooltip text="애드온" term_id="addons" >}} 리소스에도 적용될 수 있다.
|
||||
|
||||
예를 들어, 로깅 컴포넌트에 대한 CPU 및 메모리 제한을 설정할 수 있다.
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ sudo sysctl --system
|
|||
|
||||
| 프로토콜 | 방향 | 포트 범위 | 목적 | 사용자 |
|
||||
|----------|-----------|------------|-------------------------|---------------------------|
|
||||
| TCP | 인바운드 | 6443* | 쿠버네티스 API 서버 | 모두 |
|
||||
| TCP | 인바운드 | 6443\* | 쿠버네티스 API 서버 | 모두 |
|
||||
| TCP | 인바운드 | 2379-2380 | etcd 서버 클라이언트 API | kube-apiserver, etcd |
|
||||
| TCP | 인바운드 | 10250 | kubelet API | 자체, 컨트롤 플레인 |
|
||||
| TCP | 인바운드 | 10251 | kube-scheduler | 자체 |
|
||||
|
@ -307,7 +307,8 @@ kind: KubeletConfiguration
|
|||
cgroupDriver: <value>
|
||||
```
|
||||
|
||||
자세한 내용은 [구성 파일과 함께 kubeadm init 사용](/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file)을 참고한다.
|
||||
자세한 내용은 [구성 파일과 함께 kubeadm init 사용](/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file)과
|
||||
[`KubeletConfiguration` 레퍼런스](/docs/reference/config-api/kubelet-config.v1beta1/)를 참고한다.
|
||||
|
||||
`cgroupfs` 가 이미 kubelet의 기본값이기 때문에, 사용자의
|
||||
CRI cgroup 드라이버가 `cgroupfs` 가 아닌 **경우에만** 위와 같이 설정해야 한다.
|
||||
|
@ -321,12 +322,10 @@ CRI cgroup 드라이버가 `cgroupfs` 가 아닌 **경우에만** 위와 같이
|
|||
CRI-O 및 containerd와 같은 다른 컨테이너 런타임에 대한 cgroup 드라이버의
|
||||
자동 감지에 대한 작업이 진행 중이다.
|
||||
|
||||
|
||||
## 문제 해결
|
||||
|
||||
kubeadm에 문제가 있는 경우, [문제 해결 문서](/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/)를 참고한다.
|
||||
|
||||
## {{% heading "whatsnext" %}}
|
||||
|
||||
|
||||
* [kubeadm을 사용하여 클러스터 생성](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)
|
||||
|
|
|
@ -68,7 +68,7 @@ Kubespray에서는 디플로이먼트의 많은 속성들을 사용자가 정의
|
|||
* {{< glossary_tooltip term_id="cri-o" >}}
|
||||
* 인증서 생성 방법
|
||||
|
||||
Kubespray의 [변수 파일들](https://docs.ansible.com/ansible/playbooks_variables.html)을 사용자가 정의할 수 있다. 만약 Kubespray를 막 시작한 경우, kubespray의 기본 설정값을 이용해 클러스터를 배포하고 Kubernetes를 탐색하는 것이 좋다.
|
||||
Kubespray의 [변수 파일들](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html)을 사용자가 정의할 수 있다. 만약 Kubespray를 처음 접하는 경우, kubespray의 기본 설정값을 이용해 클러스터를 배포하고 쿠버네티스를 탐색하는 것이 좋다.
|
||||
|
||||
### (4/5) 클러스터 배포하기
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ weight: 65
|
|||
쿠버네티스의 윈도우 운영 체제 지원은 다음 표를 참조한다. 단일 이기종 쿠버네티스 클러스터에는 윈도우 및 리눅스 워커 노드가 모두 있을 수 있다. 윈도우 컨테이너는 윈도우 노드에서, 리눅스 컨테이너는 리눅스 노드에서 스케줄되어야 한다.
|
||||
|
||||
| 쿠버네티스 버전 | 윈도우 서버 LTSC 릴리스 | 윈도우 서버 SAC 릴리스 |
|
||||
| --- | --- | --- | --- |
|
||||
| --- | --- | --- |
|
||||
| *Kubernetes v1.17* | Windows Server 2019 | Windows Server ver 1809 |
|
||||
| *Kubernetes v1.18* | Windows Server 2019 | Windows Server ver 1809, Windows Server ver 1903, Windows Server ver 1909 |
|
||||
| *Kubernetes v1.19* | Windows Server 2019 | Windows Server ver 1909, Windows Server ver 2004 |
|
||||
|
@ -230,23 +230,32 @@ CSI 노드 플러그인(특히 블록 디바이스 또는 공유 파일시스템
|
|||
|
||||
### 제한
|
||||
|
||||
#### 컨트롤 플레인
|
||||
|
||||
윈도우는 쿠버네티스 아키텍처 및 컴포넌트 매트릭스에서 워커 노드로만 지원된다. 즉, 쿠버네티스 클러스터에는 항상 리눅스 마스터 노드가 반드시 포함되어야 하고, 0개 이상의 리눅스 워커 노드 및 0개 이상의 윈도우 워커 노드가 포함된다.
|
||||
|
||||
#### 컴퓨트 {#컴퓨트-제한}
|
||||
|
||||
##### 리소스 관리 및 프로세스 격리
|
||||
#### 자원 관리
|
||||
|
||||
리눅스 cgroup은 리눅스에서 리소스 제어를 위한 파드 경계로 사용된다. 컨테이너는 네트워크, 프로세스 및 파일시스템 격리를 위해 해당 경계 내에 생성된다. cgroups API는 cpu/io/memory 통계를 수집하는 데 사용할 수 있다. 반대로 윈도우는 시스템 네임스페이스 필터가 있는 컨테이너별로 잡(Job) 오브젝트를 사용하여 컨테이너의 모든 프로세스를 포함하고 호스트와의 논리적 격리를 제공한다. 네임스페이스 필터링 없이 윈도우 컨테이너를 실행할 수 있는 방법은 없다. 즉, 시스템 권한은 호스트 컨텍스트에서 삽입 될(assert) 수 없으므로 권한이 있는(privileged) 컨테이너는 윈도우에서 사용할 수 없다. 보안 계정 매니져(Security Account Manager, SAM)가 분리되어 있으므로 컨테이너는 호스트의 ID를 가정할 수 없다.
|
||||
|
||||
##### 운영 체제 제한
|
||||
#### 자원 예약
|
||||
|
||||
윈도우에는 호스트 OS 버전이 컨테이너 베이스 이미지 OS 버전과 일치해야 하는 엄격한 호환성 규칙이 있다. 윈도우 서버 2019의 컨테이너 운영 체제가 있는 윈도우 컨테이너만 지원된다. 윈도우 컨테이너 이미지 버전의 일부 이전 버전과의 호환성을 가능하게 하는 컨테이너의 Hyper-V 격리는 향후 릴리스로 계획되어 있다.
|
||||
##### 메모리 예약
|
||||
윈도우에는 리눅스에는 있는 메모리 부족 프로세스 킬러가 없다. 윈도우는 모든 사용자-모드 메모리 할당을 항상 가상 메모리처럼 처리하며, 페이지파일이 필수이다. 결과적으로 윈도우에서는 리눅스에서 발생할 수 있는 메모리 부족 상태에 도달하지 않으며, 프로세스는 메모리 부족 (out of memory, OOM) 종료를 겪는 대신 디스크로 페이징한다. 메모리가 오버프로비저닝되고 모든 물리 메모리가 고갈되면 페이징으로 인해 성능이 저하될 수 있다.
|
||||
|
||||
##### 기능 제한
|
||||
kubelet 파라미터 `--kubelet-reserve` 를 사용하여 메모리 사용량을 합리적인 범위 내로 유지할 수 있으며, `--system-reserve` 를 사용하여 노드(컨테이너 외부)의 메모리 사용량을 예약할 수 있다. 이들을 사용하면 그만큼 [노드 할당(NodeAllocatable)](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable)은 줄어든다.
|
||||
|
||||
* TerminationGracePeriod: CRI-containerD 필요
|
||||
{{< note >}}
|
||||
워크로드를 배포할 때, 컨테이너에 리소스 제한을 사용한다 (제한만 설정하거나, 제한이 요청과 같아야 함). 이 또한 NodeAllocatable에서 차감되며, 메모리가 꽉 찬 노드에 스케줄러가 파드를 할당하지 않도록 제한한다.
|
||||
{{< /note >}}
|
||||
|
||||
오버프로비저닝을 방지하는 가장 좋은 방법은 윈도우, 도커, 그리고 쿠버네티스 프로세스를 위해 최소 2GB 이상의 시스템 예약 메모리로 kubelet을 설정하는 것이다.
|
||||
|
||||
##### CPU 예약
|
||||
윈도우, 도커, 그리고 다른 쿠버네티스 호스트 프로세스가 이벤트에 잘 응답할 수 있도록, CPU의 일정 비율을 예약하는 것이 좋다. 이 값은 윈도우 노드에 있는 CPU 코어 수에 따라 조정해야 한다. 이 비율을 결정하려면, 각 노드의 최대 파드 밀도(density)를 관찰하고, 시스템 서비스의 CPU 사용량을 모니터링하여 워크로드 요구 사항을 충족하는 값을 선택해야 한다.
|
||||
|
||||
kubelet 파라미터 `--kubelet-reserve` 를 사용하여 CPU 사용량을 합리적인 범위 내로 유지할 수 있으며, `--system-reserve` 를 사용하여 노드(컨테이너 외부)의 CPU 사용량을 예약할 수 있다. 이들을 사용하면 그만큼 [노드 할당(NodeAllocatable)](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable)은 줄어든다.
|
||||
|
||||
#### 기능 제한
|
||||
* TerminationGracePeriod: 구현되지 않음
|
||||
* 단일 파일 매핑: CRI-ContainerD로 구현 예정
|
||||
* 종료 메시지: CRI-ContainerD로 구현 예정
|
||||
* 특권을 가진(Privileged) 컨테이너: 현재 윈도우 컨테이너에서 지원되지 않음
|
||||
|
@ -254,15 +263,8 @@ CSI 노드 플러그인(특히 블록 디바이스 또는 공유 파일시스템
|
|||
* 기존 노드 문제 감지기는 리눅스 전용이며 특권을 가진 컨테이너가 필요하다. 윈도우에서 특권을 가진 컨테이너를 지원하지 않기 때문에 일반적으로 윈도우에서 이 기능이 사용될 것으로 예상하지 않는다.
|
||||
* 공유 네임스페이스의 모든 기능이 지원되는 것은 아니다. (자세한 내용은 API 섹션 참조).
|
||||
|
||||
##### 메모리 예약 및 처리
|
||||
|
||||
윈도우에는 리눅스처럼 out-of-memory 프로세스 킬러가 없다. 윈도우는 항상 모든 사용자 모드 메모리 할당을 가상으로 처리하며 페이지 파일은 필수이다. 결과적으로 윈도우는 리눅스와 같은 방식으로 메모리 부족 상태에 도달하지 않고, 메모리 부족(OOM)으로 인한 종료 대신 페이지를 디스크로 처리한다. 메모리가 과도하게 프로비저닝되고 모든 실제 메모리가 고갈되면, 페이징으로 인해 성능이 저하될 수 있다.
|
||||
|
||||
2단계 프로세스를 통해 적절한 범위 내에서 메모리 사용량을 유지할 수 있다. 먼저, kubelet 파라미터 `--kubelet-reserve` 그리고/또는 `--system-reserve`를 사용하여 노드(컨테이너 외부)의 메모리 사용량을 고려한다. 이렇게 하면 [노드 할당(NodeAllocatable)](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable)이 줄어든다. 워크로드를 배포할 때 컨테이너에 리소스 제한을 사용(limits만 설정하거나 limits이 requests과 같아야 함)한다. 또한 NodeAllocatable에서 빼고 노드가 가득차면 스케줄러가 더 많은 파드를 추가하지 못하도록 한다.
|
||||
|
||||
오버 프로비저닝을 방지하는 모범 사례는 윈도우, 도커 및 쿠버네티스 프로세스를 고려하여 최소 2GB의 시스템 예약 메모리로 kubelet을 구성하는 것이다.
|
||||
|
||||
플래그의 동작은 아래에 설명된 대로 다르게 동작한다.
|
||||
#### 각 플래그의 리눅스와의 차이점
|
||||
윈도우 노드에서의 kubelet 플래그는 아래와 같이 다르게 동작한다.
|
||||
|
||||
* `--kubelet-reserve`, `--system-reserve`, `--eviction-hard` 플래그는 Node Allocatable 업데이트
|
||||
* `--enforce-node-allocable`을 사용한 축출(Eviction)은 구현되지 않았다.
|
||||
|
@ -362,7 +364,7 @@ SELinux, AppArmor, Seccomp, 기능(POSIX 기능)과 같은 리눅스 특유의
|
|||
|
||||
* ID - 리눅스는 정수형으로 표시되는 userID(UID) 및 groupID(GID)를 사용한다. 사용자와 그룹 이름은 정식 이름이 아니다. UID+GID에 대한 `/etc/groups` 또는 `/etc/passwd`의 별칭일 뿐이다. 윈도우는 윈도우 보안 계정 관리자(Security Account Manager, SAM) 데이터베이스에 저장된 더 큰 이진 보안 식별자(SID)를 사용한다. 이 데이터베이스는 호스트와 컨테이너 간에 또는 컨테이너들 간에 공유되지 않는다.
|
||||
* 파일 퍼미션 - 윈도우는 권한 및 UUID+GID의 비트 마스크(bitmask) 대신 SID를 기반으로 하는 접근 제어 목록을 사용한다.
|
||||
* 파일 경로 - 윈도우의 규칙은 `/` 대신 `\`를 사용하는 것이다. Go IO 라이브러리는 일반적으로 두 가지를 모두 허용하고 작동하도록 하지만, 컨테이너 내부에서 해석되는 경로 또는 커맨드 라인을 설정할 때 `\`가 필요할 수 있다.
|
||||
* 파일 경로 - 윈도우의 규칙은 `/` 대신 `\`를 사용하는 것이다. Go IO 라이브러리는 두 가지 파일 경로 분리자를 모두 허용한다. 하지만, 컨테이너 내부에서 해석되는 경로 또는 커맨드 라인을 설정할 때 `\`가 필요할 수 있다.
|
||||
* 신호(Signals) - 윈도우 대화형(interactive) 앱은 종료를 다르게 처리하며, 다음 중 하나 이상을 구현할 수 있다.
|
||||
* UI 스레드는 WM_CLOSE를 포함하여 잘 정의된(well-defined) 메시지를 처리한다.
|
||||
* 콘솔 앱은 컨트롤 핸들러(Control Handler)를 사용하여 ctrl-c 또는 ctrl-break를 처리한다.
|
||||
|
@ -410,6 +412,10 @@ PodSecurityContext 필드는 윈도우에서 작동하지 않는다. 참조를
|
|||
* V1.PodSecurityContext.SupplementalGroups - 윈도우에서는 사용할 수 없는 GID를 제공한다.
|
||||
* V1.PodSecurityContext.Sysctls - 이것들은 리눅스 sysctl 인터페이스의 일부이다. 윈도우에는 이에 상응하는 것이 없다.
|
||||
|
||||
#### 운영 체제 버전 제한
|
||||
|
||||
윈도우에는 호스트 OS 버전이 컨테이너 베이스 이미지 OS 버전과 일치해야 하는 엄격한 호환성 규칙이 있다. 윈도우 서버 2019의 컨테이너 운영 체제가 있는 윈도우 컨테이너만 지원된다. 윈도우 컨테이너 이미지 버전의 일부 이전 버전과의 호환성을 가능하게 하는 컨테이너의 Hyper-V 격리는 향후 릴리스로 계획되어 있다.
|
||||
|
||||
## 도움 받기 및 트러블슈팅 {#troubleshooting}
|
||||
|
||||
쿠버네티스 클러스터 트러블슈팅을 위한 기본 도움말은 이 [섹션](/docs/tasks/debug-application-cluster/troubleshooting/)에서 먼저 찾아야 한다. 이 섹션에는 몇 가지 추가 윈도우 관련 트러블슈팅 도움말이 포함되어 있다. 로그는 쿠버네티스에서 트러블슈팅하는데 중요한 요소이다. 다른 기여자로부터 트러블슈팅 지원을 구할 때마다 이를 포함해야 한다. SIG-Windows [로그 수집에 대한 기여 가이드](https://github.com/kubernetes/community/blob/master/sig-windows/CONTRIBUTING.md#gathering-logs)의 지침을 따른다.
|
||||
|
|
|
@ -111,8 +111,8 @@ kubectl edit ds/fluentd-elasticsearch -n kube-system
|
|||
|
||||
##### 컨테이너 이미지만 업데이트
|
||||
|
||||
데몬셋 템플릿에서 컨테이너 이미지를 업데이트해야 하는
|
||||
경우(예: `.spec.template.spec.containers[*].image`), `kubectl set image` 를 사용한다.
|
||||
데몬셋 템플릿(예: `.spec.template.spec.containers[*].image`)에 의해 정의된 컨테이너 이미지만 업데이트하려면,
|
||||
`kubectl set image` 를 사용한다.
|
||||
|
||||
```shell
|
||||
kubectl set image ds/fluentd-elasticsearch fluentd-elasticsearch=quay.io/fluentd_elasticsearch/fluentd:v2.6.0 -n kube-system
|
||||
|
@ -168,7 +168,7 @@ kubectl get pods -l name=fluentd-elasticsearch -o wide -n kube-system
|
|||
데몬셋 롤아웃이 진행되지 않는다.
|
||||
|
||||
이 문제를 해결하려면, 데몬셋 템플릿을 다시 업데이트한다. 이전의 비정상 롤아웃으로 인해
|
||||
새로운 롤아웃이 차단되지 않는다.
|
||||
새로운 롤아웃이 차단되지는 않는다.
|
||||
|
||||
#### 클럭 차이(skew)
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ description: 클러스터의 노드별로 리소스로 사용할 GPU를 구성
|
|||
쿠버네티스는 AMD 및 NVIDIA GPU(그래픽 프로세싱 유닛)를 노드들에 걸쳐 관리하기 위한 **실험적인**
|
||||
지원을 포함한다.
|
||||
|
||||
이 페이지는 다른 쿠버네티스 버전 간에 걸쳐 사용자가 GPU들을 소비할 수 있는 방법과
|
||||
이 페이지는 여러 쿠버네티스 버전에서 사용자가 GPU를 활용할 수 있는 방법과
|
||||
현재의 제약 사항을 설명한다.
|
||||
|
||||
|
||||
|
@ -37,7 +37,7 @@ description: 클러스터의 노드별로 리소스로 사용할 GPU를 구성
|
|||
`nvidia.com/gpu` 를 스케줄 가능한 리소스로써 노출시킨다.
|
||||
|
||||
사용자는 이 GPU들을 `cpu` 나 `memory` 를 요청하는 방식과 동일하게
|
||||
`<vendor>.com/gpu` 를 요청함으로써 컨테이너를 통해 소비할 수 있다.
|
||||
`<vendor>.com/gpu` 를 요청함으로써 컨테이너에서 활용할 수 있다.
|
||||
그러나 GPU를 사용할 때는 리소스 요구 사항을 명시하는 방식에 약간의
|
||||
제약이 있다.
|
||||
|
||||
|
|
|
@ -37,8 +37,8 @@ kubectl delete statefulsets <statefulset-name>
|
|||
kubectl delete service <service-name>
|
||||
```
|
||||
|
||||
kubectl을 통해 스테이트풀셋을 삭제하면 0으로 스케일이 낮아지고, 스테이트풀셋에 포함된 모든 파드가 삭제된다.
|
||||
파드가 아닌 스테이트풀셋만 삭제하려면, `--cascade=false` 를 사용한다.
|
||||
kubectl을 통해 스테이트풀셋을 삭제하면, 스테이트풀셋의 크기가 0으로 설정되고 이로 인해 스테이트풀셋에 포함된 모든 파드가 삭제된다. 파드가 아닌 스테이트풀셋만 삭제하려면, `--cascade=false` 옵션을 사용한다.
|
||||
예시는 다음과 같다.
|
||||
|
||||
```shell
|
||||
kubectl delete -f <file.yaml> --cascade=false
|
||||
|
|
|
@ -381,7 +381,7 @@ object:
|
|||
외부 메트릭 사용시, 먼저 모니터링 시스템에 대한 이해가 있어야 한다.
|
||||
이 설치는 사용자 정의 메트릭과 유사하다.
|
||||
외부 메트릭을 사용하면 모니터링 시스템의 사용 가능한 메트릭에 기반하여 클러스터를 오토스케일링 할 수 있다.
|
||||
위의 예제처럼 `name`과 `selector`를 갖는 `metric` 블록을 제공하고,
|
||||
위의 예제처럼 `name`과 `selector`를 갖는 `metric` 블록을 명시하고,
|
||||
`Object` 대신에 `External` 메트릭 타입을 사용한다.
|
||||
만일 여러 개의 시계열이 `metricSelector`와 일치하면, HorizontalPodAutoscaler가 값의 합을 사용한다.
|
||||
외부 메트릭들은 `Value`와 `AverageValue` 대상 타입을 모두 지원하고,
|
||||
|
|
|
@ -23,9 +23,7 @@ Pod Autoscaler는 크기를 조정할 수 없는 오브젝트(예: 데몬셋(Dae
|
|||
|
||||
Horizontal Pod Autoscaler는 쿠버네티스 API 리소스 및 컨트롤러로 구현된다.
|
||||
리소스는 컨트롤러의 동작을 결정한다.
|
||||
컨트롤러는 관찰된 평균 CPU 사용률이 사용자가 지정한 대상과 일치하도록 레플리케이션
|
||||
컨트롤러 또는 디플로이먼트에서 레플리카 개수를 주기적으로 조정한다.
|
||||
|
||||
컨트롤러는 평균 CPU 사용률, 평균 메모리 사용률 또는 다른 커스텀 메트릭과 같은 관찰 대상 메트릭이 사용자가 지정한 목표값과 일치하도록 레플리케이션 컨트롤러 또는 디플로이먼트에서 레플리카 개수를 주기적으로 조정한다.
|
||||
|
||||
|
||||
|
||||
|
@ -355,7 +353,7 @@ API에 접속하려면 클러스터 관리자는 다음을 확인해야 한다.
|
|||
|
||||
## 구성가능한 스케일링 동작 지원
|
||||
|
||||
[v1.18](https://github.com/kubernetes/enhancements/blob/master/keps/sig-autoscaling/20190307-configurable-scale-velocity-for-hpa.md)
|
||||
[v1.18](https://github.com/kubernetes/enhancements/blob/master/keps/sig-autoscaling/853-configurable-hpa-scale-velocity/README.md)
|
||||
부터 `v2beta2` API는 HPA `behavior` 필드를 통해
|
||||
스케일링 동작을 구성할 수 있다.
|
||||
동작은 `behavior` 필드 아래의 `scaleUp` 또는 `scaleDown`
|
||||
|
|
|
@ -17,9 +17,9 @@ no_list: true
|
|||
`kubectl` 은 다양한 리눅스 플랫폼, macOS, 그리고 윈도우에 설치할 수 있다.
|
||||
각각에 대한 설치 가이드는 다음과 같다.
|
||||
|
||||
- [리눅스에 `kubectl` 설치하기](install-kubectl-linux)
|
||||
- [macOS에 `kubectl` 설치하기](install-kubectl-macos)
|
||||
- [윈도우에 `kubectl` 설치하기](install-kubectl-windows)
|
||||
- [리눅스에 `kubectl` 설치하기](/ko/docs/tasks/tools/install-kubectl-linux/)
|
||||
- [macOS에 `kubectl` 설치하기](/ko/docs/tasks/tools/install-kubectl-macos/)
|
||||
- [윈도우에 `kubectl` 설치하기](/ko/docs/tasks/tools/install-kubectl-windows/)
|
||||
|
||||
## kind
|
||||
|
||||
|
|
|
@ -27,6 +27,8 @@ content_type: concept
|
|||
|
||||
## 구성
|
||||
|
||||
* [예제: Java 마이크로서비스 구성하기](/ko/docs/tutorials/configuration/configure-java-microservice/)
|
||||
|
||||
* [컨피그 맵을 사용해서 Redis 설정하기](/ko/docs/tutorials/configuration/configure-redis-using-configmap/)
|
||||
|
||||
## 상태 유지를 하지 않는(stateless) 애플리케이션
|
||||
|
|
|
@ -322,7 +322,7 @@ Events:
|
|||
23s 23s 1 {kubelet e2e-test-stclair-node-pool-t1f5} Warning AppArmor Cannot enforce AppArmor: profile "k8s-apparmor-example-allow-write" is not loaded
|
||||
```
|
||||
|
||||
파드 상태는 Failed이며 오류메시지는 `Pod Cannot enforce AppArmor: profile
|
||||
파드 상태는 Pending이며, 오류 메시지는 `Pod Cannot enforce AppArmor: profile
|
||||
"k8s-apparmor-example-allow-write" is not loaded`이다. 이벤트도 동일한 메시지로 기록되었다.
|
||||
|
||||
## 관리 {#administration}
|
||||
|
|
|
@ -48,7 +48,7 @@ Katacode는 무료로 브라우저에서 쿠버네티스 환경을 제공한다.
|
|||
{{< kat-button >}}
|
||||
|
||||
{{< note >}}
|
||||
minikube를 로컬에 설치했다면 `minikube start`를 실행한다.
|
||||
minikube를 로컬에 설치했다면 `minikube start`를 실행한다. `minikube dashboard` 명령을 실행하기 전에, 새 터미널을 열고, 그 터미널에서 `minikube dashboard` 명령을 실행한 후, 원래의 터미널로 돌아온다.
|
||||
{{< /note >}}
|
||||
|
||||
2. 브라우저에서 쿠버네티스 대시보드를 열어보자.
|
||||
|
@ -154,7 +154,7 @@ minikube dashboard --url
|
|||
`k8s.gcr.io/echoserver` 이미지 내의 애플리케이션 코드는 TCP 포트 8080에서만 수신한다. `kubectl expose`를
|
||||
사용하여 다른 포트를 노출한 경우, 클라이언트는 다른 포트에 연결할 수 없다.
|
||||
|
||||
2. 방금 생성한 서비스 살펴보기
|
||||
2. 생성한 서비스 살펴보기
|
||||
|
||||
```shell
|
||||
kubectl get services
|
||||
|
@ -229,7 +229,7 @@ minikube 툴은 활성화하거나 비활성화할 수 있고 로컬 쿠버네
|
|||
metrics-server was successfully enabled
|
||||
```
|
||||
|
||||
3. 방금 생성한 파드와 서비스를 확인한다.
|
||||
3. 생성한 파드와 서비스를 확인한다.
|
||||
|
||||
```shell
|
||||
kubectl get pod,svc -n kube-system
|
||||
|
|
|
@ -434,7 +434,7 @@ web-4 0/1 ContainerCreating 0 0s
|
|||
web-4 1/1 Running 0 19s
|
||||
```
|
||||
|
||||
스테이트풀셋 컨트롤러는 레플리카개수를 스케일링한다.
|
||||
스테이트풀셋 컨트롤러는 레플리카 개수를 스케일링한다.
|
||||
[스테이트풀셋 생성](#차례대로-파드-생성하기)으로 스테이트풀셋 컨트롤러는
|
||||
각 파드을 순차적으로 각 순번에 따라 생성하고 후속 파드 시작 전에
|
||||
이전 파드가 Running과 Ready 상태가 될 때까지
|
||||
|
@ -1067,9 +1067,10 @@ statefulset "web" deleted
|
|||
### Parallel 파드 관리
|
||||
|
||||
`Parallel` 파드 관리는 스테이트풀셋 컨트롤러가 모든 파드를
|
||||
병렬로 시작하고 종료하는 것으로 다른 파드를 시작/종료하기 전에
|
||||
병렬로 시작하고 종료하는 것으로, 다른 파드를 시작/종료하기 전에
|
||||
파드가 Running과 Ready 상태로 전환되거나 완전히 종료되기까지
|
||||
기다리지 않음을 뜻한다.
|
||||
이 옵션은 스케일링 동작에만 영향을 미치며, 업데이트 동작에는 영향을 미치지 않는다.
|
||||
|
||||
{{< codenew file="application/web/web-parallel.yaml" >}}
|
||||
|
||||
|
@ -1114,7 +1115,7 @@ web-1 1/1 Running 0 10s
|
|||
스테이트풀셋 컨트롤러는 `web-0`와 `web-1`를 둘 다 동시에 시작했다.
|
||||
|
||||
두 번째 터미널을 열어 놓고 다른 터미널창에서 스테이트풀셋을
|
||||
스케일링 하자.
|
||||
스케일링하자.
|
||||
|
||||
```shell
|
||||
kubectl scale statefulset/web --replicas=4
|
||||
|
|
|
@ -49,13 +49,14 @@ min-kubernetes-server-version: v1.14
|
|||
1. 매니페스트 파일을 다운로드한 디렉터리에서 터미널 창을 시작한다.
|
||||
1. `mongo-deployment.yaml` 파일을 통해 MongoDB 디플로이먼트에 적용한다.
|
||||
|
||||
<!--
|
||||
콘텐츠에 대한 로컬 테스트는 파일의 상대 경로로 한다.
|
||||
kubectl apply -f ./content/en/examples/application/guestbook/mongo-deployment.yaml
|
||||
-->
|
||||
|
||||
```shell
|
||||
kubectl apply -f https://k8s.io/examples/application/guestbook/mongo-deployment.yaml
|
||||
```
|
||||
<!--
|
||||
컨텐츠에 대한 로컬 테스트는 파일의 상대경로로 한다.
|
||||
kubectl apply -f ./content/en/examples/application/guestbook/mongo-deployment.yaml
|
||||
-->
|
||||
|
||||
1. 파드의 목록을 질의하여 MongoDB 파드가 실행 중인지 확인한다.
|
||||
|
||||
|
@ -84,15 +85,15 @@ kubectl apply -f ./content/en/examples/application/guestbook/mongo-deployment.ya
|
|||
|
||||
1. `mongo-service.yaml` 파일을 통해 MongoDB 서비스에 적용한다.
|
||||
|
||||
<!--
|
||||
콘텐츠에 대한 로컬 테스트는 파일의 상대 경로로 한다.
|
||||
kubectl apply -f ./content/en/examples/application/guestbook/mongo-service.yaml
|
||||
-->
|
||||
|
||||
```shell
|
||||
kubectl apply -f https://k8s.io/examples/application/guestbook/mongo-service.yaml
|
||||
```
|
||||
|
||||
<!--
|
||||
컨텐츠에 대한 로컬 테스트는 파일의 상대경로로 한다.
|
||||
kubectl apply -f ./content/en/examples/application/guestbook/mongo-service.yaml
|
||||
-->
|
||||
|
||||
1. 서비스의 목록을 질의하여 MongoDB 서비스가 실행 중인지 확인한다.
|
||||
|
||||
```shell
|
||||
|
@ -122,15 +123,15 @@ kubectl apply -f ./content/en/examples/application/guestbook/mongo-service.yaml
|
|||
|
||||
1. `frontend-deployment.yaml` 파일을 통해 프론트엔드의 디플로이먼트에 적용한다.
|
||||
|
||||
<!--
|
||||
콘텐츠에 대한 로컬 테스트는 파일의 상대 경로로 한다.
|
||||
kubectl apply -f ./content/en/examples/application/guestbook/frontend-deployment.yaml
|
||||
-->
|
||||
|
||||
```shell
|
||||
kubectl apply -f https://k8s.io/examples/application/guestbook/frontend-deployment.yaml
|
||||
```
|
||||
|
||||
<!--
|
||||
컨텐츠에 대한 로컬 테스트는 파일의 상대경로로 한다.
|
||||
kubectl apply -f ./content/en/examples/application/guestbook/frontend-deployment.yaml
|
||||
-->
|
||||
|
||||
1. 파드의 목록을 질의하여 세 개의 프론트엔드 복제본이 실행되고 있는지 확인한다.
|
||||
|
||||
```shell
|
||||
|
@ -160,15 +161,15 @@ Google Compute Engine 또는 Google Kubernetes Engine과 같은 일부 클라우
|
|||
|
||||
1. `frontend-service.yaml` 파일을 통해 프론트엔드 서비스에 적용시킨다.
|
||||
|
||||
<!--
|
||||
콘텐츠에 대한 로컬 테스트는 파일의 상대 경로로 한다.
|
||||
kubectl apply -f ./content/en/examples/application/guestbook/frontend-service.yaml
|
||||
-->
|
||||
|
||||
```shell
|
||||
kubectl apply -f https://k8s.io/examples/application/guestbook/frontend-service.yaml
|
||||
```
|
||||
|
||||
<!--
|
||||
컨텐츠에 대한 로컬 테스트는 파일의 상대경로로 한다.
|
||||
kubectl apply -f ./content/en/examples/application/guestbook/frontend-service.yaml
|
||||
-->
|
||||
|
||||
1. 서비스의 목록을 질의하여 프론트엔드 서비스가 실행 중인지 확인한다.
|
||||
|
||||
```shell
|
||||
|
@ -179,7 +180,7 @@ kubectl apply -f ./content/en/examples/application/guestbook/frontend-service.ya
|
|||
|
||||
```
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
frontend ClusterIP 10.0.0.112 <none> 80/TCP 6s
|
||||
frontend ClusterIP 10.0.0.112 <none> 80/TCP 6s
|
||||
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 4m
|
||||
mongo ClusterIP 10.0.0.151 <none> 6379/TCP 2m
|
||||
```
|
||||
|
@ -214,8 +215,8 @@ kubectl apply -f ./content/en/examples/application/guestbook/frontend-service.ya
|
|||
결과는 아래와 같은 형태로 나타난다.
|
||||
|
||||
```
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
frontend ClusterIP 10.51.242.136 109.197.92.229 80:32372/TCP 1m
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
frontend LoadBalancer 10.51.242.136 109.197.92.229 80:32372/TCP 1m
|
||||
```
|
||||
|
||||
1. IP 주소를 복사하고, 방명록을 보기 위해 브라우저에서 페이지를 로드한다.
|
||||
|
@ -245,7 +246,7 @@ kubectl apply -f ./content/en/examples/application/guestbook/frontend-service.ya
|
|||
frontend-3823415956-k22zn 1/1 Running 0 54m
|
||||
frontend-3823415956-w9gbt 1/1 Running 0 54m
|
||||
frontend-3823415956-x2pld 1/1 Running 0 5s
|
||||
mongo-1068406935-3lswp 1/1 Running 0 56m
|
||||
mongo-1068406935-3lswp 1/1 Running 0 56m
|
||||
```
|
||||
|
||||
1. 프론트엔드 파드의 수를 축소하기 위해 아래 명령어를 실행한다.
|
||||
|
@ -266,7 +267,7 @@ kubectl apply -f ./content/en/examples/application/guestbook/frontend-service.ya
|
|||
NAME READY STATUS RESTARTS AGE
|
||||
frontend-3823415956-k22zn 1/1 Running 0 1h
|
||||
frontend-3823415956-w9gbt 1/1 Running 0 1h
|
||||
mongo-1068406935-3lswp 1/1 Running 0 1h
|
||||
mongo-1068406935-3lswp 1/1 Running 0 1h
|
||||
```
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue