본문 바로가기

윈도우 개발환경

쿠버네티스로 MSA DevOps 환경 구축; 1. 로컬 쿠버네티스 설치

쿠버네티스로 MSA DevOps 환경 구축

1. 로컬 쿠버네티스설치

2. 로컬 컨테이너 Registry

3. Pod, Service, Deployment

4. 포트포워딩 없는 Minikube

5. URL기반 Service - Ingress

6. Helm | Chart - 패키지 설치

7. Helm | Chart - 패키지 만들기

8. ArgoCD - GitOps

 

0. 쿠버네티스가 왜 필요할까?

스타트업을 처음 시작하면 이식성이 좋은 Docker를 사용하고 물리 서버가 구매하지 않아도 되는 클라우드를 사용해서 MVP를 공개한다. Docker는 이미 준비된 Docker image가 많이 공개되어 있어서, 개발에 필요한 프로그램을 Docker로 쉽게 설치할 수 있고, 개발된 프로그램을 Dockerfile을 사용해 Docker image로 만들면 Docker Engine이 설치된 어떤 환경에서도 실행할 수 있기 때문에 개발환경에서 Docker를 많이 사용한다.

 

하지만, 회사에서 만든 서비스의 사용자가 많아지고 서비스가 확장되면, 이를 개발하고 운영하는 팀이 많아지고 마이크로서비스 아키텍처(MSA)와 이를 지원하는 쿠버네티스를 고려하게 된다.

 

마이크로서비스 아키텍처(MSA)는

 

  • 각각의 마이크로서비스를 독립적으로 운영 관리할 수 있어,
  • 전체 회사 서비스의 중단 없이 부분 업그레이드가 가능하고,
  • 서비스 요구에 따라 신속하게 Scale out/in 할 수 있을 뿐 아니라,
  • 장애가 발생했을 때 영향받는 부분이 제한적이고,
  • 또, 장애가 발생하더라도 신속하게 복구할 수 있는 구조이다.

이런 좋은 장점에도 불구하고, 마이크로서비스 아키텍처(MSA)를 잘 구현하고 운영하기 위해서는

 

  • 마이크로서비스 아키텍처(MSA)의 설계원칙을 지키면서 개발해야 하기 때문에 개발이 복잡하고,
  • 서비스의 개발 및 배포(CI/CD)를 포함하는 전 과정이 자동화되어 있어야 하고,
  • 이를 위해 개발에 TDD를 적용하거나, 이에 준하는 테스트케이스를 개발할 때 같이 준비해야 하는 등,
  • 개발팀이 DevOps를 할 수 있는 능력과 개발 및 운영에 대한 표준을 가지고 있어야 한다.

마이크로서비스 아키텍처(MSA)를 도입하기로 결정했다면, MSA를 간편하게 도입할 수 있도록 도와주는 소프트웨어 중 대표적인 것이 쿠버네티스이다. 쿠버네티스에 대한 자세한 정보는 공식 웹페이지에 잘 설명되어 있는데, 자료가 많고 내용이 복잡해서, 이번에 쉽게 요약해서 사용례를 기반으로 정리해 보려고 한다.

 

쿠버네티스란 무엇인가?

쿠버네티스는 컨테이너화된 워크로드와 서비스를 관리하기 위한 이식할 수 있고, 확장 가능한 오픈소스 플랫폼으로, 선언적 구성과 자동화를 모두 지원한다. 쿠버네티스는 크고 빠르게 성장하

kubernetes.io

1. 쿠버네티스 CLI - kubectl 

kubectl은 쿠버네티스 클러스터(kubenetes cluster)를 제어하고, 서비스를 배포하고, 상태를 모니터링할 수 있는 CLI(Command Line Interface)이다. kubectl은 내 컴퓨터에 있는(local) 단일 노드용 쿠버네티스 클러스터도 제어할 수 있고, 클라우드에 있는 멀티 노드용 쿠버네티스 클러스터도 제어할 수 있는, 쿠버네티스의 공식 커멘드 인터페이스이기 때문에 쿠버네티스 클러스터를 관리하기 위해서는 먼저 설치하는 것이 좋다.

 

