Rhel 9.4에 쿠버네티스 설치 (k8s install)
안녕하세요
쿠버네티스(k8s) 설치하는 방법에 대하여 블로깅 하도록 하겠습니다.

위와 같은 구성으로 구성해보도록 하겠습니다.

먼저 네 개의 노드를 준비해줍니다.
쿠버네티스 설치 과정
- Container Runtime Install (모든Node에 설치)
Kubernetes는 컨테이너 오케스트레이션 시스템 입니다.
컨테이너를 생성·시작·중지”하는 일을 직접 하지 않고
아래와 같은 컨테이너 런타임(Container Runtime) 에게 맡겨서 실행하죠.
대표적인 컨테이너 런타임의 종류
- Docker
- containerd
- CRI-O
- Mirantis Container Runtime
위 컨테이너 런타임 중 아무거나 설치해도 되지만 그 중에 도커(Docker)를 설치하도록 하겠습니다.
준비한 모든 노드 (master,node1,node2,node3) 에 도커를 설치해줍니다.
$ sudo dnf -y install dnf-plugins-core
dnf(RHEL 8/9의 패키지 관리자)에 추가 기능(플러그인)을 제공
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
Docker 공식 저장소(repo)를 시스템에 추가하는 명령어
$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Docker Install 명령어

..

참고 : https://docs.docker.com/engine/install/rhel
- Kubenetes Install (모든 노드 master,node1,node2,node3 에 설치)
2.1. 설치 전 환경설정
✔ Linux 호환성 체크 : RHEL9.x , RHEL8.x
쿠버네티스 v1.28을 기준으로, 일부 기능은 커널 5.8 이상을 요구하며, 전반적인 안정성을 위해서는 최신 RHEL 버전의 커널(보통 4.x 또는 5.x 이상)이 권장됩니다.
✔ OS 사양 check : 메모리 2 GB 이상 , CPU 코어 2 이상
✔ SWAP 비활성화
$ swapoff -a
$ swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
✔ 방화벽 끄기
$ systemctl stop firewalld
$ systemctl disable firewalld
✔ 커널 네트워크 설정
$ cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
✔ SELinux in permissive mode
$ sudo setenforce 0
$ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
2.2 Kubeadm, kubectl, kubelet 설치 (모든 노드 [master,node1,node2,node3] 에 설치)
① 쿠버네티스 저장소(repo)를 설정
# This overwrites any existing configuration in /etc/yum.repos.d/kubernetes.repo
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
② kubelet, kubeadm, kubectl 패키지를 설치
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=Kubernetes

③ kubelet 서비스를 시스템에 등록 및 부팅 시 실행등록
![]()
참고 : https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
2.3 control-plane 구성 (master 노드만)
① 마스터 노드 구성
$ kubeadm init
마스터 노드에서 클러스터를 초기화

ㄱ. 다음과 같은 장애 시

vi /etc/containerd/config.toml
의 내용중

– disabled_plugins = [] 로 수정하거나 해당 줄을 완전히 주석 처리 (# disabled_plugins = [“cri”])
- Containerd 서비스 재시작
$ sudo systemctl restart containerd
– Node 들이 사용할 토큰을 따로 저장

Token의 역할?
- 토큰은 일종의 임시 비밀번호 역할을 합니다.
- 워커 노드가 마스터 노드의 API 서버에 연결을 시도할 때, 이 토큰을 사용하여 자신을 인증합니다.
- 토큰은 기본적으로 24시간 동안만 유효하며, 보안상의 이유로 만료되면 새로 생성해야 합니다.
② kubectl 명령 허가
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

③ Pod Add-on 설치
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

④ 확인

2.4 worker node 구성
① worker node API 연결
2.3 에서 저장했던 token 값을 각 노드에서 실행 (node1, node2, node3)

2.5 설치확인
$ kubectl get nodes

자유롭게 댓글을 달아주세요! 언제나 환영합니다.
기타 문의: info@neoclova.co.kr
네오클로바 기술블로그 홈 바로가기: https://neoclova.net
네오클로바 홈페이지: http://neoclova.co.kr
