컨테이너

간단하게 Kubespray로 Kubernetes 클러스터 구축하기

92Hoonhee 2024. 10. 31. 15:28

Kubernetes 클러스터를 간편하게 구축할 수 있는 도구인 Kubespray를 활용해 보겠습니다. Kubespray는 Kubernetes 클러스터를 구성하는 데 필요한 여러 컴포넌트(containerd, CNI, MetalLB 등)를 자동으로 설치해주기 때문에 수작업을 줄이고 시간을 크게 절약할 수 있습니다. Ubuntu 22.04 기반 환경에서 약 30분이면 클러스터 구축이 완료됩니다.


1. 클러스터 환경 구성

  • Master Node: 3개 (각 4 Core, 8GB RAM)
  • Worker Node: 5개 (각 8 Core, 16GB RAM)
  • OS: Ubuntu 22.04

2. 사전 준비 작업

2.1 SSH 키 설정

Master 노드(kube1)에서 SSH 키를 생성하고, 모든 노드에 복사하여 무비밀번호 접근을 설정합니다.

ssh-keygen
ssh-copy-id ubuntu@kube1
ssh-copy-id ubuntu@kube2
ssh-copy-id ubuntu@kube3
ssh-copy-id ubuntu@kube-sub1
ssh-copy-id ubuntu@kube-sub2
ssh-copy-id ubuntu@kube-sub3
ssh-copy-id ubuntu@kube-sub4
ssh-copy-id ubuntu@kube-sub5

2.2 sudoers 설정

모든 노드에서 sudo 권한을 비밀번호 없이 사용할 수 있도록 설정합니다.

sudo -s
echo "ubuntu ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

2.3 방화벽 비활성화

모든 노드에서 방화벽이 비활성화되어 있는지 확인합니다.

ufw status  # 결과가 "Status: inactive"여야 합니다.

2.4 /etc/hosts 파일 설정

모든 노드의 /etc/hosts 파일에 클러스터 IP와 호스트 이름을 추가합니다.

127.0.0.1 localhost.localdomain localhost

10.0.5.10 kube1
10.0.5.153 kube2
10.0.5.179 kube3
10.0.5.123 kube-sub1
10.0.5.64 kube-sub2
10.0.5.130 kube-sub3
10.0.5.95 kube-sub4
10.0.5.17 kube-sub5

3. Kubespray 설치 및 설정

3.1 Kubespray 설치

Master 노드(kube1)에서 Kubespray를 설치합니다.

sudo -s
apt update
apt install python3-pip -y
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
pip3 install -r requirements.txt

3.2 Kubespray 인벤토리 설정

인벤토리 디렉토리를 복사한 후, hosts.yaml 파일을 설정합니다.

cd inventory
cp -Rp sample/ mycluster

hosts.yaml 예시

all:
  hosts:
    kube1:
    kube2:
    kube3:
    kube-sub1:
    kube-sub2:
    kube-sub3:
    kube-sub4:
    kube-sub5:
  
  children:
    kube_control_plane:
      hosts:
        kube1:
        kube2:
        kube3:
    kube_node:
      hosts:
        kube-sub1:
        kube-sub2:
        kube-sub3:
        kube-sub4:
        kube-sub5:
    etcd:
      hosts:
        kube1:
        kube2:
        kube3:
    k8s_cluster:
      children:
        kube_control_plane:
        kube_node:
    calico_rr:
      hosts: {}

3.3 설정 파일 수정

필요한 옵션을 group_vars/k8s_cluster/k8s-cluster.yml 파일에 추가합니다.

kube_proxy_strict_arp: true    # MetalLB 사용 시 필요
container_manager: containerd
kubernetes_audit: true

4. Kubespray로 Kubernetes 클러스터 구축

다음 명령어를 실행하여 클러스터를 구축합니다.

ansible-playbook -v -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml

4.1 구축 완료 후 확인

kubectl get node -o wide
kubectl get pod -A
kubectl get svc -A

4.2 클러스터 초기화 (재설정)

Kubernetes 클러스터를 재설정하려면 다음 명령어를 실행합니다.

ansible-playbook -v -i inventory/mycluster/hosts.yaml --become --become-user=root reset.yml

5. 마무리

이제 Kubespray를 활용하여 간편하게 Kubernetes 클러스터를 구축할 수 있습니다. Kubespray는 CPU와 메모리 요구사항이 높은 편이므로, 충분한 자원을 확보한 후 실행하는 것이 좋습니다. 구축 후 kubectl 명령어를 활용하여 정상적인 동작을 확인하세요.