First Korean I10n work for release-1.14 (#13730)
* First Korean I10n work for release-1.14 - ko: Fix nav-menu sync in tutorials/statefulset #13374 (#13474) - ko: add outdated files in dev-1.14-ko.1 branch (#13473) - Translate title of concepts/../image.md Ko (#13507) - ko: add translation tutorial/stateful-application/cassandra #12450 (#13515) - Translate reference/kubectl/cheatsheet in Korean (#13549) - Translate tasks/access-application-cluster/access-cluster in Korean (#13565) - ko: add tutorials/stateful-application/mysql-wordpress-persistent-vol… (#13516) - Issue 12838 object management kubectl imperative config (#13657) - Translate standardized glossary Tag Fandamental in Korean (#13552) Co-authored-by: Kim Young Dae <38598117+zer0big@users.noreply.github.com> Co-authored-by: Yoon <learder@gmail.com> Co-authored-by: lapee79 <lapee79@gmail.com> Co-authored-by: Jesang Myung <jesang.myung@gmail.com> Co-authored-by: Seokho <shsongist@gmail.com> Co-authored-by: Claudia J.Kang <claudiajkang@gmail.com> Co-authored-by: June Yi <june.yi@samsung.com> * Fix conflict : pick-right-solution
This commit is contained in:
committed by
Kubernetes Prow Robot
parent
866fc48195
commit
34074d33ff
@@ -0,0 +1,5 @@
|
||||
---
|
||||
title: "상태 유지가 필요한(stateful) 애플리케이션"
|
||||
weight: 50
|
||||
---
|
||||
|
||||
@@ -67,11 +67,11 @@ kubectl get pods -w -l app=nginx
|
||||
```
|
||||
|
||||
두번째 터미널에서
|
||||
[`kubectl create`](/docs/reference/generated/kubectl/kubectl-commands/#create)로
|
||||
[`kubectl apply`](/docs/reference/generated/kubectl/kubectl-commands/#apply)로
|
||||
`web.yaml`에 정의된 헤드리스 서비스와 스테이트풀셋을 생성한다.
|
||||
|
||||
```shell
|
||||
kubectl create -f web.yaml
|
||||
kubectl apply -f web.yaml
|
||||
service/nginx created
|
||||
statefulset.apps/web created
|
||||
```
|
||||
@@ -154,7 +154,7 @@ web-1
|
||||
확인할 수 있다.
|
||||
|
||||
```shell
|
||||
kubectl run -i --tty --image busybox dns-test --restart=Never --rm /bin/sh
|
||||
kubectl run -i --tty --image busybox:1.28 dns-test --restart=Never --rm
|
||||
nslookup web-0.nginx
|
||||
Server: 10.0.0.10
|
||||
Address 1: 10.0.0.10 kube-dns.kube-system.svc.cluster.local
|
||||
@@ -212,7 +212,7 @@ for i in 0 1; do kubectl exec web-$i -- sh -c 'hostname'; done
|
||||
web-0
|
||||
web-1
|
||||
|
||||
kubectl run -i --tty --image busybox dns-test --restart=Never --rm /bin/sh
|
||||
kubectl run -i --tty --image busybox:1.28 dns-test --restart=Never --rm /bin/sh
|
||||
nslookup web-0.nginx
|
||||
Server: 10.0.0.10
|
||||
Address 1: 10.0.0.10 kube-dns.kube-system.svc.cluster.local
|
||||
@@ -774,7 +774,7 @@ kubectl get pods -w -l app=nginx
|
||||
볼 것이라는 것을 명심하자.
|
||||
|
||||
```shell
|
||||
kubectl create -f web.yaml
|
||||
kubectl apply -f web.yaml
|
||||
statefulset.apps/web created
|
||||
Error from server (AlreadyExists): error when creating "web.yaml": services "nginx" already exists
|
||||
```
|
||||
@@ -874,7 +874,7 @@ service "nginx" deleted
|
||||
스테이트풀셋과 헤드리스 서비스를 한번 더 다시 생성하자.
|
||||
|
||||
```shell
|
||||
kubectl create -f web.yaml
|
||||
kubectl apply -f web.yaml
|
||||
service/nginx created
|
||||
statefulset.apps/web created
|
||||
```
|
||||
@@ -938,7 +938,7 @@ kubectl get po -l app=nginx -w
|
||||
다른 터미널에서 매니페스트 안에 스테이트풀셋과 서비스를 생성하자.
|
||||
|
||||
```shell
|
||||
kubectl create -f web-parallel.yaml
|
||||
kubectl apply -f web-parallel.yaml
|
||||
service/nginx created
|
||||
statefulset.apps/web created
|
||||
```
|
||||
|
||||
@@ -0,0 +1,258 @@
|
||||
---
|
||||
title: "예시: 카산드라를 스테이트풀셋으로 배포하기"
|
||||
reviewers:
|
||||
content_template: templates/tutorial
|
||||
weight: 30
|
||||
---
|
||||
|
||||
{{% capture overview %}}
|
||||
이 튜토리얼은 네이티브 클라우드 [카산드라](http://cassandra.apache.org/)를 쿠버네티스에서 배포하는 방법을 소개한다. 이 예제에서 커스텀 카산드라 *시드 제공자(SeedProvider)* 는 카산드라가 클러스터에 조인한 새 카산드라 노드를 발견할 수 있게 한다.
|
||||
|
||||
*스테이트풀셋* 은 상태있는 애플리케이션을 클러스터 환경에서 쉽게 배포할 수 있게 한다. 이 튜토리얼에서 이용할 기능의 자세한 정보는 [*스테이트풀셋*](/docs/concepts/workloads/controllers/statefulset/) 문서를 참조하자.
|
||||
|
||||
**도커에서 카산드라**
|
||||
|
||||
이 튜토리얼의 *파드* 는 구글의 [컨테이너 레지스트리](https://cloud.google.com/container-registry/docs/)에
|
||||
[`gcr.io/google-samples/cassandra:v13`](https://github.com/kubernetes/examples/blob/master/cassandra/image/Dockerfile) 이미지를 이용한다.
|
||||
이 도커 이미지는 [debian-base](https://github.com/kubernetes/kubernetes/tree/master/build/debian-base)에
|
||||
기반하였고 OpenJDK 8을 포함한다.
|
||||
|
||||
이 이미지는 아파치 데비안 리포의 표준 카산드라 설치본을 포함한다.
|
||||
환경변수를 이용하여 `cassandra.yaml`에 삽입된 값을 바꿀 수 있다.
|
||||
|
||||
| 환경 변수 | 기본값 |
|
||||
| ------------- |:-------------: |
|
||||
| `CASSANDRA_CLUSTER_NAME` | `'Test Cluster'` |
|
||||
| `CASSANDRA_NUM_TOKENS` | `32` |
|
||||
| `CASSANDRA_RPC_ADDRESS` | `0.0.0.0` |
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture objectives %}}
|
||||
* 카산드라 헤드리스 [*서비스*](/docs/concepts/services-networking/service/)를 생성하고 검증한다.
|
||||
* [스테이트풀셋](/docs/concepts/workloads/controllers/statefulset/)을 이용하여 카산드라 링을 생성한다.
|
||||
* [스테이트풀셋](/docs/concepts/workloads/controllers/statefulset/)을 검증한다.
|
||||
* [스테이트풀셋](/docs/concepts/workloads/controllers/statefulset/)을 수정한다.
|
||||
* [스테이트풀셋](/docs/concepts/workloads/controllers/statefulset/)과 포함된 [파드](/docs/concepts/workloads/pods/pod/)를 삭제한다.
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture prerequisites %}}
|
||||
이 튜토리얼을 완료하려면, [파드](/docs/concepts/workloads/pods/pod/), [서비스](/docs/concepts/services-networking/service/), [스테이트풀셋](/docs/concepts/workloads/controllers/statefulset/)의 기본 개념에 친숙해야한다. 추가로
|
||||
|
||||
* *kubectl* 커맨드라인 도구를 [설치와 설정](/docs/tasks/tools/install-kubectl/)하자.
|
||||
|
||||
* [`cassandra-service.yaml`](/examples/application/cassandra/cassandra-service.yaml)와
|
||||
[`cassandra-statefulset.yaml`](/examples/application/cassandra/cassandra-statefulset.yaml)를 다운로드한다.
|
||||
|
||||
* 실행 중인 쿠버네티스 클러스터를 소유
|
||||
|
||||
{{< note >}}
|
||||
아직 클러스터가 없다면 [시작하기](/docs/setup/pick-right-solution/)를 읽도록 하자.
|
||||
{{< /note >}}
|
||||
|
||||
### 추가적인 Minikube 설정 요령
|
||||
|
||||
{{< caution >}}
|
||||
[Minikube](/docs/getting-started-guides/minikube/)는 1024MB 메모리와 1개 CPU가 기본 설정이다. 이 튜토리얼에서 Minikube를 기본 리소스 설정으로 실행하면 리소스 부족 오류가 발생한다. 이런 오류를 피하려면 Minikube를 다음 설정으로 실행하자.
|
||||
|
||||
```shell
|
||||
minikube start --memory 5120 --cpus=4
|
||||
```
|
||||
{{< /caution >}}
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture lessoncontent %}}
|
||||
## 카산드라 헤드리스 서비스 생성하기
|
||||
|
||||
쿠버네티스 [서비스](/docs/concepts/services-networking/service/)는 동일 작업을 수행하는 [파드](/docs/concepts/workloads/pods/pod/)의 집합을 기술한다.
|
||||
|
||||
다음의 `서비스`는 쿠버네티스 클러스터에서 카산드라 파드와 클라이언트 간에 DNS 찾아보기 용도로 사용한다.
|
||||
|
||||
{{< codenew file="application/cassandra/cassandra-service.yaml" >}}
|
||||
|
||||
1. 다운로드 받은 매니페스트 파일 디렉터리에 터미널 윈도우를 열자.
|
||||
1. `cassandra-service.yaml` 파일에서 카산드라 스테이트풀셋 노드를 모두 추적하는 서비스를 생성한다.
|
||||
|
||||
```shell
|
||||
kubectl apply -f https://k8s.io/examples/application/cassandra/cassandra-service.yaml
|
||||
```
|
||||
|
||||
### 검증하기 (선택)
|
||||
|
||||
카산드라 서비스 살펴보기
|
||||
|
||||
```shell
|
||||
kubectl get svc cassandra
|
||||
```
|
||||
|
||||
결과는 다음과 같다.
|
||||
|
||||
```
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
cassandra ClusterIP None <none> 9042/TCP 45s
|
||||
```
|
||||
|
||||
이와 다른 응답이라면 서비스 생성에 실패한 것이다. 일반적인 문제에 대한 [서비스 디버깅하기](/docs/tasks/debug-application-cluster/debug-service/)를 읽어보자.
|
||||
|
||||
## 카산드라 링을 생성하는 스테이트풀셋 이용하기
|
||||
|
||||
스테이트풀셋 매니페스트에는 다음을 포함하는데 3개 파드로 구성된 카산드라 링을 생성한다.
|
||||
|
||||
{{< note >}}
|
||||
이 예는 Minikube를 위한 기본 프로비저너이다. 다음 스테이트풀셋을 작업하는 클라우드 환경에서 갱신한다.
|
||||
{{< /note >}}
|
||||
|
||||
{{< codenew file="application/cassandra/cassandra-statefulset.yaml" >}}
|
||||
|
||||
1. 필요하면 스테이트풀셋 갱신
|
||||
1. `cassandra-statefulset.yaml` 파일로 카산드라 스테이트풀셋 생성
|
||||
|
||||
```shell
|
||||
kubectl apply -f https://k8s.io/examples/application/cassandra/cassandra-statefulset.yaml
|
||||
```
|
||||
|
||||
## 카산드라 스테이트풀셋 검증하기
|
||||
|
||||
1. 카산드라 스테이트풀셋 얻기
|
||||
|
||||
```shell
|
||||
kubectl get statefulset cassandra
|
||||
```
|
||||
|
||||
응답은 다음과 같다.
|
||||
|
||||
```
|
||||
NAME DESIRED CURRENT AGE
|
||||
cassandra 3 0 13s
|
||||
```
|
||||
|
||||
`StatefulSet`리소스는 순차적으로 파드를 배포한다.
|
||||
|
||||
1. 순차적으로 생성된 현황을 보기 위해 파드를 살펴보자.
|
||||
|
||||
```shell
|
||||
kubectl get pods -l="app=cassandra"
|
||||
```
|
||||
|
||||
응답은 다음과 같다.
|
||||
|
||||
```shell
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
cassandra-0 1/1 Running 0 1m
|
||||
cassandra-1 0/1 ContainerCreating 0 8s
|
||||
```
|
||||
|
||||
모든 3개 파드가 배포되기까지 몇 분이 소요될 수 있다. 배포 후에는 같은 명령은 다음같이 응답한다.
|
||||
|
||||
```
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
cassandra-0 1/1 Running 0 10m
|
||||
cassandra-1 1/1 Running 0 9m
|
||||
cassandra-2 1/1 Running 0 8m
|
||||
```
|
||||
|
||||
3. 링의 상태를 보여주는 카산드라 [nodetool](https://wiki.apache.org/cassandra/NodeTool)을 실행하자.
|
||||
|
||||
```shell
|
||||
kubectl exec -it cassandra-0 -- nodetool status
|
||||
```
|
||||
|
||||
이 응답은 다음과 비슷하게 보일 것이다.
|
||||
|
||||
```
|
||||
Datacenter: DC1-K8Demo
|
||||
======================
|
||||
Status=Up/Down
|
||||
|/ State=Normal/Leaving/Joining/Moving
|
||||
-- Address Load Tokens Owns (effective) Host ID Rack
|
||||
UN 172.17.0.5 83.57 KiB 32 74.0% e2dd09e6-d9d3-477e-96c5-45094c08db0f Rack1-K8Demo
|
||||
UN 172.17.0.4 101.04 KiB 32 58.8% f89d6835-3a42-4419-92b3-0e62cae1479c Rack1-K8Demo
|
||||
UN 172.17.0.6 84.74 KiB 32 67.1% a6a1e8c2-3dc5-4417-b1a0-26507af2aaad Rack1-K8Demo
|
||||
```
|
||||
|
||||
## 카산드라 스테이트풀셋 수정하기
|
||||
|
||||
`kubectl edit`를 사용하여 카산드라 스테이트풀셋의 크기를 수정한다.
|
||||
|
||||
1. 다음 명령어를 실행한다.
|
||||
|
||||
```shell
|
||||
kubectl edit statefulset cassandra
|
||||
```
|
||||
|
||||
이 명령은 터미널에서 편집기를 연다. 변경해야할 행은 `replicas` 필드이다. 다음 예제는 `StatefulSet` 파일에서 발췌했다.
|
||||
|
||||
```yaml
|
||||
# Please edit the object below. Lines beginning with a '#' will be ignored,
|
||||
# and an empty file will abort the edit. If an error occurs while saving this file will be
|
||||
# reopened with the relevant failures.
|
||||
#
|
||||
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
creationTimestamp: 2016-08-13T18:40:58Z
|
||||
generation: 1
|
||||
labels:
|
||||
app: cassandra
|
||||
name: cassandra
|
||||
namespace: default
|
||||
resourceVersion: "323"
|
||||
selfLink: /apis/apps/v1/namespaces/default/statefulsets/cassandra
|
||||
uid: 7a219483-6185-11e6-a910-42010a8a0fc0
|
||||
spec:
|
||||
replicas: 3
|
||||
```
|
||||
|
||||
1. 레플리카 개수를 4로 바꾸고, 매니페스트를 저장한다.
|
||||
|
||||
The `StatefulSet` now contains 4 Pods.
|
||||
|
||||
1. 검증하기 위해 카산드라 스테이트풀셋을 살펴보자
|
||||
|
||||
```shell
|
||||
kubectl get statefulset cassandra
|
||||
```
|
||||
|
||||
결과는 다음과 같다.
|
||||
|
||||
```
|
||||
NAME DESIRED CURRENT AGE
|
||||
cassandra 4 4 36m
|
||||
```
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture cleanup %}}
|
||||
스테이트풀셋을 삭제하거나 스케일링하는 것은 스테이트풀셋에 연관된 볼륨을 삭제하지 않는다. 당신의 데이터가 스테이트풀셋의 관련된 모든 리소스를 자동으로 제거하는 것보다 더 가치있기에 이 설정은 당신의 안전을 위한 것이다.
|
||||
|
||||
{{< warning >}}
|
||||
스토리지 클래스와 리클레임 정책에 따라 *퍼시스턴스볼륨클레임* 을 삭제하면 그와 연관된 볼륨도 삭제될 수 있다. 볼륨 요청이 삭제되어도 데이터를 접근할 수 있다고 절대로 가정하지 말자.
|
||||
{{< /warning >}}
|
||||
|
||||
1. 다음 명령어(한 줄로 연결된)를 실행하여 카산드라 `스테이트풀셋`을 모두 제거하자.
|
||||
|
||||
```shell
|
||||
grace=$(kubectl get po cassandra-0 -o=jsonpath='{.spec.terminationGracePeriodSeconds}') \
|
||||
&& kubectl delete statefulset -l app=cassandra \
|
||||
&& echo "Sleeping $grace" \
|
||||
&& sleep $grace \
|
||||
&& kubectl delete pvc -l app=cassandra
|
||||
```
|
||||
|
||||
1. 다음 명령어를 실행하여 카산드라 서비스를 제거하자.
|
||||
|
||||
```shell
|
||||
kubectl delete service -l app=cassandra
|
||||
```
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture whatsnext %}}
|
||||
|
||||
* 어떻게 [스테이트풀셋 스케일](/docs/tasks/run-application/scale-stateful-set/)하는지 살펴본다.
|
||||
* [*쿠버네티스시드제공자*](https://github.com/kubernetes/examples/blob/master/cassandra/java/src/main/java/io/k8s/cassandra/KubernetesSeedProvider.java)에 대해 더 살펴본다.
|
||||
* 커스텀 [시드 제공자 설정](https://git.k8s.io/examples/cassandra/java/README.md)를 살펴본다.
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
@@ -0,0 +1,233 @@
|
||||
---
|
||||
title: "예시: WordPress와 MySQL을 퍼시스턴트 볼륨에 배포하기"
|
||||
reviewers:
|
||||
content_template: templates/tutorial
|
||||
weight: 20
|
||||
card:
|
||||
name: tutorials
|
||||
weight: 40
|
||||
title: "스테이트풀셋 예시: Wordpress와 퍼시스턴트 볼륨"
|
||||
---
|
||||
|
||||
{{% capture overview %}}
|
||||
이 튜토리얼은 WordPress 사이트와 MySQL 데이터베이스를 Minikube를 이용하여 어떻게 배포하는지 보여준다. 애플리케이션 둘 다 퍼시스턴트 볼륨과 퍼시스턴트볼륨클레임을 데이터를 저장하기 위해 사용한다.
|
||||
|
||||
[퍼시스턴트볼륨](/docs/concepts/storage/persistent-volumes/)(PV)는 관리자가 수동으로 프로비저닝한 클러스터나 쿠버네티스 [스토리지클래스](/docs/concepts/storage/storage-classes)를 이용해 동적으로 프로비저닝된 저장소의 일부이다. [퍼시스턴트볼륨클레임](/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims)(PVC)은 PV로 충족할 수 있는 사용자에 의한 스토리지 요청이다. 퍼시스턴트볼륨은 파드 라이프사이클과 독립적이며 재시작, 재스케줄링이나 파드를 삭제할 때에도 데이터를 보존한다.
|
||||
|
||||
{{< warning >}}
|
||||
이 배포는 프로덕션 사용예로는 적절하지 않은데 이는 단일 인스턴스의 WordPress와 MySQL을 이용했기 때문이다. 프로덕션이라면 [WordPress Helm Chart](https://github.com/kubernetes/charts/tree/master/stable/wordpress)로 배포하기를 고려해보자.
|
||||
{{< /warning >}}
|
||||
|
||||
{{< note >}}
|
||||
이 튜토리얼에 제공된 파일들은 GA 디플로이먼트 API를 사용하며 쿠버네티스 버전 1.9 이상을 이용한다. 이 튜토리얼을 쿠버네티스 하위 버전에서 적용한다면 API 버전을 적절히 갱신하거나 이 튜토리얼의 이전 버전을 참고하자.
|
||||
{{< /note >}}
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture objectives %}}
|
||||
* 퍼시스턴트볼륨클레임과 퍼시스턴트볼륨 생성
|
||||
* 다음을 포함하는 `kustomization.yaml` 생성
|
||||
* 시크릿 생성자
|
||||
* MySQL 리소스 구성
|
||||
* WordPress 리소스 구성
|
||||
* `kubectl apply -k ./`로 생성한 kustomization 을 적용
|
||||
* 정리
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture prerequisites %}}
|
||||
|
||||
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
|
||||
이 예시는 `kubectl` 1.14 이상 버전에서 동작한다.
|
||||
|
||||
다음 설정 파일을 다운로드한다.
|
||||
|
||||
1. [mysql-deployment.yaml](/examples/application/wordpress/mysql-deployment.yaml)
|
||||
|
||||
1. [wordpress-deployment.yaml](/examples/application/wordpress/wordpress-deployment.yaml)
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture lessoncontent %}}
|
||||
|
||||
## 퍼시스턴트볼륨클레임과 퍼시스턴트볼륨 생성
|
||||
|
||||
MySQL과 Wordpress는 각각 데이터를 저장할 퍼시스턴트볼륨이 필요하다. 퍼시스턴트볼륨클레임은 배포 단계에 생성된다.
|
||||
|
||||
많은 클러스터 환경에서 설치된 기본 스토리지클래스(StorageClass)가 있다. 퍼시스턴트볼륨클레임에 스토리지클래스를 지정하지 않으면 클러스터의 기본 스토리지클래스를 사용한다.
|
||||
|
||||
퍼시스턴트볼륨클레임이 생성되면 퍼시스턴트볼륨이 스토리지클래스 설정을 기초로 동적으로 프로비저닝된다.
|
||||
|
||||
{{< warning >}}
|
||||
로컬 클러스터에서 기본 스토리지클래스는 `hostPath` 프로비저너를 사용한다. `hostPath`는 개발과 테스트 목적에만 적합하다. `hostPath` 볼륨인 경우 데이터는 스케쥴링된 파드의 노드에 `/tmp` 살아있고 노드 간에 이동하지 않는다. 파드가 죽어서 클러스터 내에 다른 노드로 스케줄링되거나 해당 노드가 재부팅되면 그 데이터는 잃어버린다.
|
||||
{{< /warning >}}
|
||||
|
||||
{{< note >}}
|
||||
`hostPath` 프로비저너를 사용해야 하는 클러스터를 기동하는 경우라면 `--enable-hostpath-provisioner` 플래그를 `controller-manager` 컴포넌트에 꼭 설정해야 한다.
|
||||
{{< /note >}}
|
||||
|
||||
{{< note >}}
|
||||
만약 구글 쿠버네티스 엔진으로 운영하는 쿠버네티스 클러스터를 가지고 있다면 [가이드](https://cloud.google.com/kubernetes-engine/docs/tutorials/persistent-disk)를 따르도록 한다.
|
||||
{{< /note >}}
|
||||
|
||||
## kustomization.yaml 생성하기
|
||||
|
||||
### 시크릿 생성자 추가
|
||||
[시크릿](/docs/concepts/configuration/secret/)은 암호나 키 같은 민감한 데이터들을 저장하는 개체이다. 1.14 버전부터 `kubectl`은 kustomization 파일을 이용해서 쿠버네티스 개체를 관리한다. `kustomization.yaml`의 제네레니터로 시크릿을 생성할 수 있다.
|
||||
|
||||
다음 명령어로 `kustomization.yaml` 내에 시크릿 제네레이터를 추가한다. `YOUR_PASSWORD`는 사용하기 원하는 암호로 변경해야 한다.
|
||||
|
||||
```shell
|
||||
cat <<EOF >./kustomization.yaml
|
||||
secretGenerator:
|
||||
- name: mysql-pass
|
||||
literals:
|
||||
- password=YOUR_PASSWORD
|
||||
EOF
|
||||
```
|
||||
|
||||
## MySQL과 WordPress에 필요한 리소스 구성 추가하기
|
||||
|
||||
다음 매니페스트는 MySQL 디플로이먼트 단일 인스턴스를 기술한다. MySQL 컨케이너는 퍼시스턴트볼륨을 /var/lib/mysql에 마운트한다. `MYSQL_ROOT_PASSWORD` 환경변수는 시크릿에서 가져와 데이터베이스 암호로 설정한다.
|
||||
|
||||
{{< codenew file="application/wordpress/mysql-deployment.yaml" >}}
|
||||
|
||||
1. MySQL 디플로이먼트 구성 파일을 다운로드한다.
|
||||
|
||||
```shell
|
||||
curl -LO https://k8s.io/examples/application/wordpress/mysql-deployment.yaml
|
||||
```
|
||||
|
||||
2. WordPress 구성 파일을 다운로드한다.
|
||||
|
||||
```shell
|
||||
curl -LO https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml
|
||||
```
|
||||
|
||||
3. 두 파일을 `kustomization.yaml`에 추가하자.
|
||||
|
||||
```shell
|
||||
cat <<EOF >>./kustomization.yaml
|
||||
resources:
|
||||
- mysql-deployment.yaml
|
||||
- wordpress-deployment.yaml
|
||||
EOF
|
||||
```
|
||||
|
||||
## 적용하고 확인하기
|
||||
`kustomization.yaml`은 WordPress 사이트와 MySQL 데이터베이스를 배포하는 모든 리소스를 포함한다.
|
||||
다음과 같이 디렉터리를 적용할 수 있다.
|
||||
```shell
|
||||
kubectl apply -k ./
|
||||
```
|
||||
|
||||
이제 모든 개체가 존재하는지 확인할 수 있다.
|
||||
|
||||
1. 시크릿이 존재하는지 다음 명령어를 실행하여 확인한다.
|
||||
|
||||
```shell
|
||||
kubectl get secrets
|
||||
```
|
||||
|
||||
응답은 아래와 비슷해야 한다.
|
||||
|
||||
```shell
|
||||
NAME TYPE DATA AGE
|
||||
mysql-pass-c57bb4t7mf Opaque 1 9s
|
||||
```
|
||||
|
||||
2. 퍼시스턴트볼륨이 동적으로 프로비저닝되었는지 확인한다.
|
||||
|
||||
```shell
|
||||
kubectl get pvc
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
PV를 프로비저닝하고 정착(bound)시키는데 수 분이 걸릴 수 있다.
|
||||
{{< /note >}}
|
||||
|
||||
응답은 아래와 비슷해야 한다.
|
||||
|
||||
```shell
|
||||
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
|
||||
mysql-pv-claim Bound pvc-8cbd7b2e-4044-11e9-b2bb-42010a800002 20Gi RWO standard 77s
|
||||
wp-pv-claim Bound pvc-8cd0df54-4044-11e9-b2bb-42010a800002 20Gi RWO standard 77s
|
||||
```
|
||||
|
||||
3. 다음 명령어를 실행하여 파드가 실행 중인지 확인한다.
|
||||
|
||||
```shell
|
||||
kubectl get pods
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
파드의 상태가 `RUNNING`가 되기까지 수 분이 걸릴 수 있다.
|
||||
{{< /note >}}
|
||||
|
||||
응답은 아래와 비슷해야 한다.
|
||||
|
||||
```
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
wordpress-mysql-1894417608-x5dzt 1/1 Running 0 40s
|
||||
```
|
||||
|
||||
4. 다음 명령어를 실행하여 서비스가 실행 중인지 확인해보자.
|
||||
|
||||
```shell
|
||||
kubectl get services wordpress
|
||||
```
|
||||
|
||||
응답은 아래와 비슷해야 한다.
|
||||
|
||||
```
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
wordpress ClusterIP 10.0.0.89 <pending> 80:32406/TCP 4m
|
||||
```
|
||||
|
||||
{{< note >}}
|
||||
Minikube에서는 서비스를 `NodePort`으로만 노출할 수 있다. EXTERNAL-IP는 항상 Pending 상태이다.
|
||||
{{< /note >}}
|
||||
|
||||
5. 다음 명령어를 실행하여 WordPress 서비스의 IP 주소를 얻어온다.
|
||||
|
||||
```shell
|
||||
minikube service wordpress --url
|
||||
```
|
||||
|
||||
응답은 아래와 비슷해야 한다.
|
||||
|
||||
```
|
||||
http://1.2.3.4:32406
|
||||
```
|
||||
|
||||
6. IP 주소를 복사해서 웹 브라우저에서 사이트를 열어 보자.
|
||||
|
||||
아래 스크린샷과 유사한 WordPress 설정 페이지를 볼 수 있어야 한다.
|
||||
|
||||

|
||||
|
||||
{{< warning >}}
|
||||
이 페이지의 WordPress 설치를 내버려 두지 말자. 다른 사용자가 이 페이지를 발견하고 귀하의 인스턴스에 웹 사이트를 설정하고 악의적인 컨텐츠를 게시하는데 사용할 수 있다. <br/><br/>WordPress를 사용자명과 암호를 넣어 생성하거나 인스턴스를 삭제하자.
|
||||
{{< /warning >}}
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture cleanup %}}
|
||||
|
||||
1. 다음 명령을 실핼하여 시크릿, 디플로이먼트, 서비스와 퍼시스턴트볼륨클레임을 삭제하자.
|
||||
|
||||
```shell
|
||||
kubectl delete -k ./
|
||||
```
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture whatsnext %}}
|
||||
|
||||
* [인트로스펙션과 디버깅](/docs/tasks/debug-application-cluster/debug-application-introspection/)를 알아보자.
|
||||
* [잡](/docs/concepts/workloads/controllers/jobs-run-to-completion/)를 알아보자.
|
||||
* [포트 포워딩](/docs/tasks/access-application-cluster/port-forward-access-application-cluster/)를 알아보자.
|
||||
* 어떻게 [컨테이너에서 셸을 사용하는지](/docs/tasks/debug-application-cluster/get-shell-running-container/)를 알아보자.
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
Reference in New Issue
Block a user