송창안
NAVER CLOUD PLATFORM
10 min readOct 11, 2019

--

네이버 클라우드 플랫폼에서 Kubernetes Service와 Kubeapps를 연동하여 어플리케이션 쉽게 배포하기

안녕하세요, 네이버 클라우드 플랫폼 Tech Evangelist 송창안입니다.

오늘은 네이버 클라우드 플랫폼에서 쿠버네티스 서비스(NKS)와 Kubeapps를 연동하여 어플리케이션을 쉽게 배포하는 법을 설명하도록 하겠습니다.

0. NKS를 구성합니다.

기본적으로 노드 수 3개로 테스트를 진행해보았습니다.

-> 네이버 클라우드 플랫폼의 Kubernetes Service 쉽게 사용하기

  1. Kubernetes Service에서 워커노드들의 초기화가 완료되면, 개인 PC 및 관리 노드에서 작업을 진행합니다.

설정 파일을 다운 받아서, 관리 노드에 추가 후 환경변수를 지정합니다.

# export KUBE_CONFIG=”${HOME}/kubeconfig-610.yaml”

2. helm 다운 설치를 합니다.

# wget https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz # tar -zxvf helm-v2.14.3-linux-amd64.tar.gz # mv linux-amd64/helm /usr/local/bin/helm

3. helm 관련 Cluster Role Binding 추가

# kubectl — kubeconfig=$KUBE_CONFIG create clusterrolebinding tiller-cluster-admin \ — clusterrole=cluster-admin \ — serviceaccount=kube-system:default clusterrolebinding.rbac.authorization.k8s.io/tiller-cluster-admin created

4. helm을 추가합니다.

# helm — kubeconfig=$KUBE_CONFIG init

5. NAS 상품 추가를 합니다. (Storage class를 활용하기 위함입니다.)

-> 네이버 클라우드 플랫폼 설명서에서 NAS 볼륨생성 부분을 참조하시기 바랍니다.

6. Kubernetes Service에서 Storage를 추가합니다.

6번의 NAS 상품 추가에서 _NAS_IP_, _NAS_PATH_를 알아 옵니다.

위의 그림과 같이 해당 값을 확인합니다.

__NAS_IP__: 10.250.53.85 __NAS_PATH__: /n2563205_kubeappstest

이후 아래와 같이 storage 클래스를 추가합니다.

helm — kubeconfig=$KUBE_CONFIG — name storage install stable/nfs-client-provisioner \ — set nfs.server=10.250.53.85 \ — set nfs.path=/n2563205_kubeappstest

7. Storage 클래스를 확인합니다. 이후 default storage class를 변경합니다.

# kubectl — kubeconfig=$KUBE_CONFIG get storageclass NAME PROVISIONER AGE nfs-client cluster.local/storage-nfs-client-provisioner 34s nks-block-storage (default) blk.csi.ncloud.com # kubectl — kubeconfig=$KUBE_CONFIG patch storageclass nks-block-storage -p ‘{“metadata”: {“annotations”:{“storageclass.kubernetes.io/is-default-class”:”false”}}}’ storageclass.storage.k8s.io/nks-block-storage patched # kubectl — kubeconfig=$KUBE_CONFIG patch storageclass nfs-client -p ‘{“metadata”: {“annotations”:{“storageclass.kubernetes.io/is-default-class”:”true”}}}’ storageclass.storage.k8s.io/nfs-client patched # kubectl — kubeconfig=$KUBE_CONFIG get storageclass NAME PROVISIONER AGE nfs-client (default) cluster.local/storage-nfs-client-provisioner 4m42s nks-block-storage blk.csi.ncloud.com 14m

8. Kubeapps를 설치합니다.

프로젝트 git 위치 -> https://github.com/kubeapps/kubeapps

# helm — kubeconfig=$KUBE_CONFIG repo add bitnami https://charts.bitnami.com/bitnami # helm — kubeconfig=$KUBE_CONFIG install — name kubeapps — namespace kubeapps bitnami/kubeapps

