쿠버네티스는 컨테이너 오케스트레이션 시스템으로, 대규모 컨테이너를 실행하고 관리하는 데 사용합니다. 입문자에게는 복잡한 플랫폼으로 느껴져 많은 어려움이 있습니다. 클라우드에서 연습하기에도 부담스럽죠. 내 노트북처럼 로컬 쿠버네티스를 연습하기 위한 쿠버네티스 활용법을 소개합니다. 이 블로그에서는 내 노트북에서 간단히 쿠버네티스를 설치하고 사용하는 방법을 소개합니다. 쿠버네티스를 시작하는 분들께 도움이 되었으면 좋겠습니다.
✨ 소개
로컬 쿠버네티스?
로컬 쿠버네티스는 내 로컬에 설치할 수 있는 간단한 쿠버네티스를 뜻합니다.
원래 상용 쿠버네티스는 멀티노드를 지향하고 있어 여러 노드(컴퓨터)에 쿠버네티스를 설치한 다음, 하나의 클러스터로 병합하여 사용합니다. 여기서 각 노드는 컨트롤 플레인 혹은 워커 중 하나의 역할을 담당하게 됩니다. 로컬 쿠버네티스는 병합과정을 생략하고 그냥 노드 혼자서 컨트롤 플레인, 워커 역할을 모두 수행하는 쿠버네티스로 생각하시면 됩니다.
왜 사용하죠? 장단점은 어떻게 되나요?
로컬 쿠버네티스의 많은 장점 때문에 사용합니다. 로컬 쿠버네티스의 장단점은 다음과 같습니다:
- 장점: 싱글 노드, 가벼운 설정으로 테스트를 위한 장점이 많습니다.
- 간단한 설정: 하나의 노드만 변경하여 관리하기 쉽습니다.
- 비용 효율적: 클러스터 사용을 위해 클라우드를 사용할 필요 없습니다.
- 개발/연습에 이상적: 클러스터가 손상되어도 초기화하기 쉽습니다. 클린 설치를 위해 초기화하기도 쉽습니다.
- 빠른 테스트: 버튼 몇 번만 눌러서 생성 및 초기화할 수 있습니다.
- 경량화: 부가 기능을 최소화 하여 로컬에서 무리없이 동작합니다.
- 단점: 대부분의 단점은 연습 및 테스트 후 상용 쿠버네티스로 전환하여 해결할 수 있습니다.
- 제한된 확장성: 외부 리소스 연결 및 멀티 노드 테스트를 하기 어렵습니다 → 필요하다면 상용 쿠버네티스로 전환.
- 단일 실패 지점 (SPOF): 노드가 손상되면 클러스터 전체가 다운 → 초기화로 해결합니다. 오래 걸리지 않습니다.
- 프로덕션에 사용할 수 없음: 고가용성이나 부가기능이 제한적입니다 → 필요하다면 상용 쿠버네티스로 전환.
- 성능제한: 단일 노드 성능까지만 쓸 수 있습니다 → 필요에 맞는 실험을 하고, 상용 쿠버네티스로 전환하여 해결.
- 커스텀 제약: 로컬 클러스터에저 제공하는 커스텀 안에서만 가능합니다 → 필요하다면 상용 쿠버네티스로 전환.
8GB 랩의 노트북에 로컬 쿠버네티스를 설치하셨다면 클러스터 전체를 들고 다닐 수 있습니다. 별도의 설정을 하지 않아도 동시에 110개의 파드를 실행하실 수 있어요. 여러 네임스페이스에서 많은 파드를 띄우면서 충분한 실험을 할 수 있습니다. 하지만 노트북 커버를 닫으면 클러스터 전체가 내려가겠죠 (아.. 클램쉘 모드는 화면이 녹을 수 있으니 비추입니다). 로컬 쿠버네티스의 특징을 잘 파악하고 사용하시면 됩니다. 단점이 여럿 있지만 로컬 쿠버네티스의 장점과 관리법으로 커버할 수 있습니다. 관리법은 이후에 자세히 소개하겠습니다.
⚓️ 로컬 쿠버네티스
이제 본격적으로 로컬 쿠버네티스 사용에 대해 소개하겠습니다. 로컬 쿠버네티스를 편하게 사용할 수 있는 도구를 소개하고, 사용법을 소개하겠습니다.
로컬 쿠버네티스 플랫폼
로컬 쿠버네티스에 적합한 쿠버네티스 솔루션은 많이 있습니다: docker-desktop, orbstack, minikube, k3s, microk8s, kind, k3d. 이 블로그에서 제가 제안하는 로컬 쿠버네티스를 지원하는 플랫폼은 GUI 인터페이스를 포함해 사용성에서 우수한 2가지 입니다: 도커 데스크탑(커스텀 k8s), 오브스택(k3s). 이 두 플랫폼 중 하나를 선택 하시면 됩니다.
도커 데스크탑 (docker-desktop)
컨테이너 도구인 도커에서 직접 지원하는 공식 쿠버네티스 테스트 도구입니다.
- 공식 사이트: https://www.docker.com/products/docker-desktop
- 지원: 윈도우, 맥 OS, 우분투 등
- 쿠버네티스 활성화 방법: 도커 데스크탑 실행 > 'Settings' 진입 > 'Kubernetes' 탭 선택 > 'Enable Kubernetes' 활성화
- 쿠버네티스 초기화 방법: 도커 데스크탑 실행 > 'Settings' 진입 > 'Kubernetes' 탭 선택 > 'Reset Kubernetes Cluster' 선택
도커 데스크탑이 Docker VMM (애플 가상화 기술 + 애플 실리콘 환경) 이라는 이름으로 최적화 될 예정입니다. 이 기술이 안정화 버전으로 적용된다면, M1 이상의 맥 OS 환경에서 도커 데스크탑 성능이 많이 향상될 것 입니다. 자세한 내용은 https://docs.docker.com/desktop/release-notes/#4350 을 참고하세요.
오브스택 (orbstack)
애플 가상화 기술로 최적화한 맥 전용 쿠버네티스 테스트 도구입니다. 도커 데스크탑 보다 더 빠르고 가벼운 것이 특징입니다.
- 공식 사이트: https://orbstack.dev
- 지원: 맥 OS
- 쿠버네티스 활성화 방법: 오브스택 실행 > 'Settings' 진입 > 'Kubernetes' 탭 선택 > 'Enable Kubernetes cluster' 활성화
- 쿠버네티스 초기화 방법: 오브스택 실행 > 'Settings' 진입 > 'Kubernetes' 탭 선택 > 'Reset Cluster' 선택
오브스택에 대해서는 이 블로그 포스팅을 참고하시면 좋습니다!
로컬 쿠버네티스 사용 설정
로컬 쿠버네티스 플랫폼(도커 데스크탑, 오브스택) 중 에서 하나를 골라 설치한 후 쿠버네티스까지 활성화 합니다. 활성화를 마치면 '로컬의 내 계정' 경로에 kubeconfig가 병합되게 됩니다. 여기서 '로컬을 내 경로'는 '$HOME' 이라는 키워드로 모든 OS에 등록되어 있습니다. $HOME을 이용한 kubeconfig의 기본 경로는 '$HOME/.kube/config' 입니다. 따라서 'cat $HOME/.kube/config' 명령어를 실행하게 되면, 운영체제마다 다음과 같은 경로를 참조하게 됩니다.
- 윈도우: C:\Users\my-profile\.kube\config
- 맥: /Users/my-profile/.kube/config
- 리눅스: /home/my-profile/.kube/config
최종적으로 로컬 쿠버네티스에 대한 컨텍스트를 위 경로에서 찾을 수 있습니다. 다음 명령어로 컨텍스트를 확인할 수 있습니다. 명령어에 해당하는 도구가 없다면 설치가 필요합니다.
# 1. kubeconfig 파일을 직접 확인하기
cat $HOME/.kube/config
# 2. kubectl로 컨텍스트 확인하기
kubectl config view
# 3. kubectx로 컨텍스트 확인하기
kubectx
이 블로그에서는 맥 + 도커 데크스탑(docker-desktop) 환경으로 로컬 데스크탑 구성을 소개합니다. 도커 데스크탑 컨텍스트를 선택합니다. 그리고 모든 파드 목록을 확인합니다.
kubectx docker-desktop
## kubectx 가 없다면 아래 명령어로 대신합니다
# kubectl config set-context docker-desktop
# 파드 목록
kubectl get pod -A
# 서비스 목록
kubectl get svc -A
도커 데스크탑의 파드 목록을 보면, 초기에는 kube-system 네임스페이스에만 파드가 있습니다. 도커 데스크탑은 순정 쿠버네티스이므로 컨트롤 플레인의 정적 파드들을 모두 볼 수 있습니다. 서비스 목록을 보면 쿠버네티스 API와 CoreDNS가 있습니다. 스토리지 클래스도 연결되어 있습니다. 따라서 영구 볼륨을 요청할 경우, 로컬 디스크의 공간을 할당하여 사용할 수 있습니다.
이제 쿠버네티스 사용 준비를 마쳤습니다.
🧑💻 실습: 로컬 쿠버네티스를 활용한 GitOps
Argo CD 설치하기
요즘 데브옵스, 클라우드, 사이트 신뢰성 엔지니어는 코드로 관리하는 인프라 + 코드로 관리되는 워크로드를 꼭 알아야 합니다. 이를 위해 GitOps가 필요한데요. 쉽게 설명하면, GitOps는 리소스를 git에 올려두고 이를 그대로 클라우드에 반영하는 운영원칙입니다. 그럼 리소스의 구성과 사용을 투명하게 팀원들과 공유할 수 있게 됩니다. 또 개발자들이 코드 리뷰 하듯이, 리소스도 코드 리뷰를 통해 발전시키고 리팩터링할 수 있습니다. 쿠버네티스를 위한 GitOps에는 아르고 프로젝트의 Argo CD가 제일 유명합니다. 이 도구를 설치하고 접속해 보겠습니다.
Argo CD 공식 릴리즈에 접속합니다. 블로그 작성 시점 최신 버전을 설치하겠습니다. (예시는 v2.12.7 입니다. 가능하면 최신 버전을 추천합니다)
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.12.7/manifests/install.yaml
설치 이후 k9s을 이용하여 파드 목록을 조회해봤습니다. 2분 정도 기다리니 설치가 끝났습니다.
k9s는 쿠버네티스 사용자에게 정말 유용한 TUI 도구입니다. 검색해보시면 한국어 소개 글이 많이 있습니다. 기회가 되면 저도 작성해보겠습니다.
그리고 argocd-server 서비스를 localhost:32000 주소로 접속할 수 있게 노드포트로 변경합니다.
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort", "ports": [{"port": 443, "nodePort": 32000, "targetPort": 8080}]}}'
적용 후 http://localhost:32000 으로 접속합니다. 보호 오류 경고가 나온다면 고급 > localhost(안전하지 않음) 을 선택합니다. 로컬 테스트라서 보안 경고는 무시하셔도 괜찮습니다.
Argo CD 배포로 접속하면 다음 화면이 나옵니다.
초기 관리자 계정은 admin 이고, 비밀번호는 다음 명령어로 얻을 수 있습니다.
kubectl get secret -n argocd argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 --decode
로그인하면 다음 화면이 나옵니다.
여기까지 잘 수행된다면, Argo CD의 설치 및 사용 준비가 완료하신겁니다.
'DevOps' 카테고리의 다른 글
🐙 GitOps#1: Argo CD와 함께 GitOps 시작하기 (1) | 2024.11.21 |
---|---|
📝 k8s+STDIN: 쿠버네티스에서 YAML 파일 없이 리소스 생성하기 (0) | 2024.11.12 |
🐶 k9s: 쿠버네티스 클러스터 관리를 위한 커맨드라인 UI 도구를 소개합니다 (1) | 2024.11.10 |
🔮 오브스택(OrbStack): 당신의 느린 맥을 빠르게 해 줄 쿠버네티스 도구를 소개합니다 (0) | 2024.11.08 |
🍩 호머(Homer): YAML로 만드는 간편 대시보드 도구를 소개합니다 (0) | 2024.11.07 |
어제보다 오늘 더 공부 잘하는 코딩냥이. 어제보다 오늘 더 일 잘하는 코딩냥이.
포스팅이 좋았다면, 오류를 발견했다면, 더 좋은 아이디어가 있다면 댓글 부탁드립니다!