본문 바로가기
IT 기술/Infra

[k8s] 쿠버네티스 빠르게 설치하기

by Geunny 2023. 12. 14.
반응형

 

본 게시물은 인프런 쿠버네티스 어나더 클래스 강의 내용을 정리한 내용입니다.  링크(https://url.kr/vxsutp)

 

쿠버네티스(v.1.27.2) 쉽고 빠르게 설치하는 방법

 

 

  1. Virtualbox 설치 (link)
  2. Vagrant 설치 (link)
  3. Vagrant 스크립트 실행 (윈도우 > 실행 > cmd > 확인)
# Vagrant 폴더 생성
C:\Users\사용자> mkdir k8s
C:\Users\사용자> cd k8s

# Vagrant 스크립트 다운로드
C:\Users\사용자\k8s> curl -O https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/vagrant-2.3.4/Vagrantfile

# Rocky Linux Repo 세팅
C:\Users\사용자\k8s> curl -O https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/vagrant-2.3.4/rockylinux-repo.json
C:\Users\사용자\k8s> vagrant box add rockylinux-repo.json

# Vagrant Disk 설정 Plugin 설치 
C:\Users\사용자\k8s> vagrant plugin install vagrant-disksize

# Vagrant 실행 (VM생성)
C:\Users\사용자\k8s> vagrant up

 

설치후 접속

  1. MobaXterm 설치 (link)
  2. Master 원격 접속 : 192.168.56.30:22 (root/vagrant)
  3. Pod 확인

 

  • kubectl get pods -A
  • 대시보드 접속 URI : https://192.168.56.30:30000/#/login
    • FAQ : virtualbox 설치 안될 때 (link), vagrant up 안될 때 (link), dashboard 관련 (link), virtualbox Host-Only Network cidr 변경 (link)
    • Cafe : 쿠버네티스 빠른 설치 카페 참조 (link

 

개념 이해

 

쿠버네티스 무게감 있게 설치하는 방법 1/2

 

  • 해당 스크립트는 Vagrant 를 이용하여 Rocky Linux 와 k8s 를 설치하는 스크립트이다.
  • Vagrant 는 스크립트 기반으로 특정 vm의 환경과 배포환경을 맞추어 주는 역할을 한다.

  • Vagrant 스크립트에서 리눅스 환경을 셋팅하는 부분이다.
    • vm.box 를 통해 해당 vm의 os 환경을 rockylinux/8 로 설정하였다.
    • 'master-node' 는 Virtualbox 에서 생성되는 VM 의 이름이다.
    • 해당 VM 의 hostname dms 'k8s-master' 로 지정하였다.

  • 다음 설정은 VM의 네트워크를 설정하는 부분이다.
    • private_network : Host-Only Network (내 PC 에서만 사용할 수 있는 네트워크망) IP 도 할당해줌.
    • 작성해준 네트워크와 또 별도로 Vagrant 에서 Default 로 생성해주는 네트워크가 존재함. -> NAT
    • NAT 는 IP도 자동 할당되며 생성된 VM 과 실행환경 컴퓨터의 외부 인터넷과 연결해 준다.
    • 쿠버네티스 설치시 필요한 패키지들을 NAT 를 이용하여 다운로드 받게 된다.

  • Host-Only Network 에 cidr 을 지정하여 해당 대역에서 IP를 할당받도록 지정함.
  • 해당 예제에서는 192.168.56 대역으로 설정되어 있으며 1~255 까지 할당됨.
  • 여기서 /24 의 의미는 서브넷 대역을 말하여 앞에 24비트(8비트 *3 -> 192.168.30) 이 같은 Ip는 같은 대역으로 인식하게 한다는 의미이다. -> cidr

  • 자원(resource) 설정 스크립트
  • 메모리: 4GB, CPU 코어수 : 4
  • 실행하는 컴퓨터의 자원 내에서 얼마나 할당할 것인지 설정함.
  • 메모리는 사용하는 컴퓨터의 용량을 넘어서면 안된다.
  • CPU는 공유되는 자원으로 최대 사용 컴퓨터의 CPU 코어 갯수만큼 사용 가능하다.
  • 쿠버네티스 설치에 권장되는 코어수는 2 Core 이다.

쿠버네티스 무게감 있게 설치하는 방법 1/2 [구간별상태확인]

 

 

  • 일프로님의 해당 카페에서 각 포인트에 대해서 잘 설치됐는지 확인 볼 수 있다. (link)

 

쿠버네티스 무게감 있게 설치하는 방법 

  • 아래 스크립트는 Vagrant를 실행하면서 VM 에 커멘드 명령어를 사용하여 실제 서버에서 쉘스크립트를 동작시키는 방법이다.
config.vm.provision :shell, privileged: true, inline: $install_default
## 중략..
	master.vm.provision :shell, privileged: true, inline: $install_master
end

 

  • 각 지정한 install_default, install_master 변수는 아래 스크립트처럼 = <<-SHELL ... SHELL 블럭을 통해 쉘을 지정할 수 있다.

 

 

설치 스크립트

$install_default = <<-SHELL

echo '======== [4] Rocky Linux 기본 설정 ========'
echo '======== [4-1] 패키지 업데이트 ========'
yum -y update

echo '======== [4-2] 타임존 설정 ========'
timedatectl set-timezone Asia/Seoul

echo '======== [4-3] Disk 확장 / Bug: soft lockup 설정 추가========'
# https://cafe.naver.com/kubeops/25
yum install -y cloud-utils-growpart
growpart /dev/sda 4
xfs_growfs /dev/sda4
echo 0 > /proc/sys/kernel/hung_task_timeout_secs
echo "kernel.watchdog_thresh = 20" >> /etc/sysctl.conf

echo '======== [4-4] [WARNING FileExisting-tc]: tc not found in system path 로그 관련 업데이트 ========'
yum install -y yum-utils iproute-tc

echo '======= [4-4] hosts 설정 =========='
cat << EOF >> /etc/hosts
192.168.56.30 k8s-master
EOF

echo '======== [5] kubeadm 설치 전 사전작업 ========'
echo '======== [5] 방화벽 해제 ========'
systemctl stop firewalld && systemctl disable firewalld

echo '======== [5] Swap 비활성화 ========'
swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab


echo '======== [6] 컨테이너 런타임 설치 ========'
echo '======== [6-1] 컨테이너 런타임 설치 전 사전작업 ========'
echo '======== [6-1] iptable 세팅 ========'
cat <<EOF |tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

cat <<EOF |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 --system

echo '======== [6-2] 컨테이너 런타임 (containerd 설치) ========'
echo '======== [6-2-1] containerd 패키지 설치 (option2) ========'
echo '======== [6-2-1-1] docker engine 설치 ========'
echo '======== [6-2-1-1] repo 설정 ========'
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

echo '======== [6-2-1-1] containerd 설치 ========'
yum install -y containerd.io-1.6.21-3.1.el8
systemctl daemon-reload
systemctl enable --now containerd

echo '======== [6-3] 컨테이너 런타임 : cri 활성화 ========'
# defualt cgroupfs에서 systemd로 변경 (kubernetes default는 systemd)
containerd config default > /etc/containerd/config.toml
sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml
systemctl restart containerd



echo '======== [7] kubeadm 설치 ========'
echo '======== [7] repo 설정 ========'
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF


echo '======== [7] SELinux 설정 ========'
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

echo '======== [7] kubelet, kubeadm, kubectl 패키지 설치 ========'
yum install -y kubelet-1.27.2-150500.1.1.x86_64 kubeadm-1.27.2-150500.1.1.x86_64 kubectl-1.27.2-150500.1.1.x86_64 --disableexcludes=kubernetes
systemctl enable --now kubelet

SHELL



$install_master = <<-SHELL

echo '======== [8] kubeadm으로 클러스터 생성  ========'
echo '======== [8-1] 클러스터 초기화 (Pod Network 세팅) ========'
kubeadm init --pod-network-cidr=20.96.0.0/12 --apiserver-advertise-address 192.168.56.30

echo '======== [8-2] kubectl 사용 설정 ========'
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

echo '======== [8-3] Pod Network 설치 (calico) ========'
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico.yaml
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.26.4/calico-custom.yaml

echo '======== [8-4] Master에 Pod를 생성 할수 있도록 설정 ========'
kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane-


echo '======== [9] 쿠버네티스 편의기능 설치 ========'
echo '======== [9-1] kubectl 자동완성 기능 ========'
echo "source <(kubectl completion bash)" >> ~/.bashrc
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc

echo '======== [9-2] Dashboard 설치 ========'
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml

echo '======== [9-3] Metrics Server 설치 ========'
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/metrics-server-0.6.3/metrics-server.yaml
SHELL

 

 

아래는 위 스크립트의 각 설치 스크립트를 설명한 그림이다.

 

  • 여기서 calico 는 CNI (Container Network Interface) 플러그인중 하나로 컨테이너들 간의 통신을 관리하는 부분에 대한 쿠버네티스와 네트워크 사이의 인터페이스다.
  • 설치 이후 dashboard 로 설정한 해당 vm에 30000번 포트로 접속하여 정상적으로 대쉬보드가 출력된다면 성공!

댓글