리눅스

우분투에서 Minikube를 설치하고 실행하는 방법

변군이글루 2025. 3. 9. 19:01
반응형

우분투에서 Minikube를 설치하고 실행하는 방법(none 드라이버로 실행)

none 드라이버는 Minikube가 가상 머신이나 Docker 컨테이너 대신 호스트 시스템에서 직접 Kubernetes 클러스터를 실행합니다.

테스트 환경

$ lsb_release -d
Description:	Ubuntu 24.04.1 LTS

스왑 메모리 비활성화

sudo swapoff -a
sudo sed -i '/swap/ s/^/#/' /etc/fstab

Minikube 클러스터 삭제

더보기

---

minikube stop
minikube delete
sudo rm -rf $HOME/.kube $HOME/.minikube
sudo rm -rf /var/lib/minikube
sudo rm -rf /etc/kubernetes

---

필수 패키지 설치

sudo apt update
sudo apt install -y curl wget apt-transport-https jq

conntrack 설치(네트워크 연결 추적용 도구)

conntrack이란?
conntrack은 Linux 커널의 네트워크 연결 추적 기능을 관리하는 도구입니다.
Kubernetes는 네트워크 트래픽을 관리하기 위해 conntrack을 사용합니다.
sudo apt install -y conntrack

Docker 설치

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker
sudo systemctl enable --now docker
rm -f get-docker.sh
docker version

crictl 설치

