(이전 글)
1. VPC& Subnet 설계 https://har00n.tistory.com/8
2. NAT Gateway와 Route https://har00n.tistory.com/9
안녕하세요,
네트워크 설정을 마치고 이번에는 본격적으로 클러스터를 생성해보려고 합니다.
클러스터를 생성하기 전에, 미리 정하고 갈 부분들 입니다.
클러스터 설정
하이퍼바이저: Xen
인증 방식: ConfigMap
노드: 2개
서비스 메시 적용
Global DNS 연동
아무래도 공공 SaaS이고 성능도 중요하지만 보안이 더 중요한 환경이다 보니 KVM 하이퍼바이저보다는 Xen 하이퍼바이저를 적용할 예정입니다. 인증 방식은 기존에 사용해 오던 ConfigMap을 이어가려 합니다. 단순하고 바로 관리가 가능하다는 점이 장점입니다. 노드풀은 최소 2노드로 구성하여 안정성을 확보하고, Global DNS는 Istio Ingress와 연결해 외부 접근을 준비합니다. 이제 정말 클러스터를 생성해 보겠습니다!
1. 클러스터 생성
Console 에서 Clusters 메뉴로 들어가줍니다.
Clusters는 Ncloud Kubernetes Service 의 하위 메뉴로 있습니다.
자, 그럼 바로 생성하기 버튼을 클릭해 Cluster를 생성해보겠습니다!
클러스터 설정
클러스터 설정 부분입니다. 천천히 항목을 설정드리겠습니다.
클러스터 이름: 자유롭게 기입합니다
하이퍼바이저: 위에서 미리 정한대로 Xen 타입을 선택했습니다.시스템 성격에 따라 KVM 하이퍼바이저를 선택하셔도 됩니다. 다만, NCP의 경우 하이퍼바이저에 따라 Nodepool에서 선택할 수 있는 Node OS의 종류가 제한되는 경우가 있어 확인이 필요합니다.
VPC : 생성한 VPC를 선택합니다.
네트워크 타입: 클러스터의 타입은 Subnet에서 생성한 대로 Private 으로 진행하겠습니다
LB Private / Public Subnet : Subnet에서 생성한 로드밸런서 Subnet들이 자동으로 선택됩니다. 원하는 로드밸런서 Subnet이 아닐 시 변경하시면 됩니다.
최대 노드 수 : 저희 시스템은 대형서비스가 아니기 때문에 10개를 선택했습니다.
반납 보호 : 실수로 클러스터를 삭제하는 일이 없도록 설정 으로 선택하시는걸 권장드립니다.
클러스터 인증 모드 : 위에서 미리 정한대로 ConfigMap 타입으로 선택했습니다.
시크릿 암호화 : 시크릿 암호화는 이미 스토리지 레이어에서 암호화 되어 있다고 되어있어 저희는 설정하지 않았습니다.
노드풀 설정
노드풀 이름 : 자유롭게 기입합니다
서버 이미지 이름 : 사용환경에 맞는 os를 선택하시면 됩니다. 현재 하이퍼바이저에선 우분투밖에 선택지가 없어, 최신 버전의 우분투로 선택했습니다.
서버 타입 : 필요한 서버 스펙에 맞추어 선택하시면 됩니다. Dev용 클러스터이기 때문에 최소한의 스펙을 선택했습니다.
노드 수 : 위에서 미리 정한대로 2개를 선택했습니다. 필요한 스펙에 맞추어 갯수를 선택하시면 됩니다.
Subnet : nodepool 용으로 만들어둔 Subnet을 선택합니다.
k8s Label : 필요에 따라 Label을 추가합니다. 이번 클러스터에는 추가하지 않았지만, LLM 관련 클러스터를 구축할 당시 GPU 서버와 아닌것을 구분하기 위해 구분자로 추가했었습니다.
* 노드풀 설정에서 값을 입력하신 뒤 꼭 추가 버튼을 누르신 뒤에 다음으로 이동하셔야 합니다!
인증키 설정
인증키는 물리 파일로 패스워드를 대신하는 개념이라고 생각하시면 됩니다.
기존에 보유하고 있는 인증키가 있다면 그대로 사용하셔도 되고, 새롭게 생성하셔도 됩니다.
서버에 접속하기 위한 관리자 패스워드를 확인하려고 할때에도 필요하니 꼭 잘 보관해주세요!
최종확인
잘 입력했는지 확인하신 뒤, 생성하기 버튼을 눌러줍니다.
(저는 캡쳐하면서 작성하는게 익숙치 않아 두번이나 다시만들었습니다... 노드풀 이름에 오타가 있는데 이번엔 그냥 넘어가려고요.. )
그러면 이렇게 생성중이라는 표시가 나오는데요, 다른 생성에 비해 시간이 많이 소요되니 여유롭게 기다려주세요!
기다리면서 아까 인증키 설정에서 생성한 인증키를 확인해보겠습니다.
인증키 확인
좌측 메뉴에서 서버 메뉴로 이동하면 저희가 방금 생성한 노드 서버들이 만들어지고있는데요,
서버 관리 및 설정 변경 셀렉트박스에 인증키 관리 에 아까 생성해둔 인증키가 보입니다!
이 쪽은 보안 상 캡쳐사진은 생략하겠습니다.
2. ncp-iam-authenticator 설정
클러스터가 생성되었으니, 이번엔 이어서 클러스터에 접근하여 관리할 수 있도록 ncp-iam-authenticator를 설정해주겠습니다.
공공 기관용 NCP의 공식 문서
https://guide-gov.ncloud-docs.com/docs/k8s-iam-auth-ncp-iam-authenticator
ncp-iam-authenticator 설치
guide-gov.ncloud-docs.com
크게 어렵지 않으니 순서대로만 따라오시면 됩니다!
ncp-iam-authenticator 설치
윈도우나 mac 환경으로 할까 하다가 깔끔하게 ubuntu 리눅스로 진행했습니다. (저희는 개발자니까요!)
root 계정으로 진행해주세요!
공식 문서에 기반하여 아래 커맨드들을 순서대로 입력해주겠습니다.
curl -o ncp-iam-authenticator -L https://github.com/NaverCloudPlatform/ncp-iam-authenticator/releases/latest/download/ncp-iam-authenticator_linux_amd64
chmod +x ./ncp-iam-authenticator
mkdir -p $HOME /bin && cp ./ncp-iam-authenticator $HOME /bin/ncp-iam-authenticator && export PATH=$PATH :$HOME /bin
제가 자꾸 ls -l 커맨드를 입력하는 이유는 설치가 잘 되었는지,
현재 디렉토리에 ncp-iam-authenticator가 잘 있는지 확인하기 위함입니다.
ncp-iam-authenticator help
설치가 다 완료되었다면 위 코드로 정상적으로 잘 설치되었는지 확인합니다.
configure 생성
공공 기관용 NCP의 공식 문서
https://guide-gov.ncloud-docs.com/docs/k8s-iam-auth-kubeconfig
IAM 인증 kubeconfig 생성
guide-gov.ncloud-docs.com
이어서 사용자를 인증할 configure 파일을 생성해보겠습니다.
cd ~
mkdir .ncloud
cd .ncloud
vi configure
그럼 이러한 vi 편집기 창이 나오는데요,
i 를 눌러서 입력 모드로 변경해줍니다. 맨 아래에 "-- INSERT -- " 표시가 생겼네요.
ncloud_access_key_id = ACCESSKEYACCESSKEYAC
ncloud_secret_access_key = SECRETKEYSECRETKEYSECRETKEYSECRETKEYSECR
ncloud_api_url = https://ncloud.apigw.gov-ntruss.com
ncloud_access_key_id 와 ncloud_secret_access_key 를 확인하려면,
우측 상단 계정을 클릭한 뒤, 계정 관리로 이동해주세요.
다시 패스워드 입력과 2차인증을 해주세요.
(세상에서 제일 귀찮습니다... )
인증키 관리 탭으로 이동하시면 API 인증키 관리 부분이 있는데요,
저처럼 이미 있는 경우엔 해당 키를 사용해주시면 되고, 없으신 경우 신규 API 인증키 생성 버튼을 눌러 생성해주시면됩니다.
다시 커맨드 창의 vi 편집기로 돌아와 작성을 마치신 뒤,
ESC 를 눌러 입력 모드를 종료하고
: (콜론) 을 누르신 뒤 wq 를 입력하시고 엔터를 눌러주세요 (저장)
그러면 정상적으로 configure 파일이 생성됩니다
kubeconfig 생성
이제 특정 클러스터에 정보가 담겨있어 해당 클러스터에 접속할 수 있게 해주는 kubeconfig 파일을 만들어줄겁니다.
콘솔 NKS에서 클러스터를 클릭해보면 상세정보가 나오는데
괄호 안에 있는 UUID를 복사해주세요. (UUID 오른쪽에 있는 복사 버튼을 사용하셔도 됩니다)
cd ~/.ncloud
ncp-iam-authenticator create-kubeconfig --region kr --clusterUuid <cluster-uuid> --output kubeconfig.yaml
위 코드블럭의 <cluster-uuid> 부분에 복사하신 uuid를 입력해주세요.
kubectl --kubeconfig ~/.ncloud/kubeconfig.yaml get namespaces
위 커맨드를 입력하면 방금 생성한 클러스터의 네임스페이스가 잘 나오는 것을 확인할 수 있습니다!
(번외) kubectl 설치
혹시나 kubectl이 설치되지 않아 위 커맨드가 정상적으로 작동하지 않는다면 아래대로 따라와주세요.
k8s 공식문서
https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/
리눅스에 kubectl 설치 및 설정
시작하기 전에 클러스터의 마이너(minor) 버전 차이 내에 있는 kubectl 버전을 사용해야 한다. 예를 들어, v1.34 클라이언트는 v1.33, v1.34, v1.35의 컨트롤 플레인과 연동될 수 있다. 호환되는 최신 버전
kubernetes.io
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt) /bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local /bin/
kubectl version --client
위 커맨드를 순서대로 입력해주시면 됩니다.
이제 클러스터 설치가 완료되었고 kubectl로 해당 클러스터에 접근하여 관리할 수 있게 되었습니다.
여기까지 되었다면 기존에 사용하시던 방식대로 클러스터를 사용하셔도 무방하고,
다음에 이어질 ISTIO 설치와 Global DNS 연동
NCP 내의 CI/CD (source commit - source build - source deploy)까지 함꼐 연동하셔도 좋을 것 같습니다.
다음 번에는 해당 클러스터에 ISTIO를 설치해보겠습니다.
감사합니다.