1. XShell 설치
- 다운로드 url : https://www.netsarang.com/en/free-for-home-school/
- 설치 후 k8s-master(192.168.56.30:22), k8s-node1(192.168.56.31:22), k8s-node2(192.168.56.32:22) IP 등록
2. VirtualBox 설치 (7.0.8 버전)
https://www.virtualbox.org/wiki/Downloads
Downloads – Oracle VM VirtualBox
Download VirtualBox Here you will find links to VirtualBox binaries and its source code. VirtualBox binaries By downloading, you agree to the terms and conditions of the respective license. If you're looking for the latest VirtualBox 6.1 packages, see Virt
www.virtualbox.org
3. Vagrant설치 및 설치 스크립트 실행
// 폴더 생성
C:\Users\사용자>mkdir k8s
C:\Users\사용자>cd k8s
// 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-vbguest vagrant-disksize
명령어를 수행 한 후 k8s 디렉토리
그리고 위의 k8s경로에 vagrantfile을 작성해줍니다.
3.1 Vagrantfile 작성
puts '======== [1] 노드 개수 설정 ========'
NodeCnt = 2
puts '======== Vagrant 버전 2로 설정 ========'
Vagrant.configure("2") do |config|
puts '======== VM 설정 ========'
puts '======== rockylinux/8로 설정 ========'
config.vm.box = "rockylinux/8"
puts '======== 디스크 크기 30GB ========'
config.disksize.size = "30GB"
puts '======== VirtualBox Guest Additions 비활성화 ========'
config.vbguest.auto_update = false
puts '======== 기본 동기화 폴더 비활성화 ========'
config.vm.synced_folder "./", "/vagrant", disabled: true
puts '======== VM 설정 ========'
puts '======== $install_common_tools 스크립트를 높은 권한으로 실행합니다. ========'
config.vm.provision :shell, privileged: true, inline: $install_common_tools
puts '======== 마스터 노드 설정 ========'
config.vm.define "k8s-master" do |master|
puts '======== 이름 "k8s-master" ========'
master.vm.hostname = "k8s-master"
puts '======== 프라이빗 네트워크 설정, 고정 IP "192.168.56.30" 할당 ========'
master.vm.network "private_network", ip: "192.168.56.30"
puts '======== 마스터 노드 VirutalBox 설정 ========'
master.vm.provider :virtualbox do |vb|
puts '======== memory = 5120 ========'
vb.memory = 5120
puts '======== cpus = 4 ========'
vb.cpus = 4
puts '======== VM의 펌웨어를 EFI로 설정 ========'
vb.customize ["modifyvm", :id, "--firmware", "efi"]
end
# 마스터 노드를 구성하는 $provision_master_node 스크립트를 높은 권한으로 실행
master.vm.provision :shell, privileged: true, inline: $provision_master_node
end
puts '======== "k8s-node1", "k8s-node2" 워커 노드 정의를 위한 루프 ========'
(1..NodeCnt).each do |i|
config.vm.define "k8s-node#{i}" do |node|
node.vm.hostname = "k8s-node#{i}"
node.vm.network "private_network", ip: "192.168.56.#{i + 30}"
node.vm.provider :virtualbox do |vb|
puts "======== k8s-node#{i}의 메모리를 3096MB로 설정 ========"
vb.memory = 3096
puts "======== k8s-node#{i}의 CPU를 2개로 설정 ========"
vb.cpus = 2
puts "======== k8s-node#{i}의 펌웨어를 EFI로 설정 ========"
vb.customize ["modifyvm", :id, "--firmware", "efi"]
end
end
end
end
$install_common_tools = <<-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-5] Hosts 등록 ========'
cat << EOF >> /etc/hosts
192.168.56.30 k8s-master
192.168.56.31 k8s-node1
192.168.56.32 k8s-node2
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 활성화 ========'
sed -i 's/^disabled_plugins/#disabled_plugins/' /etc/containerd/config.toml
systemctl restart containerd
echo '======== [7] kubeadm 설치 ========'
echo '======== [7] repo 설정 ========'
cat <<EOF |tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
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-0.x86_64 kubeadm-1.27.2-0.x86_64 kubectl-1.27.2-0.x86_64 --disableexcludes=kubernetes
systemctl enable --now kubelet
SHELL
$provision_master_node = <<-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
kubeadm token create --print-join-command > ~/join.sh
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.25.1/calico.yaml
kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/calico-3.25.1/calico-custom.yaml
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
SHELL
4. VM 생성 및 스크립트 설치
vagrant up
vagrant up : VM 생성 및 스크립트 설치
(최초 VM생성 할때만 사용 합니다. 생성 이후 부터 VM 기동/중지는 Virtualbox UI를 사용하는걸 권해 드려요.)
vagrant destroy : 가상머신 삭제
(vagrant up으로 VM 생성 중 에러가 났을 때 이 명령으로 삭제 합니다.)
5. Worker Node 연결
5-1) XShell을 통해 master 접속 (id/pw: root/vagrant)
5-2) cat 명령으로 자신에 master 접근 token 확인 및 복사
[root@k8s-master ~]# cat ~/join.sh
kubeadm join 192.168.56.30:6443 --token bver73.wda72kx4afiuhspo --discovery-token-ca-cert-hash sha256:7205b3fd6030e47b74aa11451221ff3c77daa0305aad0bc4a2d3196e69eb42b7
5-3) worker node1, worker node2 접속 후 토큰 붙여넣기
[root@k8s-node1 ~]# kubeadm join 192.168.56.30:6443 --token bver73.wda72kx4afiuhspo --discovery-token-ca-cert-hash sha256:7205b3fd6030e47b74aa11451221ff3c77daa0305aad0bc4a2d3196e69eb42b7
5. 설치 확인
5-1) XShell을 통해 master 접속
5-2) kubectl 명령어
[root@k8s-master ~]# kubectl get pod -A
[root@k8s-master ~]# kubectl get nodes
6. 대시보드 접근
https://192.168.56.30:30000/#/login
'Kubernetes' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 라벨과 셀렉터 (2) | 2023.12.12 |
---|---|
[Kubernetes] 쿠버네티스 구성 & Pod 과정 (0) | 2023.12.07 |
[Docker]비디오 스트리밍 마이크로서비스 (2) | 2023.06.06 |
[Docker] SpringBoot jar - 도커 이미지 생성 (2) | 2023.06.05 |
[Container] 컨테이너 오케스트레이션 (Container Orchestration) (0) | 2023.06.04 |
댓글