Search

Lv 200: kubespray를 도커 이미지로 사용하기

생성일
2023/07/23 02:51
최종 편집 일시
2024/09/08 09:18
카테고리
Dev/Ops
태그
kubespray
Kubernetes (쿠버네티스)
DevOps (데브옵스)
환경
Ubuntu (우분투)
요약
kubespray는 Kubernetes 배포 도구로, 이 포스트에서는 kubespray의 Dockerfile을 사용하여 직접 이미지를 빌드하고 사용하는 과정을 설명합니다.
2 more properties

여는 말

안녕하세요. 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의 ansible-playbook 명령어 모두 사용할 수 있습니다.
Windows에서도 가능합니다. 관련 예제는 이 링크에서 *.ps1 파일로 참고 할 수 있습니다

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 파이프라인을 구성할 때 공식 도커이미지를 쓰면 빠르게 구현할 수 있습니다!