덕규의 아즈카반
kubernetes 설치해보기 본문

다음으로는 Mac에서 쿠버네티스를 설치하는 방법을 다뤄보고자 합니다.
Mac 사양

OS : ARM / 8코어 / SSD: 약 512GB / RAM: 16GB
Rocky Linux ISO 다운로드
Rokcy Linux ISO v9.7 ISO 다운
https://rockylinux.org/download
구체적인 Rocky Linux 설치 방법
https://frontheadlock.tistory.com/4
VMware Fusion 설치
VmwareFusion 설치 관련 자세한 내용
https://seaotter.tistory.com/178
Rokcy Linux 세팅
- Network 및 호스트 이름 > IPV4 설정
- Method : 수동
- Address : 192.168.56.30 / netmask : 255.255.255.0 / gateway : 192.168.56.1
- 호스트명 : 현재 VM 이름

터미널을 통한 Rokcy Linux SSH 접속
ssh root@192.168.56.30
kubernetes 설치
echo '======== [4] Rocky Linux 기본 설정 ========'
echo '======== [4-1] 패키지 업데이트 ========'
echo '======== [4-2] 타임존 설정 ========'
timedatectl set-timezone Asia/Seoul
timedatectl set-ntp true
chronyc makestep
echo '======== [4-3] [WARNING FileExisting-tc]: tc not found in system path 로그 관련 업데이트 ========'
yum install -y yum-utils iproute-tc
echo '======== [4-3] [WARNING OpenSSL version mismatch 로그 관련 업데이트 ========'
yum update openssl openssh-server -y
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-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/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 자동완성 기능 ========'
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
Pod 확인
k get pods -A
# 전체 파드 확인
echo 'alias k=kubectl' >>~/.bashrc 통해 kubectl을 k로 치환했기에,
k 명령어로 kubectl 바이너리 실행할 수 있습니다.
Dashboard 접속
https://192.168.56.30:30000/#/login

쿠버네티스는 기본적으로 토큰 인증을 시도합니다.
# 관리자 계정 생성
kubectl create serviceaccount admin-user -n kubernetes-dashboard
# 권한 부여
kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:admin-user
# 토큰 발급
kubectl -n kubernetes-dashboard create token admin-user

발급받은 토큰으로 로그인 시에, 대시보드 화면으로 들어올 수 있습니다.
다른 맥에서 원격으로 VM 접속하는 방법
저같은 경우는, 안쓰는 맥에 쿠버네티스 클러스터를 설치하게 되었습니다.
다만, 대상 맥북의 경우 화면의 1/3이 안나오는 장애가 있어 A 맥북에서 원격으로 접속해 다뤄야 했습니다.
그렇기에, 맥북 A에서 대상 맥북 B의 VM으로 원격 접속하기 위해 Tailscale을 사용했습니다.
Tailscale을 사용하지 않아도 물론 접속은 가능합니다.
SSH 직접 접속
- 공유기를 활용한 접속
- 공유기에서 포트포워딩 설정을 통해 공인IP 확보 후 A → B → VM으로 순서대로 접속
- 다만, 작업을 진행할 A 컴퓨터와 대상인 B 컴퓨터가 같은 와이파이가 아니라면 불가
- 작업을 할 때 집이 아닌 다른 곳에서도 접속을 원하기에, 선택 X
SSH 터널링
ssh -L VM포트:B컴퓨터 IP:VM포트 호스트명@B
- B를 Bastion Host로 사용해, VM 네트워크로 포트 포워딩
- 외부에 B 만 노출하고, A가 B를 통해 내부 VM으로 접속
- 와이파이 공유기가 불안정할 경우, Packet 값이 너무 높아 지양
- 평균 ping packet 값이 3000ms
- 와이파이 공유기가 불안정할 경우, Packet 값이 너무 높아 지양
Tailscale 통한 접근 허용
Tailscale
Tailscale은 WireGuard 프로토콜을 기반으로 한 메쉬 VPN 서비스이다.
복잡한 네트워크 설정 없이도 사설 네트워크를 구축할 수 있게 해 준다.
출처 : 나무위키
SSH로 접근을 관리하기 위해서는 알아야 할 네트워크적 지식이 많이 필요합니다.
특히 접근 대상인 B와 B의 VM이 NAT 뒤에 존재하기에,
외부에서 들어오려면 포트포워딩, 공인IP, 방화벽, 라우팅 등 설계 복잡도가 많이 증가합니다.
하지만, Tailscale은 이를 알아서 처리해줘 네트워크 설계와 운영의 복잡도를 대폭 줄일 수 있습니다.
Tailescale에 기기를 등록하면 자체적으로 기기 IP 및 엔드포인트를 파악 후,
각 노드를 tailnet 주소에 편입시켜 그 주소로 라우팅이 가능하게 합니다.
특히나, Tailscale이 인터넷 위에 별도의 오버레이 네트워크를 만들기에,
LAN이나 같은 공유기 브리지에 의존하지 않아 카페에서도 집의 기기에 접속하게 도와줍니다.
이런, Tailscale을 활용하여 대상 컴퓨터에 접근하는 방식으로는 2가지가 존재합니다.
B의 VM에 직접 Tailscale을 설치하여, A → B의 VM 직접 접근,
B에만 Tailscale을 설치하여, A→B로 접근한 후 다시 B → B의 VM로 접근하는 방식이 있습니다.
저는 Tailscale로 접근하는 이유가 편리성인 만큼,
돌아가기 싫어서 B의 VM에 직접 Tailscale을 설치하여 바로 접근을 허용했습니다.

# VM 내에 Tailscale 설치 명령
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up
# A 컴퓨터 통한 B의 VM 접근 (B의 VM Tailscale vIP주소)
ssh root@100.83.255.255
Tailscale 기반 k8s 사용
이제 B의 VM에 접근이 가능하다면,
아까 테스트한 쿠버네티스의 DashBoard에 접근해보면 됩니다.
# VM 내부에서 포트포워딩
kubectl port-forward -n kubernetes-dashboard \
service/kubernetes-dashboard 8443:443 --address 0.0.0.0
# 웹 브라우저 접속해 대시보드 확인
https://100.83.255.255:8443
# 포트포워딩 따로 안하고 30000번으로도 접속 가능
https://100.83.255.255:30000

이제 Tailscale을 통해 원격 VM에 접속한 뒤,
Kubernetes Dashboard까지 성공적으로 확인할 수 있었습니다.
'DevOps' 카테고리의 다른 글
| Gen AI on K8s/EKS 인퍼런스 최적화 (3) (2) | 2026.08.09 |
|---|---|
| GenAI on K8s/EKS 인퍼런스 최적화 (2) (1) | 2026.08.04 |
| GenAI on K8s/EKS 인퍼런스 최적화 (0) | 2026.08.02 |
| LDAP 알아보기 (3) | 2026.07.15 |
| JenkinsCI 공식 Repository에 오픈소스 기여해보기 (0) | 2026.02.27 |