본문 바로가기
Public Cloud/NCP

[NKS]Ncloud Kubernetes Service 구축 방법

by beann 2023. 8. 7.
반응형

쿠버네티스는 최근 떠오르는 가장 인기 있는 컨테이너 오케스트레이션 도구 중 하나입니다.

관리형 쿠버네티스 서비스는 여러 클라우드 제공자에서 쿠버네티스 클러스터를 쉽게 생성하고 관리할 수 있게 제공해주는 서비스인데요.

이 글에서는 NKS를 사용하여 쿠버네티스 클러스터를 구축하는 방법에 대해 알아보겠습니다.

 

잠깐. 일단 NKS를 구축 해보기 전에 CSP에서 제공하는 관리형 Kubernetes에 대한 장단점을 알아보도록 하겠습니다.

1. 다양한 Cloud Service와 연계하여 사용할 수 있다.

> LB연동, Monitoring Service, Storage, CI/CD 서비스(Source Commit, Source Build, Source Deploy, Source Pipeline 서비스) 등등...

 

2. 쿠버네티스 클러스터를 구축하는데에 들어가는 기회비용을 줄일 수 있다.

 

3. kubernetes Version Upgrade를 지원한다.

등등...

 

하지만 장점이 있다면 단점도 당연히 존해 하는데요.

1. Master Node는 사용자가 관리할 수 없다는 점입니다.

말그대로"관리형" 쿠버네티스이기 때문에 쿠버네티스 운영에 필수 요소인 API-Server, ETCD, Controller Manger 등 다양한 컴포넌트들을 CSP에서 관리하기 때문에 사용자 관점에서 관리 및 커스터마이징이 불가합니다. 

참고로, 마스터노드에 SSH를 통한 접근도 할 수 없습니다. 

 

2. 비용문제

비용문제라고는 하나, 크게 걱정할 수준의 비용문제는 아니라고 봅니다.

타 CSP의 비용정책은 모르겠으나, NCP의 경우 Node는 기본 Server 요금이 부과되고 클러스터비용은 시간당 100원으로, 이정도의 가격이면 다양하게 지원하는 기능으로 상쇄 가능하다고 생각합니다.

 

3. CSP 종속성

특정 클라우드 제공자의 관리형 쿠버네티스 서비스를 사용하게 되면 해당 제공자의 에코시스템과 서비스에 의존하게 될 가능성이 있습니다.

등등...

 

 

간단하게 장점과 단점을 알아보았으니, 이제 Ncloud의 Kubernetes Service인 NKS를 구축하는 방법에 대해 알아보겠습니다. 


NKS 구축 방법

1. NKS 생성

Ncloud Console > Services > Container > Kuberntes Service > 생성하기 버튼을 클릭합니다.

 

 

2. 클러스터 설정

 

# 클러스터이름: 원하는 이름

# kubernetes 버전: 원하는 버전 선택

# CNI Plugin: Kubernetes Cluster에서 사용할 Container Network Interface로 NKS에서는 현재 실리움만 제공중

# VPC: 원하는 VPC선택

# 가용 Zone: 원하는 Zone 선택

# 네트워크 타입: Public, Private 중 선택

# Subnet: 네트워크 타입에 맞는 Subnet 선택

# LB Private Subnet: Kubernetes의 Service Object로 LB 배포시 LB가 만들어질 Subnet 선택

# 최대 노드 수: 10, 50 중 선택(참고로 각각 생성되는 Master Node의 스펙이 다름, 아래 표 참조)

# 최대 노드 수스펙개수

10 2vCPU / 8GB Memory / 50GB SSD 3EA
50 4vCPU / 16GB Memory / 50GB SSD 3EA

# Audit Log: 감사로깅을 설정할지 선택

 

3. 노드풀 설정

# 노드풀 이름: Worker Node들의 집합인 Pool 이름을 정합니다.

# 서버 이미지 이름: Server Spec을 정의합니다.

# 서버 타입: 마찬가지로 Server Spec을 정의합니다.

# 노드 수: Node Pool에 생성할 Node의 수를 정합니다.

# Subnet: 클러스터 생성시 설정한 Subnet으로 자동설정

# Kubrentes Label: Worker Node에 Label을 설정합니다. (필수가 아니니 넘어가도 됩니다.)

# Taint: Taint설정을 합니다. (필수가 아니니 넘어가도 됩니다.)

 

설정 후 추가버튼을 클릭합니다.

 

 

 

 

