쿠버네티스를 프로덕션 환경에 설치하는 방법 중 하나로 Kubespray를 이용해보겠습니다. 이번 가이드는 5대의 KVM 가상 머신을 사용하여 3대의 마스터 노드와 2대의 워커 노드로 클러스터를 구성하는 과정을 다룹니다. 여기에서는 배포 노드를 별도로 사용하지 않고, master001 노드에서 설치를 진행합니다.
호스트 네임 설정:
- 마스터 노드:
kube-master001
,kube-master002
,kube-master003
- 워커 노드:
kube-worker001
,kube-worker002
1. 기본 패키지 설치
설치를 시작하기 위해 master001 노드에서 기본 패키지를 설치합니다.
sudo apt update && sudo apt install -y python3-pip
2. pip 최신 버전으로 업그레이드
pip을 최신 버전으로 업그레이드합니다.
pip3 install --upgrade pip
3. pip 버전 확인
설치된 pip 버전을 확인해보세요.
4. Kubespray 클론
Kubespray를 GitHub에서 클론합니다.
git clone https://github.com/kubernetes-sigs/kubespray.git
5. 의존성 패키지 설치
Kubespray 디렉토리로 이동하여 필요한 패키지를 설치합니다.
cd /root/kubespray pip install -r requirements.txt
6. hosts 파일 설정
/etc/hosts
파일에 각 노드의 IP와 호스트 네임을 추가합니다.
vim /etc/hosts 10.10.10.11 kube-master001 10.10.10.12 kube-master002 10.10.10.13 kube-master003 10.10.10.14 kube-worker001 10.10.10.15 kube-worker002
7. 인벤토리 생성
기본 인벤토리 샘플을 복사해 새로운 인벤토리를 생성합니다.
cd /root/kubespray cp -r inventory/sample inventory/gnetworks
8. 인벤토리 설정
인벤토리 파일을 편집하여 노드 구성을 설정합니다.
vim ~/kubespray/inventory/gnetworks/inventory.ini
[all] kube-master001 kube-master002 kube-master003 kube-worker001 kube-worker002 [kube_control_plane] kube-master001 kube-master002 kube-master003 [etcd] kube-master001 kube-master002 kube-master003 [kube_node] kube-worker001 kube-worker002 [calico_rr] [k8s_cluster:children] kube_control_plane kube_node calico_rr
9. SSH 키 구성
Ansible 설치를 위해 SSH 키를 구성합니다. 아래 스크립트를 사용하거나 수동으로 설정할 수 있습니다.
cat << EOF > ssh-key-copy.sh #!/bin/sh apt install -y sshpass ssh-keygen for (( i=46; i<=48; i++)) do sshpass -p "gjsxj001" ssh-copy-id -o StrictHostKeyChecking=no root@211.39.158.\$i done for (( i=53; i<=54; i++)) do sshpass -p "gjsxj001" ssh-copy-id -o StrictHostKeyChecking=no root@211.39.158.\$i done EOF
10. YAML 파일 환경 구성
환경 설정 파일을 편집하여 필요한 기능을 활성화합니다.
vim /root/kubespray/inventory/gnetworks/group_vars/k8s_cluster/k8s-cluster.yml
- Kubernetes Audit Log 활성화:
- 컨테이너 런타임:
containerd
가 기본값으로 설정되어 있습니다. - 네트워크 플러그인:
calico
가 기본값으로 설정됩니다. - 쿠버네티스 버전: Kubespray가 지원하는 최신 버전(현재 기준
v1.26.6
)을 설정합니다. - 추가 기능 활성화:
11. 쿠버네티스 배포
모든 구성이 완료되었으면 Ansible Playbook을 실행해 쿠버네티스를 설치합니다.
ansible-playbook -i inventory/gnetworks/inventory.ini cluster.yml
12. 설치 확인
설치가 완료되면 노드 상태를 확인합니다.
root@kube-master001:~# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME kube-master001 Ready control-plane 22h v1.26.6 10.10.10.11 <none> Ubuntu 22.04.1 LTS 5.15.0-56-generic containerd://1.7.2 kube-master002 Ready control-plane 22h v1.26.6 10.10.10.12 <none> Ubuntu 22.04.1 LTS 5.15.0-56-generic containerd://1.7.2 kube-master003 Ready control-plane 22h v1.26.6 10.10.10.13 <none> Ubuntu 22.04.1 LTS 5.15.0-56-generic containerd://1.7.2 kube-worker001 Ready <none> 22h v1.26.6 10.10.10.14 <none> Ubuntu 22.04.1 LTS 5.15.0-56-generic containerd://1.7.2 kube-worker002 Ready <none> 22h v1.26.6 10.10.10.15 <none> Ubuntu 22.04.1 LTS 5.15.0-56-generic containerd://1.7.2
😳 주의사항 : 설정 오류도 클러스터 구축에 영향을 줄 수 있습니다. 아래 항목을 확인해 보세요:
1. 호스트 파일 설정
/etc/hosts
파일에 각 노드의 IP와 호스트 네임이 제대로 매핑되어 있는지 다시 한번 확인하세요.- 각 노드에서 이 설정을 반영했는지 확인해야 합니다. 모든 노드에서
ping kube-master001
같은 명령어를 실행해 연결이 정상적인지 테스트해 보세요.
2. SSH 키 구성
- SSH 키 복사가 제대로 되었는지 확인하세요. 모든 노드에 SSH로 비밀번호 없이 접속할 수 있어야 합니다.
- 접속이 되지 않는다면,
ssh-key-copy.sh
스크립트에 오류가 없는지 검토하거나 SSH 구성 설정을 점검해야 합니다.
3. Ansible 인벤토리 설정
inventory.ini
파일에서 각 섹션에 맞게 노드가 올바르게 할당되었는지 확인하세요.kube_control_plane
,etcd
,kube_node
섹션에 누락된 노드가 없는지 점검합니다. 예를 들어, 마스터 노드는 반드시kube_control_plane
과etcd
에 포함되어야 합니다.
4. YAML 설정 확인
k8s-cluster.yml
파일에서 주요 옵션들이 원하는 값으로 설정되었는지 확인합니다.kube_version
이 설치 시점에 Kubespray가 지원하는 최신 버전으로 맞춰져 있는지 확인합니다.kube_network_plugin
이calico
로 설정된 것이 맞는지, 그리고 네트워크 플러그인에 따라 추가 설정이 필요한지 검토합니다.
- 추가로 활성화한 기능들이
true
로 설정되었는지도 체크해 주세요:
5. Ansible Playbook 실행 전 확인 사항
- Ansible이 설치된 상태에서
ansible --version
명령어로 버전을 확인하고, Ansible이 올바르게 설치되었는지 점검합니다. - Playbook 실행 전에
ansible -m ping all -i inventory/gnetworks/inventory.ini
명령어로 모든 노드가 응답하는지 확인합니다. 모든 노드가 “pong” 응답을 보내야 정상입니다.
6. 설치 후 점검
kubectl get nodes
명령어를 실행했을 때 모든 노드가Ready
상태인지 확인하세요. 상태가NotReady
로 표시된다면, 네트워크 설정이나 다른 구성 요소에 문제가 있을 수 있습니다.- 네트워크 플러그인(예: Calico)이 제대로 작동하는지 확인합니다:
모든 시스템 파드가
Running
상태인지 확인하세요.
쿠버네티스 DOCS : https://kubernetes.io/ko/docs/setup/production-environment/tools/kubespray/