9. Kubeapps를 위한 token을 생성합니다.

# kubectl — kubeconfig=$KUBE_CONFIG create serviceaccount kubeapps-operator # kubectl — kubeconfig=$KUBE_CONFIG create clusterrolebinding kubeapps-operator — clusterrole=cluster-admin — serviceaccount=default:kubeapps-operator

10. Kubeapps dashboard를 확인합니다.

# export POD_NAME=$(kubectl — kubeconfig=$KUBE_CONFIG get pods -n kubeapps -l “app=kubeapps,release=kubeapps” -o jsonpath=”{.items[0].metadata.name}”) # echo $POD_NAME kubeapps-765b88fd57-xngrc

11. Kubeapps dashboard에 접속하기 위해 8080 포트를 포워딩 설정합니다.

bectl — kubeconfig=$KUBE_CONFIG port-forward -n kubeapps $POD_NAME 8080:8080 &

12. 저는 Firefox로 접속하기 위해 ‘x11 forwarding’ 하였습니다.

일반 서버 -X11 forwarding 설정 가이드 -CentOS편-

13. Firefox를 실행합니다.

# firefox

14. 접속에 필요한 token을 확인합니다.

# kubectl — kubeconfig=$KUBE_CONFIG get secret $(kubectl — kubeconfig=$KUBE_CONFIG get serviceaccount kubeapps-operator -o jsonpath=’{.secrets[].name}’) -o jsonpath=’{.data.token}’ | base64 — decode eyJhbGciOiJSUzI1NiIeyJhbGciOiJSUzI1NiIeyJhbGciOiJSUzI1NiIZXJuZXRlcy5pbeyJhbGciOiJSUzI1NiIheyJhbGciOiJSUzI1NiIjb3VudC9zZWNyZXQueyJhbGciOiJSUzI1NeyJhbGciOiJSUzI1NiIlYWNjb3VudC9zZXeyJhbGciOiJSUzI1NiIG9yIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3eyJhbGciOiJSUzI1NiIDQ4OGU3ZjktYzJmMS0xMWU5LTk1YzItZjIyMGNkYmViNDE2Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmRlZmF1bHQ6a3ViZWFwcHMtb3BlcmF0b3IifQ.C9UepkhOjJgXZTgZFQpaasABiGIkOlg9Pb_R1u74kfo4gHF-0oct5bstnXuq7ysZfwt6UijHCztJI5enzTB_l6rpnrM4gZqmUqA9fL6uzjcI4qbgJsHYKlht_Zt9EWGIB4sHtbo8BWi49CKymauCvKnFpVRnDTyQWlSB0JdGPey3RQhT6u1jNLxSKEgM0cE2KLdQvMblqoBLkX9L3hqoiwDbVrmUGr5LZSQQz1Zkn5RjMtIIGUbCfjlA0TLG-mut32vFOxQ_gwe6CokeGyHUsXAsz3d5bVmJ_Nm2JbJxjBJ-zW0WzxurogN6fL29vgvAOqrD2NwYL6JSWPD-qCx6cg

15. 확인한 토큰을 통해 접속합니다.

16. Catalog를 통해 확인합니다.

17. Catalog에서 nginx를 찾은 후, Deploy를 시도해봅니다.

18. Deploy가 완료된 후 URL로 접속하여 테스트합니다.

19. 확인되는 웹페이지는 아래와 같습니다.

다음에는

“ Kubeapps 127.0.0.1이 외부에 접속이 가능하게 해서 사용자들이 쉽게 배포가 가능하도록 구성하는 방법”의 주제로 찾아뵙도록 하겠습니다.

많은 분들이 도움을 얻으셨길 바라며 긴 글 읽어주셔서 감사합니다.

--

--

송창안
NAVER CLOUD PLATFORM

안녕하세요? Naver Cloud Platform Evangelist 송창안입니다. 복잡한 클라우드 기술을 여러분과 함께 확인 하며, 쉽게 풀어가보고 싶습니다.