4. 인증키 설정

이미 키를 가지고 있는 경우 해당 키를 선택합니다. 없을 경우 "새로운 인증키를 생성합니다."

 

이후 클러스터를 생성합니다.

 

 

5. 클러스터 제어

생성이 완료된 모습입니다.

이제 클러스터를 제어하기위한 설정을 진행해보도록 하겠습니다.

 

 

 

#1. kubectl설치(Feat. Mac M1)

$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
$ chmod +x ./kubectl #실행 권한 부여
$ sudo mv ./kubectl /usr/local/bin/kubectl #kubectl 커맨드를 사용할 수 있도록 파일 이동
$ sudo chown root: /usr/local/bin/kubectl
$ kubectl version --client



######brew가 있는경우 아래 명령어로 설치합니다.
$ brew install kubectl
$ kubectl version --client

 

 kubectl 커맨드가 잘 먹히네요. 설치가 정상적으로 된 것 같습니다.

 

# ncp-iam-authenticator를 설치합니다.

Ncloud 콘솔에서 쿠버네티스 클러스터 노드를 생성했고, kubectl 커맨드도 설치 했으니, 이제 kubectl커맨드를 통해 클러스터를 제어하기 위한 설정을 해야겠죠?

$ brew tap NaverCloudPlatform/tap
$ brew install ncp-iam-authenticator
$ chmod +x ./ncp-iam-authenticator	#권한을 설정합니다.
$ mkdir -p $HOME/bin && cp ./ncp-iam-authenticator $HOME/bin/ncp-iam-authenticator && export PATH=$PATH:$HOME/bin
$ echo 'export PATH=$PATH:$HOME/bin' >> ~/.zshrc #zsh기준
$ echo 'export PATH=$PATH:$HOME/bin' >> ~/.bash_profile #bash shell 기준
$ ncp-iam-authenticator help	#커맨드가 잘 실행되는지 확인합니다.

 

 

# /$HOME/.ncloud/configure 파일에 API 인증키를 설정합니다. (인증키는 마이페이지 > 인증키 관리에서 확인할 수 있음.)

vim ~/.ncloud/configure

[DEFAULT]
ncloud_access_key_id = ??????????????
ncloud_secret_access_key = ?????????????????????
ncloud_api_url = https://ncloud.apigw.ntruss.com

 

# 이제 아래 커맨드를 통해 kubeconfig 를 생성합니다. (clusterUuid는 콘솔에서 확인 가능합니다.)

$ mkdir ~/.kube
$ ncp-iam-authenticator create-kubeconfig --region KR --clusterUuid bf53abe3-xxxx-xxxx-xxxx-3e1adc39c586  --output ~/.kube/config

 

 

# kubeconfig 파일을 통해 클러스터 구축이 정상적으로 되었는지 확인합니다.

$ kubectl get nodes
NAME                  STATUS   ROLES    AGE   VERSION
sjh-k8s-node-w-1gzd   Ready    <none>   41m   v1.22.9
sjh-k8s-node-w-1gze   Ready    <none>   41m   v1.22.9

 

######추가######

1. alias 설정을 하여 간단하게 kubectl 명령어를 실행하면 해당 명령어를 간편하게 사용할 수 있습니다.

cat << EOF >> .bash_profile

> alias k='kubectl'

> EOF

source .bash_profile

k get nodes

NAME                  STATUS   ROLES    AGE   VERSION

sjh-k8s-node-w-1gzd   Ready    <none>   44m   v1.22.9

sjh-k8s-node-w-1gze   Ready    <none>   44m   v1.22.9

 


2. Cheat sheet를 활용하여 Tab키를 통해 자동완성 기능을 활용할 수 있습니다.
source <(kubectl completion zsh) 
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc

 

 

 

관리형쿠버네티스와, 구축형 쿠버네티스와 비교를 해보면서 어떤것이 무조건 적으로 좋다 나쁘다를 겨루기에는 모두 장단점이 명확해서 어려운 것 같습니다. 다만, 관리형 쿠버네티스에 존재하는 단점은 장점이 이를 상쇄할 만큼 운영환경에서 쓰지 않을 이유가 굳이 없다고 생각하는데요.

 

다만, 확실한건 각 방식의 특성을 이해하고 운영환경, 필요조건 등 다양한 상황을 고려하여 운영하는 것이 가장 Best Practice이지 않을까 싶습니다. 

 

 

지금까지 NKS구축 방법에 대한 가이드였습니다.

 

반응형