반응형
본 게시물은 인프런 쿠버네티스 어나더 클래스 강의 내용을 정리한 내용입니다. 링크(https://url.kr/vxsutp)
쿠버네티스(v.1.27.2) 쉽고 빠르게 설치하는 방법
# 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
설치후 접속
- MobaXterm 설치 (link)
- Master 원격 접속 : 192.168.56.30:22 (root/vagrant)
- Pod 확인
-
kubectl get pods -A
- 대시보드 접속 URI : https://192.168.56.30:30000/#/login
개념 이해
쿠버네티스 무게감 있게 설치하는 방법 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번 포트로 접속하여 정상적으로 대쉬보드가 출력된다면 성공!
'IT 기술 > Infra' 카테고리의 다른 글
[k8s] Object 그려보며 이해하기 (1) | 2023.12.19 |
---|---|
[k8s] 실무에서 느껴본 쿠버네티스가 정말 편한 이유 (0) | 2023.12.15 |
[k8s] 컨테이너 한방 정리 (0) | 2023.12.14 |
[Docker] 도커 컨테이너 시간변경 (3) | 2023.06.07 |
[Linux] 리눅스 환경값 확인하기 (0) | 2023.06.05 |
댓글