서론
우리 회사에는 개발환경이 존재하지 않았습니다. 입사하고 나서 가장 놀랐던 것은 local에서 개발하고, production에 바로 배포하고 오류가 발생하면 롤백하며 프로덕션 서비스를 운영하는 것이였습니다. 맞습니다. 흔히 말하는 stg나 dev 환경의 구성에 적용하여 진행하는 알파테스트 개념이 없었습니다.
때문에 개발환경 구성은 꼭 필요하다고 생각되었고, Kubernetes를 적용해서 개발 환경을 구성하면 추후 production 서비스도 쉽게 k8s로 마이그레이션이 가능할 것이라 생각하였습니다. 그리고 솔직히 k8s를 공부하고 실제로 사용해보고 싶기도 하였습니다.
팀장님께 k8s의 도입의 필요성을 보고를 드린 후, k8s를 사용해서 개발환경 구성을 진행하기로 하였고 본 포스팅에서는 도입과정과 부딪힌 문제들을 해결해 나가는 일련의 과정들을 작성할 예정입니다.
본론
1. 초기 구상
현재 상황을 체크해 보자면, 운영 서비스들은 전부 Naver Cloud Platform의 서비스들로 구성되어 있습니다. CI/CD는 Source Build, Deploy, PipeLine을 이용하고 있고 git 리포지토리 또한 Source Commit이라는 네이버 클라우드 플랫폼의 서비스를 이용하고 있는 상황이었습니다.
그렇기 때문에 Kubernets 또한, Naver Cloud Platform의 NKS를 사용하기로 했습니다.
2. NKS Cluster 생성하기
1. 클러스터 설정
NCloud Kubernetes Service (NKS) 메뉴에 접속하여 [클러스터 생성하기] 를 통해 손쉽게 클러스터를 구성할 수 있습니다.
라고 이야기하고 싶지만 사실 손쉽게 설정하기는 어렵습니다. 네트워크 타입 설정부터 시작하여 Subnet과 LB Private Subnet, LB Public Subnet, 그리고 NAT GateWay 등을 사전에 만들어둬야 합니다.
이번 클라우드 환경 구성의 목적성은 개발환경 구성이기 때문에 저는 dev vpc를 생성하였고, 그 vpc 대역에 맞는 클러스터 subnet과 lb의 private, public subnet을 각각 미리 생성해 두었습니다.
Nat Gateway는 아웃바운드 인터넷 트래픽 활성을 위해 필요한 존재로서, NAT Gateway 생성 이후 Route Table을 생성하여 위에서 생성한 private lb subnet과 연관 짓고 Routes를 0.0.0.0/0으로 지정하여 생성한 NAT Gateway를 타깃으로 설정해 주면 됩니다.
2. 노드풀 설정
노드 그룹을 이루는 노드풀을 설정합니다. production 환경의 구성이였다면 각 서비스마다 (예: 뉴스 서비스, 로그인 서비스 등의 2차 도메인을 기준으로?) 노드풀을 구성하여 해당 서비스에 관련된 애플리케이션들을 구성시키는 것이 맞겠지만, 현재는 개발 환경 구성에 초점이 맞춰져 있기 때문에 저는 dev라는 이름의 노드풀을 생성합니다.
서버 타입은 제일 기본사양의 Standard s2-g3 (CPU 2EA, Memory 8GB)를 사용하였고, 노드수는 3개로 구성하였습니다. 노드수는 최소 1개부터 설정할 수 있는데, 3개를 사용한 이유는 다음과 같습니다.
고가용성(High Availability):
3개의 노드를 구성하면 하나의 노드에 장애가 발생하더라도 나머지 노드들이 계속해서 서비스를 제공할 수 있습니다. 이를 통해 단일 장애점(Single Point of Failure)을 제거하여 전체 시스템의 안정성을 보장할 수 있습니다.
부하 분산 및 성능 향상:
여러 노드에 트래픽과 처리를 분산시키면 특정 노드에 과도한 부하가 걸리는 것을 방지할 수 있습니다. 이로 인해 전체 시스템의 응답 시간이 개선되고, 예상치 못한 트래픽 급증에도 유연하게 대처할 수 있습니다.
유연한 확장성:
초기 구성은 3개 노드로 시작하지만, 서비스가 성장하거나 트래픽이 증가할 경우 추가 노드를 쉽게 도입할 수 있습니다. 이는 클러스터 환경에서 자원 할당과 관리에 있어 큰 장점으로 작용합니다.
3. 인증키 설정
인증키는 보유하고 있는 인증키를 설정하거나 새로운 인증키를 생성할 수 있습니다. 인증키를 가지고 매니저 노드 접속 관리자 비밀번호를 얻을 수 있는데, 저는 vpc를 만들때 생성된 key-vpc-dev 인증키를 사용하였습니다.
4. 같은 방식으로 mgt-cluster 생성하기
추후 로그 통합 환경구성, argocd 도입 등을 위해 management 역할을 담당하는 mgt-cluster를 생성해둡니다.
3. 생성된 cluster 확인하기
아래와 같이 dev-cluster 및 mgt-cluster가 설정한 node수와 서버 사양에 맞게 구성하여 정상적으로 생성된 것을 확인할 수 있습니다.
결론
앞으로 dev-cluster에 java(spring boot) application, nextJs application, php(Legacy) application 등을 배포하고, mgt-cluster에 로그를 수집하여 모니터링하는 스택 구성 등의 본격 k8s 도입 포스팅을 이어나가겠습니다.