k8s v1.27 버전 설치 (최신, 쉬운설치 버전)

설치스펙 :
Mac M시리즈, Cpu 8core 이상, Memory 16GB 이상, 인터넷 사용 가능 환경

설치 가이드


Installation Step Case7 for Kubernetes - mac


1. Rocky Linux ISO 다운로드 (9.2 arm64 버전)

2. UTM 다운로드 및 설치 (4.4.4 버전)

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

Installation Step Case7 for Kubernetes - mac issue

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


참고

Version 정보

Installation Step Case7 for Kubernetes Update - mac

Network 구성도

Installation Network Case7 for Kubernetes - mac