OS : Ubuntu 22.04
kubeadm을 이용하여 쿠버네티스 클러스터를 구축해 보겠습니다.
공통) 모든 노드에서 진행
1. swap 비활성화
# swap 활성화 되어있는지 확인
free -h
# 해당 파일을 수정하여 swap 부분을 주석 처리
sudo vi /etc/fstab
# 주석 처리
#/swapfile none swap sw 0 0
2. docker 설치
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 사용자에게 docker 권한 부여 (dial unix /var/run/docker.sock: connect: permission denied)
sudo groupadd docker
sudo usermod -aG docker ${USER}
newgrp docker
docker ps
3. containerd 적용
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
sudo vi /etc/containerd/config.toml
# 해당 부분의 SystemdCgroup 값을 true로 변경합니다.
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
sudo systemctl restart containerd
sudo systemctl enable containerd
4. kubectl, kubelet, kubeadm 설치
해당 명령어는 1.31 버전의 쿠버네티스 설치를 가정하고 작성하였습니다.
다른 버전의 설치는 해당 링크를 참고하여 주세요.
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
sudo systemctl enable --now kubelet
마스터 노드에서 진행
1. control plane (master node) 생성
주의해야 할 점은 cidr이 이미 사용하고 있는 IP 대역과 겹치지 않아야 한다는 점입니다.
해당 옵션을 사용하지 않게 된다면
192.168.0.0/16 로 cidr이 설정됩니다.
sudo kubeadm init --apiserver-advertise-address ${IP 주소} --pod-network-cidr=${적절한 IP 대역}
2. kubectl 명령어 사용을 위한 설정
kubeadm init이 완료되면 특정 명령어를 실행하라는 문구가 출력됩니다.
다음 명령어를 마스터 노드에서 실행해 주세요.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
성공적으로 kubectl 명령어가 수행되는지 확인합니다.
kubectl get nodes
3. CNI 설치
2번까지 수행을 하면 마스터 노드가 NotReady 상태인 것을 확인할 수 있습니다.
CNI까지 설치를 해주셔야 합니다.
Calico CNI를 설치합니다.
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/tigera-operator.yaml
우선 custom-resource.yaml은 먼저 manifest 파일을 다운로드 받아서 cidr을 수정해 주어야 합니다.
wget https://raw.githubusercontent.com/projectcalico/calico/v3.28.1/manifests/custom-resources.yaml
piVersion: operator.tigera.io/v1
kind: Installation
metadata:
name: default
spec:
# Configures Calico networking.
calicoNetwork:
ipPools:
- name: default-ipv4-ippool
blockSize: 26
cidr: ${kubeadm init 에서 지정한 동일한 cidr}
encapsulation: VXLANCrossSubnet
natOutgoing: Enabled
nodeSelector: all()
custom resource도 생성합니다.
kubectl create -f custom-resources.yaml
워커 노드에서 진행
이제 워커노드를 마스터 노드에 join합니다.
# kubeadm init하여 나온 출력 중에 아래와 같이 join 문구가 출력된 것을 실행
sudo kubeadm join ~~
노드의 status를 확인해 봅시다.
kubectl get nodes
노드의 NAME은 해당 노드의 호스트 네임으로 설정됩니다.
'Kubernetes' 카테고리의 다른 글
kube-apiserver 트러블슈팅 (feat. kubelet) (1) | 2024.11.19 |
---|---|
kubeflow 1.9 마이그레이션 (0) | 2024.09.22 |
kind 환경에서 GPU 사용하기 (3) | 2024.09.01 |
Ubuntu 22.04 환경에서 kind 클러스터 구축하기 (1) | 2024.08.31 |
쿠버네티스 + wsl2 (하지마세요...) (1) | 2024.08.25 |