Merge remote-tracking branch 'upstream/master' into zacharysarah-merged-master-dev-1.18

This commit is contained in:
zacharysarah
2020-03-03 12:07:32 -08:00
115 changed files with 3895 additions and 613 deletions
@@ -329,7 +329,7 @@ Events:
현재 쿠버네티스는 AppArmor 프로파일을 노드에 적재하기 위한 네이티브 메커니즘을 제공하지 않는다.
프로파일을 설정하는 여러 방법이 있다. 예를 들면 다음과 같다.
* 각 노드에서 파드를 실행하는 [데몬셋](/docs/concepts/workloads/controllers/daemonset/)을 통해서
* 각 노드에서 파드를 실행하는 [데몬셋](/ko/docs/concepts/workloads/controllers/daemonset/)을 통해서
올바른 프로파일이 적재되었는지 확인한다. 예시 구현은
[여기](https://git.k8s.io/kubernetes/test/images/apparmor-loader)에서 찾아볼 수 있다.
* 노드 초기화 시간에 노드 초기화 스크립트(예를 들어 Salt, Ansible 등)나
@@ -340,7 +340,7 @@ Events:
스케줄러는 어떤 프로파일이 어떤 노드에 적재되는지 고려하지 않으니, 프로파일 전체 집합이
모든 노드에 적재되어야 한다. 대안적인 방법은
각 프로파일(혹은 프로파일의 클래스)을 위한 노드 레이블을 노드에 추가하고,
[노드 셀렉터](/docs/concepts/configuration/assign-pod-node/)를 이용하여
[노드 셀렉터](/ko/docs/concepts/configuration/assign-pod-node/)를 이용하여
파드가 필요한 프로파일이 있는 노드에서 실행되도록 한다.
### PodSecurityPolicy로 프로파일 제한하기 {#restricting-profiles-with-the-podsecuritypolicy}
+13 -13
View File
@@ -10,12 +10,12 @@ menu:
<p>Ready to get your hands dirty? Build a simple Kubernetes cluster that runs "Hello World" for Node.js.</p>
card:
name: tutorials
weight: 10
weight: 10
---
{{% capture overview %}}
이 튜토리얼에서는 [Minikube](/ko/docs/setup/learning-environment/minikube)와 Katacoda를 이용하여
이 튜토리얼에서는 [Minikube](/ko/docs/setup/learning-environment/minikube)와 Katacoda를 이용하여
쿠버네티스에서 Node.js 로 작성된 간단한 Hello World 애플리케이션을 어떻게 실행하는지 살펴본다.
Katacode는 무료로 브라우저에서 쿠버네티스 환경을 제공한다.
@@ -69,7 +69,7 @@ Katacode는 무료로 브라우저에서 쿠버네티스 환경을 제공한다.
쿠버네티스 [*파드*](/ko/docs/concepts/workloads/pods/pod/)는 관리와
네트워킹 목적으로 함께 묶여 있는 하나 이상의 컨테이너 그룹이다.
이 튜토리얼의 파드에는 단 하나의 컨테이너만 있다. 쿠버네티스
이 튜토리얼의 파드에는 단 하나의 컨테이너만 있다. 쿠버네티스
[*디플로이먼트*](/ko/docs/concepts/workloads/controllers/deployment/)는 파드의
헬스를 검사해서 파드의 컨테이너가 종료되었다면 재시작해준다.
파드의 생성 및 스케일링을 관리하는 방법으로 디플로이먼트를 권장한다.
@@ -117,7 +117,7 @@ Katacode는 무료로 브라우저에서 쿠버네티스 환경을 제공한다.
```shell
kubectl config view
```
{{< note >}}`kubectl` 명령어에 관해 자세히 알기 원하면 [kubectl 개관](/docs/user-guide/kubectl-overview/)을 살펴보자.{{< /note >}}
## 서비스 만들기
@@ -125,14 +125,14 @@ Katacode는 무료로 브라우저에서 쿠버네티스 환경을 제공한다.
기본적으로 파드는 쿠버네티스 클러스터 내부의 IP 주소로만
접근할 수 있다. `hello-node` 컨테이너를 쿠버네티스 가상 네트워크
외부에서 접근하려면 파드를 쿠버네티스
[*서비스*](/docs/concepts/services-networking/service/)로 노출해야 한다.
[*서비스*](/ko/docs/concepts/services-networking/service/)로 노출해야 한다.
1. `kubectl expose` 명령어로 퍼블릭 인터넷에 파드 노출하기
```shell
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
```
`--type=LoadBalancer`플래그는 클러스터 밖의 서비스로 노출하기
원한다는 뜻이다.
@@ -199,13 +199,13 @@ Minikube에는 활성화하거나 비활성화 할 수 있고 로컬 쿠버네
storage-provisioner: enabled
storage-provisioner-gluster: disabled
```
2. 한 애드온을 활성화 한다. 예를 들어 `heapster`
2. 한 애드온을 활성화 한다. 예를 들어 `metrics-server`
```shell
minikube addons enable heapster
```
다음과 유사하게 출력된다.
```
@@ -246,7 +246,7 @@ Minikube에는 활성화하거나 비활성화 할 수 있고 로컬 쿠버네
```shell
minikube addons disable heapster
```
다음과 유사하게 출력된다.
```
@@ -279,7 +279,7 @@ minikube delete
{{% capture whatsnext %}}
* [디플로이먼트 오브젝트](/ko/docs/concepts/workloads/controllers/deployment/)에 대해서 더 배워 본다.
* [애플리케이션 배포](/docs/user-guide/deploying-applications/)에 대해서 더 배워 본다.
* [서비스 오브젝트](/docs/concepts/services-networking/service/)에 대해서 더 배워 본다.
* [애플리케이션 배포](/docs/tasks/run-application/run-stateless-application-deployment/)에 대해서 더 배워 본다.
* [서비스 오브젝트](/ko/docs/concepts/services-networking/service/)에 대해서 더 배워 본다.
{{% /capture %}}
{{% /capture %}}
@@ -23,8 +23,8 @@ content_template: templates/tutorial
* [NAT](https://en.wikipedia.org/wiki/Network_address_translation): 네트워크 주소 변환
* [소스 NAT](https://en.wikipedia.org/wiki/Network_address_translation#SNAT): 패킷 상의 소스 IP 주소를 변경함, 보통 노드의 IP 주소
* [대상 NAT](https://en.wikipedia.org/wiki/Network_address_translation#DNAT): 패킷 상의 대상 IP 주소를 변경함, 보통 파드의 IP 주소
* [VIP](/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies): 가상 IP 주소, 모든 쿠버네티스 서비스에 할당된 것 같은
* [Kube-proxy](/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies): 네트워크 데몬으로 모든 노드에서 서비스 VIP 관리를 관리한다.
* [VIP](/ko/docs/concepts/services-networking/service/#가상-ip와-서비스-프록시): 가상 IP 주소, 모든 쿠버네티스 서비스에 할당된 것 같은
* [Kube-proxy](/ko/docs/concepts/services-networking/service/#가상-ip와-서비스-프록시): 네트워크 데몬으로 모든 노드에서 서비스 VIP 관리를 관리한다.
## 전제 조건
@@ -34,7 +34,7 @@ content_template: templates/tutorial
작은 nginx 웹 서버를 이용한다. 다음과 같이 생성할 수 있다.
```console
kubectl run source-ip-app --image=k8s.gcr.io/echoserver:1.4
kubectl create deployment source-ip-app --image=k8s.gcr.io/echoserver:1.4
```
출력은 다음과 같다.
```
@@ -57,7 +57,7 @@ deployment.apps/source-ip-app created
## Type=ClusterIP인 서비스에서 소스 IP
쿠버네티스 1.2부터 기본으로 제공하는
[iptables 모드](/docs/concepts/services-networking/service/#proxy-mode-iptables)로 운영하는 경우
[iptables 모드](/ko/docs/concepts/services-networking/service/#proxy-mode-iptables)로 운영하는 경우
클러스터 내에서 클러스터 IP로 패킷을 보내면 소스 NAT를 통과하지 않는다.
Kube-proxy는 이 모드를 `proxyMode` 엔드포인트를 통해 노출한다.
@@ -122,7 +122,7 @@ client_address는 클라이언트 파드와 서버 파드가 같은 노드 또
## Type=NodePort인 서비스에서 소스 IP
쿠버네티스 1.5부터 [Type=NodePort](/docs/concepts/services-networking/service/#nodeport)인 서비스로 보내진 패킷은
쿠버네티스 1.5부터 [Type=NodePort](/ko/docs/concepts/services-networking/service/#nodeport)인 서비스로 보내진 패킷은
소스 NAT가 기본으로 적용된다. `NodePort` 서비스를 생성하여 이것을 테스트할 수 있다.
```console
@@ -221,7 +221,7 @@ client_address=104.132.1.79
## Type=LoadBalancer인 서비스에서 소스 IP
쿠버네티스 1.5 부터 [Type=LoadBalancer](/docs/concepts/services-networking/service/#loadbalancer)인 서비스로
쿠버네티스 1.5 부터 [Type=LoadBalancer](/ko/docs/concepts/services-networking/service/#loadbalancer)인 서비스로
보낸 패킷은 소스 NAT를 기본으로 하는데, `Ready` 상태로 모든 스케줄된 모든 쿠버네티스 노드는
로드 밸런싱 트래픽에 적합하다. 따라서 엔드포인트가 없는 노드에
패킷이 도착하면 시스템은 엔드포인트를 *포함한* 노드에 프록시를
@@ -17,7 +17,7 @@ weight: 10
* [파드](/docs/user-guide/pods/single-container/)
* [클러스터 DNS(Cluster DNS)](/ko/docs/concepts/services-networking/dns-pod-service/)
* [헤드리스 서비스(Headless Services)](/docs/concepts/services-networking/service/#headless-services)
* [헤드리스 서비스(Headless Services)](/ko/docs/concepts/services-networking/service/#헤드리스-headless-서비스)
* [퍼시스턴트볼륨(PersistentVolumes)](/docs/concepts/storage/persistent-volumes/)
* [퍼시턴트볼륨 프로비저닝](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/persistent-volume-provisioning/)
* [스테이트풀셋](/ko/docs/concepts/workloads/controllers/statefulset/)
@@ -51,7 +51,7 @@ weight: 10
아래 예제를 이용해서 스테이트풀셋을 생성하자. 이는
[스테이트풀셋](/ko/docs/concepts/workloads/controllers/statefulset/) 개념에서 보인
예제와 유사하다. 이것은 `web`과 이 스테이트풀셋 파드의 IP 주소를 게시하는
[헤드리스 서비스](/docs/concepts/services-networking/service/#headless-services)인
[헤드리스 서비스](/ko/docs/concepts/services-networking/service/#헤드리스-headless-서비스)인
`nginx` 를 생성한다.
{{< codenew file="application/web/web.yaml" >}}
@@ -29,7 +29,7 @@ weight: 30
{{% /capture %}}
{{% capture objectives %}}
* 카산드라 헤드리스 [*서비스*](/docs/concepts/services-networking/service/)를 생성하고 검증한다.
* 카산드라 헤드리스 [*서비스*](/ko/docs/concepts/services-networking/service/)를 생성하고 검증한다.
* [스테이트풀셋](/ko/docs/concepts/workloads/controllers/statefulset/)을 이용하여 카산드라 링을 생성한다.
* [스테이트풀셋](/ko/docs/concepts/workloads/controllers/statefulset/)을 검증한다.
* [스테이트풀셋](/ko/docs/concepts/workloads/controllers/statefulset/)을 수정한다.
@@ -37,7 +37,7 @@ weight: 30
{{% /capture %}}
{{% capture prerequisites %}}
이 튜토리얼을 완료하려면, [파드](/ko/docs/concepts/workloads/pods/pod/), [서비스](/docs/concepts/services-networking/service/), [스테이트풀셋](/ko/docs/concepts/workloads/controllers/statefulset/)의 기본 개념에 친숙해야한다. 추가로
이 튜토리얼을 완료하려면, [파드](/ko/docs/concepts/workloads/pods/pod/), [서비스](/ko/docs/concepts/services-networking/service/), [스테이트풀셋](/ko/docs/concepts/workloads/controllers/statefulset/)의 기본 개념에 친숙해야한다. 추가로
* *kubectl* 커맨드라인 도구를 [설치와 설정](/docs/tasks/tools/install-kubectl/)하자.
@@ -65,7 +65,7 @@ minikube start --memory 5120 --cpus=4
{{% capture lessoncontent %}}
## 카산드라 헤드리스 서비스 생성하기
쿠버네티스 [서비스](/docs/concepts/services-networking/service/)는 동일 작업을 수행하는 [파드](/ko/docs/concepts/workloads/pods/pod/)의 집합을 기술한다.
쿠버네티스 [서비스](/ko/docs/concepts/services-networking/service/)는 동일 작업을 수행하는 [파드](/ko/docs/concepts/workloads/pods/pod/)의 집합을 기술한다.
다음의 `서비스`는 쿠버네티스 클러스터에서 카산드라 파드와 클라이언트 간에 DNS 찾아보기 용도로 사용한다.
@@ -233,7 +233,7 @@ kubectl apply -k ./
* [인트로스펙션과 디버깅](/docs/tasks/debug-application-cluster/debug-application-introspection/)를 알아보자.
* [](/docs/concepts/workloads/controllers/jobs-run-to-completion/)를 알아보자.
* [포트 포워딩](/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)를 알아보자.
* [포트 포워딩](/ko/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)를 알아보자.
* 어떻게 [컨테이너에서 셸을 사용하는지](/docs/tasks/debug-application-cluster/get-shell-running-container/)를 알아보자.
{{% /capture %}}
@@ -6,9 +6,9 @@ weight: 40
{{% capture overview %}}
이 튜토리얼은 [아파치 ZooKeeper](https://zookeeper.apache.org)
쿠버네티스에서 [스테이트풀셋](/docs/concepts/workloads/controllers/statefulset/)과
[파드디스룹선버짓(PodDisruptionBudget)](/docs/concepts/workloads/pods/disruptions/#specifying-a-poddisruptionbudget)과
[파드안티어피니티(PodAntiAffinity)](/docs/user-guide/node-selection/#inter-pod-affinity-and-anti-affinity-beta-feature)를 이용한 [Apache Zookeeper](https://zookeeper.apache.org) 실행을 설명한다.
쿠버네티스에서 [스테이트풀셋](/ko/docs/concepts/workloads/controllers/statefulset/)과
[파드디스룹선버짓(PodDisruptionBudget)](/ko/docs/concepts/workloads/pods/disruptions/#specifying-a-poddisruptionbudget)과
[파드안티어피니티(PodAntiAffinity)](/ko/docs/user-guide/node-selection/#파드간-어피니티와-안티-어피니티)를 이용한 [Apache Zookeeper](https://zookeeper.apache.org) 실행을 설명한다.
{{% /capture %}}
{{% capture prerequisites %}}
@@ -18,12 +18,12 @@ weight: 40
- [파드](/docs/user-guide/pods/single-container/)
- [클러스터 DNS](/ko/docs/concepts/services-networking/dns-pod-service/)
- [헤드리스 서비스](/docs/concepts/services-networking/service/#headless-services)
- [헤드리스 서비스](/ko/docs/concepts/services-networking/service/#헤드리스-headless-서비스)
- [퍼시스턴트볼륨](/docs/concepts/storage/volumes/)
- [퍼시스턴트볼륨 프로비저닝](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/persistent-volume-provisioning/)
- [스테이트풀셋](/ko/docs/concepts/workloads/controllers/statefulset/)
- [파드디스룹션버짓](/ko/docs/concepts/workloads/pods/disruptions/#specifying-a-poddisruptionbudget)
- [파드안티어피니티](/docs/user-guide/node-selection/#inter-pod-affinity-and-anti-affinity-beta-feature)
- [파드안티어피니티](/ko/docs/user-guide/node-selection/#파드간-어피니티와-안티-어피니티)
- [kubectl CLI](/docs/user-guide/kubectl/)
최소한 4개의 노드가 있는 클러스터가 필요하며, 각 노드는 적어도 2 개의 CPU와 4 GiB 메모리가 필요하다. 이 튜토리얼에서 클러스터 노드를 통제(cordon)하고 비우게(drain) 할 것이다. **이것은 클러스터를 종료하여 노드의 모든 파드를 퇴출(evict)하는 것으로, 모든 파드는 임시로 언스케줄된다는 의미이다.** 이 튜토리얼을 위해 전용 클러스터를 이용하거나, 다른 테넌트에 간섭을 하는 혼란이 발생하지 않도록 해야 합니다.
@@ -62,8 +62,8 @@ ZooKeeper는 전체 상태 머신을 메모리에 보존하고 모든 돌연변
## ZooKeeper 앙상블 생성하기
아래 메니페스트에는
[헤드리스 서비스](/docs/concepts/services-networking/service/#headless-services),
[서비스](/docs/concepts/services-networking/service/),
[헤드리스 서비스](/ko/docs/concepts/services-networking/service/#헤드리스-headless-서비스),
[서비스](/ko/docs/concepts/services-networking/service/),
[파드디스룹션버짓](/ko/docs/concepts/workloads/pods/disruptions//#specifying-a-poddisruptionbudget),
[스테이트풀셋](/ko/docs/concepts/workloads/controllers/statefulset/)을 포함한다.
@@ -80,8 +80,17 @@ kubectl apply -f https://k8s.io/examples/service/load-balancer-example.yaml
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-service LoadBalancer 10.3.245.137 104.198.205.71 8080/TCP 54s
참고: 만약 외부 IP 주소가 \<pending\>으로 표시되면 잠시 기다린 다음,
동일한 명령어를 다시 입력한다.
{{< note >}}
`type=LoadBalancer` 서비스는 이 예시에서 다루지 않은 외부 클라우드 공급자가 지원하며, 자세한 내용은 [이 페이지](/ko/docs/concepts/services-networking/service/#loadbalancer를 참조한다.
{{< /note >}}
{{< note >}}
만약 외부 IP 주소가 \<pending\>으로 표시되면 잠시 기다린 다음, 동일한 명령어를 다시 입력한다.
{{< /note >}}
1. 서비스에 대한 자세한 정보를 확인한다.
@@ -77,7 +77,7 @@ POD-NAME을 해당 파드 이름으로 수정해야 한다.
### Redis 마스터 서비스 생성하기
방명록 애플리케이션에서 데이터를 쓰려면 Redis 마스터와 통신해야 한다. Redis 마스터 파드로 트래픽을 프록시하려면 [서비스](/docs/concepts/services-networking/service/)를 적용해야 한다. 서비스는 파드에 접근하기 위한 정책을 정의한다.
방명록 애플리케이션에서 데이터를 쓰려면 Redis 마스터와 통신해야 한다. Redis 마스터 파드로 트래픽을 프록시하려면 [서비스](/ko/docs/concepts/services-networking/service/)를 적용해야 한다. 서비스는 파드에 접근하기 위한 정책을 정의한다.
{{< codenew file="application/guestbook/redis-master-service.yaml" >}}
@@ -197,7 +197,7 @@ Redis 마스터는 단일 파드이지만, 복제된 Redis 슬레이브를 추
### 프론트엔드 서비스 생성하기
서비스의 기본 유형은 [ClusterIP](/docs/concepts/services-networking/service/#publishing-services---service-types)이기 때문에 적용한 redis-slave 및 redis-master 서비스는 컨테이너 클러스터 내에서만 접근할 수 있다. `ClusterIP`는 서비스가 가리키는 파드 집합에 대한 단일 IP 주소를 제공한다. 이 IP 주소는 클러스터 내에서만 접근할 수 있다.
서비스의 기본 유형은 [ClusterIP](/ko/docs/concepts/services-networking/service/#publishing-services-service-types)이기 때문에 적용한 redis-slave 및 redis-master 서비스는 컨테이너 클러스터 내에서만 접근할 수 있다. `ClusterIP`는 서비스가 가리키는 파드 집합에 대한 단일 IP 주소를 제공한다. 이 IP 주소는 클러스터 내에서만 접근할 수 있다.
게스트가 방명록에 접근할 수 있도록 하려면, 외부에서 볼 수 있도록 프론트엔드 서비스를 구성해야 한다. 그렇게 하면 클라이언트가 컨테이너 클러스터 외부에서 서비스를 요청할 수 있다. Minikube는 `NodePort`를 통해서만 서비스를 노출할 수 있다.