[kubernetes] kubespray로 kubernetes 설치하기

2해승·2025년 1월 20일

쿠버네티스?!

목록 보기
15/16

쿠버네티스 클러스터를 구성하는 방식은 다양하게 있다. 클라우드 벤더사에서 제공하는 서비스와 테스트용인 minikube 등 여러 방식이 존재하는데 On-premise 환경에서 클러스터를 구성할 경우 대표적으로 kubeadm과 kubespray를 사용한다.

kubeadm는 명령어를 통해 수동으로 모듈을 하나씩 설치해주어야하지만 kubespray는 kubeadm을 이용한 클러스터 구성방법에서 ansible을 활용해 자동화한 오픈소스이다.

일전에는 kubeadm을 사용하여 각 구성 요소를 직접 설치해보았다면 이번에는 kubespray를 통해 간편하게 구축할 수 있는 과정을 알아보겠다.

참고: [kubernetes] 쿠버네티스 설치하기


환경 구성

GCP의 인스턴스를 생성해 쿠버네티스 클러스터를 설치해보자. 마스터 노드 1대, 워커 노드 3대로 구성하고 나중에 개발한 프로젝트를 올려줄 것이기 때문에 쿠버네티스가 돌아갈 수 있는 최소 사양(2Core 2GB)에서 메모리를 조금 더 늘려주었다.

용도IP스펙
Kubespray, Ansible10.178.0.32Core 2GB
Marster Node10.178.0.42Core 4GB
Worker1 Node10.178.0.52Core 4GB
Worker2 Node10.178.0.62Core 4GB
Worker3 Node10.178.0.72Core 4GB

OS는 Ubuntu 24.04 버전으로 전부 통일하여 맞춰주었따.


설치 과정

본격적으로 클러스터를 설치하기 전에 필요한 기초 설정을 모든 서버에서 진행해야한다.

공통 작업

apt update

$ sudo apt update

swap, firewall, selinux 끄기

// swap 끄기
$ swapoff -a
$ sed -i 's/.*swap.*/#&/' /etc/fstab

// 방화벽 끄기
$ systemctl stop ufw

// selinud 끄기
$ sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

로컬 방화벽의 경우 계속 꺼두면 보안에 문제가 발생할 수 있기때문에 나중에 꼭 규칙을 정의해서 사용해야한다.

root ssh 접속 허용

모든 과정을 root 사용자로 진행하기 위해 ssh 설정을 변경해야한다. 아래 링크를 참고하여 설정해주면 될 것이다.

https://shonm.tistory.com/749

배포 서버 세팅

kubespray로 클러스터를 구성하기 위해 필요한 패키지(python, ansible 등) 설치를 진행한다.

ssh key 생성 및 copy (kubespray 서버에서 작업)

Ansible이 각 서버와 통신하여 클러스터를 설치할 수 있도록 모든 노드에 ssh 접속을 허용해야한다.

그러기 위해서 kubespray 서버에서 ssh 접속을 위한 key를 생성하고 각 노드에 키 값을 등록하도록 하자.

// ssh public key 생성 
$ ssh-keygen -t rsa -b 2048

// public key 복사
$ cat ~/.ssh/id_rsa.pub

ssh-copy-id root@IP 명령어를 사용해서 키를 복사할 수 있지만 잘 안될 경우 각 노드에 접속해서 직접 복사/붙여넣기 해주는게 훨씬 잘되더라...

// 모든 노드에서 진행하기
$ vim ~/.ssh/authorized_keys

kubespray 다운로드

$ git clone -b v2.27.0 https://github.com/kubernetes-sigs/kubespray.git
$ cd kubespray // 원활한 작업을 위해 디렉토리 이동

python 라이브러리 설치

$ apt install -y python3-pip

kubespray python package 설치

requirements.txt에는 kubespray로 쿠버네티스 클러스터 구성을 위해서 필요한 패키지들이 한 데 모여있다.

$ pip3 install -r requirements.txt

pip3 install 커맨드 실행 안 되는 오류 해결

pip3 명령어로 필요한 패키지들을 한번에 설치해주는 작업을 하다보니 externally-managed-environment에 관한 에러가 발생하여 설치가 안되는 문제가 발생했다.

이런저런 구글링을 했을때 OS 구동에 필요한 파이썬 패키지들에 영향을 줄 수 있어 임의로 패키지를 설치하는 것을 막아둔 것이라는 이야기가 있는데

$ python3 -m pip config set global.break-system-packages true

설치 권한을 풀어주는 명령어를 사용하는 것으로 설치가 정상적으로 이루어질 수 있도록 할 수 있다.

https://blog.naver.com/b14nc4/223418048502

ansible 실행을 위한 inventory 설정

kubespray가 제공하는 sample 파일을 복사하여 각 노드들과 통신이 가능하도록 인벤토리 설정을 해준다.

$ cp -rpf inventory/sample/ inventory/mycluster

복사한 폴더의 inventory/mycluster/inventory.ini 에서 아래와 같이 설치할 서버들을 구성해주면 된다.

[all]
k8smaster ansible_host=10.178.0.4 ip=10.178.0.4
k8sworker1 ansible_host=10.178.0.5 ip=10.178.0.5
k8sworker2 ansible_host=10.178.0.6 ip=10.178.0.6
k8sworker3 ansible_host=10.178.0.7 ip=10.178.0.7

[kube_control_plane]
k8smaster

[etcd]
k8smaster

[calico_rr]

[kube_node]
k8sworker1
k8sworker2
k8sworker3

[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr

클러스터 설치 (Ansible 실행)

PING 테스트

클러스터 설치 명령어를 실행하기 전에 각 노드들과 통신이 잘 되고 있는지 Ping을 통해 확인하는 것이 좋다.

$ ansible all -m ping -i inventory/testcluster/inventory.ini

Ansible로 클러스터 설치

이제 준비한 파일들을 이용하여 Ansible을 구동하고 클러스터를 설치해보도록 하자.

$ ansible-playbook -i inventory/mycluster/inventory.ini cluster.yml -b --become-user root -e ansible_ssh_timeout=50 -vvv

설치 완료

클러스터 설치 확인

Node 정보 확인

inventory.ini에 설정한 대로 master 1대와 worker 3대로 구성된 클러스터가 설치된 것을 확인할 수 있다.

Pod 정보 확인



[참고자료]
https://kubernetes.io/ko/docs/setup/production-environment/tools/kubespray/
https://velog.io/@imsooyeon/k8s-kubespray%EB%A1%9C-%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0
https://blog.naver.com/kim1417/223493704161

profile
주니어 데브옵스 엔지니어

0개의 댓글