본문 바로가기

리눅스

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

반응형

우분투에서 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 설치(네트워크 연결 추적용 도구)

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
sudo 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/
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/
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
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
sudo 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 --force
더보기

---

$ 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

- minikube Documentation : minikube start

- github kubernetes : minikube releases

 

728x90
반응형