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

송창안
NAVER CLOUD PLATFORM
14 min readSep 10, 2019

--

안녕하세요, Kubernetes Service를 활용하고 구축하는데 어려움을 겪는 분들이 많으신데요,

오늘은 네이버 클라우드 플랫폼의 Kubernetes Service를 쉽게 사용하는 방법을 알아보고자 합니다.

Kubernetes란 무엇일까요?

쿠버네티스 Kubernetes

컨테이너 구성된 애플리케이션을 배포하기 위해 자동으로 제어 및 분산하는 기술로 구성된 오픈 소스 플랫폼을 뜻합니다.

이러한 역할은 Orchestrator라고 불리고 있습니다.

쿠버네티스라는 명칭은 키잡이(Helmsman)이나 파일럿을 뜻하는 그리스어에서 유래하였고

구글이 2014년에 쿠버네티스 프로젝트를 오픈소스화 했습니다.

‘쿠버네티스 서비스’에 대해서 개발자 분들이 많이 궁금해하시는 질문들을 모아보았는데요,

아래를 보시겠습니다!

Q. Kubernetes Service를 설치하려면 어떤 과정이 필요할까요?

A. 기본적으로 사용자 혹은 운영자는 Kubernetes Service 설치 및 구성에 대해 약 8단계의 체크리스트를 구성할 수 있습니다.

좀 더 세분화 작업을 정리하여 아래와 같이 사용자 혹은 운영자는 각 단계에서 발생되는 이슈에 대해서 디버깅을 하며, 나의 설정이 잘못 되어서 발생한 이슈인지, 아니면 설치 노드에서 문제가 발생하는지에 대한 디버깅을 진행 해야 하며, 이후 발생한 이슈에 대한 확인 및 디버깅에 대해 많은 시간들이 소요되게 됩니다.

[일반적인 Kubernetes Cluster 구성]

출처 : Kubernetes Cluster 구성_네이버 클라우드 플랫폼 한지수 솔루션 아키텍트

Q. 사용자 어플리케이션에만 집중하고 싶은데, Kubernetes Service를 쉽고 빠르게 구성하는 방법이 없을까요?

A. 아래의 그림과 같이 네이버 클라우드 플랫폼에서는 Kubernetes Service를 제공하고 있으며, ​쿠버네티스 서비스 신청을 하게 되면, 내부적으로 Kubernetes Service Provisioner 라는 내부 서비스가 앞서 설명한 일반적인 Kubernetes Service를 구성하기 위한 작업들을 진행 해 줍니다.

서버 자원 대여 및 방화벽 설정 그리고 Kubernetes Service 및 로드 밸런서를 자동적으로 구성해주며, 이후Master node 와 Worker node 와의 Cluster 구성 까지 자동으로 구성이 됩니다. 이러한 동작은 사용자 개입 없이 수분안에 모든 구성이 완료되게 됩니다.

Kubernetes Service Provisioner

Q. Kubernetes Service Provisioner의 구성 범위는 어떻게 되나요?

검은색 화살 표가 바로 네이버 클라우드 플렛폼에서 쿠버네티스 서비스를 통해 제공되는 영역은 마스터/워커 노드 설정, 설치 도구 설정, 쿠버네티스 배포, 시각화 및 모니터링 툴 설치까지 Kubernetes Service Provisioner가 자동으로 배포를 하게 됩니다. 이후 사용자는 사용자 어플리케이션 배포에 중점으로 진행을 하시면 됩니다.

Naver Cloud Platform Kubernetes Cluster 구성 범위. 출처 : Kubernetes Cluster 구성_네이버클라우드플랫폼 한지수 솔루션 아키텍트

내부적인 네이버 클라우드 플렛폼에서의 Kubernetes Service 구조는 아래 그림에 해당이 되며, Master node에 대해서는 직접적인 접근은 가능하지 않으며, 운영과 보안상 숨겨져 있습니다. Master node에 대해서는 기본적으로 HA로 구성이 되어 있으며, 사용자 혹은 운영자는 는 kuberctl 혹은 dashboard를 통해, Worker node에 대해서 구성이 가능합니다.