CRICTL_VERSION=$(curl -s https://api.github.com/repos/kubernetes-sigs/cri-tools/releases/latest | jq -r '.tag_name')
CRICTL_URL="https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-$(dpkg --print-architecture).tar.gz"
wget -q --show-progress ${CRICTL_URL} -O crictl-${CRICTL_VERSION}-linux-$(dpkg --print-architecture).tar.gz
tar -zxf crictl-${CRICTL_VERSION}-linux-$(dpkg --print-architecture).tar.gz
sudo mv crictl /usr/local/bin/
rm -f crictl-${CRICTL_VERSION}-linux-$(dpkg --print-architecture).tar.gz
crictl --version

cri-docker 설치

CRI_DOCKER_VERSION=$(curl -s https://api.github.com/repos/Mirantis/cri-dockerd/releases/latest | jq -r '.tag_name' | sed 's/^v//')
CRI_DOCKER_URL="https://github.com/Mirantis/cri-dockerd/releases/download/v${CRI_DOCKER_VERSION}/cri-dockerd-${CRI_DOCKER_VERSION}.$(dpkg --print-architecture).tgz"
wget -q --show-progress ${CRI_DOCKER_URL} -O cri-dockerd-${CRI_DOCKER_VERSION}.$(dpkg --print-architecture).tgz
tar -xf cri-dockerd-${CRI_DOCKER_VERSION}.$(dpkg --print-architecture).tgz
sudo cp cri-dockerd/cri-dockerd /usr/local/bin/
rm -f cri-dockerd-${CRI_DOCKER_VERSION}.$(dpkg --print-architecture).tgz
rm -rf cri-dockerd
cri-dockerd --version
sudo mkdir -p /etc/cni/net.d
sudo tee /etc/systemd/system/cri-docker.service > /dev/null <<EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target docker.service
Wants=network-online.target
Requires=docker.service cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
Restart=always
RestartSec=2
StartLimitBurst=3
StartLimitIntervalSec=60
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF
sudo tee /etc/systemd/system/cri-docker.socket > /dev/null <<EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable cri-docker.service
sudo systemctl enable --now cri-docker.socket
sudo systemctl restart docker
sudo systemctl restart cri-docker
sudo systemctl status cri-docker.socket --no-pager

CNI 플러그인 설치

sudo mkdir -p /opt/cni/bin
CNI_PLUGINS_VERSION=$(curl -s https://api.github.com/repos/containernetworking/plugins/releases/latest | jq -r '.tag_name')
CNI_PLUGINS_URL="https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGINS_VERSION}/cni-plugins-linux-$(dpkg --print-architecture)-${CNI_PLUGINS_VERSION}.tgz"
wget -q --show-progress ${CNI_PLUGINS_URL} -O cni-plugins-linux-$(dpkg --print-architecture)-${CNI_PLUGINS_VERSION}.tgz
sudo tar -xf cni-plugins-linux-$(dpkg --print-architecture)-${CNI_PLUGINS_VERSION}.tgz -C /opt/cni/bin
rm -f cni-plugins-linux-$(dpkg --print-architecture)-${CNI_PLUGINS_VERSION}.tgz
ls /opt/cni/bin

kubectl 설치

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/$(dpkg --print-architecture)/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
rm -f kubectl
kubectl version --client

Minikube 설치

curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-$(dpkg --print-architecture)
sudo install minikube-linux-$(dpkg --print-architecture) /usr/local/bin/minikube && rm minikube-linux-$(dpkg --print-architecture)
minikube version

Minikube 클러스터 실행

minikube start --driver=none
더보기

---

$ sudo minikube start --driver=none --force
😄  minikube v1.35.0 on Ubuntu 24.04 (vbox/amd64)
❗  minikube skips various validations when --force is supplied; this may lead to unexpected behavior
✨  Using the none driver based on user configuration
👍  Starting "minikube" primary control-plane node in "minikube" cluster
🤹  Running on localhost (CPUs=4, Memory=7941MB, Disk=80828MB) ...
ℹ️  OS release is Ubuntu 24.04.1 LTS
🐳  Preparing Kubernetes v1.32.0 on Docker 28.0.1 ...
    ▪ kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
    > kubeadm.sha256:  64 B / 64 B [-------------------------] 100.00% ? p/s 0s
    > kubectl.sha256:  64 B / 64 B [-------------------------] 100.00% ? p/s 0s
    > kubelet.sha256:  64 B / 64 B [-------------------------] 100.00% ? p/s 0s
    > kubeadm:  67.66 MiB / 67.66 MiB [------------] 100.00% 21.15 MiB p/s 3.4s
    > kubectl:  54.67 MiB / 54.67 MiB [------------] 100.00% 12.42 MiB p/s 4.6s
    > kubelet:  73.81 MiB / 73.81 MiB [------------] 100.00% 13.98 MiB p/s 5.5s
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
🔗  Configuring bridge CNI (Container Networking Interface) ...
🤹  Configuring local host environment ...

❗  The 'none' driver is designed for experts who need to integrate with an existing VM
💡  Most users should use the newer 'docker' driver instead, which does not require root!
📘  For more information, see: https://minikube.sigs.k8s.io/docs/reference/drivers/none/

❗  kubectl and minikube configuration will be stored in /root
❗  To use kubectl or minikube commands as your own user, you may need to relocate them. For example, to overwrite your own settings, run:

    ▪ sudo mv /root/.kube /root/.minikube $HOME
    ▪ sudo chown -R $USER $HOME/.kube $HOME/.minikube

💡  This can also be done automatically by setting the env var CHANGE_MINIKUBE_NONE_USER=true
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: default-storageclass, storage-provisioner
💡  kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

---

Minikube 클러스터 상태 확인

minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

노드 상태 확인

kubectl get nodes
NAME    STATUS   ROLES           AGE     VERSION
u2404   Ready    control-plane   3m16s   v1.32.0

파드 상태 확인

kubectl get pods -A
NAMESPACE     NAME                            READY   STATUS    RESTARTS   AGE
kube-system   coredns-668d6bf9bc-x2mst        1/1     Running   0          3m36s
kube-system   etcd-u2404                      1/1     Running   1          3m44s
kube-system   kube-apiserver-u2404            1/1     Running   1          3m40s
kube-system   kube-controller-manager-u2404   1/1     Running   1          3m41s
kube-system   kube-proxy-shfnd                1/1     Running   0          3m36s
kube-system   kube-scheduler-u2404            1/1     Running   1          3m40s
kube-system   storage-provisioner             1/1     Running   0          3m38s

테스트용 NGINX 배포

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --type=NodePort --port=80
minikube service nginx --url

 

출력된 URL을 브라우저에서 열어보면 NGINX가 정상적으로 실행되는지 확인할 수 있습니다.

 

참고URL

- 변군이글루 : kubectx와 kubens를 설치하는 방법

- minikube Documentation : minikube start

- github kubernetes : minikube releases

 

반응형