k8s v1.27 버전 설치 (최신, 쉬운설치 버전)
설치스펙 :
Mac M시리즈, Cpu 8core 이상, Memory 16GB 이상, 인터넷 사용 가능 환경
Mac M시리즈, Cpu 8core 이상, Memory 16GB 이상, 인터넷 사용 가능 환경
동영상 녹음 이후 설치 스크립트 수정사항
- Dashboard 버전 변경 : v2.2.0 -> v2.3.0
- Worker Node명 변경 : k8s-worker1 -> k8s-node1, k8s-worker2 -> k8s-node2
- Kubernetes 버전 변경 : v1.22 -> v1.27
- Virtualbox 버전 변경 : 사용안함
- Vagrant 버전 변경 : 사용안함
설치 가이드
1. Rocky Linux ISO 다운로드 (9.2 arm64 버전)
- Download : https://dl.rockylinux.org/vault/rocky/9.2/isos/aarch64/Rocky-9.2-aarch64-minimal.iso
- Site : https://rockylinux.org
- 위 minimal 이미지가 안되시는 분은 아래 dvd 이미지로 해보세요.
https://dl.rockylinux.org/vault/rocky/9.2/isos/aarch64/Rocky-9-latest-aarch64-dvd.iso
2. UTM 다운로드 및 설치 (4.4.4 버전)
- Download : https://github.com/utmapp/UTM/releases/download/v4.4.4/UTM.dmg
- Site : https://mac.getutm.app
3. Master VM 세팅
3-1) UTM에서 VM 생성
- Create a New Virtual Machine 선택
- Start : Virtualize
- Operating System : Linux
- Linux : Boot ISO Image [Browse..] -> Rocky ISO 파일 선택
- Hardware : Memory : 4096 MB, CPU Cores : 4
- Size : 24 GB
- Shared Directory : 설정 안함
- Summary : Name : k8s-master
3-2) VM위에 마우스 우클릭 후 [Edit] > Network > Show Advanced Settings에서 아래 내용변경
Guest Network : 192.168.56.0/24
Virtualize와 Emulate의 차이
Virtualize으로 설치시 M1이 arm 기반이기 때문에, OS와 쿠버네티스도 arm 기반으로 설치를 해야 합니다. 그래도 이렇게 설치해야 속도가 빠르고요. Emulate 방식으로 설치할 경우 amd기반으로도 설치가 가능합니다. (단, 속도가 느립니다)3-3) 생성된 VM 실행 후 Rocky Linux 초기 세팅
1. 언어 : 한국어(대한민국)
2. 사용자 설정
- root 비밀번호(R) : 개인별 root 비밀번호 입력
- root 계정을 잠금 - 체크해제
- root가 비밀번호로 SSH 로그인하도록 허용 - 체크
3. 설치 목적지 (D)
- 저장소 구성 : 자동 설정(A) [체크] 확인 후 완료(D) 클릭
4. 네트워크 및 호스트 이름
- 호스트 이름(H) : k8s-master 입력 후 [적용(A)] 클릭
- 이더넷(enp0s1) : [설정(C)..] 클릭
1) [IPv4 설정] 탭 클릭
2) Method : 수동
3) 주소 : [Add] 클릭 후 -> 주소(192.168.56.30), 넷마스크(255.255.255.0), 게이트웨이(192.168.56.1)
- [완료(D)] 클릭
5. [설치 시작(B)] 클릭
6. 설치 완료 메세지 확인 후 [재시작]
3-4) Rocky Linux 실행
- CD/DVD에 ISO 이미지가 있기 때문에 LINUX 설치를 하라고 나옴
1. UTM 화면 가장 하단에 CD/DVD를 클릭해서 Clear 클릭 (선택되어 있는 ISO이미지가 제거됨)
2. Install Rokcy Linux 9.2 대기중인 화면 상단에서 [전원버튼] 눌러서 Shutdown 하고, [▶] 버튼 눌러서 다시 VM 기동하기
3. UTM에서 제공되는 콘솔창은 내리기 (copy&paste 가 잘안됨)
4. 원격 접속 (Mac 터미널 사용)
$ ssh root@192.168.56.30
The authenticity of host '192.168.56.30 (192.168.56.30)' can't be established.
ED25519 key fingerprint is SHA256:+grKMOsgQHDF0lTTZTD65khFhnk5Q56wvNSFV4+NsnA.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
[root@192.168.56.30's password: (비번입력)
5. master에 클러스터 기본 구성 설치 (arm64 버전)
echo '======== [4] Rocky Linux 기본 설정 ========'
echo '======== [4-1] 패키지 업데이트 ========'
# 실습 자료실과 동일한 실습 환경을 유지하기 위해 Linux Update 주석 처리
# yum -y update
echo '======== [4-2] 타임존 설정 ========'
timedatectl set-timezone Asia/Seoul
echo '======== [4-3] [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
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-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.el9.aarch64
systemctl daemon-reload
systemctl enable --now containerd
echo '======== [6-3] 컨테이너 런타임 : cri 활성화 ========'
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.aarch64 kubeadm-1.27.2-150500.1.1.aarch64 kubectl-1.27.2-150500.1.1.aarch64 --disableexcludes=kubernetes
systemctl enable --now kubelet
echo '======== [8] kubeadm으로 클러스터 생성 ========'
echo '======== [8-1] 클러스터 초기화 (Pod Network 세팅) ========'
kubeadm init --pod-network-cidr=20.96.0.0/16 --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.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 '======== [9] 쿠버네티스 편의기능 설치 ========'
echo '======== [9-1] kubectl 자동완성 기능 ========'
yum -y install bash-completion
echo "source <(kubectl completion bash)" >> ~/.bashrc
echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
source ~/.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
echo '======== [10-1] Pod 상태 확인 ========'
kubectl get pod -A
3. Node1 VM 세팅
3-1) UTM에서 VM 생성
- Create a New Virtual Machine 선택
- Start : Virtualize
- Operating System : Linux
- Linux : Boot ISO Image [Browse..] -> Rocky ISO 파일 선택
- Hardware : Memory : 2048 MB, CPU Cores : 2
- Size : 24 GB
- Shared Directory : 설정 안함
- Summary : Name : k8s-node1
3-2) 생성된 VM 실행 후 Rocky Linux 초기 세팅
1. 언어 : 한국어(대한민국)
2. 사용자 설정
- root 비밀번호(R) : 개인별 root 비밀번호 입력
- root 계정을 잠금 - 체크해제
- root가 비밀번호로 SSH 로그인하도록 허용 - 체크
3. 설치 목적지 (D)
- 저장소 구성 : 자동 설정(A) [체크] 확인 후 완료(D) 클릭
4. 네트워크 및 호스트 이름
- 호스트 이름(H) : k8s-node1 입력 후 [적용(A)] 클릭
- 이더넷(enp0s1) : [설정(C)..] 클릭
1) [IPv4 설정] 탭 클릭
2) Method : 수동
3) 주소 : [Add] 클릭 후 -> 주소(192.168.56.31), 넷마스크(255.255.255.0), 게이트웨이(192.168.56.1)
- [완료(D)] 클릭
5. [설치 시작(B)] 클릭
6. 설치 완료 메세지 확인 후 [재시작]
3-3) Rocky Linux 실행
- CD/DVD에 ISO 이미지가 있기 때문에 LINUX 설치를 하라고 나옴
1. UTM 화면 가장 하단에 CD/DVD를 클릭해서 Clear 클릭 (선택되어 있는 ISO이미지가 제거됨)
2. Install Rokcy Linux 9.2 대기중인 화면 상단에서 [전원버튼] 눌러서 Shutdown 하고, [▶] 버튼 눌러서 VM 기동하기
3. UTM에서 제공되는 콘솔창은 내리기 (copy&paste 가 잘안됨)
4. 원격 접속 (Mac 터미널 사용)
$ ssh root@192.168.56.31
The authenticity of host '192.168.56.31 (192.168.56.31)' can't be established.
ED25519 key fingerprint is SHA256:+grKMOsgQHDF0lTTZTD65khFhnk5Q56wvNSFV4+NsnA.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
[root@192.168.56.31's password: (비번입력)
5. Node1에 기본 구성 설치 (arm64 버전)
echo '======== [4] Rocky Linux 기본 설정 ========'
echo '======== [4-1] 패키지 업데이트 ========'
# yum -y update
# 현재 업데이트시 VM 기동이 안되는 이슈가 있어, 업데이트는 하지 않습니다. (설치에는 지장 없어요)
echo '======== [4-2] 타임존 설정 ========'
timedatectl set-timezone Asia/Seoul
echo '======== [4-3] [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
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-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.el9.aarch64
systemctl daemon-reload
systemctl enable --now containerd
echo '======== [6-3] 컨테이너 런타임 : cri 활성화 ========'
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.aarch64 kubeadm-1.27.2-150500.1.1.aarch64 --disableexcludes=kubernetes
systemctl enable --now kubelet
3. Node2 VM 세팅
3-1) UTM에서 VM 생성
- Create a New Virtual Machine 선택
- Start : Virtualize
- Operating System : Linux
- Linux : Boot ISO Image [Browse..] -> Rocky ISO 파일 선택
- Hardware : Memory : 2048 MB, CPU Cores : 2
- Size : 24 GB
- Shared Directory : 설정 안함
- Summary : Name : k8s-node2
3-2) 생성된 VM 실행 후 Rocky Linux 초기 세팅
1. 언어 : 한국어(대한민국)
2. 사용자 설정
- root 비밀번호(R) : 개인별 root 비밀번호 입력
- root 계정을 잠금 - 체크해제
- root가 비밀번호로 SSH 로그인하도록 허용 - 체크
3. 설치 목적지 (D)
- 저장소 구성 : 자동 설정(A) [체크] 확인 후 완료(D) 클릭
4. 네트워크 및 호스트 이름
- 호스트 이름(H) : k8s-node2 입력 후 [적용(A)] 클릭
- 이더넷(enp0s1) : [설정(C)..] 클릭
1) [IPv4 설정] 탭 클릭
2) Method : 수동
3) 주소 : [Add] 클릭 후 -> 주소(192.168.56.32), 넷마스크(255.255.255.0), 게이트웨이(192.168.56.1)
- [완료(D)] 클릭
5. [설치 시작(B)] 클릭
6. 설치 완료 메세지 확인 후 [재시작]
3-3) Rocky Linux 실행
- CD/DVD에 ISO 이미지가 있기 때문에 LINUX 설치를 하라고 나옴
1. UTM 화면 가장 하단에 CD/DVD를 클릭해서 Clear 클릭 (선택되어 있는 ISO이미지가 제거됨)
2. Install Rokcy Linux 9.2 대기중인 화면 상단에서 [전원버튼] 눌러서 Shutdown 하고, [▶] 버튼 눌러서 VM 기동하기
3. UTM에서 제공되는 콘솔창은 내리기 (copy&paste 가 잘안됨)
4. 원격 접속 (Mac 터미널 사용)
$ ssh root@192.168.56.32
The authenticity of host '192.168.56.32 (192.168.56.32)' can't be established.
ED25519 key fingerprint is SHA256:+grKMOsgQHDF0lTTZTD65khFhnk5Q56wvNSFV4+NsnA.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
[root@192.168.56.32's password: (비번입력)
5. Node1에 기본 구성 설치 (arm64 버전)
echo '======== [4] Rocky Linux 기본 설정 ========'
echo '======== [4-1] 패키지 업데이트 ========'
# yum -y update
# 현재 업데이트시 VM 기동이 안되는 이슈가 있어, 업데이트는 하지 않습니다. (설치에는 지장 없어요)
echo '======== [4-2] 타임존 설정 ========'
timedatectl set-timezone Asia/Seoul
echo '======== [4-3] [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
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-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.el9.aarch64
systemctl daemon-reload
systemctl enable --now containerd
echo '======== [6-3] 컨테이너 런타임 : cri 활성화 ========'
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.aarch64 kubeadm-1.27.2-150500.1.1.aarch64 --disableexcludes=kubernetes
systemctl enable --now kubelet
6. Worker Node 연결 및 Master 상태 확인
6-1) master에서 cat 명령으로 자신에 토큰 확인 및 복사
[root@k8s-master ~]# cat ~/join.sh
join 192.168.56.30:6443 --token bver73.wda72kx4afiuhspo --discovery-token-ca-cert-hash sha256:7205b3fd6030e47b74aa11451221ff3c77daa0305aad0bc4a2d3196e69eb42b7
8-2) node1에서 토큰 붙여놓기
8-3) node2에서 토큰 붙여놓기 반복
8-4) master 에서 노드 상태 확인 ```cmd kubectl get nodes ```
7. 대시보드 접근
https://192.168.56.30:30000/#/login