Fourth Korean l10n work for release 1.18

- Translate docs/reference/issues-security/_index.md into Korean (#21145)
- Translate tasks/administer-cluster/kubeadm/adding-windows-nodes.md into Korean (#21003)
- Translate manage-resources/memory-default-namespace.md into Korean (#21089)
- Translate tasks/configure-pod-container/pull-image-private-registry in Korean (#21036)
- Translate contribute/advanced.md into Korean (#21002)
- Update to Outdated files in the dev-1.18-ko.4 branch. (#21102)
- Translate manage-resources/cpu-constraint-namespace.md into Korean (#21048)
- Translate manage-resources/memory-constraint-namespace.md into Korean (#21091)
- Translate setup/release/notes.md in Korean (#21158)
- Translate manage-resources/quota-pod-namespace.md into Korean (#21087)
- Translate tasks/administer-cluster/kubeadm/upgrading-windows-nodes.md into Korean (#20999)
- Translate tasks/administer-cluster/kubeadm/kubeadm-certs.md into Korean (#21000)
- Translate manage-resources/quota-memory-cpu-namespace.md into Korean (#21088)
- Translate manage-resources/cpu-default-namespace.md into Korean (#21090)
- Translate contribute/suggesting-improvements.md into Korean (#21001)
- Translate quality-service-pod in Korean (#21081)

Co-authored-by: Jerry Park <jaehwa@gmail.com>
Co-authored-by: Jesang Myung <jesang.myung@gmail.com>
Co-authored-by: DongMoon Kim <dmoons.kim@gmail.com>
Co-authored-by: Jesang Myung <jesang.myung@gmail.com>
Co-authored-by: Yuk, Yongsu <ysyukr@gmail.com>
Co-authored-by: bluefriday <bluefriday86@gmail.com>
This commit is contained in:
Jerry Park
2020-05-23 21:31:56 +09:00
committed by June Yi
parent 3dee902b75
commit b6760f3ae2
135 changed files with 5336 additions and 1110 deletions
@@ -115,6 +115,6 @@ weight: 120
{{% /capture %}}
{{% capture whatsnext %}}
[노드 어피니티](/ko/docs/concepts/configuration/assign-pod-node/#node-affinity)에
[노드 어피니티](/ko/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity)에
대해 더 알아보기.
{{% /capture %}}
@@ -0,0 +1,214 @@
---
title: 프라이빗 레지스트리에서 이미지 받아오기
content_template: templates/task
weight: 100
---
{{% capture overview %}}
이 페이지는 프라이빗 도커 레지스트리나 리포지터리로부터 이미지를 받아오기 위해 시크릿(Secret)을
사용하는 파드(Pod)를 생성하는 방법을 보여준다.
{{% /capture %}}
{{% capture prerequisites %}}
* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
* 이 실습을 수행하기 위해,
[도커 ID](https://docs.docker.com/docker-id/)와 비밀번호가 필요하다.
{{% /capture %}}
{{% capture steps %}}
## 도커 로그인
노트북에 프라이빗 이미지를 받아오기 위하여 레지스트리 인증을 필수로 수행해야 한다.
```shell
docker login
```
프롬프트가 나타나면, 도커 사용자 이름(username)과 비밀번호(password)를 입력하자.
로그인 프로세스는 권한 토큰 정보를 가지고 있는 `config.json` 파일을 생성하거나 업데이트 한다.
`config.json` 파일을 확인하자.
```shell
cat ~/.docker/config.json
```
하단과 유사한 결과를 확인할 수 있다.
```json
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "c3R...zE2"
}
}
}
```
{{< note >}}
도커 자격 증명 저장소를 사용하는 경우, `auth` 항목이 아닌, 저장소의 이름을 값으로 사용하는 `credsStore` 항목을 확인할 수 있다.
{{< /note >}}
## 기존의 도커 자격 증명을 기반으로 시크릿 생성하기 {#registry-secret-existing-credentials}
쿠버네티스 클러스터는 프라이빗 이미지를 받아올 때, 컨테이너 레지스트리에 인증하기 위하여
`docker-registry` 타입의 시크릿을 사용한다.
만약 이미 `docker login` 을 수행하였다면, 이 때 생성된 자격 증명을 쿠버네티스 클러스터로 복사할 수 있다.
```shell
kubectl create secret generic regcred \
--from-file=.dockerconfigjson=<path/to/.docker/config.json> \
--type=kubernetes.io/dockerconfigjson
```
오브젝트에 대한 더 세밀한 제어(새로운 시크릿에 대한 네임스페이스나 레이블을 지정하는 등)가 필요할 경우,
시크릿을 사용자 정의한 후에 저장할 수도 있다.
다음을 확인하자.
- 데이터 항목의 이름을 `.dockerconfigjson` 으로 설정한다
- 도커 파일을 base64로 인코딩하고 그 문자열을 `data[".dockerconfigjson"]`
필드에 자르지 않고 한 줄로 이어서 붙여넣는다
- `type``kubernetes.io/dockerconfigjson` 으로 설정한다
예:
```yaml
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
namespace: awesomeapps
data:
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson
```
만약 `error: no objects passed to create` 메세지가 출력될 경우, base64로 인코딩된 문자열이 유효하지 않음을 의미한다.
또한 `Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ...` 메세지가 출력될 경우,
base64로 인코딩된 문자열이 정상적으로 디코딩되었으나, `.docker/config.json` 파일로 파싱되지 못한 것을 의미한다.
## 커맨드 라인에서 자격 증명을 통하여 시크릿 생성하기
`regcred` 라는 이름의 시크릿을 생성하자.
```shell
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
```
아래의 각 항목에 대한 설명을 참고한다.
* `<your-registry-server>` 은 프라이빗 도커 저장소의 FQDN 주소이다. (도커허브(DockerHub)의 경우, https://index.docker.io/v1/)
* `<your-name>` 은 도커 사용자의 계정이다.
* `<your-pword>` 은 도커 사용자의 비밀번호이다.
* `<your-email>` 은 도커 사용자의 이메일 주소이다.
이를 통해 `regcred` 라는 시크릿으로 클러스터 내에서 도커 자격 증명을 생성했다.
{{< note >}}
커맨드 라인에서 시크릿을 입력하는 경우, 보호되지 않는 셸 히스토리에 내용이 저장될 수 있으며,
이러한 시크릿들은 `kubectl` 이 구동 중인 동안 사용자의 PC의 다른 사용자들에게
보일 수도 있다.
{{< /note >}}
## 시크릿 `regcred` 검증하기
방금 생성한 `regcred` 시크릿의 내용을 확인하기 위하여, YAML 형식으로 시크릿을 확인하자.
```shell
kubectl get secret regcred --output=yaml
```
결과는 다음과 같다.
```yaml
apiVersion: v1
kind: Secret
metadata:
...
name: regcred
...
data:
.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
type: kubernetes.io/dockerconfigjson
```
`.dockerconfigjson` 필드의 값은 도커 자격 증명의 base64 인코딩 결과이다.
`.dockerconfigjson` 필드의 값을 확인하기 위하여, 시크릿 데이터를 읽을 수 있는
형식으로 변경한다.
```shell
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
```
결과는 다음과 같다.
```json
{"auths":{"your.private.registry.example.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"c3R...zE2"}}}
```
`auth` 필드의 값을 확인하기 위하여, base64로 인코딩된 데이터를 읽을 수 있는 형식으로 변경한다.
```shell
echo "c3R...zE2" | base64 --decode
```
결과로, 사용자 이름과 비밀번호가 `:` 로 연결되어 아래와 같이 표현된다.
```none
janedoe:xxxxxxxxxxx
```
참고로 시크릿 데이터에는 사용자의 로컬에 있는 `~/.docker/config.json` 파일과 유사한 인증 토큰이 포함되어 있다.
이를 통해 `regcred` 라는 시크릿으로 클러스터 내에서 도커 자격 증명을 생성했다.
## 시크릿을 사용하는 파드 생성하기
다음은 `regcred` 에 있는 도커 자격 증명에 접근해야 하는 파드의 구성 파일이다.
{{< codenew file="pods/private-reg-pod.yaml" >}}
아래의 파일을 다운로드받는다.
```shell
wget -O my-private-reg-pod.yaml https://k8s.io/examples/pods/private-reg-pod.yaml
```
`my-private-reg-pod.yaml` 파일 안에서, `<your-private-image>` 값을 다음과 같은 프라이빗 저장소 안의 이미지 경로로 변경한다.
```none
your.private.registry.example.com/janedoe/jdoe-private:v1
```
프라이빗 저장소에서 이미지를 받아오기 위하여, 쿠버네티스에서 자격 증명이 필요하다.
구성 파일의 `imagePullSecrets` 필드를 통해 쿠버네티스가 `regcred` 라는 시크릿으로부터 자격 증명을 가져올 수 있다.
시크릿을 사용해서 파드를 생성하고, 파드가 실행되는지 확인하자.
```shell
kubectl apply -f my-private-reg-pod.yaml
kubectl get pod private-reg
```
{{% /capture %}}
{{% capture whatsnext %}}
* [시크릿](/docs/concepts/configuration/secret/)에 대해 더 배워 보기.
* [프라이빗 레지스트리 사용](/ko/docs/concepts/containers/images/#프라이빗-레지스트리-사용)에 대해 더 배워 보기.
* [서비스 어카운트에 풀 시크릿(pull secret) 추가하기](/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account)에 대해 더 배워 보기.
* [kubectl create secret docker-registry](/docs/reference/generated/kubectl/kubectl-commands/#-em-secret-docker-registry-em-)에 대해 읽어보기.
* [시크릿](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#secret-v1-core)에 대해 읽어보기.
* [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core)의 `imagePullSecrets` 필드에 대해 읽어보기.
{{% /capture %}}
@@ -0,0 +1,266 @@
---
title: 파드에 대한 서비스 품질(QoS) 구성
content_template: templates/task
weight: 30
---
{{% capture overview %}}
이 페이지는 특정 서비스 품질(QoS) 클래스를 할당하기 위해 어떻게 파드를
구성해야 하는지 보여준다. 쿠버네티스는 QoS 클래스를 사용하여 파드
스케줄링과 축출을 결정한다.
{{% /capture %}}
{{% capture prerequisites %}}
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
{{% /capture %}}
{{% capture steps %}}
## QoS 클래스
쿠버네티스가 파드를 생성할 때, 파드에 다음의 QoS 클래스 중 하나를 할당한다.
* Guaranteed
* Burstable
* BestEffort
## 네임스페이스 생성
이 연습에서 생성한 리소스가 클러스터의 나머지와
격리되도록 네임스페이스를 생성한다.
```shell
kubectl create namespace qos-example
```
## Guaranteed QoS 클래스가 할당되는 파드 생성
파드에 Guaranteed QoS 클래스 할당을 위한 전제 조건은 다음과 같다.
* 파드 내 모든 컨테이너는 메모리 상한과 메모리 요청량을 가지고 있어야 하며, 이는 동일해야 한다.
* 파드 내 모든 컨테이너는 CPU 상한과 CPU 요청량을 가지고 있어야 하며, 이는 동일해야 한다.
이것은 하나의 컨테이너를 갖는 파드의 구성 파일이다. 해당 컨테이너는 메모리 상한과
메모리 요청량을 갖고 있고, 200MiB로 동일하다. 해당 컨테이너는 CPU 상한과 CPU 요청량을 가지며, 700 milliCPU로 동일하다.
{{< codenew file="pods/qos/qos-pod.yaml" >}}
파드를 생성한다.
```shell
kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod.yaml --namespace=qos-example
```
파드의 상세 정보를 본다.
```shell
kubectl get pod qos-demo --namespace=qos-example --output=yaml
```
출력 결과는 쿠버네티스가 파드에 Guaranteed QoS 클래스를 부여했음을 보여준다. 또한
파드의 컨테이너가 메모리 요청량과 일치하는 메모리 상한을 가지며,
CPU 요청량과 일치하는 CPU 상한을 갖고 있음을 확인할 수 있다.
```yaml
spec:
containers:
...
resources:
limits:
cpu: 700m
memory: 200Mi
requests:
cpu: 700m
memory: 200Mi
...
qosClass: Guaranteed
```
{{< note >}}
컨테이너가 자신의 메모리 상한을 지정하지만, 메모리 요청량을 지정하지 않는 경우,
쿠버네티스는 상한과 일치하는 메모리 요청량을 자동으로 할당한다. 이와 유사하게, 만약 컨테이너가 자신의
CPU 상한을 지정하지만, CPU 요청량을 지정하지 않은 경우, 쿠버네티스는 상한과 일치하는 CPU 요청량을 자동으로
할당한다.
{{< /note >}}
파드를 삭제한다.
```shell
kubectl delete pod qos-demo --namespace=qos-example
```
## Burstable QoS 클래스가 할당되는 파드 생성
다음의 경우 파드에 Burstable QoS 클래스가 부여된다.
* 파드가 Guaranteed QoS 클래스 기준을 만족하지 않는다.
* 파드 내에서 최소한 하나의 컨테이너가 메모리 또는 CPU 요청량을 가진다.
컨테이너가 하나인 파드의 구성 파일은 다음과 같다. 컨테이너는
200MiB의 메모리 상한과 100MiB의 메모리 요청량을 가진다.
{{< codenew file="pods/qos/qos-pod-2.yaml" >}}
파드를 생성한다.
```shell
kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod-2.yaml --namespace=qos-example
```
파드의 상세 정보를 본다.
```shell
kubectl get pod qos-demo-2 --namespace=qos-example --output=yaml
```
출력 결과는 쿠버네티스가 파드에 Burstable QoS 클래스를 부여했음을 보여준다.
```yaml
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: qos-demo-2-ctr
resources:
limits:
memory: 200Mi
requests:
memory: 100Mi
...
qosClass: Burstable
```
파드를 삭제한다.
```shell
kubectl delete pod qos-demo-2 --namespace=qos-example
```
## BestEffort QoS 클래스가 할당되는 파드 생성
파드에 QoS 클래스 BestEffort를 제공하려면, 파드의 컨테이너에
메모리 또는 CPU의 상한이나 요청량이 없어야 한다.
컨테이너가 하나인 파드의 구성 파일이다. 해당 컨테이너는 메모리 또는 CPU의
상한이나 요청량을 갖지 않는다.
{{< codenew file="pods/qos/qos-pod-3.yaml" >}}
파드를 생성한다.
```shell
kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod-3.yaml --namespace=qos-example
```
파드의 상세 정보를 본다.
```shell
kubectl get pod qos-demo-3 --namespace=qos-example --output=yaml
```
출력 결과는 쿠버네티스가 파드에 BestEffort QoS 클래스를 부여했음을 보여준다.
```yaml
spec:
containers:
...
resources: {}
...
qosClass: BestEffort
```
파드를 삭제한다.
```shell
kubectl delete pod qos-demo-3 --namespace=qos-example
```
## 컨테이너가 두 개인 파드 생성
컨테이너가 두 개인 파드의 구성 파일이다. 한 컨테이너는 200MiB의 메모리
요청량을 지정한다. 다른 컨테이너는 어떤 요청량이나 상한을 지정하지 않는다.
{{< codenew file="pods/qos/qos-pod-4.yaml" >}}
참고로 이 파드는 Burstable QoS 클래스의 기준을 충족한다. 즉, Guaranteed QoS 클래스에 대한
기준을 충족하지 않으며, 해당 컨테이너 중 하나가 메모리 요청량을 갖는다.
파드를 생성한다.
```shell
kubectl apply -f https://k8s.io/examples/pods/qos/qos-pod-4.yaml --namespace=qos-example
```
파드의 상세 정보를 본다.
```shell
kubectl get pod qos-demo-4 --namespace=qos-example --output=yaml
```
출력 결과는 쿠버네티스가 파드에 Burstable QoS 클래스를 부여했음을 보여준다.
```yaml
spec:
containers:
...
name: qos-demo-4-ctr-1
resources:
requests:
memory: 200Mi
...
name: qos-demo-4-ctr-2
resources: {}
...
qosClass: Burstable
```
파드를 삭제한다.
```shell
kubectl delete pod qos-demo-4 --namespace=qos-example
```
## 정리
네임스페이스를 삭제한다.
```shell
kubectl delete namespace qos-example
```
{{% /capture %}}
{{% capture whatsnext %}}
### 앱 개발자를 위한 문서
* [컨테이너 및 파드 메모리 리소스 할당](/ko/docs/tasks/configure-pod-container/assign-memory-resource/)
* [컨테이너 및 파드 CPU 리소스 할당](/docs/tasks/configure-pod-container/assign-cpu-resource/)
### 클러스터 관리자를 위한 문서
* [네임스페이스에 대한 기본 메모리 요청과 상한 구성](/ko/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)
* [네임스페이스에 대한 기본 CPU 요청과 상한 구성](/ko/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/)
* [네임스페이스에 대한 메모리의 최소 및 최대 메모리 제약 조건 구성](/ko/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace/)
* [네임스페이스에 대한 CPU의 최소 및 최대 제약 조건 구성](/ko/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace/)
* [네임스페이스에 대한 메모리 및 CPU 쿼터 구성](/ko/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/)
* [네임스페이스에 대한 파드 쿼터 구성](/ko/docs/tasks/administer-cluster/manage-resources/quota-pod-namespace/)
* [API 오브젝트 할당량 구성](/docs/tasks/administer-cluster/quota-api-object/)
* [노드의 토폴로지 관리 정책 제어](/docs/tasks/administer-cluster/topology-manager/)
{{% /capture %}}