Add: Korean translation initialized (#10471)

Korean translation of Home, Setup, Tutorials-Kubernetes Basics, and Hello Minikube has been added.

* Initial translation of documentation home (kubernetes/kubernetes-docs-ko#9)
* 번역할 원본 파일 추가 (kubernetes/kubernetes-docs-ko#11)
* Translate tutorials/kubernetes-basics/create-cluster (kubernetes/kubernetes-docs-ko#15)
* Translate tutorials/kubernetes-basics/deploy-app in Korean (kubernetes/kubernetes-docs-ko#16)
* Translate tutorials/kubernetes-basics/expose in Korean (kubernetes/kubernetes-docs-ko#26)
* Translate tutorials/kubernetes-basics/scale in Korean (kubernetes/kubernetes-docs-ko#24)
* Fix typo from 세트 to 셋 according to 외래어 표기법 3.1.1 (kubernetes/kubernetes-docs-ko#31)
* Setup page's header and subheader translate into Korean. (kubernetes/kubernetes-docs-ko#33)
* Translated the welcome page in Korean (kubernetes/kubernetes-docs-ko#32)
* Translate tutorials/kubernetes-basics/update in Korean (kubernetes/kubernetes-docs-ko#35)
* Translate concepts/_index.md in Korean (kubernetes/kubernetes-docs-ko#30)
* Translate tutorials/kubernetes-basics/index.html in Korean (kubernetes/kubernetes-docs-ko#29)
* Translate /tutorials/hello-minikube.md in Korean (kubernetes/kubernetes-docs-ko#18)
* Translate tutorials/kubernetes-basics/explore in Korean (kubernetes/kubernetes-docs-ko#36)
* up-to-date on content/ko (kubernetes/kubernetes-docs-ko#42)
* up-to-date on _index.html (kubernetes/kubernetes-docs-ko#41)
* Translate tutorials/_index.md in Korean (kubernetes/kubernetes-docs-ko#44)
* Update translation on tutorials/hello-minikube.md (kubernetes/kubernetes-docs-ko#45)
* Setup page's header and subheader translate into Korean. (kubernetes/kubernetes-docs-ko#51)
* Update tutorials for consistency (kubernetes/kubernetes-docs-ko#48)
* up-to-date on content/ko (kubernetes/kubernetes-docs-ko#53)

Co-authored-by: June Yi <june.yi@samsung.com>
Co-authored-by: Claudia J.Kang <claudiajkang@gmail.com>
Co-authored-by: zerobig <38598117+zer0big@users.noreply.github.com>
Co-authored-by: Lawlait <sixarasi@gmail.com>
Co-authored-by: Ian Y. Choi <ianyrchoi@gmail.com>
This commit is contained in:
Claudia J.Kang
2018-10-04 05:08:33 +09:00
committed by k8s-ci-robot
parent 29dec80f66
commit 2a1899a646
63 changed files with 8041 additions and 1 deletions
+78
View File
@@ -0,0 +1,78 @@
---
title: 튜토리얼
main_menu: true
weight: 60
content_template: templates/concept
---
{{% capture overview %}}
쿠버네티스 문서의 본 섹션은 튜토리얼을 포함하고 있다.
튜토리얼은 개별 [작업](/docs/tasks) 단위보다 더 큰 목표를 달성하기
위한 방법을 보여준다. 일반적으로 튜토리얼은 각각 순차적 단계가 있는 여러
섹션으로 구성된다.
각 튜토리얼을 따라하기 전에, 나중에 참조할 수 있도록
[표준 용어집](/docs/reference/glossary/) 페이지를 북마크하기를 권한다.
{{% /capture %}}
{{% capture body %}}
## 기초
* [쿠버네티스 기초](/ko/docs/tutorials/kubernetes-basics/)는 쿠버네티스 시스템을 이해하는데 도움이 되고 기초적인 쿠버네티스 기능을 일부 사용해 볼 수 있는 심도있는 대화형 튜토리얼이다.
* [Scalable Microservices with Kubernetes (Udacity)](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615)
* [Introduction to Kubernetes (edX)](https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x#)
* [Hello Minikube](/ko/docs/tutorials/hello-minikube/)
## 구성
* [Configuring Redis Using a ConfigMap](/docs/tutorials/configuration/configure-redis-using-configmap/)
## 상태 유지를 하지 않는(stateless) 애플리케이션
* [Exposing an External IP Address to Access an Application in a Cluster](/docs/tutorials/stateless-application/expose-external-ip-address/)
* [Example: Deploying PHP Guestbook application with Redis](/docs/tutorials/stateless-application/guestbook/)
## 상태 유지가 필요한(stateful) 애플리케이션
* [StatefulSet Basics](/docs/tutorials/stateful-application/basic-stateful-set/)
* [Example: WordPress and MySQL with Persistent Volumes](/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/)
* [Example: Deploying Cassandra with Stateful Sets](/docs/tutorials/stateful-application/cassandra/)
* [Running ZooKeeper, A CP Distributed System](/docs/tutorials/stateful-application/zookeeper/)
## CI/CD 파이프라인
* [Set Up a CI/CD Pipeline with Kubernetes Part 1: Overview](https://www.linux.com/blog/learn/chapter/Intro-to-Kubernetes/2017/5/set-cicd-pipeline-kubernetes-part-1-overview)
* [Set Up a CI/CD Pipeline with a Jenkins Pod in Kubernetes (Part 2)](https://www.linux.com/blog/learn/chapter/Intro-to-Kubernetes/2017/6/set-cicd-pipeline-jenkins-pod-kubernetes-part-2)
* [Run and Scale a Distributed Crossword Puzzle App with CI/CD on Kubernetes (Part 3)](https://www.linux.com/blog/learn/chapter/intro-to-kubernetes/2017/6/run-and-scale-distributed-crossword-puzzle-app-cicd-kubernetes-part-3)
* [Set Up CI/CD for a Distributed Crossword Puzzle App on Kubernetes (Part 4)](https://www.linux.com/blog/learn/chapter/intro-to-kubernetes/2017/6/set-cicd-distributed-crossword-puzzle-app-kubernetes-part-4)
## 클러스터
* [AppArmor](/docs/tutorials/clusters/apparmor/)
## 서비스
* [Using Source IP](/docs/tutorials/services/source-ip/)
{{% /capture %}}
{{% capture whatsnext %}}
튜토리얼을 작성하고 싶다면,
튜토리얼 페이지 유형과 튜토리얼 템플릿에 대한 정보가 있는
[Using Page Templates](/docs/home/contribute/page-templates/)
페이지를 참조한다.
{{% /capture %}}
+430
View File
@@ -0,0 +1,430 @@
---
title: Hello Minikube
content_template: templates/tutorial
weight: 5
menu:
main:
title: "Get Started"
weight: 10
post: >
<p>Ready to get your hands dirty? Build a simple Kubernetes cluster that runs "Hello World" for Node.js.</p>
---
{{% capture overview %}}
이 튜토리얼의 목표는 Node.js 로 작성된 간단한 Hello World 애플리케이션을 쿠버네티스에서 실행되는
애플리케이션으로 변환하는 것이다. 튜토리얼을 통해 로컬에서 작성된 코드를 Docker 컨테이너 이미지로
변환한 다음, [Minikube](/docs/getting-started-guides/minikube)에서 해당 이미지를 실행하는
방법을 보여 준다. Minikube는 무료로 로컬 머신을 이용해서 쿠버네티스를 실행할 수 있는 간단한 방법을
제공한다.
{{% /capture %}}
{{% capture objectives %}}
* Node.js로 hello world 애플리케이션을 실행한다.
* Minikube에 만들어진 애플리케이션을 배포한다.
* 애플리케이션 로그를 확인한다.
* 애플리케이션 이미지를 업데이트한다.
{{% /capture %}}
{{% capture prerequisites %}}
* macOS의 경우, [Homebrew](https://brew.sh)를 사용하여 Minikube를 설치할 수 있다.
{{< note >}}
**참고:** macOS 10.13 버전으로 업데이트 후 `brew update`를 실행 시 Homebrew에서 다음과 같은 오류가 발생할 경우에는,
```
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를 다시 설치하여 문제를 해결할 수 있다.
```
/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/)를 권장한다.
{{% /capture %}}
{{% capture lessoncontent %}}
## Minikube 클러스터 만들기
이 튜토리얼에서는 [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/)
를 참조한다.
Homebrew를 사용하여 최신 버전의 Minikube를 설치한다.
```shell
brew cask install minikube
```
[Minikube driver installation guide](https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#hyperkit-driver)에
설명한 것과 같이 HyperKit 드라이버를 설치한다.
Homebrew를 사용하여 쿠버네티스 클러스터와 상호 작용을 위한
`kubectl` 명령줄 도구를 다운로드한다.
```shell
brew install kubernetes-cli
```
프록시를 거치지않고 직접 [https://cloud.google.com/container-registry/](https://cloud.google.com/container-registry/)같은 사이트에 액세스 할 수 있는지 확인하려면 새 터미널을 열고 다음과 같이 실행한다.
```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 서버를 시작한다.
이 튜토리얼은 Minikube를 사용하기 때문에, Docker 이미지를 레지스트리로 Push하는 대신,
Minikube VM과 동일한 Docker 호스트를 사용하면 이미지를 단순히 빌드하기만 해도
이미지가 자동으로 (역주: Minikube에서 사용할 수 있는 위치에) 생긴다. 이를 위해서,
다음의 커맨드를 사용해서 Minikube Docker 데몬을 사용할 수 있도록 한다.
```shell
eval $(minikube docker-env)
```
{{< note >}}
**참고:** 나중에 Minikube 호스트를 더 이상 사용하고 싶지 않은 경우,
`eval $ (minikube docker-env -u)`를 실행하여 변경을 되돌릴 수 있다.
{{< /note >}}
Minikube Docker 데몬을 사용하여 Docker 이미지를 빌드한다. (마지막의 점에 주의)
```shell
docker build -t hello-node:v1 .
```
이제 Minikube VM에서 빌드한 이미지를 실행할 수 있다.
## 디플로이먼트 만들기
쿠버네티스 [*파드*](/docs/concepts/workloads/pods/pod/)는 관리 및 네트워크 구성을 목적으로
함께 묶은 하나 이상의 컨테이너 그룹이다.
이 튜토리얼의 파드에는 단 하나의 컨테이너만 있다.
쿠버네티스 [*디플로이먼트*](/docs/concepts/workloads/controllers/deployment/)는 파드의
헬스를 검사해서 파드의 컨테이너가 종료되면 다시 시작해준다.
파드의 생성 및 확장을 관리하는 방법으로 디플로이먼트를 권장한다.
`kubectl run` 커맨드를 사용하여 파드를 관리하는 디플로이먼트를 만든다.
파드는 `hello-node:v1` Docker 이미지를 기반으로 한 컨테이너를 실행한다.
(이미지를 레지스트리에 Push하지 않았기 때문에) Docker 레지스트리에서 이미지를 가져오기 보다는,
항상 로컬 이미지를 사용하기 위해 `--image-pull-policy` 플래그를 `Never`로 설정한다.
```shell
kubectl run hello-node --image=hello-node:v1 --port=8080 --image-pull-policy=Never
```
디플로이먼트를 확인한다.
```shell
kubectl get deployments
```
출력:
```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-714049816-ztzrb 1/1 Running 0 6m
```
클러스터 이벤트를 확인한다.
```shell
kubectl get events
```
`kubectl`의 설정을 확인한다.
```shell
kubectl config view
```
`kubectl` 커맨드에 대한 더 많은 정보를 원하는 경우,
[kubectl overview](/docs/user-guide/kubectl-overview/)를 확인한다.
## 서비스 만들기
기본적으로 파드는 쿠버네티스 클러스터 내의 내부 IP 주소로만 접속 가능하다.
쿠버네티스 가상 네트워크 밖에서 `hello-node` 컨테이너에 접속하기 위해서는 파드를
쿠버네티스 [*서비스*](/docs/concepts/services-networking/service/)로
노출해야 한다.
개발 환경에서, `kubectl expose` 커맨드를 사용해서 파드를 퍼블릭 인터넷에
노출할 수 있다.
```shell
kubectl expose deployment hello-node --type=LoadBalancer
```
방금 생성한 서비스를 확인한다.
```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
```
`--type=LoadBalancer` 플래그는 해당 서비스를 클러스터 바깥으로 노출시키는
것을 지시한다. 로드 밸런서를 지원하는 클라우드 제공 업체의 경우, 외부
IP 주소가 프로비저닝되어서 서비스에 접근할 수 있도록 해준다. Minikube에서
`LoadBalancer` 타입의 서비스는 `minikube service` 커맨드를 통해 접근할 수 있다.
```shell
minikube service hello-node
```
위 커맨드는 앱을 서비스하는 로컬 IP 주소로 브라우저를 자동으로 열어서
"Hello World" 메세지를 보여준다.
브라우저 또는 curl을 통해 새 웹서비스에 요청을 보내면, 로그가 쌓이는
것을 확인할 수 있을 것이다.
```shell
kubectl logs <POD-NAME>
```
## App 업데이트
새로운 메시지를 출력하도록 `server.js` 파일을 수정한다.
```javascript
response.end('Hello World Again!');
```
새로운 버전의 이미지를 빌드한다. (마지막의 점에 주의하라)
```shell
docker build -t hello-node:v2 .
```
디플로이먼트의 이미지를 업데이트한다.
```shell
kubectl set image deployment/hello-node hello-node=hello-node:v2
```
앱을 다시 실행하여 새로운 메시지를 확인한다.
```shell
minikube service hello-node
```
## 애드온 활성화하기
Minikube에는 활성화하거나 비활성화할 수 있고 로컬 쿠버네티스 환경에서 접속해 볼 수 있는 내장 애드온이 있다.
우선 현재 지원되는 애드온 목록을 확인한다.
```shell
minikube addons list
```
출력:
```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
```
이하의 커맨드를 적용하기 위해서는 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
kubectl delete service hello-node
kubectl delete deployment hello-node
```
필요 시, 생성된 Docker 이미지를 강제로 제거한다.
```shell
docker rmi hello-node:v1 hello-node:v2 -f
```
필요 시, Minikube VM을 정지한다.
```shell
minikube stop
eval $(minikube docker-env -u)
```
필요 시, Minikube VM을 삭제한다.
```shell
minikube delete
```
{{% /capture %}}
{{% capture whatsnext %}}
* [Deployment objects](/docs/concepts/workloads/controllers/deployment/)에 대해서 더 배워 본다.
* [Deploying applications](/docs/user-guide/deploying-applications/)에 대해서 더 배워 본다.
* [Service objects](/docs/concepts/services-networking/service/)에 대해서 더 배워 본다.
{{% /capture %}}
@@ -0,0 +1,114 @@
---
title: 쿠버네티스 기초 학습
linkTitle: 쿠버네티스 기초 학습
weight: 5
---
<!DOCTYPE html>
<html lang="ko">
<body>
<div class="layout" id="top">
<main class="content">
<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>
<ul>
<li>컨테이너화된 애플리케이션을 클러스터에 배포하기</li>
<li>디플로이먼트를 스케일링하기</li>
<li>컨테이너화된 애플리케이션을 새로운 소프트웨어 버전으로 업데이트하기</li>
<li>컨테이너화된 애플리케이션을 디버그하기</li>
</ul>
<p>이 튜토리얼에서는 Katacoda를 사용해서 독자의 웹브라우저에서 Minikube가 동작하는 가상 터미널을 구동시킨다. Minikube는 로컬에 설치할 수 있는 작은 규모의 쿠버네티스로써 어디에서든 작동된다. 어떤 소프트웨어도 설치할 필요가 없고, 아무 것도 설정할 필요가 없다. 왜냐하면 대화형 튜토리얼이 웹브라우저 자체에서 바로 동작하기 때문이다.</p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-9">
<h2>쿠버네티스가 어떤 도움이 될까?</h2>
<p>오늘날의 웹서비스에 대해서, 사용자는 애플리케이션이 24/7 가용하기를 바라고, 개발자는 하루에도 몇 번이고 새로운 버전의 애플리케이션을 배포하기를 바란다. 컨테이너화를 통해 소프트웨어를 패키지하면 애플리케이션을 다운타임 없이 쉽고 빠르게 릴리스 및 업데이트할 수 있게 되어서 이런 목표를 달성하는데 도움이 된다. 쿠버네티스는 이렇게 컨테이너화된 애플리케이션을 원하는 곳 어디에든 또 언제든 구동시킬 수 있다는 확신을 갖는데 도움을 주며, 그 애플리케이션이 작동하는데 필요한 자원과 도구를 찾는 것을 도와준다. <a href="/docs/concepts/overview/what-is-kubernetes/">쿠버네티스</a>는 구글의 컨테이너 오케스트레이션 부문의 축적된 경험으로 설계되고 커뮤니티로부터 도출된 최고의 아이디어가 결합된 운영 수준의 오픈 소스 플랫폼이다.</p>
</div>
</div>
<div id="basics-modules" class="content__modules">
<h2>쿠버네티스 기초 모듈</h2>
<div class="row">
<div class="col-md-12">
<div class="row">
<div class="col-md-4">
<div class="thumbnail">
<a href="/docs/tutorials/kubernetes-basics/cluster-intro/"><img src="./public/images/module_01.svg?v=1469803628347" alt=""></a>
<div class="caption">
<a href="cluster-intro/"><h5>1. 쿠버네티스 클러스터 생성하기</h5></a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="thumbnail">
<a href="/docs/tutorials/kubernetes-basics/deploy-intro/"><img src="./public/images/module_02.svg?v=1469803628347" alt=""></a>
<div class="caption">
<a href="deploy-intro/"><h5>2. 애플리케이션 배포하기</h5></a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="thumbnail">
<a href="/docs/tutorials/kubernetes-basics/explore-intro/"><img src="./public/images/module_03.svg?v=1469803628347" alt=""></a>
<div class="caption">
<a href="explore-intro/"><h5>3. 앱 조사하기</h5></a>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-12">
<div class="row">
<div class="col-md-4">
<div class="thumbnail">
<a href="/docs/tutorials/kubernetes-basics/expose-intro/"><img src="./public/images/module_04.svg?v=1469803628347" alt=""></a>
<div class="caption">
<a href="expose-intro/"><h5>4. 앱 외부로 노출하기</h5></a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="thumbnail">
<a href="/docs/tutorials/kubernetes-basics/scale-intro/"><img src="./public/images/module_05.svg?v=1469803628347" alt=""></a>
<div class="caption">
<a href="scale-intro/"><h5>5. 애플리케이션 스케일링하기</h5></a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="thumbnail">
<a href="/docs/tutorials/kubernetes-basics/update-intro/"><img src="./public/images/module_06.svg?v=1469803628347" alt=""></a>
<div class="caption">
<a href="update-intro/"><h5>6. 앱 업데이트하기</h5></a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/cluster-intro/" role="button">튜토리얼 시작하기<span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
---
title: 클러스터 생성하기
weight: 10
---
@@ -0,0 +1,41 @@
---
title: 대화형 튜토리얼 - 클러스터 생성하기
weight: 20
---
<!DOCTYPE html>
<html lang="ko">
<body>
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
<link href="/docs/tutorials/kubernetes-basics/public/css/overrides.css" rel="stylesheet">
<script src="https://katacoda.com/embed.js"></script>
<div class="layout" id="top">
<main class="content katacoda-content">
<div class="katacoda">
<div class="katacoda__alert">
터미널로 상호 작용하기 위해서, 데스크탑/태블릿 버전을 사용해주세요
</div>
<div class="katacoda__box" id="inline-terminal-1" data-katacoda-id="kubernetes-bootcamp/1"
data-katacoda-color="326de6" data-katacoda-secondary="273d6d" data-katacoda-hideintro="false"
data-katacoda-font="Roboto" data-katacoda-fontheader="Roboto Slab"
data-katacoda-prompt="Kubernetes Bootcamp Terminal" style="height: 600px;"></div>
</div>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/deploy-intro/" role="button">
모듈 2로 진행하기<span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
</body>
</html>
@@ -0,0 +1,132 @@
---
title: Minikube를 사용해서 클러스터 생성하기
weight: 10
---
<!DOCTYPE html>
<html lang="ko">
<body>
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
<div class="layout" id="top">
<main class="content">
<div class="row">
<div class="col-md-8">
<h3>목표</h3>
<ul>
<li>쿠버네티스 클러스터가 무엇인지 배운다.</li>
<li>Minikube가 무엇인지 배운다.</li>
<li>온라인 터미널을 사용해서 쿠버네티스 클러스터를 시작한다.</li>
</ul>
</div>
<div class="col-md-8">
<h3>쿠버네티스 클러스터</h3>
<p>
<b>쿠버네티스는 서로 연결되어서 단일 유닛처럼 동작하는 고가용성의 컴퓨터 클러스터를 상호조정한다.</b>
쿠버네티스의 추상화된 개념을 통해 개별 머신에 얽매이지 않고 컨테이너화된 애플리케이션을 클러스터에
배포할 수 있다. 이렇게 새로운 배포 모델을 활용하려면, 애플리케이션을 개별 호스트에 결합되지 않는
방식으로 패키지할 필요가 있다. 즉, 컨테이너화 해야 한다. 컨테이너화된 애플리케이션은 호스트에
매우 깊이 통합된 패키지로써 특정 머신에 직접 설치되는 예전의 배포 모델보다 유연하고 가용성이 높다.
<b>쿠버네티스는 애플리케이션 컨테이너를 클러스터에 분산시키고 스케줄링하는 일을 보다 효율적으로
자동화한다.</b> 쿠버네티스는 <a href="https://github.com/kubernetes/kubernetes">오픈소스</a>
플랫폼이고 운영 수준의 안정성을 가졌다.
</p>
<p>쿠버네티스 클러스터는 두 가지 형태의 자원으로 구성된다.
<ul>
<li><b>마스터</b>는 클러스터를 상호조정한다</li>
<li><b>노드</b>는 애플리케이션을 구동하는 작업자다</li>
</ul>
</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_lined">
<h3>요약:</h3>
<ul>
<li>쿠버네티스 클러스터</li>
<li>Minikube</li>
</ul>
</div>
<div class="content__box content__box_fill">
<p><i>
쿠버네티스는 컴퓨터 클러스터에 걸쳐서 애플리케이션 컨테이너의 위치(스케줄링)와 실행을
오케스트레이션하는 운영 수준의 오픈소스 플랫폼이다.
</i></p>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<h2 style="color: #3771e3;">클러스터 다이어그램</h2>
</div>
</div>
<div class="row">
<div class="col-md-8">
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_01_cluster.svg"></p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<p><b>마스터는 클러스터 관리를 담당한다.</b> 마스터는 애플리케이션을 스케줄링하거나, 애플리케이션의
항상성을 유지하거나, 애플리케이션을 스케일링하고, 새로운 변경사항을 순서대로 반영하는 일과 같은
클러스터 내 모든 활동을 조율한다.</p>
<p><b>노드는 쿠버네티스 클러스터 내 워커 머신으로써 동작하는 VM 또는 물리적인 컴퓨터다.</b>
각 노드는 노드를 관리하고 쿠버네티스 마스터와 통신하는 Kubelet이라는 에이전트를 갖는다. 노드는
컨테이너 운영을 담당하는 <a href="https://www.docker.com">Docker</a> 또는
<a href="https://coreos.com/rkt">rkt</a>과 같은 툴도 갖는다. 운영 트래픽을 처리하는 쿠버네티스
클러스터는 최소 세 대의 노드를 가져야한다.</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_fill">
<p><i> 마스터는 클러스터를 관리하고 노드는 구동되는 애플리케이션을 수용하는데 사용된다. </i></p>
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<p>애플리케이션을 쿠버네티스에 배포한다는 것은, 마스터에 애플리케이션 컨테이너를 구동하라고 지시하는
것이다. 마스터는 컨테이너를 클러스터의 어느 노드에 구동시킬지를 스케줄한다. <b>노드는 마스터가
제공하는 쿠버네티스 API를 통해서 마스터와 통신한다.</b> 최종 사용자도 쿠버네티스 API를 직접
사용해서 클러스터와 상호작용할 수 있다.</p>
<p>쿠버네티스 클러스터는 물리 및 가상 머신 모두에 설치될 수 있다. 쿠버네티스 개발을 시작하려면
<a href="https://github.com/kubernetes/minikube">Minikube</a>를 사용할 수 있다. Minikube는 로컬
머신에 VM을 만들고 하나의 노드로 구성된 간단한 클러스터를 배포하는 가벼운 쿠버네티스 구현체다.
Minikube는 리눅스, 맥, 그리고 윈도우 시스템에서 구동이 가능하다. Minikube CLI는 클러스터에 대해
시작, 중지, 상태 조회 및 삭제 등의 기본적인 부트스트래핑 기능을 제공한다. 하지만, 본 튜토리얼에서는
Minikube가 미리 설치된 채로 제공되는 온라인 터미널을 사용할 것이다.</p>
<p>이제 쿠버네티스가 무엇인지 알아봤으니, 온라인 튜토리얼로 이동해서 우리의 첫 번째 클러스터를
시작해보자!</p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/cluster-interactive/"
role="button">대화형 튜토리얼 시작하기 <span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
---
title: 앱 배포하기
weight: 20
---
@@ -0,0 +1,45 @@
---
title: 대화형 튜토리얼 - 앱 배포하기
weight: 20
---
<!DOCTYPE html>
<html lang="ko">
<body>
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
<link href="/docs/tutorials/kubernetes-basics/public/css/overrides.css" rel="stylesheet">
<script src="https://katacoda.com/embed.js"></script>
<div class="layout" id="top">
<main class="content katacoda-content">
<br>
<div class="katacoda">
<div class="katacoda__alert">
터미널로 상호 작용하기 위해서, 데스크탑/태블릿 버전을 사용해주세요
</div>
<div class="katacoda__box" id="inline-terminal-1" data-katacoda-id="kubernetes-bootcamp/7"
data-katacoda-color="326de6" data-katacoda-secondary="273d6d" data-katacoda-hideintro="false"
data-katacoda-font="Roboto" data-katacoda-fontheader="Roboto Slab"
data-katacoda-prompt="Kubernetes Bootcamp Terminal" style="height: 600px;">
</div>
</div>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/explore-intro/" role="button">
모듈 3으로 진행하기<span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
</body>
</html>
@@ -0,0 +1,129 @@
---
title: kubectl을 사용해서 디플로이먼트 생성하기
weight: 10
---
<!DOCTYPE html>
<html lang="ko">
<body>
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
<div class="layout" id="top">
<main class="content">
<div class="row">
<div class="col-md-8">
<h3>목표</h3>
<ul>
<li>애플리케이션 디플로이먼트(Deployment)에 대해 배운다.</li>
<li>kubectl로 첫 애플리케이션을 쿠버네티스에 배포한다.</li>
</ul>
</div>
<div class="col-md-8">
<h3>쿠버네티스 디플로이먼트</h3>
<p>
일단 쿠버네티스 클러스터를 구동시키면, 그 위에 컨테이너화된 애플리케이션을 배포할 수 있다.
그러기 위해서, 쿠버네티스 <b>디플로이먼트</b> 설정을 만들어야 한다. 디플로이먼트는 쿠버네티스가
애플리케이션의 인스턴스를 어떻게 생성하고 업데이트해야 하는지를 지시한다. 디플로이먼트가 만들어지면,
쿠버네티스 마스터가 해당 애플리케이션 인스턴스를 클러스터의 개별 노드에 스케줄한다.
</p>
<p>애플리케이션 인스턴스가 생성되면, 쿠버네티스 디플로이먼트 컨트롤러는 지속적으로 이들 인스턴스를
모니터링한다. 인스턴스를 구동 중인 노드가 다운되거나 삭제되면, 디플로이먼트 컨트롤러가 인스턴스를
교체시켜준다. <b>이렇게 머신의 장애나 정비에 대응할 수 있는 자동 복구(self-healing) 메커니즘을
제공한다.</b></p>
<p>오케스트레이션 기능이 없던 환경에서는, 설치 스크립트가 애플리케이션을 시작하는데 종종 사용되곤
했지만, 머신의 장애가 발생한 경우 복구를 해주지는 않았다. 쿠버네티스 디플로이먼트는 애플리케이션
인스턴스를 생성해주고 여러 노드에 걸쳐서 지속적으로 인스턴스가 구동되도록 하는 두 가지를 모두
하기 때문에 애플리케이션 관리를 위한 접근법에서 근본적인 차이를 가져다준다.</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_lined">
<h3>요약:</h3>
<ul>
<li>디플로이먼트</li>
<li>Kubectl</li>
</ul>
</div>
<div class="content__box content__box_fill">
<p><i>
디플로이먼트는 애플리케이션 인스턴스를 생성하고 업데이트하는 역할을 담당한다.
</i></p>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<h2 style="color: #3771e3;">쿠버네티스에 첫 번째 애플리케이션 배포하기</h2>
</div>
</div>
<div class="row">
<div class="col-md-8">
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_02_first_app.svg"></p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<p><b>Kubectl</b>이라는 쿠버네티스 CLI를 통해 디플로이먼트를 생성하고 관리할 수 있다.
Kubectl은 클러스터와 상호 작용하기 위해 쿠버네티스 API를 사용한다. 이 모듈에서는, 쿠버네티스
클러스터 상에 애플리케이션을 구동시키는 디플로이먼트를 생성하기 위해 필요한 가장 일반적인 Kubectl
명령어를 배우게 된다.</p>
<p>디플로이먼트를 생성할 때, 애플리케이션에 대한 컨테이너 이미지와 구동시키고자 하는 복제 수를 지정해야
한다. 디플로이먼트를 업데이트해서 이런 정보를 나중에 변경할 수 있다. 모듈
<a href="/docs/tutorials/kubernetes-basics/scale-intro/">5</a><a
href="/docs/tutorials/kubernetes-basics/update-intro/">6</a>의 부트캠프에서 어떻게
스케일하고 업데이트하는지에 대해 다룬다.</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_fill">
<p><i> 애플리케이션이 쿠버네티스 상에 배포되려면 지원되는 컨테이너 형식 중 하나로 패키지 되어야한다.
</i></p>
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<p>우리의 첫 번째 디플로이먼트로, Docker 컨테이너로 패키지된 <a href="https://nodejs.org">Node.js</a>
애플리케이션을 사용해보자. 소스 코드와 Dockerfile은 <a
href="https://github.com/kubernetes/website/tree/master/content/en/docs/tutorials">GitHub
저장소</a>에서 찾을 수 있다.</p>
<p>이제 디플로이먼트를 이해했으니, 온라인 튜토리얼을 통해 우리의 첫 번째 애플리케이션을 배포해보자!</p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/deploy-interactive/"
role="button">대화형 튜토리얼 시작하기 <span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
---
title: 앱 조사하기
weight: 30
---
@@ -0,0 +1,45 @@
---
title: 대화형 튜토리얼 - 앱 조사하기
weight: 20
---
<!DOCTYPE html>
<html lang="ko">
<body>
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
<link href="/docs/tutorials/kubernetes-basics/public/css/overrides.css" rel="stylesheet">
<script src="https://katacoda.com/embed.js"></script>
<div class="layout" id="top">
<main class="content katacoda-content">
<br>
<div class="katacoda">
<div class="katacoda__alert">
터미널과 상호작용하기 위해, 데스크탑/태블릿 버전을 이용한다.
</div>
<div class="katacoda__box" id="inline-terminal-1" data-katacoda-id="kubernetes-bootcamp/4"
data-katacoda-color="326de6" data-katacoda-secondary="273d6d" data-katacoda-hideintro="false"
data-katacoda-font="Roboto" data-katacoda-fontheader="Roboto Slab"
data-katacoda-prompt="Kubernetes Bootcamp Terminal" style="height: 600px;">
</div>
</div>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/expose-intro/" role="button">모듈 4로
진행하기<span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
</body>
</html>
@@ -0,0 +1,143 @@
---
title: 파드와 노드 보기
weight: 10
---
<!DOCTYPE html>
<html lang="ko">
<body>
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
<div class="layout" id="top">
<main class="content">
<div class="row">
<div class="col-md-8">
<h3>목표</h3>
<ul>
<li>쿠버네티스 파드에 대해 배운다.</li>
<li>쿠버네티스 노드에 대해 배운다.</li>
<li>배포된 애플리케이션의 문제를 해결한다.</li>
</ul>
</div>
<div class="col-md-8">
<h2>쿠버네티스 파드</h2>
<p>모듈 <a href="/docs/tutorials/kubernetes-basics/deploy-intro/">2</a>에서 배포를 생성했을 때, 쿠버네티스는 여러분의 애플리케이션 인스턴스에 <b>파드</b>를 생성했다. 파드는 하나 또는 그 이상의 애플리케이션 컨테이너 (도커 또는 rkt와 같은)들의 그룹을 나타내는 쿠버네티스의 추상적 개념으로 일부는 컨테이너에 대한 자원을 공유한다. 그 자원은 다음을 포함한다:</p>
<ul>
<li>볼륨과 같은, 공유 스토리지</li>
<li>클러스터 IP 주소와 같은, 네트워킹</li>
<li>컨테이너 이미지 버전 또는 사용할 특정 포트와 같이, 각 컨테이너가 동작하는 방식에 대한 정보</li>
</ul>
<p>파드는 특유한 "로컬호스트" 애플리케이션 모형을 만들어. 상대적으로 밀접하게 결합되어진 상이한 애플리케이션 컨테이너들을 수용할 수 있다. 가령, 파드는 Node.js 앱과 더불어 Node.js 웹서버에 의해 발행되는 데이터를 공급하는 상이한 컨테이너를 함께 수용할 수 있다. 파드 내 컨테이너는 IP 주소, 그리고 포트 스페이스를 공유하고 항상 함께 위치하고 함께 스케쥴링 되고 동일 노드 상의 컨텍스트를 공유하면서 동작한다.</p>
<p>파드는 쿠버네티스 플랫폼 상에서 최소 단위가 된다. 우리가 쿠버네티스에서 배포를 생성할 때, 그 배포는 컨테이너 내부에서 컨테이너와 함께 파드를 생성한다. 각 파드는 스케쥴 되어진 노드에게 묶여지게 된다. 그리고 (재구동 정책에 따라) 소멸되거나 삭제되기 전까지 그 노드에 유지된다. 노드에 실패가 발생할 경우, 클러스터 내에 가용한 다른 노드들을 대상으로 스케쥴되어진다.</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_lined">
<h3>요약:</h3>
<ul>
<li>파드</li>
<li>노드</li>
<li>Kubectl 주요 명령어</li>
</ul>
</div>
<div class="content__box content__box_fill">
<p><i>
파드는 하나 또는 그 이상의 애플리케이션 컨테이너 (도커 또는 rkt와 같은)들의 그룹이고 공유 스토리지 (볼륨), IP 주소 그리고 그것을 동작시키는 방식에 대한 정보를 포함하고 있다.
</i></p>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<h2 style="color: #3771e3;">파드 개요</h2>
</div>
</div>
<div class="row">
<div class="col-md-8">
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_03_pods.svg"></p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<h2>노드</h2>
<p>파드는 언제나 <b>노드</b> 상에서 동작한다. 노드는 쿠버네티스에서 워커 머신을 말하며 클러스터에 따라 가상 또는 물리 머신일 수 있다. 각 노드는 마스터에 의해 관리된다. 하나의 노드는 여러 개의 파드를 가질 수 있고, 쿠버네티스 마스터는 클러스터 내 노드를 통해서 파드에 대한 스케쥴링을 자동으로 처리한다.</p>
<p>모든 쿠버네티스 노드는 최소한 다음과 같이 동작한다.</p>
<ul>
<li>Kubelet은, 쿠버네티스 마스터와 노드 간 통신을 책임지는 프로세스이며, 하나의 머신 상에서 동작하는 파드와 컨테이너를 관리한다.</li>
<li>(도커, rkt)와 같은 컨테이너 런타임은 레지스트리에서 컨테이너 이미지를 가져와 묶여 있는 것을 풀고 애플리케이션을 동작시키는 책임을 맡는다. </li>
</ul>
</div>
<div class="col-md-4">
<div class="content__box content__box_fill">
<p><i> 만약 컨테이너들이 밀접하고 결합되어 있고 디스크와 같은 자원을 공유해야 한다면 오직 하나의 단일 파드에 함께 스케쥴되어져야 한다. </i></p>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<h2 style="color: #3771e3;">노드 개요</h2>
</div>
</div>
<div class="row">
<div class="col-md-8">
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_03_nodes.svg"></p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<h2>kubectl로 문제해결하기</h2>
<p>모듈 <a href="/docs/tutorials/kubernetes-basics/deploy-intro/">2</a>에서, 여러분은 Kubectl 커맨드-라인 인터페이스를 사용하였다. 여러분은 배포된 애플리케이션과 그 환경에 대한 정보를 얻기 위해 모듈 3에서도 계속 그것을 사용하게 될 것이다. 가장 보편적인 운용업무는 다음 kubectl 명령어를 이용해 처리될 수 있다:</p>
<ul>
<li><b>kubectl get</b> - 자원을 나열한다</li>
<li><b>kubectl describe</b> - 자원에 대해 상세한 정보를 보여준다.</li>
<li><b>kubectl logs</b> - 파드 내 컨테이너의 로그들을 출력한다</li>
<li><b>kubectl exec</b> - 파드 내 컨테이너에 대한 명령을 실행한다.</li>
</ul>
<p>언제 애플리케이션이 배포되었으며, 현재 상태가 어떠한지, 그것의 구성은 어떠한지 등을 보기 위해 이러한 명령을 이용할 수 있다.</p>
<p>이제 클러스터 컴포넌트와 커맨드 라인에 대해 알아 보았으니, 애플리케이션을 조사해 보자.</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_fill">
<p><i> 노드는 쿠버네티스에 있어서 워커 머신이며 클러스터에 따라 VM 또는 물리 머신이 될 수 있다. 여러개의 파드는 하나의 노드 위에서 동작할 수 있다.</i></p>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/explore-interactive/" role="button">대화형 튜토리얼 시작하기 <span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
---
title: 앱 외부로 노출하기
weight: 40
---
@@ -0,0 +1,38 @@
---
title: 대화형 튜토리얼 - 앱 노출하기
weight: 20
---
<!DOCTYPE html>
<html lang="ko">
<body>
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
<link href="/docs/tutorials/kubernetes-basics/public/css/overrides.css" rel="stylesheet">
<script src="https://katacoda.com/embed.js"></script>
<div class="layout" id="top">
<main class="content katacoda-content">
<div class="katacoda">
<div class="katacoda__alert">
터미널과 상호작용하기 위해, 데스크탑/태블릿 버전을 이용한다.
</div>
<div class="katacoda__box" id="inline-terminal-1" data-katacoda-id="kubernetes-bootcamp/8" data-katacoda-color="326de6" data-katacoda-secondary="273d6d" data-katacoda-hideintro="false" data-katacoda-font="Roboto" data-katacoda-fontheader="Roboto Slab" data-katacoda-prompt="Kubernetes Bootcamp Terminal" style="height: 600px;">
</div>
</div>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/scale-intro/" role="button">모듈 5로 진행하기<span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
</body>
</html>
@@ -0,0 +1,114 @@
---
title: 앱 노출을 위해 서비스 이용하기
weight: 10
---
<!DOCTYPE html>
<html lang="ko">
<body>
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
<div class="layout" id="top">
<main class="content">
<div class="row">
<div class="col-md-8">
<h3>목표</h3>
<ul>
<li>쿠버네티스의 서비스에 대해 배운다.</li>
<li>레이블과 레이블셀랙터 오브젝트가 어떻게 서비스와 연관되는지 이해한다.</li>
<li>서비스를 이용하여 쿠버네티스 클러스터 외부로 애플리케이션을 노출한다.</li>
</ul>
</div>
<div class="col-md-8">
<h3>쿠버네티스 서비스들에 대한 개요</h3>
<p>쿠버네티스 <a href="/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>쿠버네티스에서 서비스는 하나의 논리적인 파드 셋과 그 파드들에 접근할 수 있는 정책을 정의하는 추상적 개념이다. 서비스는 종속적인 파드들 사이를 느슨하게 결합되도록 해준다. 서비스는 모든 쿠버네티스 오브젝트들과 같이 YAML <a href="/docs/concepts/configuration/overview/#general-config-tips">(보다 선호하는)</a> 또는 JSON을 이용하여 정의된다. 서비스가 대상으로 하는 파드 셋은 보통 <i>LabelSelector</i>에 의해 결정된다 (여러분이 왜 스펙에 <code>selector</code>가 포함되지 않은 서비스를 필요로 하게 될 수도 있는지에 대해 아래에서 확인해 보자).</p>
<p>비록 각 파드들이 고유의 IP를 갖고 있기는 하지만, 그 IP들은 서비스의 도움없이 클러스터 외부로 노출되어질 수 없다. 서비스들은 여러분의 애플리케이션들에게 트래픽이 실릴 수 있도록 허용해준다. 서비스들은 ServiceSpec에서 <code>type</code>을 지정함으로써 다양한 방식들로 노출시킬 수 있다:</p>
<ul>
<li><i>ClusterIP</i> (기본값) - 클러스터 내에서 내부 IP 에 대해 서비스를 노출해준다. 이 방식은 오직 클러스터 내에서만 서비스가 접근될 수 있도록 해준다.</li>
<li><i>NodePort</i> - NAT가 이용되는 클러스터 내에서 각각 선택된 노드들의 동일한 포트에 서비스를 노출시켜준다. <code>&lt;NodeIP&gt;:&lt;NodePort&gt;</code>를 이용하여 클러스터 외부로부터 서비스가 접근할 수 있도록 해준다. CluserIP의 상위 집합이다.</li>
<li><i>LoadBalancer</i> - (지원 가능한 경우) 기존 클라우드에서 외부용 로드밸런서를 생성하고 서비스에 고정된 공인 IP를 할당해준다. NodePort의 상위 집합이다. </li>
<li><i>ExternalName</i> - 이름으로 CNAME 레코드를 반환함으로써 임의의 이름(스펙에서 <code>externalName</code>으로 명시)을 이용하여 서비스를 노출시켜준다. 프록시는 사용되지 않는다. 이 방식은 <code>kube-dns</code> 버전 1.7 이상에서 지원 가능하다.</li>
</ul>
<p>다른 서비스 타입들에 대한 추가 정보는 <a href="/docs/tutorials/services/source-ip/">소스 IP 이용하기</a> 튜토리얼에서 확인 가능하다. 또한 <a href="/docs/concepts/services-networking/connect-applications-service">서비스들로 애플리케이션에 접속하기</a>도 참고해 보자.</p>
<p>부가적으로, spec에 <code>selector</code>를 정의하지 않고 말아넣은 서비스들의 몇 가지 유즈케이스들이 있음을 주의하자. <code>selector</code> 없이 생성된 서비스는 상응하는 엔드포인트 오브젝트들 또한 생성하지 않는다. 이로써 사용자들로 하여금 하나의 서비스를 특정한 엔드포인트에 매핑 시킬수 있도록 해준다. selector를 생략하게 되는 또 다른 가능성은 여러분이 <code>type: ExternalName</code>을 이용하겠다고 확고하게 의도하는 경우이다.</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_lined">
<h3>요약</h3>
<ul>
<li>파드들을 외부 트래픽에 노출하기</li>
<li>여러 파드에 걸쳐서 트래픽 로드밸런싱 하기</li>
<li>레이블 사용하기</li>
</ul>
</div>
<div class="content__box content__box_fill">
<p><i>쿠버네티스 서비스는 논리적 파드 셋을 정의하고 외부 트래픽 노출, 로드밸런싱 그리고 그 파드들에 대한 서비스 디스커버리를 가능하게 해주는 추상 계층이다.</i></p>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<h3>서비스와 레이블</h3>
</div>
</div>
<div class="row">
<div class="col-md-8">
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_04_services.svg" width="150%" height="150%"></p>
</div>
</div>
<div class="row">
<div class="col-md-8">
<p>서비스는 파드 셋에 걸쳐서 트래픽을 라우트한다. 여러분의 애플리케이션에 영향을 주지 않으면서 쿠버네티스에서 파드들이 죽게도 하고, 복제가 되게도 해주는 추상적 개념이다. 종속적인 파드들 사이에서의 디스커버리와 라우팅은 (하나의 애플리케이션에서 프로트엔드와 백엔드 컴포넌트와 같은) 쿠버네티스 서비스들에 의해 처리된다.</p>
<p>서비스는 쿠버네티스의 객체들에 대해 논리 연산을 허용해주는 기본 그룹핑 단위인, <a href="/docs/concepts/overview/working-with-objects/labels">레이블과 셀렉터</a>를 이용하여 파드 셋과 매치시킨다. 레이블은 오브젝트들에 붙여진 키/밸류 쌍으로 다양한 방식으로 이용 가능하다:</p>
<ul>
<li>개발, 테스트, 그리고 상용환경에 대한 객체들의 지정</li>
<li>임베디드된 버전 태그들</li>
<li>태그들을 이용하는 객체들에 대한 분류</li>
</ul>
</div>
<div class="col-md-4">
<div class="content__box content__box_fill">
<p><i>여러분은 kubectl 명령에<br><code>--expose</code> 옵션을 사용함으로써 디플로이먼트 생성과 동일 시점에 서비스를 생성할 수 있다.</i></p>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<p><img src="/docs/tutorials/kubernetes-basics/public/images/module_04_labels.svg"></p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<p>레이블은 오브젝트의 생성 시점 또는 이후 시점에 붙여질 수 있다. 언제든지 수정이 가능하다. 이제 서비스를 이용하여 우리의 애플리케이션을 노출도 시켜보고 레이블도 적용해 보자.</p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/expose-interactive/" role="button">대화형 튜토리얼 시작<span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
---
title: 앱 스케일링하기
weight: 50
---
@@ -0,0 +1,44 @@
---
title: 대화형 튜토리얼 - 앱 스케일링하기
weight: 20
---
<!DOCTYPE html>
<html lang="ko">
<body>
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
<link href="/docs/tutorials/kubernetes-basics/public/css/overrides.css" rel="stylesheet">
<script src="https://katacoda.com/embed.js"></script>
<div class="layout" id="top">
<main class="content katacoda-content">
<div class="katacoda">
<div class="katacoda__alert">
터미널로 상호 작용하기 위해서, 데스크탑/태블릿 버전을 사용해주세요
</div>
<div class="katacoda__box" id="inline-terminal-1" data-katacoda-id="kubernetes-bootcamp/5"
data-katacoda-color="326de6" data-katacoda-secondary="273d6d" data-katacoda-hideintro="false"
data-katacoda-font="Roboto" data-katacoda-fontheader="Roboto Slab"
data-katacoda-prompt="Kubernetes Bootcamp Terminal" style="height: 600px;">
</div>
</div>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/update-intro/" role="button">
모듈 6으로 진행하기<span class="btn__next"></span></a>
</div>
</div>
</main>
<a class="scrolltop" href="#top"></a>
</div>
</body>
</html>
@@ -0,0 +1,136 @@
---
title: 복수의 앱 인스턴스를 구동하기
weight: 10
---
<!DOCTYPE html>
<html lang="ko">
<body>
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
<div class="layout" id="top">
<main class="content">
<div class="row">
<div class="col-md-8">
<h3>목표</h3>
<ul>
<li>kubectl을 사용해서 애플리케이션을 스케일한다.</li>
</ul>
</div>
<div class="col-md-8">
<h3>애플리케이션을 스케일하기</h3>
<p>지난 모듈에서 <a
href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/"> 디플로이먼트</a>,
를 만들고 <a href="https://kubernetes.io/docs/concepts/services-networking/service/">서비스</a>
통해서 디플로이먼트를 외부에 노출시켜 봤다. 해당 디플로이먼트는 애플리케이션을 구동하기 위해 단
하나의 파드(Pod)만을 생성했었다. 트래픽이 증가하면, 사용자 요청에 맞추어 애플리케이션의 규모를
조정할 필요가 있다.</p>
<p>디플로이먼트의 복제 수를 변경하면 <b>스케일링</b>이 수행된다</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_lined">
<h3>요약:</h3>
<ul>
<li>디플로이먼트 스케일링하기</li>
</ul>
</div>
<div class="content__box content__box_fill">
<p><i> kubectl run 명령에 --replicas 파라미터를 사용해서 처음부터 복수의 인스턴스로 구동되는
디플로이먼트를 만들 수도 있다 </i></p>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<h2 style="color: #3771e3;">스케일링 개요</h2>
</div>
</div>
<div class="row">
<div class="col-md-1"></div>
<div class="col-md-8">
<div id="myCarousel" class="carousel" data-ride="carousel" data-interval="3000">
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
</ol>
<div class="carousel-inner" role="listbox">
<div class="item active">
<img src="/docs/tutorials/kubernetes-basics/public/images/module_05_scaling1.svg">
</div>
<div class="item">
<img src="/docs/tutorials/kubernetes-basics/public/images/module_05_scaling2.svg">
</div>
</div>
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
<span class="sr-only ">이전</span>
</a>
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
<span class="sr-only">다음</span>
</a>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<p>디플로이먼트를 스케일 아웃하면 신규 파드가 생성되어서 가용한 자원이 있는 노드에 스케줄된다.
스케일링 기능은 새로 의도한 상태(desired state)까지 파드의 수를 늘린다. 쿠버네티스는
파드의 <a href="http://kubernetes.io/docs/user-guide/horizontal-pod-autoscaling/">오토스케일링</a>
도 지원하지만 본 튜토리얼에서는 다루지 않는다. 0까지 스케일링하는 것도 가능하다. 이 경우 해당
디플로이먼트의 모든 파드가 종료된다.</p>
<p>애플리케이션의 인스턴스를 복수로 구동하게 되면 트래픽을 해당 인스턴스 모두에 분산시킬 방법이
필요해진다. 서비스는 노출된 디플로이먼트의 모든 파드에 네트워크 트래픽을 분산시켜줄 통합된
로드밸런서를 갖는다. 서비스는 엔드포인트를 이용해서 구동중인 파드를 지속적으로 모니터링함으로써
가용한 파드에만 트래픽이 전달되도록 해준다.</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_fill">
<p><i>디플로이먼트의 복제 수를 변경하면 스케일링이 수행된다.</i></p>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<p> 일단 복수의 애플리케이션의 인스턴스가 구동 중이면, 다운타임 없이 롤링 업데이트를 할 수 있다.
다음 모듈에서 이 내용을 다루도록 하겠다. 이제 온라인 터미널로 가서 애플리케이션을 스케일해보자.</p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/scale-interactive/"
role="button">대화형 튜토리얼 시작하기 <span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
</body>
</html>
@@ -0,0 +1,4 @@
---
title: 앱 업데이트하기
weight: 60
---
@@ -0,0 +1,37 @@
---
title: 대화형 튜토리얼 - 앱 업데이트 하기
weight: 20
---
<!DOCTYPE html>
<html lang="ko">
<body>
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
<link href="/docs/tutorials/kubernetes-basics/public/css/overrides.css" rel="stylesheet">
<script src="https://katacoda.com/embed.js"></script>
<div class="layout" id="top">
<main class="content katacoda-content">
<div class="katacoda">
<div class="katacoda__alert">
터미널과 상호작용하기 위해, 데스크탑/태블릿 버전을 이용한다.
</div>
<div class="katacoda__box" id="inline-terminal-1" data-katacoda-id="kubernetes-bootcamp/6" data-katacoda-color="326de6" data-katacoda-secondary="273d6d" data-katacoda-hideintro="false" data-katacoda-font="Roboto" data-katacoda-fontheader="Roboto Slab" data-katacoda-prompt="Kubernetes Bootcamp Terminal" style="height: 600px;">
</div>
</div>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/" role="button">쿠버네티스 기초로 돌아가기<span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
</body>
</html>
@@ -0,0 +1,141 @@
---
title: 롤링 업데이트 수행하기
weight: 10
---
<!DOCTYPE html>
<html lang="ko">
<body>
<link href="/docs/tutorials/kubernetes-basics/public/css/styles.css" rel="stylesheet">
<div class="layout" id="top">
<main class="content">
<div class="row">
<div class="col-md-8">
<h3>목표</h3>
<ul>
<li>kubectl을 이용하여 롤링 업데이트 수행하기</li>
</ul>
</div>
<div class="col-md-8">
<h3>애플리케이션 업데이트하기</h3>
<p>사용자들은 애플리케이션이 항상 가용한 상태일 것이라 여기고 개발자들은 하루에 여러번씩 새로운 버전을
배포하도록 요구 받고있다. 쿠버네티스에서는 이것을 롤링 업데이트를 통해 이루고 있다. <b>롤링 업데이트</b>는 파드 인스턴스를 점진적으로 새로운 것으로 업데이트하여 디플로이먼트 업데이트가 서비스 중단 없이 이루어질 수 있도록 해준다.
새로운 파드는 가용한 자원을 보유한 노드로 스케줄될 것이다.</p>
<p>이전 모듈에서 여러 개의 인스턴스를 동작시키도록 애플리케이션을 스케일했다. 이것은 애플리케이션의 가용성에 영향을 미치지 않으면서
업데이트를 수행하는 것에 대한 요구이다. 기본적으로, 업데이트가 이루어지는 동안 이용 불가한 파드의 최대 개수와 생성 가능한 새로운 파드의 최대 개수는 하나다.
두 옵션은 (파드에 대한) 개수 또는 백분율로 구성될 수 있다.
쿠버네티스에서, 업데이트는 버전으로 관리되고 어떠한 디플로이먼트 업데이트라도 이전의 (안정적인) 버전으로 원복이 가능하다.</p>
</div>
<div class="col-md-4">
<div class="content__box content__box_lined">
<h3>요약:</h3>
<ul>
<li>앱 업데이트하기</li>
</ul>
</div>
<div class="content__box content__box_fill">
<p><i>롤링 업데이트는 파드 인스턴스를 점진적으로 새로운 것으로 업데이트하여 디플로이먼트 업데이트가 서비스 중단 없이 이루어질 수 있도록 해준다. </i></p>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<h2 style="color: #3771e3;">롤링 업데이트 개요</h2>
</div>
</div>
<div class="row">
<div class="col-md-1"></div>
<div class="col-md-8">
<div id="myCarousel" class="carousel" data-ride="carousel" data-interval="3000">
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
<li data-target="#myCarousel" data-slide-to="3"></li>
</ol>
<div class="carousel-inner" role="listbox">
<div class="item active">
<img src="/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates1.svg">
</div>
<div class="item">
<img src="/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates2.svg">
</div>
<div class="item">
<img src="/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates3.svg">
</div>
<div class="item">
<img src="/docs/tutorials/kubernetes-basics/public/images/module_06_rollingupdates4.svg">
</div>
</div>
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
<span class="sr-only ">이전</span>
</a>
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
<span class="sr-only">다음</span>
</a>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<p>애플리케이션 스케일링과 유사하게, 디플로이먼트가 외부로 노출되면, 서비스는 업데이트가 이루어지는 동안 오직 가용한 파드에게만 트래픽을 로드밸런스 할 것이다. 가용한 파드란 애플리케이션의 사용자들에게 가용한 상태의 인스턴스를 말한다.</p>
<p>롤링 업데이트는 다음 동작들을 허용해준다:</p>
<ul>
<li>하나의 환경에서 또 다른 환경으로의 애플리케이션 프로모션 (컨테이너 이미지 업데이트를 통해)</li>
<li>이전 버전으로의 롤백</li>
<li>서비스 중단 없는 애플리케이션의 지속적인 통합과 지속적인 전달</li>
</ul>
</div>
<div class="col-md-4">
<div class="content__box content__box_fill">
<p><i>디플로이먼트가 외부로 노출되면, 서비스는 업데이트가 이루어지는 동안 오직 가용한 파드에게만 트래픽을 로드밸런스 할 것이다. </i></p>
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-8">
<p> 다음 대화형 튜토리얼에서, 새로운 버전으로 애플리케이션을 업데이트하고, 롤백 또한 수행해 볼 것이다.</p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/docs/tutorials/kubernetes-basics/update-interactive/"
role="button">대화형 튜토리얼 시작하기 <span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
</body>
</html>