이 문서에서는 WSL2(Windows Subsystem for Linux 2) 환경에 Ubuntu 20.04를 설치하고, Kind를 이용하여 Kubernetes 클러스터를 설정하는 방법을 상세히 안내합니다. 로컬 개발 환경에서 Kubernetes를 활용하려는 사용자에게 유용한 가이드가 될 것입니다.
1. WSL2 활성화 및 Ubuntu 배포판 설치
Windows에서 WSL2를 활성화하고 Ubuntu 20.04를 설치하는 것이 첫 단계입니다. WSL2 활성화 방법은 Microsoft 공식 문서를 참조하시기 바랍니다.
WSL2가 활성화되고 Ubuntu 20.04 배포판이 설치되었다면, Ubuntu 터미널을 실행하여 다음 단계를 진행합니다.
2. Ubuntu 시스템 설정
2.1. APT 미러 설정
Ubuntu의 기본 소프트웨어 업데이트 서버는 국내에서 속도가 느릴 수 있습니다. 따라서 한국 또는 가까운 아시아 지역의 미러 서버로 변경하여 업데이트 속도를 향상시키는 것이 좋습니다. 여기서는 대표적인 미러 중 하나를 예시로 사용합니다.
/etc/apt/sources.list 파일을 편집합니다. 기존 내용은 주석 처리하거나 백업 후 다음 내용을 추가합니다.
sudo vim /etc/apt/sources.list
다음 내용을 파일에 붙여넣고 저장합니다. (예: 카카오 미러 사용)
deb http://mirror.kakao.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirror.kakao.com/ubuntu/ focal main restricted universe multiverse
deb http://mirror.kakao.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirror.kakao.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirror.kakao.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirror.kakao.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirror.kakao.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirror.kakao.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirror.kakao.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirror.kakao.com/ubuntu/ focal-backports main restricted universe multiverse
미러 설정 후, 시스템 패키지 목록을 업데이트하고 업그레이드합니다.
sudo apt update
sudo apt upgrade -y
2.2. Systemd 활성화 (daemonize 활용)
WSL2 환경에서 Docker 서비스나 Kubernetes 구성 요소를 안정적으로 관리하기 위해서는 systemctl 명령을 사용할 수 있도록 Systemd를 활성화해야 합니다. 이를 위해 daemonize 패키지를 설치하고 관련 스크립트를 설정합니다.
daemonize 패키지를 설치합니다.
sudo apt install -yqq fontconfig daemonize
다음으로, Systemd를 시작하는 스크립트를 생성합니다. /etc/profile.d/00-wsl2-systemd.sh 파일을 생성하고 아래 내용을 추가합니다.
sudo vim /etc/profile.d/00-wsl2-systemd.sh
파일에 다음 내용을 입력합니다.
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
if [ -z "$SYSTEMD_PID" ]; then
sudo /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
fi
if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
fi
파일 저장 후, 현재 터미널을 닫고 다시 열어 변경 사항을 적용합니다.
3. Docker 설치
Kubernetes는 컨테이너 런타임으로 Docker를 사용하므로, WSL2 Ubuntu 환경에 Docker를 설치해야 합니다.
3.1. 필요한 패키지 설치
APT가 HTTPS를 통해 저장소를 사용할 수 있도록 필요한 패키지를 설치합니다.
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
3.2. Docker 공식 GPG 키 추가
Docker 저장소의 신뢰성을 확보하기 위해 GPG 키를 추가합니다.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
3.3. Docker APT 저장소 추가
Docker APT 저장소를 시스템에 추가합니다.
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
3.4. Docker 엔진 설치
Docker 엔진과 관련 도구를 설치합니다.
sudo apt-get update
sudo apt-get install -y containerd.io docker-ce docker-ce-cli
3.5. Docker 데몬 설정
Docker 데몬의 설정을 변경하여 국내 미러 사용 및 Systemd cgroup 드라이버를 활성화합니다. /etc/docker/daemon.json 파일을 생성하거나 편집합니다.
sudo vim /etc/docker/daemon.json
파일에 다음 내용을 추가합니다.
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/", "https://hub-mirror.c.163.com/", "https://reg-mirror.qiniu.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
3.6. Docker 서비스 시작
Docker 서비스를 시작하거나 재시작하여 변경된 설정을 적용합니다.
sudo service docker start
# 또는 sudo service docker restart
4. Kubernetes 도구 설치 (kubelet, kubeadm, kubectl)
Kubernetes 클러스터를 관리하는 데 필요한 핵심 도구인 kubelet, kubeadm, kubectl을 설치합니다.
4.1. Kubernetes GPG 키 및 저장소 추가
Kubernetes APT 저장소의 GPG 키를 추가합니다.
sudo apt-get update && sudo apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
Kubernetes APT 저장소를 /etc/apt/sources.list.d/kubernetes.list 파일에 추가합니다.
sudo vim /etc/apt/sources.list.d/kubernetes.list
파일에 다음 내용을 입력합니다.
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
새로운 저장소 정보를 반영하기 위해 패키지 목록을 업데이트합니다.
sudo apt-get update
4.2. Kubernetes 도구 설치
kubelet, kubeadm, kubectl을 설치합니다.
sudo apt-get install -y kubelet kubeadm kubectl
5. Kind를 이용한 Kubernetes 클러스터 생성
Kind (Kubernetes in Docker)는 Docker 컨테이너를 사용하여 로컬 Kubernetes 클러스터를 빠르게 설정할 수 있게 해주는 도구입니다. WSL2 환경에서 Kubernetes를 구축할 때 kubeadm보다 더 간편하고 안정적인 방법으로 권장됩니다.
5.1. Kind 설치
Kind 바이너리를 다운로드하고 실행 권한을 부여한 뒤, 시스템 경로로 이동시킵니다.
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
5.2. Kubernetes 클러스터 생성
kind create cluster 명령을 사용하여 wslk8s라는 이름의 클러스터를 생성합니다.
kind create cluster --name wslk8s
클러스터 생성이 완료되면, 다음 명령으로 클러스터 정보를 확인할 수 있습니다.
kubectl cluster-info --context kind-wslk8s
6. Kubernetes 대시보드 설치
Kubernetes 대시보드는 웹 기반 UI를 통해 클러스터 리소스를 관리하고 모니터링할 수 있게 해줍니다.
6.1. 대시보드 배포
Kubernetes 대시보드를 클러스터에 배포합니다.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.1/aio/deploy/recommended.yaml
대시보드 파드가 성공적으로 생성되었는지 확인합니다.
kubectl describe pod -n kubernetes-dashboard
6.2. 대시보드 프록시 실행
로컬 머신에서 대시보드에 접근하기 위해 프록시를 실행합니다.
kubectl proxy
프록시가 실행되면 웹 브라우저에서 다음 주소로 접근할 수 있습니다:
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login
6.3. 관리 사용자 생성 및 토큰 발급
대시보드에 로그인하려면 접근 토큰이 필요합니다. 관리자 권한을 가진 서비스 계정을 생성하고 토큰을 발급받습니다.
adminuser.yaml 파일을 생성합니다.
vim adminuser.yaml
다음 내용을 파일에 입력하고 저장합니다.
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
생성한 YAML 파일을 클러스터에 적용합니다.
kubectl apply -f adminuser.yaml
관리 사용자 토큰을 조회합니다.
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
출력된 토큰을 복사하여 웹 대시보드 로그인 화면에 붙여넣고 로그인합니다. 이제 웹 인터페이스를 통해 Kubernetes 클러스터를 관리할 수 있습니다.