1. 글을 작성하게 된 계기
K8s (1.27.x )를 구축하고자 하는데 최근에 업데이트 된 내용에 대한 글이 없어 정리하고자 합니다.
매일 까먹는 나를 위해서 그리고 어려움을 겪고 있는 다른 분들에게
조금이라도 도움이 되었으면 좋겠다.
2. 설치 방법
1. Swap 비활성화
Kubernetes를 설치하기 전에 swap 메모리를 비활성화해야 합니다. 이를 통해 시스템이 swap을 사용하지 않도록 설정합니다.
# Swap 비활성화
sudo swapoff -a
# 부팅 시 swap이 다시 활성화되지 않도록 설정
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
2. 네트워크 모듈 및 sysctl 설정
K8s 설치에 필요한 네트워크 모듈을 로드하고, 필요한 sysctl 파라미터를 설정합니다.
# 네트워크 모듈 로드
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# sysctl 파라미터 설정
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# sysctl 파라미터 적용
sudo sysctl --system
3. Containerd 설치 및 설정
Kubernetes에서는 컨테이너 런타임으로 containerd를 사용합니다. containerd를 설치하고, systemd cgroup을 설정합니다.
# containerd 설치
sudo apt install -y containerd
# containerd 설정 파일 생성 및 수정
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo vi /etc/containerd/config.toml
# SystemdCgroup = true 로 수정 후 저장
설정이 완료된 후 containerd 서비스를 재시작하고, 상태를 확인합니다.
# containerd 서비스 재시작
sudo systemctl restart containerd.service
# 서비스 상태 확인
sudo systemctl status containerd.service
4. Kubernetes 설치
다음으로, Kubernetes를 설치합니다. 공식 저장소의 패키지를 사용하여 kubeadm, kubelet, kubectl을 설치합니다.
# K8s 설치를 위한 패키지 설정
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo mkdir -p /etc/apt/keyrings
# K8s 패키지 저장소 추가
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.27/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.27/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
# 패키지 업데이트
sudo apt-get update
# 설치 가능한 버전 확인
sudo apt-cache madison kubeadm
# kubeadm, kubelet, kubectl 설치
sudo apt-get install -y kubelet=1.27.16-1.1 kubeadm=1.27.16-1.1 kubectl=1.27.16-1.1
5. Kubernetes 클러스터 초기화
클러스터를 초기화하여 마스터 노드를 설정합니다. --apiserver-advertise-address 옵션에 마스터 노드의 IP 주소를 입력하고, --pod-network-cidr로 네트워크 CIDR을 지정합니다. (내부 ip: 192.168.0.11 / 외부 ip: 10.10.10.10 일 때)
sudo kubeadm init \
--control-plane-endpoint=10.10.10.10:6443 \
--apiserver-advertise-address=192.168.0.11 \
--pod-network-cidr=192.168.0.0/16 \
--apiserver-cert-extra-sans=10.10.10.10
or
sudo kubeadm init \
--control-plane-endpoint "도메인:6443" \
--apiserver-advertise-address=192.168.0.20 \
--pod-network-cidr=192.168.0.0/16 \
--apiserver-cert-extra-sans=도메인,10.10.10.10
초기화가 완료되면, 클라이언트에서 K8s를 관리할 수 있도록 kubeconfig 파일을 설정합니다.
# kubeconfig 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
6. 네트워크 플러그인 설치
Pod 간 통신을 위해 Calico 네트워크 플러그인을 설치합니다.
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
7. 클러스터 상태 확인
클러스터가 정상적으로 설치되었는지 확인하려면, 아래 명령어를 실행합니다.
kubectl get nodes
만약 master node를 추후에 worker node로 사용한다면 다음 명령어를 사용한다.
kubectl taint nodes <master-node-name> node-role.kubernetes.io/control-plane-
그리고 사용하지 않는 명령어는 다음과 같다.
kubectl taint nodes <master-node-name> node-role.kubernetes.io/control-plane:NoSchedule
3. 참고
https://v1-27.docs.kubernetes.io/ko/docs/setup/production-environment/container-runtimes/
https://v1-27.docs.kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
'Come on IT > DevOps' 카테고리의 다른 글
K8s CrashLoopBackOff 해결 방법 (0) | 2024.09.30 |
---|---|
쿠버네티스(K8s) 대시보드 구축 방법 (1) | 2024.09.30 |
dial tcp 127.0.0.1:10248: connect: connection refused 해결방법 (0) | 2024.09.29 |
[ERROR Port-10250]: Port 10250 is in use 해결방법 (feat. K8s) (0) | 2024.09.29 |
Docker 완전 삭제 방법 (feat. Ubuntu) (0) | 2024.09.27 |