ko: Update outdated files partly in dev-1.14-ko.6 (#15380) (#15443)

This commit is contained in:
June Yi
2019-07-23 23:06:55 +09:00
committed by Kubernetes Prow Robot
parent d58e8f1563
commit cd20abd2eb
38 changed files with 913 additions and 590 deletions
@@ -24,10 +24,10 @@ card:
<p>이 튜토리얼에서는 쿠버네티스 클러스터 오케스트레이션 시스템의 기초를 익힐 수 있는 가이드를 제공한다. 각각의 모듈에는 쿠버네티스의 주요 기능과 개념에 대한 배경 지식이 담겨 있으며 대화형 온라인 튜토리얼도 포함되어 있다. 대화형 튜토리얼에서 간단한 클러스터와 그 클러스터 상의 컨테이너화 된 애플리케이션을 직접 관리해볼 수 있다.</p>
<p>대화형 튜토리얼을 사용해서 다음의 내용을 배울 수 있다.</p>
<ul>
<li>컨테이너화된 애플리케이션을 클러스터에 배포하기</li>
<li>디플로이먼트를 스케일링하기</li>
<li>컨테이너화된 애플리케이션을 새로운 소프트웨어 버전으로 업데이트하기</li>
<li>컨테이너화된 애플리케이션을 디버그하기</li>
<li>컨테이너화된 애플리케이션을 클러스터에 배포하기.</li>
<li>디플로이먼트를 스케일링하기.</li>
<li>컨테이너화된 애플리케이션을 새로운 소프트웨어 버전으로 업데이트하기.</li>
<li>컨테이너화된 애플리케이션을 디버그하기.</li>
</ul>
<p>이 튜토리얼에서는 Katacoda를 사용해서 독자의 웹브라우저에서 Minikube가 동작하는 가상 터미널을 구동시킨다. Minikube는 로컬에 설치할 수 있는 작은 규모의 쿠버네티스로써 어디에서든 작동된다. 어떤 소프트웨어도 설치할 필요가 없고, 아무 것도 설정할 필요가 없다. 왜냐하면 대화형 튜토리얼이 웹브라우저 자체에서 바로 동작하기 때문이다.</p>
</div>
@@ -104,12 +104,6 @@ card:
</div>
</div>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro/" role="button">튜토리얼 시작하기<span class="btn__next"></span></a>
</div>
</div>
</main>
</div>
@@ -17,33 +17,31 @@ content_template: templates/concept
* [Cloud Native Certified Kubernetes Administrator (CKA) with Hands-On Labs & Practice Exams (Linux Academy)](https://linuxacademy.com/linux/training/course/name/cloud-native-certified-kubernetes-administrator-cka)
* [Certified Kubernetes Administrator Developer 준비 과정 및 모의 시험 (KodeKloud)](https://kodekloud.com/p/certified-kubernetes-administrator-with-practice-tests)
* [Certified Kubernetes Administrator Preparation Course with Practice Tests (KodeKloud)](https://kodekloud.com/p/certified-kubernetes-administrator-with-practice-tests)
* [Certified Kubernetes Application Developer (CKAD) with Hands-On Labs & Practice Exams (Linux Academy)] (https://linuxacademy.com/containers/training/course/name/certified-kubernetes-application-developer-ckad/)
* [Certified Kubernetes Application Developer 준비 과정 및 모의 시험 (KodeKloud)](https://kodekloud.com/p/kubernetes-certification-course)
* [Certified Kubernetes Application Developer Preparation Course with Practice Tests (KodeKloud)](https://kodekloud.com/p/kubernetes-certification-course)
* [Google Kubernetes Engine 시작하기 (Coursera)](https://www.coursera.org/learn/google-kubernetes-engine)
* [Getting Started with Google Kubernetes Engine (Coursera)](https://www.coursera.org/learn/google-kubernetes-engine)
* [Google Kubernetes Engine Deep Dive (Linux Academy)](https://linuxacademy.com/google-cloud-platform/training/course/name/google-kubernetes-engine-deep-dive)
* [Getting Started with Kubernetes (Pluralsight)](https://www.pluralsight.com/courses/getting-started-kubernetes)
* [쿠버네티스 시작하기 (Pluralsight)](https://www.pluralsight.com/courses/getting-started-kubernetes)
* [Getting Started with Kubernetes Clusters on OCI Oracle Kubernetes Engine (OKE) (Learning Library)](https://apexapps.oracle.com/pls/apex/f?p=44785:50:0:::50:P50_EVENT_ID,P50_COURSE_ID:5935,256)
* [OCI Oracle Kubernetes Engine (OKE)에서 쿠버네티스 클러스터 시작하기 (Learning Library)](https://apexapps.oracle.com/pls/apex/f?p=44785:50:0:::50:P50_EVENT_ID,P50_COURSE_ID:5935,256)
* [쿠버네티스 소개 및 실습 (Instruqt)](https://play.instruqt.com/public/topics/getting-started-with-kubernetes)
* [IBM 클라우드: 쿠버네티스로 마이크로서비스(Microservices) 배포 (Coursera)](https://www.coursera.org/learn/deploy-micro-kube-ibm-cloud)
* [쿠버네티스 소개 (edX)](https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x)
* [Kubernetes Essentials with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-essentials)
* [Google Kubernetes Engine Deep Dive (Linux Academy)] (https://linuxacademy.com/google-cloud-platform/training/course/name/google-kubernetes-engine-deep-dive)
* [Helm Deep Dive with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/helm-deep-dive-part-1)
* [초보자를 위한 쿠버네티스 실습 랩 (KodeKloud)](https://kodekloud.com/p/kubernetes-for-the-absolute-beginners-hands-on)
* [Hands-on Introduction to Kubernetes (Instruqt)](https://play.instruqt.com/public/topics/getting-started-with-kubernetes)
* [Kubernetes Quick Start (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-quick-start)
* [IBM Cloud: Deploying Microservices with Kubernetes (Coursera)](https://www.coursera.org/learn/deploy-micro-kube-ibm-cloud)
* [Introduction to Kubernetes (edX)](https://www.edx.org/course/introduction-kubernetes-linuxfoundationx-lfs158x)
* [Kubernetes Essentials with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-essentials)
* [Kubernetes for the Absolute Beginners with Hands-on Labs (KodeKloud)](https://kodekloud.com/p/kubernetes-for-the-absolute-beginners-hands-on)
* [Kubernetes Quick Start with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-quick-start)
@@ -55,7 +53,7 @@ content_template: templates/concept
* [Learn Kubernetes by Doing - 100% Hands-On Experience (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/learn-kubernetes-by-doing)
* [대화식 실습 시나리오를 사용하여 쿠버네티스 배우기 (Katacoda)](https://www.katacoda.com/courses/kubernetes/)
* [Learn Kubernetes using Interactive Hands-on Scenarios (Katacoda)](https://www.katacoda.com/courses/kubernetes/)
* [Microservice Applications in Kubernetes - 100% Hands-On Experience (Linux Academy)] (https://linuxacademy.com/devops/training/course/name/learn-microservices-by-doing)
@@ -63,9 +61,7 @@ content_template: templates/concept
* [Service Mesh with Istio with Hands-On Labs (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/service-mesh-with-istio-part-1)
* [Prometheus로 쿠버네티스 모니터링 (Linux Academy)] (https://linuxacademy.com/linux/training/course/name/kubernetes-and-prometheus)
* [쿠버네티스와 확장 가능한 마이크로서비스(Microservices) (Udacity)](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615)
* [Scalable Microservices with Kubernetes (Udacity)](https://www.udacity.com/course/scalable-microservices-with-kubernetes--ud615)
* [Self-paced Kubernetes online course (Learnk8s Academy)](https://learnk8s.io/academy)
{{% /capture %}}
+91 -25
View File
@@ -34,7 +34,10 @@ content_template: templates/tutorial
작은 nginx 웹 서버를 이용한다. 다음과 같이 생성할 수 있다.
```console
$ kubectl run source-ip-app --image=k8s.gcr.io/echoserver:1.4
kubectl run source-ip-app --image=k8s.gcr.io/echoserver:1.4
```
출력은 다음과 같다.
```
deployment.apps/source-ip-app created
```
@@ -59,23 +62,38 @@ deployment.apps/source-ip-app created
Kube-proxy는 이 모드를 `proxyMode` 엔드포인트를 통해 노출한다.
```console
$ kubectl get nodes
kubectl get nodes
```
출력은 다음과 유사하다
```
NAME STATUS ROLES AGE VERSION
kubernetes-minion-group-6jst Ready <none> 2h v1.13.0
kubernetes-minion-group-cx31 Ready <none> 2h v1.13.0
kubernetes-minion-group-jj1t Ready <none> 2h v1.13.0
```
한 노드의 프록시 모드를 확인한다.
```console
kubernetes-minion-group-6jst $ curl localhost:10249/proxyMode
```
출력은 다음과 같다.
```
iptables
```
소스 IP 애플리케이션을 통해 서비스를 생성하여 소스 IP 주소 보존 여부를 테스트할 수 있다.
```console
$ kubectl expose deployment source-ip-app --name=clusterip --port=80 --target-port=8080
kubectl expose deployment source-ip-app --name=clusterip --port=80 --target-port=8080
```
출력은 다음과 같다.
```
service/clusterip exposed
$ kubectl get svc clusterip
```
```console
kubectl get svc clusterip
```
출력은 다음과 같다.
```
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
clusterip ClusterIP 10.0.170.92 <none> 80/TCP 51s
```
@@ -83,7 +101,10 @@ clusterip ClusterIP 10.0.170.92 <none> 80/TCP 51s
그리고 동일한 클러스터의 파드에서 `클러스터IP`를 치면:
```console
$ kubectl run busybox -it --image=busybox --restart=Never --rm
kubectl run busybox -it --image=busybox --restart=Never --rm
```
The output is similar to this:
```
Waiting for pod default/busybox to be running, status is Pending, pod ready: false
If you don't see a command prompt, try pressing enter.
@@ -115,11 +136,16 @@ client_address는 클라이언트 파드와 서버 파드가 같은 노드 또
소스 NAT가 기본으로 적용된다. `NodePort` 서비스를 생성하여 이것을 테스트할 수 있다.
```console
$ kubectl expose deployment source-ip-app --name=nodeport --port=80 --target-port=8080 --type=NodePort
kubectl expose deployment source-ip-app --name=nodeport --port=80 --target-port=8080 --type=NodePort
```
출력은 다음과 같다.
```
service/nodeport exposed
```
$ NODEPORT=$(kubectl get -o jsonpath="{.spec.ports[0].nodePort}" services nodeport)
$ NODES=$(kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="IPAddress")].address }')
```console
NODEPORT=$(kubectl get -o jsonpath="{.spec.ports[0].nodePort}" services nodeport)
NODES=$(kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="ExternalIP")].address }')
```
클라우드 공급자 상에서 실행한다면,
@@ -128,7 +154,10 @@ $ NODES=$(kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=
서비스에 도달할 수 있다.
```console
$ for node in $NODES; do curl -s $node:$NODEPORT | grep -i client_address; done
for node in $NODES; do curl -s $node:$NODEPORT | grep -i client_address; done
```
출력은 다음과 같다.
```
client_address=10.180.1.1
client_address=10.240.0.5
client_address=10.240.0.3
@@ -170,14 +199,20 @@ client_address=10.240.0.3
다음과 같이 `service.spec.externalTrafficPolicy` 필드를 설정하자.
```console
$ kubectl patch svc nodeport -p '{"spec":{"externalTrafficPolicy":"Local"}}'
kubectl patch svc nodeport -p '{"spec":{"externalTrafficPolicy":"Local"}}'
```
출력은 다음과 같다.
```
service/nodeport patched
```
이제 다시 테스트를 실행해보자.
```console
$ for node in $NODES; do curl --connect-timeout 1 -s $node:$NODEPORT | grep -i client_address; done
for node in $NODES; do curl --connect-timeout 1 -s $node:$NODEPORT | grep -i client_address; done
```
출력은 다음과 같다.
```
client_address=104.132.1.79
```
@@ -191,7 +226,6 @@ client_address=104.132.1.79
* 클라이언트는 패킷을 엔드포인트를 가진 `node1:nodePort` 보낸다.
* node1은 패킷을 올바른 소스 IP 주소로 엔드포인트로 라우팅 한다.
시각적으로
```
@@ -220,14 +254,28 @@ client_address=104.132.1.79
로드밸런서를 통해 source-ip-app을 노출하여 테스트할 수 있다.
```console
$ kubectl expose deployment source-ip-app --name=loadbalancer --port=80 --target-port=8080 --type=LoadBalancer
kubectl expose deployment source-ip-app --name=loadbalancer --port=80 --target-port=8080 --type=LoadBalancer
```
다음과 같이 출력된다.
```
service/loadbalancer exposed
```
$ kubectl get svc loadbalancer
서비스의 IP를 출력한다.
```console
kubectl get svc loadbalancer
```
다음과 같이 출력된다.
```
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
loadbalancer LoadBalancer 10.0.65.118 104.198.149.140 80/TCP 5m
```
$ curl 104.198.149.140
```console
curl 104.198.149.140
```
다음과 같이 출력된다.
```
CLIENT VALUES:
client_address=10.240.0.5
...
@@ -255,29 +303,44 @@ health check ---> node 1 node 2 <--- health check
이것은 어노테이션을 설정하여 테스트할 수 있다.
```console
$ kubectl patch svc loadbalancer -p '{"spec":{"externalTrafficPolicy":"Local"}}'
kubectl patch svc loadbalancer -p '{"spec":{"externalTrafficPolicy":"Local"}}'
```
쿠버네티스에 의해 `service.spec.healthCheckNodePort` 필드가
즉각적으로 할당되는 것을 봐야 한다.
```console
$ kubectl get svc loadbalancer -o yaml | grep -i healthCheckNodePort
kubectl get svc loadbalancer -o yaml | grep -i healthCheckNodePort
```
다음과 같이 출력된다.
```
healthCheckNodePort: 32122
```
`service.spec.healthCheckNodePort` 필드는 `/healthz`에서 헬스 체크를 제공하는
모든 노드의 포트를 가르킨다. 이것을 테스트할 수 있다.
```console
kubectl get pod -o wide -l run=source-ip-app
```
다음과 같이 출력된다.
```
$ kubectl get pod -o wide -l run=source-ip-app
NAME READY STATUS RESTARTS AGE IP NODE
source-ip-app-826191075-qehz4 1/1 Running 0 20h 10.180.1.136 kubernetes-minion-group-6jst
```
다른 노드에서`/healthz` 엔드포인트로 curl 명령을 수행한다.
```console
kubernetes-minion-group-6jst $ curl localhost:32122/healthz
```
다음과 같이 출력된다.
```
1 Service Endpoints found
```
```console
kubernetes-minion-group-jj1t $ curl localhost:32122/healthz
```
다음과 같이 출력된다.
```
No Service Endpoints Found
```
@@ -287,7 +350,10 @@ No Service Endpoints Found
로드밸런서 IP 주소로 curl 하자.
```console
$ curl 104.198.149.140
curl 104.198.149.140
```
다음과 같이 출력된다.
```
CLIENT VALUES:
client_address=104.132.1.79
...
@@ -323,13 +389,13 @@ HTTP [X-FORWARDED-FOR](https://en.wikipedia.org/wiki/X-Forwarded-For) 헤더나
서비스를 삭제하자.
```console
$ kubectl delete svc -l run=source-ip-app
kubectl delete svc -l run=source-ip-app
```
디플로이먼트와 리플리카 셋과 파드를 삭제하자.
```console
$ kubectl delete deployment source-ip-app
kubectl delete deployment source-ip-app
```
{{% /capture %}}