[ko] Update outdated files in dev-1.27-ko.1 (M222-M229)

pull/41951/head
onestone9900 2023-07-02 21:33:29 +09:00
parent 33403f784c
commit 3c022e2098
8 changed files with 236 additions and 148 deletions

View File

@ -15,14 +15,8 @@ card:
<!-- overview -->
이 튜토리얼에서는 Minikube와 Katacoda를 이용하여
쿠버네티스에서 샘플 애플리케이션을 어떻게 실행하는지 살펴본다.
Katacode는 무료로 브라우저에서 쿠버네티스 환경을 제공한다.
{{< note >}}
로컬에서 Minikube를 설치했다면 이 튜토리얼도 따라 할 수 있다.
설치 안내는 [minikube 시작](https://minikube.sigs.k8s.io/docs/start/)을 참고한다.
{{< /note >}}
이 튜토리얼에서는 Minikube를 이용하여 쿠버네티스에서 샘플 애플리케이션을 어떻게 실행하는지 살펴본다.
이 튜토리얼은 NGINX를 사용하여 모든 요청에 응답하는 컨테이너 이미지를 제공한다.
## {{% heading "objectives" %}}
@ -33,31 +27,34 @@ Katacode는 무료로 브라우저에서 쿠버네티스 환경을 제공한다.
## {{% heading "prerequisites" %}}
이 튜토리얼은 NGINX를 사용해서 모든 요청에 응답하는 컨테이너 이미지를 제공한다.
이 튜토리얼에서는 이미 `minikube`를 설치했다고 가정한다.
설치 지침은 [minikube 시작](https://minikube.sigs.k8s.io/docs/start/)을 참고하자.
`kubectl`도 설치해야 한다.
설치 지침은 [도구 설치](/ko/docs/tasks/tools/#kubectl)를 참고하자.
<!-- lessoncontent -->
## minikube 클러스터 만들기
1. **Launch Terminal** 을 클릭
```shell
minikube start
```
{{< kat-button >}}
## 대시보드 열기
{{< note >}}
minikube를 로컬에 설치했다면 `minikube start`를 실행한다. `minikube dashboard` 명령을 실행하기 전에, 새 터미널을 열고, 그 터미널에서 `minikube dashboard` 명령을 실행한 후, 원래의 터미널로 돌아온다.
{{< /note >}}
쿠버네티스 대시보드를 열어보자. 두 가지 다른 방법으로 할 수 있다.
2. 브라우저에서 쿠버네티스 대시보드를 열어보자.
{{< tabs name="dashboard" >}}
{{% tab name="브라우저 실행" %}}
**새로운** 터미널을 열고, 다음을 실행한다.
```shell
# 새 터미널을 시작하고, 실행 상태로 둔다.
minikube dashboard
```
```shell
minikube dashboard
```
3. Katacoda 환경에서는: 터미널 패널의 상단에서 플러스를 클릭하고, 이어서 **Select port to view on Host 1** 을 클릭
4. Katacoda 환경에서는: 30000 을 입력하고 **Display Port** 를 클릭.
이제, `minikube start`를 실행한 터미널로 다시 전환하자.
{{< note >}}
`minikube dashboard` 명령을 내리면 대시보드 애드온과 프록시가 활성화되고 해당 프록시로 접속하는 기본 웹 브라우저 창이 열린다.
@ -73,14 +70,23 @@ root 환경에서 명령어를 실행하고 있다면, [URL을 이용하여 대
`dashboard` 명령을 다시 실행하여 대시보드에 접근하기 위한 다른 프록시를 생성할 수 있다.
{{< /note >}}
## URL을 이용하여 대시보드 접속하기 {#open-dashboard-with-url}
{{% /tab %}}
{{% tab name="URL 복사 및 붙여넣기" %}}
자동으로 웹 브라우저가 열리는 것을 원치 않는다면, `--url` 플래그와 함께 다음과 같은 명령어를 실행하여 대시보드 접속 URL을 출력할 수 있다.
Minikube가 웹 브라우저를 열지 않도록 하려면, 다음과 같이 대시보드에
`--url` 플래그 명령을 실행하자. `minikube`는 원하는 브라우저에서 열 수 있는 URL을 출력한다.
**새로운** 터미널을 열고, 다음을 실행한다.
```shell
# 새 터미널을 시작하고, 실행 상태로 둔다.
minikube dashboard --url
```
이제, `minikube start`를 실행한 터미널로 다시 전환하자.
{{% /tab %}}
{{< /tabs >}}
## 디플로이먼트 만들기
쿠버네티스 [*파드*](/ko/docs/concepts/workloads/pods/)는 관리와
@ -91,9 +97,10 @@ minikube dashboard --url
파드의 생성 및 스케일링을 관리하는 방법으로 디플로이먼트를 권장한다.
1. `kubectl create` 명령어를 실행하여 파드를 관리할 디플로이먼트를 만든다. 이
파드는 제공된 Docker 이미지를 기반으로 한 컨테이너를 실행한다.
파드는 제공된 Docker 이미지를 기반으로 한 컨테이너를 실행한다.
```shell
# 웹 서버가 포함된 테스트 컨테이너 이미지 실행
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080
```
@ -155,7 +162,7 @@ minikube dashboard --url
`--type=LoadBalancer`플래그는 클러스터 밖의 서비스로 노출하기
원한다는 뜻이다.
`registry.k8s.io/echoserver` 이미지 내의 애플리케이션 코드는 TCP 포트 8080에서만 수신한다. `kubectl expose`
테스트 이미지 내의 애플리케이션 코드는 TCP 포트 8080에서만 수신한다. `kubectl expose`
사용하여 다른 포트를 노출한 경우, 클라이언트는 다른 포트에 연결할 수 없다.
2. 생성한 서비스 살펴보기
@ -183,10 +190,6 @@ minikube dashboard --url
minikube service hello-node
```
4. Katacoda 환경에서만: 플러스를 클릭한 후에 **Select port to view on Host 1** 를 클릭.
5. Katacoda 환경에서만: 서비스 출력에서 `8080`의 반대편에 표시되는 5자리 포트 번호를 기록 한다. 이 포트 번호는 무작위로 생성되며, 사용자마다 다를 수 있다. 포트 번호 텍스트 상자에 포트 번호를 입력한 다음, 포트 표시를 클릭한다. 이전 예시를 사용해서 `30369` 를 입력한다.
이렇게 하면 당신의 앱을 서비스하는 브라우저 윈도우를 띄우고 애플리케이션의 응답을 볼 수 있다.
## 애드온 사용하기
@ -233,7 +236,7 @@ minikube 툴은 활성화하거나 비활성화할 수 있고 로컬 쿠버네
The 'metrics-server' addon is enabled
```
3. 생성한 파드와 서비스를 확인한다.
3. 해당 애드온을 설치하여 생성한 파드와 서비스를 확인한다.
```shell
kubectl get pod,svc -n kube-system
@ -283,9 +286,10 @@ kubectl delete service hello-node
kubectl delete deployment hello-node
```
필요하면 Minikube 가상 머신(VM)을 정지한다.
Minikube 클러스터를 정지한다.
```shell
# 선택사항
minikube stop
```
@ -295,7 +299,7 @@ minikube stop
minikube delete
```
쿠버네티스에 대해 자세히 알아보기 위해 minikube를 다시 사용하려면, 삭제할 필요가 없다.
## {{% heading "whatsnext" %}}

View File

@ -9,6 +9,8 @@ card:
title: 쿠버네티스 기초 학습
---
{{% katacoda-removal %}}
<!DOCTYPE html>
<html lang="ko">

View File

@ -1,6 +1,11 @@
---
title: 대화형 튜토리얼 - 클러스터 생성하기
weight: 20
headless: true
toc_hide: true
_build:
list: never
publishResources: false
---
<!DOCTYPE html>
@ -9,28 +14,21 @@ weight: 20
<body>
{{< katacoda-tutorial >}}
<main class="content">
<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-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="/ko/docs/tutorials/kubernetes-basics/" role="button">홈으로 이동<span class=""></span></a>
<a class="btn btn-lg btn-success" href="/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/" role="button">모듈 2로 진행하기 &gt;<span class=""></span></a>
</div>
<div>
<h2 class="katacoda-gone">
컨텐츠를 사용할 수 없음
</h2>
<p>
클러스터 생성을 위한 상호작용 튜토리얼을 사용할 수 없다.
자세한 정보는,
<a href="https://kubernetes.io/blog/2023/02/14/kubernetes-katacoda-tutorials-stop-from-2023-03-31/">
종료 공지</a>를 참조하자.
</p>
</div>
</main>
</div>
</body>
</html>

View File

@ -1,6 +1,10 @@
---
title: Minikube를 사용해서 클러스터 생성하기
weight: 10
description: |-
쿠버네티스 클러스터가 무엇인지 알아보기.
Minikube가 무엇인지 알아보기.
쿠버네티스 클러스터 시작하기.
---
<!DOCTYPE html>
@ -20,7 +24,7 @@ weight: 10
<ul>
<li>쿠버네티스 클러스터가 무엇인지 배운다.</li>
<li>Minikube가 무엇인지 배운다.</li>
<li>온라인 터미널을 사용해서 쿠버네티스 클러스터를 시작한다.</li>
<li>개인 컴퓨터를 사용해서 쿠버네티스 클러스터를 시작한다.</li>
</ul>
</div>
@ -70,7 +74,7 @@ weight: 10
<div class="row">
<div class="col-md-8">
<p><b>컨트롤 플레인은 클러스터 관리를 담당한다.</b> 컨트롤 플레인은 애플리케이션을 스케줄링하거나, 애플리케이션의 항상성을 유지하거나, 애플리케이션을 스케일링하고, 새로운 변경사항을 순서대로 반영(rolling out)하는 일과 같은 클러스터 내 모든 활동을 조율한다.</p>
<p><b>노드는 쿠버네티스 클러스터 내 워커 머신으로 동작하는 VM 또는 물리적인 컴퓨터다.</b> 각 노드는 노드를 관리하고 쿠버네티스 컨트롤 플레인과 통신하는 Kubelet이라는 에이전트를 갖는다. 노드는 컨테이너 운영을 담당하는 containerd 또는 도커와 같은 툴도 갖는다. 운영 트래픽을 처리하는 쿠버네티스 클러스터는 최소 세 대의 노드를 가져야 하는데, 이는 한 노드가 다운되면 etcd 멤버와 컨트롤 플레인 인스턴스가 사라져 중복성(redundancy)을 잃기 때문이다. 컨트롤 플레인 노드를 추가하여 이러한 위험을 줄일 수 있다.</p>
<p><b>노드는 쿠버네티스 클러스터 내 워커 머신으로 동작하는 VM 또는 물리적인 컴퓨터다.</b> 각 노드는 노드를 관리하고 쿠버네티스 컨트롤 플레인과 통신하는 Kubelet이라는 에이전트를 갖는다. 노드는 컨테이너 운영을 담당하는 containerd 또는 도커와 같은 툴도 갖는다. 운영 트래픽을 처리하는 쿠버네티스 클러스터는 최소 세 대의 노드를 가져야 하는데, 이는 한 노드가 다운되면 <a href="/ko/docs/concepts/overview/components/#etcd">etcd</a> 멤버와 컨트롤 플레인 인스턴스가 사라져 중복성(redundancy)을 잃기 때문이다. 컨트롤 플레인 노드를 추가하여 이러한 위험을 줄일 수 있다.</p>
</div>
<div class="col-md-4">
@ -84,18 +88,16 @@ weight: 10
<div class="col-md-8">
<p>애플리케이션을 쿠버네티스에 배포하기 위해서는, 컨트롤 플레인에 애플리케이션 컨테이너의 구동을 지시하면 된다. 그러면 컨트롤 플레인은 컨테이너를 클러스터의 어느 노드에 구동시킬지 스케줄한다. <b>노드는 컨트롤 플레인이 제공하는 <a href="/ko/docs/concepts/overview/kubernetes-api/">쿠버네티스 API</a>를 통해서 컨트롤 플레인과 통신한다.</b> 최종 사용자도 쿠버네티스 API를 사용해서 클러스터와 직접 상호작용(interact)할 수 있다.</p>
<p>쿠버네티스 클러스터는 물리 및 가상 머신 모두에 설치될 수 있다. 쿠버네티스 개발을 시작하려면 Minikube를 사용할 수 있다. Minikube는 가벼운 쿠버네티스 구현체이며, 로컬 머신에 VM을 만들고 하나의 노드로 구성된 간단한 클러스터를 생성한다. Minikube는 리눅스, 맥, 그리고 윈도우 시스템에서 구동이 가능하다. Minikube CLI는 클러스터에 대해 시작, 중지, 상태 조회 및 삭제 등의 기본적인 부트스트래핑(bootstrapping) 기능을 제공한다. 하지만, 본 튜토리얼에서는 Minikube가 미리 설치된 채로 제공되는 온라인 터미널을 사용할 것이다.</p>
<p>쿠버네티스 클러스터는 물리 및 가상 머신 모두에 설치될 수 있다. 쿠버네티스 개발을 시작하려면 Minikube를 사용할 수 있다. Minikube는 가벼운 쿠버네티스 구현체이며, 로컬 머신에 VM을 만들고 하나의 노드로 구성된 간단한 클러스터를 생성한다. Minikube는 리눅스, 맥, 그리고 윈도우 시스템에서 구동이 가능하다. Minikube CLI는 클러스터에 대해 시작, 중지, 상태 조회 및 삭제 등의 기본적인 부트스트래핑(bootstrapping) 기능을 제공한다.</p>
<p>쿠버네티스가 무엇인지 자세히 알아봤으니, <a href="/ko/docs/tutorials/hello-minikube/">Hello Minikube</a>
개인 컴퓨터에서 방문해보자.</p>
<p>쿠버네티스가 무엇인지 알아봤으니, 이제 온라인 튜토리얼로 이동해서 우리의 첫 번째 클러스터를 시작해보자!</p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive/" role="button">대화형 튜토리얼 시작하기 <span class="btn__next"></span></a>
</div>
<p>완료했으면, <a href="/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/"><tt>kubectl</tt>을 사용하여 디플로이먼트(Deployment) 만들기</a>로 이동하자.</p>
</div>
</main>

View File

@ -1,6 +1,11 @@
---
title: 대화형 튜토리얼 - 앱 배포하기
weight: 20
headless: true
toc_hide: true
_build:
list: never
publishResources: false
---
<!DOCTYPE html>
@ -9,41 +14,22 @@ weight: 20
<body>
{{< katacoda-tutorial >}}
<main class="content">
<div class="layout" id="top">
<div>
<h2 class="katacoda-gone">
컨텐츠를 사용할 수 없음
</h2>
<p>
클러스터 생성을 위한 대화형 자습서를 사용할 수 없다.
자세한 정보는,
<a href="https://kubernetes.io/blog/2023/02/14/kubernetes-katacoda-tutorials-stop-from-2023-03-31/">
종료 공지</a>를 참조하자.
</p>
<main class="content katacoda-content">
<div class="row">
<div class="col-md-12">
<p>
파드는 쿠버네티스 애플리케이션의 기본 실행 단위이다. 각 파드는 클러스터에서 실행중인 워크로드의 일부를 나타낸다. <a href="/ko/docs/concepts/workloads/pods/">파드에 대해 더 자세히 알아본다</a>.
</p>
</div>
</div>
<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-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="/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro/" role="button"> &lt; 모듈 1로 돌아가기<span class=""></span></a>
<a class="btn btn-lg btn-success" href="/ko/docs/tutorials/kubernetes-basics/" role="button">홈으로 이동<span class=""></span></a>
<a class="btn btn-lg btn-success" href="/ko/docs/tutorials/kubernetes-basics/explore/explore-intro/" role="button">모듈 3으로 진행하기 &gt;<span class=""></span></a>
</div>
</div>
</main>
</div>
</body>
</html>

View File

@ -1,6 +1,9 @@
---
title: kubectl을 사용해서 디플로이먼트 생성하기
weight: 10
description: |-
애플리케이션 배포에 대해 알아보기.
kubectl을 사용하여 쿠버네티스에 첫 번째 앱 배포.
---
<!DOCTYPE html>
@ -14,7 +17,6 @@ weight: 10
<main class="content">
<div class="row">
<div class="col-md-8">
<h3>목표</h3>
<ul>
@ -26,21 +28,16 @@ weight: 10
<div class="col-md-8">
<h3>쿠버네티스 디플로이먼트</h3>
<p>
일단 쿠버네티스 클러스터를 구동시키면, 그 위에 컨테이너화된 애플리케이션을 배포할 수 있다.
일단 <a href="/ko/docs/tutorials/kubernetes-basics/create-cluster/cluster-intro/">쿠버네티스 클러스터를 구동시키면</a>, 그 위에 컨테이너화된 애플리케이션을 배포할 수 있다.
그러기 위해서, 쿠버네티스 <b>디플로이먼트</b> 설정을 만들어야 한다. 디플로이먼트는 쿠버네티스가
애플리케이션의 인스턴스를 어떻게 생성하고 업데이트해야 하는지를 지시한다. 디플로이먼트가 만들어지면,
쿠버네티스 컨트롤 플레인이 해당 디플로이먼트에 포함된 애플리케이션 인스턴스가 클러스터의 개별 노드에서 실행되도록 스케줄한다.
쿠버네티스 컨트롤 플레인이 해당 디플로이먼트에 포함된 애플리케이션 인스턴스가 클러스터의 개별 노드에서 실행되도록
스케줄한다.
</p>
<p>애플리케이션 인스턴스가 생성되면, 쿠버네티스 디플로이먼트 컨트롤러는 지속적으로 이들 인스턴스를
모니터링한다. 인스턴스를 구동 중인 노드가 다운되거나 삭제되면, 디플로이먼트 컨트롤러가 인스턴스를
클러스터 내부의 다른 노드의 인스턴스로 교체시켜준다.<b>이렇게 머신의 장애나 정비에 대응할 수 있는 자동 복구(self-healing) 메커니즘을
제공한다.</b></p>
<p>애플리케이션 인스턴스가 생성되면, 쿠버네티스 디플로이먼트 컨트롤러는 지속적으로 이들 인스턴스를 모니터링한다. 인스턴스를 구동 중인 노드가 다운되거나 삭제되면, 디플로이먼트 컨트롤러가 인스턴스를 클러스터 내부의 다른 노드의 인스턴스로 교체시켜준다.<b>이렇게 머신의 장애나 정비에 대응할 수 있는 자동 복구(self-healing) 메커니즘을 제공한다.</b></p>
<p>오케스트레이션 기능이 없던 환경에서는, 설치 스크립트가 애플리케이션을 시작하는데 종종 사용되곤
했지만, 머신의 장애가 발생한 경우 복구를 해주지는 않았다. 쿠버네티스 디플로이먼트는 애플리케이션
인스턴스를 생성해주고 여러 노드에 걸쳐서 지속적으로 인스턴스가 구동되도록 하는 두 가지를 모두
하기 때문에 애플리케이션 관리를 위한 접근법에서 근본적인 차이를 가져다준다.</p>
<p>오케스트레이션 기능이 없던 환경에서는, 설치 스크립트가 애플리케이션을 시작하는데 종종 사용되곤 했지만, 머신의 장애가 발생한 경우 복구를 해주지는 않았다. 쿠버네티스 디플로이먼트는 애플리케이션 인스턴스를 생성해주고 여러 노드에 걸쳐서 지속적으로 인스턴스가 구동되도록 하는 두 가지를 모두 하기 때문에 애플리케이션 관리를 위한 접근법에서 근본적인 차이를 가져다준다.</p>
</div>
@ -77,23 +74,17 @@ weight: 10
<div class="row">
<div class="col-md-8">
<p><b>Kubectl</b>이라는 쿠버네티스 CLI를 통해 디플로이먼트를 생성하고 관리할 수 있다.
Kubectl은 클러스터와 상호 작용하기 위해 쿠버네티스 API를 사용한다. 이 모듈에서는, 쿠버네티스
클러스터 상에 애플리케이션을 구동시키는 디플로이먼트를 생성하기 위해 필요한 가장 일반적인 Kubectl
명령어를 배우게 된다.</p>
<p><b>kubectl</b>이라는 쿠버네티스 CLI를 통해 디플로이먼트를 생성하고 관리할 수 있다. Kubectl은 클러스터와 상호 작용하기 위해 쿠버네티스 API를 사용한다. 이 모듈에서는, 쿠버네티스 클러스터 상에 애플리케이션을 구동시키는 디플로이먼트를 생성하기 위해 필요한 가장 일반적인 Kubectl 명령어를 배우게 된다.</p>
<p>디플로이먼트를 생성할 때, 애플리케이션에 대한 컨테이너 이미지와 구동시키고자 하는 복제 수를 지정해야 한다. 디플로이먼트를 업데이트해서 이런 정보를 나중에 변경할 수 있다. 모듈 <a href="/ko/docs/tutorials/kubernetes-basics/scale/scale-intro/">5</a><a href="/ko/docs/tutorials/kubernetes-basics/update/update-intro/">6</a>의 부트캠프에서 어떻게 스케일하고 업데이트하는지에 대해 다룬다.</p>
<p>디플로이먼트를 생성할 때, 애플리케이션에 대한 컨테이너 이미지와 구동시키고자 하는 복제 수를 지정해야
한다. 디플로이먼트를 업데이트해서 이런 정보를 나중에 변경할 수 있다. 모듈
<a href="/ko/docs/tutorials/kubernetes-basics/scale/scale-intro/">5</a><a href="/ko/docs/tutorials/kubernetes-basics/update/update-intro/">6</a>의 부트캠프에서 어떻게
스케일하고 업데이트하는지에 대해 다룬다.</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>
@ -101,20 +92,70 @@ weight: 10
<div class="row">
<div class="col-md-8">
<p>
첫 번째 디플로이먼트로, NGINX를 사용해 모든 요청을 에코(echo)하는 도커 컨테이너로 패키지한 hello-node 애플리케이션을 사용해보자. (아직 hello-node 애플리케이션을 작성하고 컨테이너를 활용해서 배포해보지 않았다면, <a href="/ko/docs/tutorials/hello-minikube/">Hello Minikube 튜토리얼</a>의 지시를 따른다.)
<p>
<p>이제 디플로이먼트를 이해했으니, 온라인 튜토리얼을 통해 우리의 첫 번째 애플리케이션을 배포해보자!</p>
첫 번째 디플로이먼트로, NGINX를 사용해 모든 요청을 에코(echo)하는 도커 컨테이너로 패키지한 hello-node 애플리케이션을 사용해보자. (아직 hello-node 애플리케이션을 작성하고 컨테이너를 활용해서 배포해보지 않았다면, <a href="/ko/docs/tutorials/hello-minikube/">Hello Minikube 튜토리얼</a>의 지시를 따른다.)</p>
<p>kubectl도 설치해야 한다. 설치해야 하는 경우, <a href="/ko/docs/tasks/tools/#kubectl">도구 설치</a>를 방문하자.</p>
<p>이제 디플로이먼트를 이해했으니, 우리의 첫 번째 애플리케이션을 배포해보자!</p>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-interactive/"
role="button">대화형 튜토리얼 시작하기 <span class="btn__next"></span></a>
<div class="col-md-8">
<h3>kubectl 기본 사항</h3>
<p>kubectl 명령의 일반적인 형식은 다음과 같다: <code>kubectl <i>action resource</i></code></p>
<p>이것은 지정된 <em>리소스</em>(예: <tt>노드</tt> 또는 <tt>디플로이먼트(deployment)</tt>)에 지정된 <em>작업</em>(생성, 설명 또는 삭제)을 수행한다. 하위 명령 뒤에 <code>-<span />-help</code>를 사용하여 가능한 매개변수에 대한 추가 정보를 얻을 수 있다. (예: <code>kubectl get nodes --help</code>).</p>
<p><b><code>kubectl version</code></b> 명령을 실행하여, kubectl이 클러스터와 통신하도록 구성되어 있는지 확인해보자.</p>
<p>kubectl이 설치되어 있고 클라이언트 및 서버 버전을 모두 볼 수 있는지 확인해보자.</p>
<p>클러스터의 노드를 보려면, <b><code>kubectl get nodes</code></b> 명령을 실행해보자.</p>
<p>사용 가능한 노드가 표시된다. 나중에, 쿠버네티스는 사용 가능한 노드 리소스를 기반으로 애플리케이션을 배포할 위치를 선택한다.</p>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h3>앱 배포</h3>
<p><code>kubectl create deployment</code> 명령을 사용하여 쿠버네티스에 첫 번째 앱을 배포해 보자. 디플로이먼트(deployment) 이름과 앱 이미지 위치를(도커 허브 외부에서 호스팅되는 이미지의 전체 리포지터리 URL 포함) 제공해야 한다.</p>
<p><b><code>kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1</code></b></p>
<p>좋다! 디플로이먼트(deployment)를 생성하여 첫 번째 애플리케이션을 배포했다. 이것은 당신을 위해 몇 가지를 수행했다:</p>
<ul>
<li>애플리케이션의 인스턴스를 실행할 수 있는 적합한 노드를 검색(사용 가능한 노드는 1개뿐)했다.</li>
<li>해당 노드에서 실행되도록 애플리케이션을 스케줄했다.</li>
<li>필요할 때 새 노드에서 인스턴스를 다시 스케줄하도록 클러스터를 구성했다.</li>
</ul>
<p>디플로이먼트를 나열하려면 <code>kubectl get deployments</code> 명령을 사용하자:</p>
<p><b><code>kubectl get deployments</code></b></p>
<p>앱의 단일 인스턴스를 실행하는 디플로이먼트가 1개 있음을 확인할 수 있다. 인스턴스가 노드의 컨테이너 내에서 실행 중이다.</p>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h3>앱 보기</h3>
<p>쿠버네티스 내부에서 실행 중인 파드는 격리된, 프라이빗 네트워크에서 실행된다.
기본적으로 동일한 쿠버네티스 클러스터 내의 다른 파드 및 서비스에서 볼 수 있지만 해당 네트워크 외부에서는 볼 수 없다.
<code>kubectl</code>을 사용할 때, API 엔드포인트를 통해 상호 작용하여 애플리케이션과 통신한다.</p>
<p>모듈 4에서 쿠버네티스 클러스터 외부에 애플리케이션을 노출하는 방법에 대한 다른 옵션을 다룰 것이다.</p>
<p><code>kubectl</code> 명령은 클러스터-전체의 프라이빗 네트워크로 통신을 전달할 프록시를 생성할 수 있다. 프록시는 control-C를 눌러 종료할 수 있으며 실행 중에 출력을 표시하지 않는다. </p>
<p><strong>프록시를 실행하려면 두 번째 터미널 창을 열어야 한다.</strong></p>
<p><b><code>kubectl proxy</b></code>
<p>이제 호스트(온라인 터미널)와 쿠버네티스 클러스터가 연결되었다. 프록시를 사용하면 터미널에서 API에 직접 접근할 수 있다.</p>
<p>프록시 엔드포인트를 통해 호스팅되는 모든 API를 볼 수 있다. 예를 들어, <code>curl</code> 명령을 사용하여 API를 통해 직접 버전을 쿼리할 수 있다:</p>
<p><b><code>curl http://localhost:8001/version</code></b></p>
<div class="alert alert-info note callout" role="alert"><strong>노트:</strong> 포트 8001에 액세스할 수 없는 경우, <code>kubectl proxy</code>가 두 번째 터미널에서 실행 중인지 확인해보자.</div>
<p>API 서버는 프록시를 통해서도 접근할 수 있는 각 파드의 이름 기반으로 생성된 파드의 엔드포인트를 자동 생성한다.</p>
<p>먼저 파드 이름을 가져와야 하며, 환경 변수 <tt>POD_NAME</tt>에 저장한다:</p>
<p><b><code>export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')</code></b><br />
<b><code>파드 이름 확인: $POD_NAME</code></b></p>
<p>다음을 실행하여 프록시 API를 통해 파드에 접근할 수 있다:</p>
<p><b><code>curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/</code></b></p>
<p>프록시를 사용하지 않고 새 디플로이먼트에 접근하려면, 다음 모듈에서 설명할 서비스(Service)가 필요하다.</p>
</div>
</div>
<div class="row">
<p>
준비가 됐다면, <a href="/ko/docs/tutorials/kubernetes-basics/explore/explore-intro/" title="Viewing Pods and Nodes">파드 및 노드 보기</a>로 이동하자.</p>
</p>
</div>
</main>

View File

@ -1,41 +1,34 @@
---
title: 대화형 튜토리얼 - 앱 조사하기
weight: 20
headless: true
toc_hide: true
_build:
list: never
publishResources: false
---
<!DOCTYPE html>
<html lang="ko">
<body>
{{< katacoda-tutorial >}}
<main class="content">
<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-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="/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/" role="button">&lt; 모듈 2로 돌아가기<span class="btn"></span></a>
<a class="btn btn-lg btn-success" href="/ko/docs/tutorials/kubernetes-basics/" role="button">홈으로 이동<span class=""></span></a>
<a class="btn btn-lg btn-success" href="/ko/docs/tutorials/kubernetes-basics/expose/expose-intro/" role="button">모듈 4로 진행하기 &gt;<span class="btn"></span></a>
</div>
<div>
<h2 class="katacoda-gone">
컨텐츠를 사용할 수 없음
</h2>
<p>
앱 탐색을 위한 대화형 자습서를 사용할 수 없다.
자세한 정보는,
<a href="https://kubernetes.io/blog/2023/02/14/kubernetes-katacoda-tutorials-stop-from-2023-03-31/">
종료 공지</a>를 참조하자.
</p>
</div>
</main>
</div>
</body>
</html>

View File

@ -1,6 +1,10 @@
---
title: 파드와 노드 보기
weight: 10
description: |-
쿠버네티스 애플리케이션 문제를 해결하는 방법 알아보기
kubectl get, kubectl describe, kubectl logs 및
kubectl exec.
---
<!DOCTYPE html>
@ -105,12 +109,12 @@ weight: 10
<div class="row">
<div class="col-md-8">
<h2>kubectl로 문제해결하기</h2>
<p>모듈 <a href="/ko/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/">2</a>에서, Kubectl 커맨드-라인 인터페이스를 사용했다. 배포된 애플리케이션과 그 환경에 대한 정보를 얻기 위해 모듈3에서도 계속 그것을 사용할 것이다. 가장 보편적인 운용업무는 다음 kubectl 명령어를 이용하여 처리할 수 있다:</p>
<p>모듈 <a href="/ko/docs/tutorials/kubernetes-basics/deploy-app/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>
<li><tt><b>kubectl get</b></tt> - 자원을 나열한다</li>
<li><tt><b>kubectl describe</b></tt> - 자원에 대해 상세한 정보를 보여준다.</li>
<li><tt><b>kubectl logs</b></tt> - 파드 내 컨테이너의 로그들을 출력한다.</li>
<li><tt><b>kubectl exec</b></tt> - 파드 내 컨테이너에 대한 명령을 실행한다.</li>
</ul>
<p>언제 애플리케이션이 배포되었으며, 현재 상태가 어떠한지, 그것의 구성은 어떠한지 등을 보기 위해 이러한 명령을 이용할 수 있다.</p>
@ -124,14 +128,72 @@ weight: 10
</div>
</div>
</div>
<br>
<div class="row">
<div class="col-md-12">
<a class="btn btn-lg btn-success" href="/ko/docs/tutorials/kubernetes-basics/explore/explore-interactive/" role="button">대화형 튜토리얼 시작하기 <span class="btn__next"></span></a>
<h3>애플리케이션 구성 확인</h3>
<p>이전 시나리오에서 배포한 애플리케이션이 실행 중인지 확인해보자. <code>kubectl get</code> 명령을 사용하여 기존 파드를 찾아보자:</p>
<p><b><code>kubectl get pods</code></b></p>
<p>실행 중인 파드가 없으면, 몇 초간 기다린 후 파드를 다시 나열해보자. 하나의 파드가 실행 중이면 진행할 수 있다.</p>
<p>다음으로, 해당 파드 내부에 어떤 컨테이너가 있고 해당 컨테이너를 빌드하는 데 사용되는 이미지를 보기 위해 <code>kubectl describe pods</code> 명령을 실행한다:</p>
<p><b><code>kubectl describe pods</code></b></p>
<p>파드의 컨테이너에 대한 세부 정보를 볼 수 있다: IP 주소, 사용된 포트 및 파드의 라이프사이클와 관련된 이벤트 목록</p>
<p><tt>describe</tt> 하위 명령의 출력은 광범위하며 아직 설명하지 않은 일부 개념을 다루고 있지만, 걱정하지 말자, 이 부트캠프가 끝나면 익숙해질 것이다.</p>
<p><em><strong>노트:</strong> <tt>describe</tt> 하위 명령을 사용하여 노드, 파드 및 디플로이먼트를 포함한 대부분의 쿠버네티스 프리미티브(primitives)에 대한 자세한 정보를 얻을 수 있다. describe 출력은 사람이 읽을 수 있도록 설계되었으며 스크립트로 작성할 수 없다.</em></p>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h3>터미널에 앱 표시</h3>
<p>파드는 격리된, 프라이빗 네트워크에서 실행되므로 - 디버깅하고 상호 작용할 수 있도록
파드에 대한 프록시 접근이 필요하다. 이를 위해, <code>kubectl proxy</code> 명령을 사용하여 <strong>두 번째 터미널</strong>에서 프록시를 실행한다. 새 터미널 창을 열고 새 터미널에서 다음을 실행하자:</p>
<p><code><b>kubectl proxy</b></code></p>
<p>이제 다시, 파드 이름을 가져오고 프록시를 통해 해당 파드를 직접 쿼리한다.
파드 이름을 가져오고 <tt>POD_NAME</tt> 환경 변수에 저장하려면:</p>
<p><code><b>export POD_NAME="$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')"</b></code><br />
<code><b>echo Name of the Pod: $POD_NAME</b></code></p>
<p>애플리케이션의 출력을 보려면, <code>curl</code> 요청을 실행하자:</p>
<p><code><b>curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/</b></code></p>
<p>URL은 파드의 API에 대한 경로이다.</p>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h3>컨테이너 로그 보기</h3>
<p>일반적으로 애플리케이션이 표준 출력으로 보내는 모든 항목은 파드 내의 컨테이너에 대한 로그가 된다. <code>kubectl logs</code> 명령을 사용하여 이 로그를 검색할 수 있다:</p>
<p><code><b>kubectl logs "$POD_NAME"</b></code></p>
<p><em><strong>노트:</strong> 파드 내부에 하나의 컨테이너만 있기 때문에, 컨테이너 이름을 지정할 필요가 없다.</em></p>
</div>
</div>
<div class="row">
<div class="col-md-12">
<h3>컨테이너에서 명령 실행</h3>
<p>파드가 실행되면 컨테이너에서 직접 명령을 실행할 수 있다.
이를 위해, <code>exec</code> 하위 명령을 사용하고 파드 이름을 매개변수로 사용한다. 환경 변수를 나열해보자:</p>
<p><code><b>kubectl exec "$POD_NAME" -- env</b></code></p>
<p>다시 말하지만, 파드에는 단일 컨테이너만 있으므로 컨테이너 자체의 이름을 생략할 수 있다.</p>
<p>다음으로 파드의 컨테이너에서 bash 세션을 시작한다:</p>
<p><code><b>kubectl exec -ti $POD_NAME -- bash</b></code></p>
<p>이제 NodeJS 애플리케이션을 실행하는 컨테이너에 열린 콘솔이 있다. 앱의 소스 코드는 <tt>server.js</tt> 파일에 있다:</p>
<p><code><b>cat server.js</b></code></p>
<p><tt>curl</tt> 명령을 실행하여 애플리케이션이 실행 중인지 확인할 수 있다:</p>
<p><code><b>curl http://localhost:8080</b></code></p>
<p><em><strong>노트:</strong> 여기서는 NodeJS 파드 내부에서 명령을 실행했기 때문에 <tt>localhost</tt>를 사용했다. localhost:8080에 연결할 수 없는 경우, <code>kubectl exec</code> 명령을 실행했고 포드 내에서 명령을 실행하고 있는지 확인해보자.</em></p>
<p>컨테이너 연결을 닫으려면, <code><b>exit</b></code>를 입력하자.</p>
</div>
</div>
<div class="row">
<p>
준비가 됐다면, <a href="/ko/docs/tutorials/kubernetes-basics/expose/expose-intro/" title="Using A Service To Expose Your App">서비스를 사용하여 앱 노출</a>로 이동하자.</p>
</p>
</div>
</main>
</div>