여는 말
안녕하세요. kubespray를 도커 이미지로 만들어두고 편하게 사용하는 방법을 공유드립니다.
kubernetes를 배포하기 위해 kubespray를 사용하고 있습니다. kubespray의 공식 가이드에서는 우분투 환경의 부트스트랩에서 직접 설정하는 법을 소개하고 있습니다.
따라서 보통 로컬 환경에 설치해서 kubespray를 사용하는데요. 그래도 도커 이미지를 사용하고 싶은 개발자를 위해 Dockerfile은 제공하고 있는데요. 이 포스트에서는 그 Dokerfile을 이용해 kubespray를 직접 빌드하여 사용하는 과정을 소개합니다. 그리고 kubespray에서 제공하는 공식이미지를 사용하는 방법도 소개합니다.
이 포스트는 kubespray의 로컬 사용법을 아는 사용자를 대상으로 합니다
TL; DR
Step by Step
0. 사전준비
필요한 것은 다음과 같습니다:
•
git, docker 명령어를 실행할 수 있는 ubuntu 환경
•
Docker Hub 계정
•
약간의 커피
1. Kubespray 내려받기
먼저 kubespray를 내려받습니다.
git clone https://github.com/kubernetes-sigs/kubespray
cd kubespray
Bash
복사
이 포스트에서는 최신 commit을 기준으로 소개합니다. 원하는 tag나 commit이 있다면 해당 시점으로 checkout 하시고 계속 진행하시면 됩니다.
2. Login docker hub
*이미지를 push하지 않고 로컬 환경에서만 사용하려면 이 과정을 생략하시면 됩니다.
이미지를 Docker Hub에 등록(push)하기 위해 로그인합니다. 명령어는 다음과 같습니다:
DOCKER_HUB_USERNAME="jyje" # Your username of Docker Hub
docker login -u $DOCKER_HUB_USERNAME
Bash
복사
이 때 Password:라는 메시지로 비밀번호를 요구합니다. Docker Hub의 내 비밀번호 혹은 토큰을 입력합니다. 로그인이 성공하면 Login Succeeded라는 메시지를 확인할 수 있습니다.
3. Build image
다음 명령어로 도커 이미지를 빌드하고 Docker Hub에 push합니다. 이미지를 push하지 않고 로컬 환경에서만 사용하려면 --push를 제외하고 실행하면 됩니다. 명령어는 다음과 같습니다:
IMAGE_TAG=$(git rev-parse --short=7 HEAD)
docker buildx build --push \
--platform linux/amd64,linux/arm64 \
--tag $DOCKER_HUB_USERNAME/kubespray:$IMAGE_TAG \
--tag $DOCKER_HUB_USERNAME/kubespray:latest \
.
Bash
복사
이미지의 태그는 git commit id와 latest를 함께 지정했습니다. 이럴 경우 신규 commit이 생겨도 git commit id를 기록하면서 latest도 갱신할 수 있습니다.
4. Generate inventory template
다음 명령어로 인벤토리 템플릿을 복사합니다:
docker run --rm \
-v $HOME/kubespray_inventory:/kubespray_inventory \
$DOCKER_HUB_USERNAME/kubespray \
cp -r /kubespray/inventory/sample /kubespray_inventory/sample
cat $HOME/kubespray_inventory/sample/inventory.ini
Bash
복사
그 후에 다음 명령어로 sample 이라는 템플릿을 확인할 수 있습니다:
cat $HOME/kubespray_inventory/sample/inventory.ini
Bash
복사
그리고 $HOME/kubespray_inventory/sample 경로의 파일들을 편집하여 원하는 인벤토리를 구성할 수 있습니다.
5. Ping test
이전 과정에서 구성한 인벤토리를 테스트합니다. 다음 명령어로 인벤토리를 구성하는 노드에게 핑 테스트를 할 수 있습니다:
docker run --rm \
-v $HOME/kubespray_inventory:/kubespray_inventory \
$DOCKER_HUB_USERNAME/kubespray \
ansible all -i /kubespray_inventory/sample/inventory.ini -m ping
Bash
복사
모든 노드에서 pong 이라는 응답을 받는다면 정상적으로 구성한 것 입니다.
6. Run kubespray
다음 명령어로 클러스터를 구성할 수 있습니다:
docker run --rm \
-v $HOME/kubespray_inventory:/kubespray_inventory \
$DOCKER_HUB_USERNAME/kubespray \
ansible-playbook -i /kubespray_inventory/sample/inventory.ini -bK --become-user=root cluster.yml
Bash
복사
클러스터를 삭제하고 싶은 땐 다음과 같이 구성할 수 있습니다:
docker run --rm \
-v $HOME/kubespray_inventory:/kubespray_inventory \
$DOCKER_HUB_USERNAME/kubespray \
ansible-playbook -i /kubespray_inventory/sample/inventory.ini -bK --become-user=root reset.yml
Bash
복사
Kubespray 공식 도커 이미지 사용하기
# 출처: https://github.com/kubernetes-sigs/kubespray
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
git checkout v2.25.0
docker pull quay.io/kubespray/kubespray:v2.25.0
docker run --rm -it --mount type=bind,source="$(pwd)"/inventory/sample,dst=/inventory \
--mount type=bind,source="${HOME}"/.ssh/id_rsa,dst=/root/.ssh/id_rsa \
quay.io/kubespray/kubespray:v2.25.0 bash
# Inside the container you may now run the kubespray playbooks:
ansible-playbook -i /inventory/inventory.ini --private-key /root/.ssh/id_rsa cluster.yml
Bash
복사
간단한 IaC 파이프라인을 구성할 때 공식 도커이미지를 쓰면 빠르게 구현할 수 있습니다!