또한, 네이버 클라우드 플렛폼에서는 backend storage 부분에 대해서 NAS와 block storage 서비스를 제공하기 때문에 따른 스토리지 장비 및 서비스 구성 없이 손쉽게 구성이 용이 합니다.

사용자의 서비스 워크로드에 해당 용량에 대해 대여를 받고 사용 하면 되며, External DB인 Cloud DB 와 이후 로그 분석에 용이한 Cloud log Analytics들을 통해 사용자 및 운영자가 생각 하는 다양한 구성을 생각 해볼 수 있습니다. 참고 사항으로 설명 드리자면, helm을 구성 하기 위해서는 storage class 이 필요 하며, 이때 NAS 서비스를 통해, NFS 연결을 구성을 하여 backend storage 를 구성하게 됩니다.

NKS에서의 구성 및 서비스 구조

Q. 네이버 클라우드 플랫폼의 Kubernetes Service를 사용한다면, 어떤 이점이 있나요?

​일반적인 이점으로는 크게 5개 정도로 생각 됩니다.

설치하는 운영자는 대한 Kubernetes에 대한 기본 지식이 없다면, 초기 설치 비용은 크게 달라 지게 됩니다.

또한 서비스를 운영 하면서 발생하는 운영 비용 또한 이슈에 대해서 서비스를 운영자에 대한 트러블 슈팅 능력에 의존하게 됩니다.

이후 배포에 대한 빠른 접근에서도 배포 후 바로 사용 하려고 하는 경우, Kubernetes Service를 운영을 해보지 않는 운영자인 경우, 서비스 구성 이외에도 배포까지 확인해야 될 사항들이 많습니다.

또한 서비스 구성 및 운영에서 제일 중요한 보안 이슈도 매번 운영자는 이러한 보안 이슈에 대해서 모니터링 및 패치 과정을 거쳐야 합니다. 그리고 기술적인 이슈 및 문의 사항이 발생 하게 되면 운영자는 기술 지원을 받기 위해서 커뮤니티 지원 및 운영자 자신의 지식으로 이슈를 해결 해야 하지만, 네이버 클라우드 플렛폼을 사용하게 되면, 문의 사항을 통해 지원 받으며, 손쉽고 간편하게 그리고 사용자는 배포에 신경쓰는 이점을 가지고 갈 수 있습니다.

Kubernetes Service는 어떻게 빠르게 구성할 수 있을까?

이제는 Kubernetes Service를 빠르게 구성하는 방법, 데모 구성을 알려드리겠습니다.

.

0. object storage에 container registery로 사용하기 위한 공간을 대여 받는다

​1. 대여 받은 object storage를 container registery 로 구성

name: docker-registery-190811

2. container registery로 접속 하기 위한 API key 값을 확인

  • 새로운 API Key 저장

3. 작업하기 위한 dockerfile를 만든다.

  • 데모로 시연한 파일들은 다 github로 이동

# vi Dockerfile # Docker image FROM centos:latest

# Apache httpd install RUN [“yum”, “-y”, “install”, “httpd”]

# Apache httpd install CMD [“/usr/sbin/httpd”, “-D”, “FOREGROUND”]

4. docker registery에 추가 진행한다.

# docker login docker-registery-190811.kr.ncr.ntruss.com

Username에 Access Key Id를, Passworkd에 Secret Key를 사용

Access Key Id : LuRYu2RbsFVOtzewYa8O Secret Key :aOvRZjwR7OkcS88jcaChNIsBr2fiE5gJI92zIFuO

# docker build -t sample_190811 . # docker tag sample_190811 docker-registery-190811.kr.ncr.ntruss.com/sample_190811 # docker push docker-registery-190811.kr.ncr.ntruss.com/sample_190811

5. Kubernetes Service를 생성

클러스터 이름 그리고 노드 수 3으로 지정해야 합니다.

클러스터 이름 kubetest-190811

‘노드 수’로 설정

(약 15분 정도 소요)

6. 작업 셀에서 다운 받은 kubernetes config 파일의 경로를 지정한다.

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

7. Kubernetes를 외부 도메인을 통해서 Kubernetes 대시보드 접속을 시도한다.

