WordPress 튜토리얼
    • PDF

    WordPress 튜토리얼

    • PDF

    Article Summary

    Classic 환경에서 이용 가능합니다.

    Ncloud Kubernetes Service를 사용하여 클러스터 배포하기

    이 가이드에서는 네이버 클라우드 플랫폼의 Ncloud Kubernetes Service를 사용하여 클러스터에 WordPress 애플리케이션을 배포합니다.

    클러스터 만들기

    1. 네이버 클라우드 플랫폼 콘솔에 로그인합니다.
    2. 왼쪽 메뉴에서 Ncloud Kubernetes Service를 선택합니다.
    3. 상단의 [생성하기] 버튼을 클릭합니다.
    4. 아래의 설정을 완료합니다.
      • 클러스터 설정
        • 클러스터 이름: 원하는 이름을 입력합니다.
        • 노드 수: 이 가이드에서는 노드 수를 1로 설정합니다.
      • 로그인 키 설정
        • 워커 노드에 접속하기 위해 필요한 로그인 키를 설정합니다.
      • 최종 확인
        • 설정이 올바르게 되었는지 확인하고 [생성하기] 버튼을 클릭합니다.
    5. 몇 분이 지난 후 클러스터의 상태가 운영중이 되면 사용 가능합니다.
    참고

    자세한 가이드는 사용 가이드를 참조해 주십시오.

    클러스터 연결하기

    kubectl 설치

    생성된 클러스터에 연결하기 위해서는 CLI인 kubectl이 필요합니다. 아래 공식 문서에서 운영체제에 맞는 kubectl을 설치합니다.

    클러스터 연결

    nks-1-3-1_ko

    클러스터 상세정보에서 설정파일을 다운로드합니다.

    클러스터 접근에는 두 가지 방법이 있습니다.

    • $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
    

    nks-1-3-2_ko

    브라우저에서 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로 업데이트된 것을 확인할 수 있습니다.


    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.