하지만, kubectl은 쿠버네티스 클러스터의 버전과 앞뒤로 1개 차이의 마이너 버전까지만 호환이 되므로, kubectl을 설치하기 전에 쿠버네티스 클러스터의 버전을 확인해야만 한다. 예를 들어 kubectl 버전이 1.30이면, 쿠버네티스 클러스터의 버전이 1.29, 1.30, 1.31이어야 한다.

 

kubectl프로그램은 설치가 필요 없이, 아래 링크를 클릭하고 파일 하나를 다운로드하면 바로 실행할 수 있다. 다른 버전을 받고 싶으면 링크를 브라우저로 복사해서 버전 부분( /v1.30.0/)만 변경하면 원하는 버전을 다운로드할 수 있다.

 

https://dl.k8s.io/release/v1.30.0/bin/windows/amd64/kubectl.exe

 

터미널에서 쉽게 실행하려면 kubectl의 위치를 환경변수 PATH에 추가해야 한다. PATH를 추가하기 위해서는, Win + R을 눌러 나오는 "실행"이 입력창에 "sysdm.cpl"을 넣고 실행해서 "시스템 속성" 관리화면을 띄운고, "고급"탭의 아래에 나오는 "환경변수"를 선택한 다음, "Path"를 "편집(E)"를 선택하고 kubectl의 위치(예; C:\Program Files\Kubernetes)를 추가한다.

 

2. 로컬 쿠버네티스 설치

a. Docker desktop의 쿠버네티스

가장 쉽게 쿠버네티스 클러스터를 내 컴퓨터에 설치하는 방법은 Docker desktop이다. 상단 메뉴에서 Settings아이콘을 선택하면 나타나는 Settings화면의 왼쪽 메뉴에서 Kubernetes을 선택하면, 오른쪽 화면에 쿠버네티스를 설치할 수 있는  Enable Kubernetes체크박스 가 있다. 이 체크박스를 선택하면 쿠버네티스가 설치된다.

 

b. 공홈에서 추천하는 minikube

하지만, Docker Descktop은 매출이 천만 불, 한화로 약 140억 원을 넘는 기업이나 직원 수가 250명을 넘기는 기업은 적지 않은 돈을 지불해야 하고, 가상서버에서는 사용이 어려운 등의 한계로 인해, 쿠버네티스 공홈에서도 minikube 설치를 권하고 있다.

 

minikube의 설치는 아래 페이지에 설명된 것처럼, 

 

minikube start

minikube is local Kubernetes, focusing on making it easy to learn and develop for Kubernetes. All you need is Docker (or similarly compatible) container or a Virtual Machine environment, and Kubernetes is a single command away: minikube start What you’ll

minikube.sigs.k8s.io

 

PowerShell을 열고 아래 명령으로 설치하면 되는데,

 

New-Item -Path 'c:\' -Name 'minikube' -ItemType Directory -Force
Invoke-WebRequest -OutFile 'c:\minikube\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe' -UseBasicParsing

 

Unauthorized 문제가 생기면, 명령어에 있는 다운로드 주소를 사용해서 설치 프로그램을 받아 실행해도 된다.

 

https://storage.googleapis.com/minikube/releases/latest/minikube-installer.exe

 

설치 프로그램은 일반적인 윈도우설치프로그램과 동일하게 위저드 방식으로 되어 있으며, 처음에 설치에 사용할 언어를 선택하고, 다음버튼을 누르면, 라이선스에 동의하라고 나오고, 설치위치를 기본으로 하고 다음을 누르면, 설치가 완료된다.

 

 

PowerShell에서 명령어로 설치하든, 설치프로그램을 사용해서 설치하든 설치가 완료되면 PATH 환경변수에 minikube의 위치를 추가해야 터미널에서 쉽게 작업할 수 있다.

 

환경변수를 추가하기 위해 Win + R을 눌러 "실행"창이 나오면 "sysdm.cpl"을 넣고 실행해서 "시스템 속성"창을 띄운 다음,  "고급"탭의 아래에 나오는 "환경변수(N)..."를 선택하고 "Path"를 수정해서 minikube의 위치(C:\Program Files\Kubernetes\Minikube)를 추가한다.

 

 

Docker desktop에서 설치한 쿠버네티스는 Docker와 함께 자동으로 실행되지만, minikube는 아래 명령으로 쿠버네티스 클러스터를 실행해야 한다.

 

minikube start

 

 

이제 쿠버네티스 클러스터가 잘 실행되고 있는지 확인해 본다.

 

kubectl get po -A