cat <<EOF | kubectl — kubeconfig=$KUBE_CONFIG apply -f — kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: kubernetes-dashboard-anonymous rules: — apiGroups: [“”] resources: [“services/proxy”] resourceNames: [“https:kubernetes-dashboard:”] verbs: [“get”, “list”, “watch”, “create”, “update”, “patch”, “delete”] — nonResourceURLs: [“/ui”, “/ui/*”, “/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/*”] verbs: [“get”, “list”, “watch”, “create”, “update”, “patch”, “delete”] — — apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard-anonymous roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kubernetes-dashboard-anonymous subjects: — kind: User name: system:anonymous EOF

8. 외부 접속 확인

# kubectl — kubeconfig=$KUBE_CONFIG cluster-info Kubernetes master is running at https://ebcea7cc-5e55-4030-985a-e96447ef79d7.kr.nks.ntruss.com coredns is running at https://ebcea7cc-5e55-4030-985a-e96447ef79d7.kr.nks.ntruss.com/api/v1/namespaces/kube-system/services/coredns:dns/proxy Heapster is running at https://ebcea7cc-5e55-4030-985a-e96447ef79d7.kr.nks.ntruss.com/api/v1/namespaces/kube-system/services/heapster/proxy kubernetes-dashboard is running at https://ebcea7cc-5e55-4030-985a-e96447ef79d7.kr.nks.ntruss.com/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy metrics-server is running at https://ebcea7cc-5e55-4030-985a-e96447ef79d7.kr.nks.ntruss.com/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy monitoring-grafana is running at https://ebcea7cc-5e55-4030-985a-e96447ef79d7.kr.nks.ntruss.com/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy monitoring-influxdb is running at https://ebcea7cc-5e55-4030-985a-e96447ef79d7.kr.nks.ntruss.com/api/v1/namespaces/kube-system/services/monitoring-influxdb/proxy

9. 토큰 정보 확인

$ kubectl — kubeconfig=$KUBE_CONFIG -n kube-system get secret | grep kubernetes-dashboard-token kubernetes-dashboard-token-56h7n kubernetes.io/service-account-token 3 2d3h

Secret 목록에서 Kubernetes-dashboard-token 이름을 확인하고 다음 명령어를 통해 해당 토큰 정보를 확인할 수 있습니다.

$ kubectl — kubeconfig=$KUBE_CONFIG -n kube-system describe secret kubernetes-dashboard-token-56h7n Name: kubernetes-dashboard-token-56h7n Namespace: kube-system9 Labels: <none> Annotations: kubernetes.io/service-account.name: kubernetes-dashboard kubernetes.io/service-account.uid: 77036f26–55de-11e9-b757-f220cd3abfc8 Type: kubernetes.io/service-account-token Data ==== ca.crt: 1025 bytes namespace: 11 bytes token: eyJhbGciOiJSUzI1NiIsImtpZ…

10. Dashboard 활성화

# kubectl — kubeconfig=$KUBE_CONFIG proxy &

11. Private docker registery에서 받아온 container 이미지 테스트 및 결과 확인

Access Key Id : LuRYu2RbsFVOtzewYa8O Secret Key :aOvRZjwR7OkcS88jcaChNIsBr2fiE5gJI92zIFuO

kubectl — kubeconfig=$KUBE_CONFIG create secret docker-registry regcred — docker-server=docker-registery-190811.kr.ncr.ntruss.com — docker-username=LuRYu2RbsFVOtzewYa8O — docker-password=aOvRZjwR7OkcS88jcaChNIsBr2fiE5gJI92zIFuO — docker-email=casong99@gmail.com

오늘은 Kubernetes Service에 대한 궁금증을 해결해보고 네이버 클라우드 플랫폼의 Kubernetes Service를 간편하게 사용하는 방법을 알아보았습니다.

이 글을 읽어보시고 네이버 클라우드 플랫폼의 Kubernetes Service를 쉽게 활용해보세요!

끝까지 읽어주셔서 감사합니다. 앞으로도 좋은 콘텐츠로 찾아뵙는 네이버 클라우드 플랫폼이 되겠습니다. 많은 관심 부탁드립니다!

--

--

송창안
NAVER CLOUD PLATFORM

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