- 인쇄
- PDF
WordPress 튜토리얼
- 인쇄
- PDF
Classic 환경에서 이용 가능합니다.
Ncloud Kubernetes Service를 사용하여 클러스터 배포하기
이 가이드에서는 네이버 클라우드 플랫폼의 Ncloud Kubernetes Service를 사용하여 클러스터에 WordPress 애플리케이션을 배포합니다.
클러스터 만들기
- 네이버 클라우드 플랫폼 콘솔에 로그인합니다.
- 왼쪽 메뉴에서 Ncloud Kubernetes Service를 선택합니다.
- 상단의 [생성하기] 버튼을 클릭합니다.
- 아래의 설정을 완료합니다.
- 클러스터 설정
- 클러스터 이름: 원하는 이름을 입력합니다.
- 노드 수: 이 가이드에서는 노드 수를 1로 설정합니다.
- 로그인 키 설정
- 워커 노드에 접속하기 위해 필요한 로그인 키를 설정합니다.
- 최종 확인
- 설정이 올바르게 되었는지 확인하고 [생성하기] 버튼을 클릭합니다.
- 클러스터 설정
- 몇 분이 지난 후 클러스터의 상태가 운영중이 되면 사용 가능합니다.
자세한 가이드는 사용 가이드를 참조해 주십시오.
클러스터 연결하기
kubectl 설치
생성된 클러스터에 연결하기 위해서는 CLI인 kubectl이 필요합니다. 아래 공식 문서에서 운영체제에 맞는 kubectl을 설치합니다.
클러스터 연결
클러스터 상세정보에서 설정파일을 다운로드합니다.
클러스터 접근에는 두 가지 방법이 있습니다.
- $HOME/.kube/config에 설정파일 추가
- kubectl 명령 사용 시 --kubeconfig="설정파일" 옵션 추가
이번 설명에서는 --kubeconfig="설정파일" 옵션을 사용하겠습니다. 편의를 위해 설정파일이 있는 경로에서 $KUBE_CONFIG
환경변수를 설정 후 진행합니다. 아래 "설정파일" 부분에 다운로드한 설정파일 경로를 입력합니다.
export KUBE_CONFIG="설정파일"
예시: export KUBE_CONFIG=kubeconfig-318.yaml
kubectl get nodes 명령을 사용하여 클러스터 노드가 클러스터 생성 시 설정한 수(1개)만큼 나오는지 조회합니다.
kubectl --kubeconfig $KUBE_CONFIG get nodes
- 실행 결과
NAME STATUS ROLES AGE VERSION
nks-pool-318-w-181 Ready node 7m v1.12.7
Windows에서의 설정 방법은 이 kubeconfig 환경변수 설정하기를 참조하시기 바랍니다.
애플리케이션 배포
kubectl 명령과 함께 Kubernetes Manifest 파일(.yaml)을 사용하여 MySQL 서비스와 WordPress 서비스를 배포해보겠습니다.
MySQL 배포
WordPress에 필요한 MySQL을 먼저 배포합니다.
MySQL Password Secret 생성
먼저 kubectl create secret 명령을 사용하여 MySQL에 접속하기 위한 Password를 Secret으로 생성합니다. 아래 "YOUR_PASSWORD" 부분에 새로 만들 비밀번호를 입력합니다.
kubectl --kubeconfig $KUBE_CONFIG create secret generic mysql-pass --from-literal=password="YOUR_PASSWORD"
- 실행 결과
secret/mysql-pass created
예시) kubectl --kubeconfig $KUBE_CONFIG create secret generic mysql-pass --from-literal=password=1234
MySQL 애플리케이션 배포
MySQL을 배포하기 위해서 아래의 링크의 Manifest 파일을 사용합니다. Manifest 파일에는 MySQL 서비스에 필요한 오브젝트인 PersistentVolume, PersistentVolumeClaim, Deployment, Service가 정의되어 있습니다.
아래와 같이 kubectl apply -f 명령을 사용해 위 Manifest 파일을 클러스터에 반영합니다.
kubectl --kubeconfig $KUBE_CONFIG apply -f https://gist.githubusercontent.com/NaverCloudPlatformDeveloper/39e63bf8051c2af338bf4728b4336358/raw/1804b7b36eb6818fedf600c73f6b9cf9219529a0/nks-tutorial-mysql.yaml
- 실행 결과
persistentvolume/mysql-pv created
persistentvolumeclaim/mysql-pv-claim created
deployment.apps/wordpress-mysql created
service/wordpress-mysql created
실서비스에서는 안정적인 운영을 위해 Cloud DB for MySQL 서비스 사용을 권장드립니다.
WordPress 배포
MySQL이 잘 생성되었다면 이번에는 WordPress를 배포하기 위해서 아래의 링크의 Manifest 파일을 사용합니다. Manifest 파일에는 Deployment, Service가 정의되어있습니다.
MySQL과 동일하게 kubectl apply -f 명령으로 WordPress를 배포합니다.
kubectl --kubeconfig $KUBE_CONFIG apply -f https://gist.githubusercontent.com/NaverCloudPlatformDeveloper/8bb23ccd8310f05d2ef737835d4d1748/raw/d97aa174df6f31d7c4b0de5957fe67c6a2846fe3/nks-tutorial-wordpress.yaml
- 실행 결과
deployment.apps/wordpress created
service/wordpress created
kubectl get service --watch 명령으로 WordPress 서비스의 배포 상황을 실시간으로 확인할 수 있습니다.
kubectl --kubeconfig $KUBE_CONFIG get service wordpress --watch
- 실행 결과
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress LoadBalancer 172.21.5.101 <pending> 80:31864/TCP 35s
wordpress LoadBalancer 172.21.5.101 slb-1815725.n... 80:31864/TCP 40s
일정 시간이 지나 EXTERNAL-IP가 pending 상태에서 실제 주소로 변경되면 서비스가 가능해집니다. kubectl get service 명령으로 WordPress 서비스의 EXTERNAL-IP 전체 주소를 확인합니다.
kubectl --kubeconfig $KUBE_CONFIG get service wordpress
- 실행 결과
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
wordpress LoadBalancer 172.21.5.101 slb-1815725.ncloudslb.com 80:31864/TCP 70s
브라우저에서 WordPress Service의 EXTERNAL-IP(예시: slb-1815725.ncloudslb.com)로 접속하면 WordPress 화면을 확인할 수 있습니다.
Pod 스케일링하기
현재 Pod 조회
kubectl get pods 명령으로 현재 mysql pod와 WordPress pod가 한 개씩 있는 것을 확인합니다.
kubectl --kubeconfig $KUBE_CONFIG get pods
- 실행 결과
NAME READY STATUS RESTARTS AGE
wordpress-6d884d9866-lj5bl 1/1 Running 0 10m
wordpress-mysql-7977b9588d-gbtll 1/1 Running 0 11m
Pod 스케일
kubectl scale 명령으로 WordPress pod를 3개로 늘려보겠습니다.
kubectl --kubeconfig $KUBE_CONFIG scale deployments/wordpress --replicas=3
- 실행 결과
deployment.extensions/wordpress scaled
결과확인
다시 kubectl get pods 명령을 사용하면 WordPress pod만 3개로 늘어난 것을 확인할 수 있습니다.
kubectl --kubeconfig $KUBE_CONFIG get pods
- 실행 결과
NAME READY STATUS RESTARTS AGE
wordpress-6d884d9866-2c8cl 1/1 Running 0 5s
wordpress-6d884d9866-7rxj8 1/1 Running 0 5s
wordpress-6d884d9866-lj5bl 1/1 Running 0 12m
wordpress-mysql-7977b9588d-gbtll 1/1 Running 0 14m
Application Update하기
현재 5.2 버전으로 구동 중인 WordPress의 버전을 5.2.2 버전으로 업데이트해보겠습니다.
현재버전 확인
kubectl get deployments -o wide 명령으로 현재 WordPress 이미지의 버전(5.2)을 확인합니다.
kubectl --kubeconfig $KUBE_CONFIG get deployments wordpress -o wide
- 실행 결과
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
wordpress 3 3 3 3 55m wordpress wordpress:5.2-apache app=wordpress,tier=frontend
버전 업데이트
kubectl set image 명령을 사용하여 현재 5.2 버전으로 구동 중인 WordPress의 버전을 5.2.2 버전으로 변경합니다.
kubectl --kubeconfig $KUBE_CONFIG set image deployments/wordpress wordpress=wordpress:5.2.2-apache
- 실행 결과
deployment.extensions/wordpress image updated
결과 확인
다시 kubectl get deployments -o wide -w 옵션으로 변경된 WordPress 업데이트를 실시간으로 확인합니다.
kubectl --kubeconfig $KUBE_CONFIG get deployments wordpress -o wide -w
- 실행 결과
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
wordpress 3 3 3 3 55m wordpress wordpress:5.2-apache app=wordpress,tier=frontend
wordpress 3 3 3 3 56m wordpress wordpress:5.2.2-apache app=wordpress,tier=frontend
일정 시간이 지나 WordPress 이미지 버전이 wordpress:5.2.2-apache로 업데이트된 것을 확인할 수 있습니다.