Fifth Korean l10n work for release-1.13. (#12420)

* ko-trans: glossary/kube-scheduler.md (#12269)
* ko-trans: Update outdated files partly in dev-1.13-ko.5 (#12246)
* ko-trans: Update outdated files partly in dev-1.13-ko.5 (#12267)
* Update outdated in tutorials/kubernetes-basics/ for dev-1.13-ko.5 (#12272)
* ko/examples/application/deployment.yaml (#12293)
* ko-trans: add tutorials/hello-minikube.md #11532 (#12273)
* Translate concepts/containers/container-environment-variables in Korean (#12382)
* ko: Tutorial compoent rearrange (#12400)
* Translate content/ko/docs/concepts/architecture/master-node-communication in Korean #11963 (#12315)
* Translate concepts/workloads/pods/podpreset in Korean (#12308)
* Translate concepts/workloads/pods/init-containers in Korean (#12298)
* ko-trans: add setup/minikube.md #11531 (#12274)
* ko/docs/setup/cluster-large.md (#12370)

Co-authored-by: Seokho <shsongist@gmail.com>
Co-authored-by: Kim Young Dae <38598117+zer0big@users.noreply.github.com>
Co-authored-by: Claudia J.Kang <claudiajkang@gmail.com>
Co-authored-by: Yoon <learder@gmail.com>
Co-authored-by: Jmnote <opcore@gmail.com>
Co-authored-by: June Yi <june.yi@samsung.com>
This commit is contained in:
Claudia J.Kang
2019-01-30 00:07:30 +09:00
committed by Kubernetes Prow Robot
parent a7792a6ae8
commit 3a0154db4c
22 changed files with 978 additions and 552 deletions
+154 -339
View File
@@ -12,428 +12,246 @@ menu:
{{% capture overview %}}
이 튜토리얼의 목표는 Node.js 로 작성된 간단한 Hello World 애플리케이션을 쿠버네티스에서 실행되는
애플리케이션으로 변환하는 것이다. 튜토리얼을 통해 로컬에서 작성된 코드를 Docker 컨테이너 이미지로
변환한 다음, [Minikube](/docs/getting-started-guides/minikube)에서 해당 이미지를 실행하는
방법을 보여 준다. Minikube는 무료로 로컬 머신을 이용해서 쿠버네티스를 실행할 수 있는 간단한 방법을
제공한다.
이 튜토리얼에서는 [Minikube](/docs/getting-started-guides/minikube)와 Katacoda를 이용하여
쿠버네티스에서 Node.js 로 작성된 간단한 Hello World 애플리케이션을 어떻게 실행하는지 살펴본다.
Katacode는 무료로 브라우저에서 쿠버네티스 환경을 제공한다.
{{< note >}}
[로컬에서 Minikube](/ko/docs/tasks/tools/install-minikube/)를 설치했다면 이 튜토리얼도 따라할 수 있다.
{{< /note >}}
{{% /capture %}}
{{% capture objectives %}}
* Node.js로 hello world 애플리케이션을 실행한다.
* Minikube에 만들어진 애플리케이션을 배포한다.
* 애플리케이션 로그를 확인한다.
* 애플리케이션 이미지를 업데이트한다.
* hello world 애플리케이션을 Minikube에 배포한다.
* 배포한 애플리케이션을 실행한다.
* 애플리케이션 로그를 확인한다.
{{% /capture %}}
{{% capture prerequisites %}}
* macOS의 경우, [Homebrew](https://brew.sh)를 사용하여 Minikube를 설치할 수 있다.
이 튜토리얼에서 아래 파일들을 빌드한 컨테이너 이미지를 제공한다.
{{< note >}}
**참고:** macOS 10.13 버전으로 업데이트 후 `brew update`를 실행 시 Homebrew에서 다음과 같은 오류가 발생할 경우에는,
{{< codenew language="js" file="minikube/server.js" >}}
```shell
Error: /usr/local is not writable. You should change the ownership
and permissions of /usr/local back to your user account:
sudo chown -R $(whoami) /usr/local
```
Homebrew를 다시 설치하여 문제를 해결할 수 있다.
```shell
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
{{< /note >}}
* 예제 애플리케이션을 실행하기 위해서는 [NodeJS](https://nodejs.org/en/)가 필요하다.
* Docker를 설치한다. macOS의 경우,
[Docker for Mac](https://docs.docker.com/engine/installation/mac/)를 권장한다.
{{< codenew language="conf" file="minikube/Dockerfile" >}}
`docker build`명령에 대한 자세한 설명은 [Docker 문서](https://docs.docker.com/engine/reference/commandline/build/)를 읽어보자.
{{% /capture %}}
{{% capture lessoncontent %}}
## Minikube 클러스터 만들기
## Minikubue 클러스터 만들기
이 튜토리얼에서는 [Minikube](https://github.com/kubernetes/minikube)를 사용하여
로컬 클러스터를 만든다. 이 튜토리얼에서는 macOS에서
[Docker for Mac](https://docs.docker.com/engine/installation/mac/)을
사용한다고 가정하였다. Docker for Mac 대신 Linux 혹은 VirtualBox와 같이 다른 플랫폼을
사용하는 경우, Minikube를 설치하는 방법이 약간 다를 수 있다. 일반적인 Minikube 설치 지침은
[Minikube installation guide](/docs/getting-started-guides/minikube/)
를 참조한다.
1. **Launch Terminal** 을 클릭
Homebrew를 사용하여 최신 버전의 Minikube를 설치한다.
```shell
brew cask install minikube
```
{{< kat-button >}}
[Minikube driver installation guide](https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#hyperkit-driver)에
설명한 것과 같이 HyperKit 드라이버를 설치한다.
{{< note >}}Minikube를 로컬에 설치했다면 `minikube start`을 실행한다.{{< /note >}}
Homebrew를 사용하여 쿠버네티스 클러스터와 상호 작용을 위한
`kubectl` 명령줄 도구를 다운로드한다.
2. 브라우저에서 쿠버네티스 대시보드를 열어보자.
```shell
brew install kubernetes-cli
```
```shell
minikube dashboard
```
프록시를 거치지않고 직접 [https://cloud.google.com/container-registry/](https://cloud.google.com/container-registry/)같은 사이트에 액세스 할 수 있는지 확인하려면 새 터미널을 열고 다음과 같이 실행한다.
3. Katacoda 환경에서는: 터미널 패널의 상단에서 플러스를 클릭하고, 이어서 **Select port to view on Host 1**를 클릭
```shell
curl --proxy "" https://cloud.google.com/container-registry/
```
Docker 데몬이 시작되었는지 확인한다. Docker가 실행 중인지는 다음과 같은 커맨드를 사용하여 확인할 수 있다.
```shell
docker images
```
프록시가 필요하지 않은 경우, Minikube 클러스터를 시작한다.
```shell
minikube start --vm-driver=hyperkit
```
프록시가 필요한 경우, 다음 방법을 사용하여 프록시 설정과 함께 Minikube 클러스터를 시작할 수 있다.
```shell
minikube start --vm-driver=hyperkit --docker-env HTTP_PROXY=http://your-http-proxy-host:your-http-proxy-port --docker-env HTTPS_PROXY=http(s)://your-https-proxy-host:your-https-proxy-port
```
`--vm-driver=hyperkit` 플래그는 Docker for Mac을 사용하고 있음을 의미한다.
기본 VM 드라이버는 VirtualBox이다.
이제 Minikube 컨텍스트를 설정한다. 컨텍스트는 'kubectl'이 어떠한 클러스터와 상호 작용하려고
하는지를 결정한다. `~/.kube/config` 파일에 사용 가능한 모든 컨텍스트가 들어있다.
```shell
kubectl config use-context minikube
```
`kubectl`이 클러스터와 통신할 수 있도록 설정되어 있는지 확인한다.
```shell
kubectl cluster-info
```
브라우저에서 쿠버네티스 대시보드를 연다.
```shell
minikube dashboard
```
## Node.js 애플리케이션 만들기
다음 단계에서는 애플리케이션을 작성해 본다. 아래 코드를 `hellonode` 폴더에
`server.js`라는 이름으로 저장한다.
{{< codenew language="js" file="minikube/server.js" >}}
작성된 애플리케이션을 실행한다.
```shell
node server.js
```
[http://localhost:8080/](http://localhost:8080/)에 접속하면 "Hello World!"라는 메시지를 확인할 수 있을 것이다.
**Ctrl-C**를 입력하면 실행 중인 Node.js 서버가 중단된다.
다음 단계는 작성된 애플리케이션을 Docker 컨테이너에 패키지하는 것이다.
## Docker 컨테이너 이미지 만들기
앞에서 사용하였던 `hellonode` 폴더에 `Dockerfile`이라는 이름으로 파일을 만든다. Dockerfile
은 빌드하고자 하는 이미지를 기술한 파일이다. 기존 이미지를 확장하여 Docker
컨테이너 이미지를 빌드할 수 있다. 이 튜토리얼에서는 기존 Node.js 이미지를 확장하여 사용한다.
{{< codenew language="conf" file="minikube/Dockerfile" >}}
본 레시피는 Docker 레지스트리에 있는 공식 Node.js LTS 이미지로부터 시작해서,
8080 포트를 열고, `server.js` 파일을 이미지에 복사하고
Node.js 서버를 시작한다.
기본적으로, Docker는 로컬 머신의 Docker 레지스트리에 이미지를 생성하고 저장한다.
이 튜토리얼에서는, 로컬 머신의 Docker 레지스트리를 사용하지 않고 Minikube의
VM 인스턴스 _속에서_ 구동 중인 Docker 데몬의 레지스트리를 사용한다. 'docker' 명령이
Minikube의 Docker 데몬을 가르키도록 하려면 다음과 같이 입력한다. (unix 셀)
```shell
eval $(minikube docker-env)
```
powershell에서는 다음과 같이 입력한다.
```shell
minikube docker-env | Invoke-Expression
```
{{< note >}}
**참고:** 나중에 Minikube 호스트를 더 이상 사용하고 싶지 않은 경우,
`eval $ (minikube docker-env -u)`를 실행하여 변경을 되돌릴 수 있다.
{{< /note >}}
Minikube Docker 데몬을 사용하여 Docker 이미지를 빌드한다. (마지막의 점에 주의)
```shell
docker build -t hello-node:v1 .
```
Minikube의 Docker 레지스트리에 이미지가 있는 것을 확인한다.
```shell
minikube ssh docker images
```
Output:
```shell
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-node v1 f82485ca953c 3 minutes ago 655MB
...
node 6.9.2 faaadb4aaf9b 20 months ago 655MB
```
이제 Minikube VM에서 빌드한 이미지를 실행할 수 있다.
4. Katacoda 환경에서는: 30000 을 입력하고 **Display Port**을 클릭.
## 디플로이먼트 만들기
쿠버네티스 [*파드*](/docs/concepts/workloads/pods/pod/)는 관리 네트워크 구성을 목적으로
함께 묶은 하나 이상의 컨테이너 그룹이다.
이 튜토리얼의 파드에는 단 하나의 컨테이너만 있다.
쿠버네티스 [*디플로이먼트*](/docs/concepts/workloads/controllers/deployment/)는 파드의
헬스를 검사해서 파드의 컨테이너가 종료되면 다시 시작해준다.
파드의 생성 및 확장을 관리하는 방법으로 디플로이먼트를 권장한다.
쿠버네티스 [*파드*](/docs/concepts/workloads/pods/pod/)는 관리 네트워킹 목적으로 함께 묶여 있는 하나 이상의 컨테이너 그룹이다.
이 튜토리얼의 파드에는 단 하나의 컨테이너만 있다. 쿠버네티스 [*디플로이먼트*](/docs/concepts/workloads/controllers/deployment/)는 파드의
헬스를 검사해서 파드의 컨테이너가 종료되었다면 재시작해준다.
파드의 생성 및 스케일링을 관리하는 방법으로 디플로이먼트를 권장한다.
`kubectl create` 커맨드를 사용하여 파드를 관리하는 디플로이먼트를 만든다.
파드는 `hello-node:v1` Docker 이미지를 기반으로 한 컨테이너를 실행한다.
(이미지를 레지스트리에 Push하지 않았기 때문에) Docker 레지스트리에서 이미지를 가져오기 보다는,
항상 로컬 이미지를 사용하기 위해 `--image-pull-policy` 플래그를 `Never`로 설정한다.
1. `kubectl create` 명령어를 실행하여 파드를 관리 디플로이먼트를 만든다. 이 파드는 제공된 Docker 이미지를 기반으로 한 컨테이너를 실행한다.
```shell
kubectl create deployment hello-node --image=hello-node:v1 --port=8080 --image-pull-policy=Never
```
```shell
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
```
디플로이먼트를 확인한다.
2. 디플로이먼트 보기
```shell
kubectl get deployments
```
```shell
kubectl get deployments
```
출력:
출력:
```shell
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-node 1 1 1 1 1m
```
3. 파드 보기
```shell
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-node 1 1 1 1 3m
```
```shell
kubectl get pods
```
출력:
파드를 확인한다.
```shell
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
```
4. 클러스터 이벤트 보기
```shell
kubectl get pods
```
```shell
kubectl get events
```
출력:
5. `kubectl` 환경설정 보기
```shell
NAME READY STATUS RESTARTS AGE
hello-node-714049816-ztzrb 1/1 Running 0 6m
```
클러스터 이벤트를 확인한다.
```shell
kubectl get events
```
`kubectl`의 설정을 확인한다.
```shell
kubectl config view
```
`kubectl` 커맨드에 대한 더 많은 정보를 원하는 경우,
[kubectl overview](/docs/user-guide/kubectl-overview/)를 확인한다.
```shell
kubectl config view
```
{{< note >}}`kubectl` 명령어에 관해 자세히 알기 원하면 [kubectl 개관](/docs/user-guide/kubectl-overview/)을 살펴보자.{{< /note >}}
## 서비스 만들기
기본적으로 파드는 쿠버네티스 클러스터 내의 내부 IP 주소로만 접속 가능하다.
쿠버네티스 가상 네트워크 밖에서 `hello-node` 컨테이너에 접속하기 위해서는 파드를
쿠버네티스 [*서비스*](/docs/concepts/services-networking/service/)로
노출해야 한다.
기본적으로 파드는 쿠버네티스 클러스터 내부 IP 주소로만 접근할 수 있다.
`hello-node` 컨테이너를 쿠버네티스 가상 네트워크 외부에서 접근하려면
파드를 쿠버네티스 [*서비스*](/docs/concepts/services-networking/service/)로 노출해야 한다.
개발 환경에서, `kubectl expose` 커맨드를 사용해서 파드를 퍼블릭 인터넷에
노출할 수 있다.
1. `kubectl expose` 명령어로 퍼블릭 인터넷에 파드 노출시키기
```shell
kubectl expose deployment hello-node --type=LoadBalancer
```
```shell
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
```
`--type=LoadBalancer`플래그는 클러스터 밖의 서비스로 노출시키기 원한다는 뜻이다.
방금 생성한 서비스를 확인한다.
2. 방금 생성한 서비스 살펴보기
```shell
kubectl get services
```
```shell
kubectl get services
```
출력:
출력:
```shell
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node ClusterIP 10.0.0.71 <pending> 8080/TCP 6m
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 14d
```
```shell
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
```
`--type=LoadBalancer` 플래그는 해당 서비스를 클러스터 바깥으로 노출시키는
것을 지시한다. 로드 밸런서를 지원하는 클라우드 제공 업체의 경우, 외부
IP 주소가 프로비저닝되어서 서비스에 접근할 수 있도록 해준다. Minikube에서
`LoadBalancer` 타입의 서비스는 `minikube service` 커맨드를 통해 접근할 수 있다.
로드 밸런서를 지원하는 클라우드 공급자의 경우에는 서비스에 접근할 수 있도록 외부 IP 주소가 프로비저닝 한다.
Minikube에서 `LoadBalancer`타입은 `minikube service` 명령어를 통해서 해당 서비스를 접근할 수 있게 한다.
```shell
minikube service hello-node
```
3. 다음 명령어를 실행한다
위 커맨드는 앱을 서비스하는 로컬 IP 주소로 브라우저를 자동으로 열어서
"Hello World" 메세지를 보여준다.
```shell
minikube service hello-node
```
브라우저 또는 curl을 통해 새 웹서비스에 요청을 보내면, 로그가 쌓이는
것을 확인할 수 있을 것이다.
4. Katacoda 환경에서만: 플러스를 클릭한 후에 **Select port to view on Host 1** 를 클릭.
```shell
kubectl logs <POD-NAME>
```
5. Katacoda 환경에서만: 포트 번호를 `8080`로 입력하고, **Display Port** 클릭.
## App 업데이트
이렇게 하면 당신의 앱을 서비스하는 브라우저 윈도우를 띄우고 Hellow World" 메시지를 보여준다.
새로운 메시지를 출력하도록 `server.js` 파일을 수정한다.
## 애드온 사용하기
```javascript
response.end('Hello World Again!');
Minikube에는 활성화하거나 비활성화 할 수 있고 로컬 쿠버네티스 환경에서 접속해 볼 수 있는 내장 애드온 셋이 있다.
```
1. 현재 지원하는 애드온 목록을 확인한다.
새로운 버전의 이미지를 빌드한다. (마지막의 점에 주의하라)
```shell
minikube addons list
```
```shell
docker build -t hello-node:v2 .
```
출력:
디플로이먼트의 이미지를 업데이트한다.
```shell
addon-manager: enabled
coredns: disabled
dashboard: enabled
default-storageclass: enabled
efk: disabled
freshpod: disabled
heapster: disabled
ingress: disabled
kube-dns: enabled
metrics-server: disabled
nvidia-driver-installer: disabled
nvidia-gpu-device-plugin: disabled
registry: disabled
registry-creds: disabled
storage-provisioner: enabled
```
2. 한 애드온을 활성화 한다. 예를 들어 `heapster`
```shell
kubectl set image deployment/hello-node hello-node=hello-node:v2
```
```shell
minikube addons enable heapster
```
출력:
앱을 다시 실행하여 새로운 메시지를 확인한다.
```shell
heapster was successfully enabled
```
```shell
minikube service hello-node
```
3. 방금 생성한 파드와 서비스를 확인한다.
## 애드온 활성화하기
```shell
kubectl get pod,svc -n kube-system
```
Minikube에는 활성화하거나 비활성화할 수 있고 로컬 쿠버네티스 환경에서 접속해 볼 수 있는 내장 애드온이 있다.
출력:
우선 현재 지원되는 애드온 목록을 확인한다.
```shell
NAME READY STATUS RESTARTS AGE
pod/heapster-9jttx 1/1 Running 0 26s
pod/influxdb-grafana-b29w8 2/2 Running 0 26s
pod/kube-addon-manager-minikube 1/1 Running 0 34m
pod/kube-dns-6dcb57bcc8-gv7mw 3/3 Running 0 34m
pod/kubernetes-dashboard-5498ccf677-cgspw 1/1 Running 0 34m
pod/storage-provisioner 1/1 Running 0 34m
```shell
minikube addons list
```
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/heapster ClusterIP 10.96.241.45 <none> 80/TCP 26s
service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m
service/kubernetes-dashboard NodePort 10.109.29.1 <none> 80:30000/TCP 34m
service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s
service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s
```
출력:
4. `heapster` 비활성화
```shell
- storage-provisioner: enabled
- kube-dns: enabled
- registry: disabled
- registry-creds: disabled
- addon-manager: enabled
- dashboard: disabled
- default-storageclass: enabled
- coredns: disabled
- heapster: disabled
- efk: disabled
- ingress: disabled
```
```shell
minikube addons disable heapster
```
출력:
이하의 커맨드를 적용하기 위해서는 Minikube가 실행 중이어야 한다. 예를 들어, `heapster` 애드온을 활성화하기 위해서는
다음과 같이 실행한다.
```shell
minikube addons enable heapster
```
출력:
```shell
heapster was successfully enabled
```
생성한 파드와 서비스를 확인한다.
```shell
kubectl get po,svc -n kube-system
```
출력:
```shell
NAME READY STATUS RESTARTS AGE
pod/heapster-zbwzv 1/1 Running 0 2m
pod/influxdb-grafana-gtht9 2/2 Running 0 2m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/heapster NodePort 10.0.0.52 <none> 80:31655/TCP 2m
service/monitoring-grafana NodePort 10.0.0.33 <none> 80:30002/TCP 2m
service/monitoring-influxdb ClusterIP 10.0.0.43 <none> 8083/TCP,8086/TCP 2m
```
브라우저에서 엔드포인트를 열어 heapster와 상호 작용한다.
```shell
minikube addons open heapster
```
출력:
```shell
Opening kubernetes service kube-system/monitoring-grafana in default browser...
```
```shell
heapster was successfully disabled
```
## 제거하기
이제 클러스터에서 만들어진 리소스를 제거다.
이제 클러스터에서 만들어진 리소스를 제거할 수 있다.
```shell
kubectl delete service hello-node
kubectl delete deployment hello-node
```
필요 시, 생성된 Docker 이미지를 강제로 제거한다.
```shell
docker rmi hello-node:v1 hello-node:v2 -f
```
필요 시, Minikube VM을 정지한다.
필요시 Minikube 가상 머신(VM)을 정지한다.
```shell
minikube stop
eval $(minikube docker-env -u)
```
필요 시, Minikube VM을 삭제한다.
필요시 minikube VM을 삭제한다.
```shell
minikube delete
@@ -441,7 +259,6 @@ minikube delete
{{% /capture %}}
{{% capture whatsnext %}}
* [Deployment objects](/docs/concepts/workloads/controllers/deployment/)에 대해서 더 배워 본다.
@@ -449,5 +266,3 @@ minikube delete
* [Service objects](/docs/concepts/services-networking/service/)에 대해서 더 배워 본다.
{{% /capture %}}
@@ -1,7 +1,7 @@
---
title: 쿠버네티스 기초 학습
linkTitle: 쿠버네티스 기초 학습
weight: 5
weight: 10
---
<!DOCTYPE html>
@@ -17,7 +17,7 @@ weight: 5
<div class="row">
<div class="col-md-9">
<h2>쿠버네티스 기초</h2>
<p>이 튜토리얼에서는 쿠버네티스 클러스터 오케스트레이션 시스템의 기초를 익힐 수 있는 가이드를 제공한다. 각각의 모듈에는 쿠버네티스의 주요 기능과 개념에 대한 배경 지식이 담겨 있으며 대화형 온라인 튜토리얼도 포함되어 있다. 대화형 튜토리얼에서 간단한 클러스터와 그 클러스터 상의 <a href="/docs/concepts/overview/what-is-kubernetes/#why-containers">컨테이너화된 애플리케이션</a>을 직접 관리해볼 수 있다.</p>
<p>이 튜토리얼에서는 쿠버네티스 클러스터 오케스트레이션 시스템의 기초를 익힐 수 있는 가이드를 제공한다. 각각의 모듈에는 쿠버네티스의 주요 기능과 개념에 대한 배경 지식이 담겨 있으며 대화형 온라인 튜토리얼도 포함되어 있다. 대화형 튜토리얼에서 간단한 클러스터와 그 클러스터 상의 컨테이너화 된 애플리케이션을 직접 관리해볼 수 있다.</p>
<p>대화형 튜토리얼을 사용해서 다음의 내용을 배울 수 있다.</p>
<ul>
<li>컨테이너화된 애플리케이션을 클러스터에 배포하기</li>
@@ -34,7 +34,7 @@ weight: 5
<div class="row">
<div class="col-md-9">
<h2>쿠버네티스가 어떤 도움이 될까?</h2>
<p>오늘날의 웹서비스에 대해서, 사용자는 애플리케이션이 24/7 가용하기를 바라고, 개발자는 하루에도 몇 번이고 새로운 버전의 애플리케이션을 배포하기를 바란다. 컨테이너화를 통해 소프트웨어를 패키지하면 애플리케이션을 다운타임 없이 쉽고 빠르게 릴리스 및 업데이트할 수 있게 되어서 이런 목표를 달성하는데 도움이 된다. 쿠버네티스는 이렇게 컨테이너화된 애플리케이션을 원하는 곳 어디에든 또 언제든 구동시킬 수 있다는 확신을 갖는데 도움을 주며, 그 애플리케이션이 작동하는데 필요한 자원과 도구를 찾는 것을 도와준다. <a href="/docs/concepts/overview/what-is-kubernetes/">쿠버네티스</a>는 구글의 컨테이너 오케스트레이션 부문의 축적된 경험으로 설계되고 커뮤니티로부터 도출된 최고의 아이디어가 결합된 운영 수준의 오픈 소스 플랫폼이다.</p>
<p>오늘날의 웹서비스에 대해서, 사용자는 애플리케이션이 24/7 가용하기를 바라고, 개발자는 하루에도 몇 번이고 새로운 버전의 애플리케이션을 배포하기를 바란다. 컨테이너화를 통해 소프트웨어를 패키지하면 애플리케이션을 다운타임 없이 쉽고 빠르게 릴리스 및 업데이트할 수 있게 되어서 이런 목표를 달성하는데 도움이 된다. 쿠버네티스는 이렇게 컨테이너화된 애플리케이션을 원하는 곳 어디에든 또 언제든 구동시킬 수 있다는 확신을 갖는데 도움을 주며, 그 애플리케이션이 작동하는데 필요한 자원과 도구를 찾는 것을 도와준다. 쿠버네티스는 구글의 컨테이너 오케스트레이션 부문의 축적된 경험으로 설계되고 커뮤니티로부터 도출된 최고의 아이디어가 결합된 운영 수준의 오픈 소스 플랫폼이다.</p>
</div>
</div>
@@ -35,8 +35,8 @@ weight: 10
방식으로 패키지할 필요가 있다. 즉, 컨테이너화 해야 한다. 컨테이너화된 애플리케이션은 호스트에
매우 깊이 통합된 패키지로써, 특정 머신에 직접 설치되는 예전의 배포 모델보다 유연하고 가용성이 높다.
<b>쿠버네티스는 애플리케이션 컨테이너를 클러스터에 분산시키고 스케줄링하는 일을 보다 효율적으로
자동화한다.</b> 쿠버네티스는 <a href="https://github.com/kubernetes/kubernetes">오픈소스</a>
플랫폼이고 운영 수준의 안정성을 가졌다.
자동화한다.</b>
쿠버네티스는 오픈소스 플랫폼이고 운영 수준의 안정성을 가졌다.
</p>
<p>쿠버네티스 클러스터는 두 가지 형태의 자원으로 구성된다.
<ul>
@@ -84,14 +84,13 @@ weight: 10
클러스터 내 모든 활동을 조율한다.</p>
<p><b>노드는 쿠버네티스 클러스터 내 워커 머신으로써 동작하는 VM 또는 물리적인 컴퓨터다.</b>
각 노드는 노드를 관리하고 쿠버네티스 마스터와 통신하는 Kubelet이라는 에이전트를 갖는다. 노드는
컨테이너 운영을 담당하는 <a href="https://www.docker.com">Docker</a> 또는
<a href="https://coreos.com/rkt">rkt</a>과 같은 툴도 갖는다. 운영 트래픽을 처리하는 쿠버네티스
컨테이너 운영을 담당하는 Docker 또는 rkt와 같은 툴도 갖는다. 운영 트래픽을 처리하는 쿠버네티스
클러스터는 최소 세 대의 노드를 가져야한다.</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_fill">
<p><i> 마스터는 클러스터를 관리하고 노드는 구동되는 애플리케이션을 수용하는데 사용된다. </i></p>
<p><i>마스터는 클러스터를 관리하고 노드는 구동되는 애플리케이션을 수용하는데 사용된다. </i></p>
</div>
</div>
</div>
@@ -104,11 +103,11 @@ weight: 10
사용해서 클러스터와 상호작용할 수 있다.</p>
<p>쿠버네티스 클러스터는 물리 및 가상 머신 모두에 설치될 수 있다. 쿠버네티스 개발을 시작하려면
<a href="https://github.com/kubernetes/minikube">Minikube</a>를 사용할 수 있다. Minikube는 로컬
머신에 VM을 만들고 하나의 노드로 구성된 간단한 클러스터를 배포하는 가벼운 쿠버네티스 구현체다.
Minikube는 리눅스, 맥, 그리고 윈도우 시스템에서 구동이 가능하다. Minikube CLI는 클러스터에 대해
시작, 중지, 상태 조회 및 삭제 등의 기본적인 부트스트래핑 기능을 제공한다. 하지만, 본 튜토리얼에서는
Minikube가 미리 설치된 채로 제공되는 온라인 터미널을 사용할 것이다.</p>
Minikube를 사용할 수 있다. Minikube는 로컬 머신에 VM을 만들고 하나의 노드로 구성된 간단한
클러스터를 배포하는 가벼운 쿠버네티스 구현체다. Minikube는 리눅스, 맥, 그리고 윈도우 시스템에서
구동이 가능하다. Minikube CLI는 클러스터에 대해 시작, 중지, 상태 조회 및 삭제 등의 기본적인
부트스트래핑 기능을 제공한다. 하지만, 본 튜토리얼에서는 Minikube가 미리 설치된 채로 제공되는
온라인 터미널을 사용할 것이다.</p>
<p>이제 쿠버네티스가 무엇인지 알아봤으니, 온라인 튜토리얼로 이동해서 우리의 첫 번째 클러스터를
시작해보자!</p>
@@ -103,9 +103,9 @@ weight: 10
<div class="row">
<div class="col-md-8">
<p>우리의 첫 번째 디플로이먼트로, Docker 컨테이너로 패키지된 <a href="https://nodejs.org">Node.js</a> 애플리케이션을 사용해보자.
<p>우리의 첫 번째 디플로이먼트로, Docker 컨테이너로 패키지된 Node.js 애플리케이션을 사용해보자.
Node.js 애플리케이션을 작성하고 Docker 컨테이너를 배포하기 위해서,
<a href="/ko/docs/tutorials/hello-minikube/#node-js-애플리케이션-만들기">Hello Minikube 튜토리얼</a>의 지시를 따른다.</p>
<a href="/ko/docs/tutorials/hello-minikube/">Hello Minikube 튜토리얼</a>의 지시를 따른다.</p>
<p>이제 디플로이먼트를 이해했으니, 온라인 튜토리얼을 통해 우리의 첫 번째 애플리케이션을 배포해보자!</p>
@@ -28,7 +28,7 @@ weight: 10
<div class="col-md-8">
<h3>쿠버네티스 서비스들에 대한 개요</h3>
<p>쿠버네티스 <a href="/ko/docs/concepts/workloads/pods/pod-overview/">파드들</a> 은 언젠가는 죽게된다. 실제 파드들은 <a href="/docs/concepts/workloads/pods/pod-lifecycle/">생명주기</a>를 갖는다. 워커 노드가 죽으면, 노드 상에서 동작하는 파드들 또한 종료된다. <a href="/docs/user-guide/replication-controller/#what-is-a-replicationcontroller">레플리케이션 컨트롤러</a> 여러분의 애플리케이션이 지속적으로 동작할 수 있도록 새로운 파드들의 생성을 통해 동적으로 클러스터를 미리 지정해 둔 상태로 되돌려 줄 수도 있다. 또 다른 예시로서, 3개의 복제본을 갖는 이미지 처리용 백엔드를 고려해 보자. 그 복제본들은 교체 가능한 상태이다. 그래서 프론트엔드 시스템은 하나의 파드가 소멸되어 재생성이 되더라도, 백엔드 복제본들에 의한 영향을 받아서는 안된다. 즉, 동일 노드 상의 파드들이라 할지라도, 쿠버네티스 클러스터 내 각 파드는 유일한 IP 주소를 가지며, 여러분의 애플리케이션들이 지속적으로 기능할 수 있도록 파드들 속에서 발생하는 변화에 대해 자동으로 조정해 줄 방법이 있어야 한다.</p>
<p>쿠버네티스 <a href="/ko/docs/concepts/workloads/pods/pod-overview/">파드들</a> 은 언젠가는 죽게된다. 실제 파드들은 <a href="/docs/concepts/workloads/pods/pod-lifecycle/">생명주기</a>를 갖는다. 워커 노드가 죽으면, 노드 상에서 동작하는 파드들 또한 종료된다. <a href="/docs/concepts/workloads/controllers/replicaset/">레플리카 셋</a> 여러분의 애플리케이션이 지속적으로 동작할 수 있도록 새로운 파드들의 생성을 통해 동적으로 클러스터를 미리 지정해 둔 상태로 되돌려 줄 수도 있다. 또 다른 예시로서, 3개의 복제본을 갖는 이미지 처리용 백엔드를 고려해 보자. 그 복제본들은 교체 가능한 상태이다. 그래서 프론트엔드 시스템은 하나의 파드가 소멸되어 재생성이 되더라도, 백엔드 복제본들에 의한 영향을 받아서는 안된다. 즉, 동일 노드 상의 파드들이라 할지라도, 쿠버네티스 클러스터 내 각 파드는 유일한 IP 주소를 가지며, 여러분의 애플리케이션들이 지속적으로 기능할 수 있도록 파드들 속에서 발생하는 변화에 대해 자동으로 조정해 줄 방법이 있어야 한다.</p>
<p>쿠버네티스에서 서비스는 하나의 논리적인 파드 셋과 그 파드들에 접근할 수 있는 정책을 정의하는 추상적 개념이다. 서비스는 종속적인 파드들 사이를 느슨하게 결합되도록 해준다. 서비스는 모든 쿠버네티스 오브젝트들과 같이 YAML <a href="/docs/concepts/configuration/overview/#general-configuration-tips">(보다 선호하는)</a> 또는 JSON을 이용하여 정의된다. 서비스가 대상으로 하는 파드 셋은 보통 <i>LabelSelector</i>에 의해 결정된다 (여러분이 왜 스펙에 <code>selector</code>가 포함되지 않은 서비스를 필요로 하게 될 수도 있는지에 대해 아래에서 확인해 보자).</p>