KubeSpary로 K8S를 쉽게 설치

각 노드에서 기본 설정

# 시스템 업데이트
sudo apt update && sudo apt upgrade -y

# 필요한 패키지 설치
sudo apt install -y curl wget git python3-pip

호스트명 설정

# 호스트명 설정 (각각 다르게)

# 마스터 노드1
sudo hostnamectl set-hostname master-node-1

# 워커 노드1
sudo hostnamectl set-hostname worker-node-1
# 워커 노드2
sudo hostnamectl set-hostname worker-node-2
# 워커 노드3
sudo hostnamectl set-hostname worker-node-3

네트워크 설정

# 각 VM의 IP 주소 확인
ip addr show

# /etc/hosts 파일에 노드 정보 추가 (양쪽 모두)
sudo vi /etc/hosts
# 예시:
# 192.168.1.100 master-node-1
# 192.168.1.101 worker-node-1
# 192.168.1.102 worker-node-2
# 192.168.1.103 worker-node-3

Kubespray를 이용한 설치

# Kubespray 클론
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray

# Python 가상환경 생성
python3 -m venv venv
source venv/bin/activate

# 의존성 설치
pip install -r requirements.txt

인벤토리 설정

# 인벤토리 복사
cp -rfp inventory/sample inventory/mycluster

# 인벤토리 편집
vi inventory/mycluster/inventory.ini

인벤토리 내용

[all]
master-node-1 ansible_host=192.168.1.100 ip=192.168.1.100
worker-node-1 ansible_host=192.168.1.101 ip=192.168.1.101
worker-node-2 ansible_host=192.168.1.102 ip=192.168.1.102
worker-node-3 ansible_host=192.168.1.103 ip=192.168.1.103

[kube_control_plane]
master-node-1

[etcd:children]
kube_control_plane

[kube_node]
master-node-1
worker-node-1
worker-node-2
worker-node-3

[calico_rr]
# 비워둠 (소규모 클러스터라서 불필요)

[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr

SSH 키 설정

마스터 노드에서 워커노드로 SSH접속이 가능해야 함.

# SSH 키 생성 (Master node에서)
# SSH 키 생성 (있다면 생략 가능)
ssh-keygen -t rsa -b 4096

# Enter 3번 눌러서 기본값으로 생성

워커 노드에 공개키 복사

각 노드에 openssh-server가 설치되어 있어야 함
ufw disable이덩가, port 22번이 열려 있어야 함

# Master node에서 실행
ssh-copy-id worker-node-1-user@192.168.1.101
ssh-copy-id worker-node-2-user@192.168.1.102
ssh-copy-id worker-node-3-user@192.168.1.103

SSH 접속 테스트

# 비밀번호 없이 접속되는지 확인
ssh worker-node-1-user@192.168.1.101
# 접속되면 exit로 나오기
exit

마스터노드 자신에게도 복사

ssh-copy-id master-node-1-user@192.168.1.100

ansible 실행

비밀번호를 입력하여 실행하는 방식

ansible-playbook -i inventory/mycluster/inventory.ini --become --become-user=root --ask-become-pass cluster.yml

마지막으로 꼭 해야 할 것

마스터 노드에서 바로 kubectl get nodes -o wide 이렇게 치면 다음과 같이 나오면서 안될 것이다. kubectl 설정 파일이 마스터 노드에 제대로 설정되지 않아서 그렇다.
Kubespray 설치 후에는 kubectl 설정을 별도로 해줘야 한다.

Unable to connect to the server: tls: failed to verify certificate: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")

Kubectl 설정 복사

# 마스터 노드에서만 하면 된다.
 
# kubectl 설정 디렉토리 생성
mkdir -p $HOME/.kube

# admin.conf 파일을 kubectl config로 복사
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# 소유권 변경
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 권한 설정
chmod 600 $HOME/.kube/config

설정 확인

# kubectl 설정 확인
kubectl config view

# 클러스터 정보 확인
kubectl cluster-info

# 노드 상태 확인
kubectl get nodes -o wide

워커 노드에서도 kubectl을 사용하려면

# 마스터 노드에서 설정 파일 복사
scp ~/.kube/config worker-node-1-user@192.168.1.101:~/.kube/config

# 워커 노드에서 권한 설정
# (워커 노드에 SSH 접속 후)
chmod 600 ~/.kube/config

헬름 (패키지 매니저)

여기서 버전정보를 본다. https://github.com/helm/helm/releases

# Helm 설치
curl https://get.helm.sh/helm-v3.17.4-linux-amd64.tar.gz | tar -xzO linux-amd64/helm > helm
sudo mv helm /usr/local/bin/
helm version