개요
Kubernetes 학습을 위한 실습 프로젝트다. k3s, k3d, ArgoCD를 활용하여 Kubernetes 클러스터 구축 및 애플리케이션 배포를 실습한다.
프로젝트 구조
이 프로젝트는 세 가지 주요 실습으로 구성되어 있다:
- P1: k3s 클러스터 구축 (마스터 노드 + 워커 노드)
- P2: Kubernetes Ingress를 활용한 멀티 애플리케이션 배포
- P3: k3d와 ArgoCD를 사용한 GitOps 기반 CI/CD 파이프라인
사전 요구사항
- Vagrant
- VirtualBox
프로젝트별 가이드
P1: k3s 클러스터 구축
k3s를 사용하여 마스터 노드와 워커 노드로 구성된 Kubernetes 클러스터를 구축한다.
요구사항
- 최소 리소스: 1 CPU, 1024MB RAM
- 전용 IP: 192.168.56.110 (마스터), 192.168.56.111 (워커)
- SSH 키 기반 인증
- 양쪽 머신에 k3s 및 kubectl 설치
- 워커 노드의 자동 에이전트 등록
사용법
cd p1
make all # Vagrant VM 생성 및 설정
make ssh-s # 마스터 노드에 SSH 접속
make ssh-sw # 워커 노드에 SSH 접속
make down # VM 중지
make destroy # VM 삭제
유용한 명령어
# k3s 서비스 상태 확인
sudo systemctl status k3s-agent # 워커 노드
sudo systemctl status k3s # 마스터 노드
# k3s 서비스 제어
sudo systemctl stop k3s-agent
sudo systemctl restart k3s-agent
# 네트워크 인터페이스 확인
ip a show eth1
P2: Kubernetes Ingress를 활용한 멀티 앱 배포
Kubernetes Ingress를 사용하여 호스트 기반 라우팅으로 여러 애플리케이션을 배포한다.
요구사항
- 전용 IP: 192.168.56.110
- 호스트 기반 라우팅:
app1.com→ app1 애플리케이션app2.com→ app2 애플리케이션 (3개 레플리카)- 기타 호스트 → app3 애플리케이션 (기본값)
사용법
cd p2
make all # Vagrant VM 생성 및 설정
make ssh # VM에 SSH 접속
make down # VM 중지
make destroy # VM 삭제
배포 확인
# Ingress 상태 확인
kubectl describe ingress apps-ingress
# Pod, Service, Deployment 확인
kubectl get all
# Ingress 테스트
curl -H "Host:app1.com" 192.168.56.110
curl -H "Host:app2.com" 192.168.56.110
curl -H "Host:app3.com" 192.168.56.110
P3: k3d와 ArgoCD를 사용한 GitOps 파이프라인
k3d로 로컬 Kubernetes 클러스터를 생성하고, ArgoCD를 통해 GitOps 기반 CI/CD를 구축한다.
요구사항
- k3d 설치
- ArgoCD 설치 및
argocd네임스페이스 생성 wil-playground애플리케이션 배포 (dev네임스페이스)- 공개 GitHub 저장소에서 버전 변경 시 자동 동기화
공개 저장소
사용법
cd p3
make all # Vagrant VM 생성 및 설정
make ssh # VM에 SSH 접속
# VM 내부에서 실행
make setup # k3d 클러스터 및 ArgoCD 설치
make kill # k3d 클러스터 삭제
make down # VM 중지
make destroy # VM 삭제
k3d 명령어
# 클러스터 목록 확인
k3d cluster list
# 클러스터 삭제
k3d cluster delete
kubectl 명령어
# ArgoCD Pod 확인
kubectl get pod -n argocd
# ArgoCD Service 확인
kubectl get svc -n argocd
ArgoCD 접속
# ArgoCD 자격 증명 확인
echo "🔑 ArgoCD (http://192.168.56.110:8080) credentials:"
password=$(kubectl get secret argocd-initial-admin-secret -n argocd -o jsonpath="{.data.password}" | base64 -d)
echo "login: admin"
echo "password: $password"
개발 환경 접속
# 개발 애플리케이션 접속
curl http://192.168.56.110:8888
기술 스택 설명
k3s
k3s는 엣지 컴퓨팅, IoT, 리소스 제약 환경을 위해 설계된 경량의 프로덕션급 Kubernetes 배포판이다. 의존성을 줄이고 바이너리 크기를 작게 하며 클러스터 설정을 단순화한다. 빠른 배포와 저사양 장치에 이상적이다.
Kubernetes는 K8s로 표기되는 10글자 단어다. 따라서 Kubernetes의 절반 크기인 것을 K3s로 표기한다.
k3d
k3d는 Docker에서 k3s(Rancher Lab의 최소 Kubernetes 배포판)를 실행하기 위한 경량 래퍼다. k3d를 사용하면 Docker에서 단일 및 다중 노드 k3s 클러스터를 쉽게 생성할 수 있어 Kubernetes에서 로컬 개발에 적합하다.
ArgoCD
Kubernetes용 지속적 배포(CD) 도구다. Git 저장소에 정의된 원하는 상태와 Kubernetes 애플리케이션이 동기화되도록 보장한다.
Namespace vs Pod
Namespace는 Kubernetes 내의 가상 클러스터로, 리소스를 격리하여 여러 팀이나 애플리케이션이 공존할 수 있도록 한다. Pod는 Kubernetes에서 배포 가능한 가장 작은 단위로, 스토리지와 네트워킹을 공유하는 하나 이상의 컨테이너를 포함한다.
Namespace는 Pod를 논리적으로 그룹화하지만, 실제 워크로드는 Pod에서 실행된다.