minikube μ€μ΅ νκ²½ ꡬμ±
minikube μ€μΉ
brew install minikube
minikube μ€ν
meatsby ξ° ~ ξ° minikube start
π Darwin 15.6.1 (arm64) μ minikube v1.37.0
β¨ μλμ μΌλ‘ docker λλΌμ΄λ²κ° μ νλμμ΅λλ€. λ€λ₯Έ λλΌμ΄λ² λͺ©λ‘: virtualbox, ssh
π Docker Desktop λλΌμ΄λ²λ₯Ό λ£¨νΈ κΆνμΌλ‘ μ¬μ© μ€
π "minikube" ν΄λ¬μ€ν°μ "minikube" primary control-plane λ
Έλλ₯Ό μμνλ μ€
π κΈ°λ³Έ μ΄λ―Έμ§ v0.0.48λ₯Ό κ°μ Έμ€λ μ€ ...
πΎ μΏ λ²λ€ν°μ€ v1.34.0 μ λ€μ΄λ‘λ μ€ ...
> preloaded-images-k8s-v18-v1...: 332.38 MiB / 332.38 MiB 100.00% 22.68 M
π₯ docker container (CPUs=2, λ©λͺ¨λ¦¬=4000MB) λ₯Ό μμ±νλ μ€ ...
π³ μΏ λ²λ€ν°μ€ v1.34.0 μ Docker 28.4.0 λ°νμμΌλ‘ μ€μΉνλ μ€
π bridge CNI (Container Networking Interface) λ₯Ό ꡬμ±νλ μ€ ...
π Kubernetes κ΅¬μ± μμλ₯Ό νμΈ...
βͺ μ΄λ―Έμ§ gcr.io/k8s-minikube/storage-provisioner:v5 μ¬μ© μ€
π μ λμ¨ νμ±ν : storage-provisioner, default-storageclass
π λλ¬μ΅λλ€! kubectlμ΄ "minikube" ν΄λ¬μ€ν°μ "default" λ€μμ€νμ΄μ€λ₯Ό κΈ°λ³Έμ μΌλ‘ μ¬μ©νλλ‘ κ΅¬μ±λμμ΅λλ€
meatsby ξ° ~ ξ° k get componentstatuses
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy ok
dashboard μ€ν
meatsby ξ° ~ ξ° minikube dashboard
π λμ보λλ₯Ό νμ±ννλ μ€ ...
βͺ μ΄λ―Έμ§ docker.io/kubernetesui/metrics-scraper:v1.0.8 μ¬μ© μ€
βͺ μ΄λ―Έμ§ docker.io/kubernetesui/dashboard:v2.7.0 μ¬μ© μ€
π‘ Some dashboard features require the metrics-server addon. To enable all features please run:
minikube addons enable metrics-server
π€ Dashboard μ μνλ₯Ό νμΈ μ€μ
λλ€ ...
π νλ‘μλ₯Ό μμνλ μ€ ...
π€ Proxy μ μνλ₯Ό νμΈ μ€μ
λλ€ ...
π Opening http://127.0.0.1:57530/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
Ingress μ€μ΅
# ingress addon μ€μΉ
meatsby ξ° ~ ξ° minikube addons enable ingress
π‘ ingress is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
π‘ μ λμ¨μ΄ νμ±νλ ν "minikube tunnel"μ μ€ννλ©΄ μΈκ·Έλ μ€ λ¦¬μμ€λ₯Ό "127.0.0.1"μμ μ¬μ©ν μ μμ΅λλ€
βͺ μ΄λ―Έμ§ registry.k8s.io/ingress-nginx/controller:v1.13.2 μ¬μ© μ€
βͺ μ΄λ―Έμ§ registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.6.2 μ¬μ© μ€
βͺ μ΄λ―Έμ§ registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.6.2 μ¬μ© μ€
π ingress μ λμ¨μ νμΈ μ€μ
λλ€ ...
π 'ingress' μ λμ¨μ΄ νμ±νλμμ΅λλ€
# nginx IngressClass μμ±λλ€.
meatsby ξ° ~ ξ° k get ingressclass
NAME CONTROLLER PARAMETERS AGE
nginx k8s.io/ingress-nginx <none> 9s
# ingress-controller λ‘ nginx νλκ° κ΅¬λμ€μ΄λ€.
meatsby ξ° ~ ξ° k get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-77dsb 0/1 Completed 0 14s
ingress-nginx-admission-patch-wgw4h 0/1 Completed 1 14s
ingress-nginx-controller-9cc49f96f-gf9mt 1/1 Running 0 14s
# μμ ingress λ₯Ό λ°°ν¬ν΄λ³΄μ.
meatsby ξ° ~ ξ° kubectl apply -f https://storage.googleapis.com/minikube-site-examples/ingress-example.yaml
pod/foo-app created
service/foo-service created
pod/bar-app created
service/bar-service created
ingress.networking.k8s.io/example-ingress created
# ingress μμ± νμΈ.
meatsby ξ° ~ ξ° k get ingress -w
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress nginx * 80 6s
example-ingress nginx * 192.168.49.2 80 59s
# mac μ minikube tunnel μ μ€νν΄μ€μΌνλ€.
meatsby ξ° ~ ξ° minikube tunnel
β
Tunnel successfully started
π NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...
β The service/ingress example-ingress requires privileged ports to be exposed: [80 443]
π sudo permission will be asked for it.
π example-ingress μλΉμ€μ ν°λμ μμνλ μ€/
# minikube tunnel μ€ν ν μλ‘μ΄ ν°λ―Έλμμ curl μμ²μ 보λ΄λ³΄μ.
# bar-app μΌλ‘ νΈλν½μ΄ μ λ¬λλ€.
meatsby ξ° ~ ξ° curl 127.0.0.1/bar
Request served by bar-app
HTTP/1.1 GET /bar
Host: 127.0.0.1
Accept: */*
User-Agent: curl/8.7.1
X-Forwarded-For: 10.244.0.1
X-Forwarded-Host: 127.0.0.1
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Scheme: http
X-Real-Ip: 10.244.0.1
X-Request-Id: 8fcbd14bfef458a7f88a9cef50b6698d
X-Scheme: http
# foo-app μΌλ‘ νΈλν½μ΄ μ λ¬λλ€.
meatsby ξ° ~ ξ° curl 127.0.0.1/foo
Request served by foo-app
HTTP/1.1 GET /foo
Host: 127.0.0.1
Accept: */*
User-Agent: curl/8.7.1
X-Forwarded-For: 10.244.0.1
X-Forwarded-Host: 127.0.0.1
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Scheme: http
X-Real-Ip: 10.244.0.1
X-Request-Id: d1903d0f75a0cb744c3b5d01f08bd419
X-Scheme: http
# X-Forwarded-For: 10.244.0.1 κ° λμ§ μ΄ν΄λ³΄μ.
meatsby ξ° ~ ξ° minikube node list
minikube 192.168.49.2
# bridge 10.244.0.1 μμ Pod λ‘ μ λ¬λλ€.
meatsby ξ° ~ ξ° minikube ssh
docker@minikube:~$ ip addr show | grep bridge: -A5
13: bridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 66:bc:1e:16:98:64 brd ff:ff:ff:ff:ff:ff
inet 10.244.0.1/16 brd 10.244.255.255 scope global bridge
valid_lft forever preferred_lft forever
inet6 fe80::64bc:1eff:fe16:9864/64 scope link
valid_lft forever preferred_lft forever
metrics-server μ€μΉ
# top λͺ
λ Ήμ μ¬μ©νλ €λ©΄ metrics-server κ° κ΅¬λμ€μ΄μ΄μΌνλ€.
meatsby ξ° ~ ξ° k top no
error: Metrics API not available
meatsby ξ° ~ ξ° k top po
error: Metrics API not available
# metrics-server addon μ€μΉ
meatsby ξ° ~ ξ° minikube addons enable metrics-server
π‘ metrics-server is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
βͺ μ΄λ―Έμ§ registry.k8s.io/metrics-server/metrics-server:v0.8.0 μ¬μ© μ€
π 'metrics-server' μ λμ¨μ΄ νμ±νλμμ΅λλ€
# addon list νμΈ
meatsby ξ° ~ ξ° minikube addons list
βββββββββββββββ β¬ββββββ¬βββββββ¬βββββββββββββββββββββ
β ADDON NAME β PROFILE β STATUS β MAINTAINER β
βββββββββββββββ βΌββββββΌβββββββΌβββββββββββββββββββββ€
β ambassador β minikube β disabled β 3rd party (Ambassador) β
β amd-gpu-device-plugin β minikube β disabled β 3rd party (AMD) β
β auto-pause β minikube β disabled β minikube β
β cloud-spanner β minikube β disabled β Google β
β csi-hostpath-driver β minikube β disabled β Kubernetes β
β dashboard β minikube β enabled β
β Kubernetes β
β default-storageclass β minikube β enabled β
β Kubernetes β
β efk β minikube β disabled β 3rd party (Elastic) β
β freshpod β minikube β disabled β Google β
β gcp-auth β minikube β disabled β Google β
β gvisor β minikube β disabled β minikube β
β headlamp β minikube β disabled β 3rd party (kinvolk.io) β
β inaccel β minikube β disabled β 3rd party (InAccel [info@inaccel.com]) β
β ingress β minikube β enabled β
β Kubernetes β
β ingress-dns β minikube β disabled β minikube β
β inspektor-gadget β minikube β disabled β 3rd party (inspektor-gadget.io) β
β istio β minikube β disabled β 3rd party (Istio) β
β istio-provisioner β minikube β disabled β 3rd party (Istio) β
β kong β minikube β disabled β 3rd party (Kong HQ) β
β kubeflow β minikube β disabled β 3rd party β
β kubetail β minikube β disabled β 3rd party (kubetail.com) β
β kubevirt β minikube β disabled β 3rd party (KubeVirt) β
β logviewer β minikube β disabled β 3rd party (unknown) β
β metallb β minikube β disabled β 3rd party (MetalLB) β
β metrics-server β minikube β enabled β
β Kubernetes β
β nvidia-device-plugin β minikube β disabled β 3rd party (NVIDIA) β
β nvidia-driver-installer β minikube β disabled β 3rd party (NVIDIA) β
β nvidia-gpu-device-plugin β minikube β disabled β 3rd party (NVIDIA) β
β olm β minikube β disabled β 3rd party (Operator Framework) β
β pod-security-policy β minikube β disabled β 3rd party (unknown) β
β portainer β minikube β disabled β 3rd party (Portainer.io) β
β registry β minikube β disabled β minikube β
β registry-aliases β minikube β disabled β 3rd party (unknown) β
β registry-creds β minikube β disabled β 3rd party (UPMC Enterprises) β
β storage-provisioner β minikube β enabled β
β minikube β
β storage-provisioner-gluster β minikube β disabled β 3rd party (Gluster) β
β storage-provisioner-rancher β minikube β disabled β 3rd party (Rancher) β
β volcano β minikube β disabled β third-party (volcano) β
β volumesnapshots β minikube β disabled β Kubernetes β
β yakd β minikube β disabled β 3rd party (marcnuri.com) β
βββββββββββββββ β΄ββββββ΄βββββββ΄βββββββββββββββββββββ
# μ΄μ metric μ νμΈν μ μλ€.
meatsby ξ° ~ ξ° k top no
NAME CPU(cores) CPU(%) MEMORY(bytes) MEMORY(%)
minikube 309m 3% 1110Mi 14%
meatsby ξ° ~ ξ° k top po
NAME CPU(cores) MEMORY(bytes)
bar-app 1m 8Mi
foo-app 1m 6Mi
multi-node cluster ꡬμ±
meatsby ξ° ~ ξ° minikube node list
minikube 192.168.49.2
# worker node 3λ μΆκ°
meatsby ξ° ~ ξ° minikube node add --worker
π λ
Έλ m02 λ₯Ό ν΄λ¬μ€ν° minikube μ [worker] λ‘ μΆκ°ν©λλ€
β CNI μμ΄ ν΄λ¬μ€ν°κ° μμ±λμμΌλ―λ‘, ν΄λ¬μ€ν°μ λ
Έλλ₯Ό μΆκ°νλ©΄ λ€νΈμνΉμ΄ μ€λ¨λ μ μμ΅λλ€.
π "minikube" ν΄λ¬μ€ν°μ "minikube-m02" worker λ
Έλλ₯Ό μμνλ μ€
π κΈ°λ³Έ μ΄λ―Έμ§ v0.0.48λ₯Ό κ°μ Έμ€λ μ€ ...
π₯ docker container (CPUs=2, λ©λͺ¨λ¦¬=2200MB) λ₯Ό μμ±νλ μ€ ...
π³ μΏ λ²λ€ν°μ€ v1.34.0 μ Docker 28.4.0 λ°νμμΌλ‘ μ€μΉνλ μ€
π Kubernetes κ΅¬μ± μμλ₯Ό νμΈ...
π m02 λ₯Ό minikube μ μ±κ³΅μ μΌλ‘ μΆκ°νμμ΅λλ€!
meatsby ξ° ~ ξ° minikube node add --worker
π λ
Έλ m03 λ₯Ό ν΄λ¬μ€ν° minikube μ [worker] λ‘ μΆκ°ν©λλ€
π "minikube" ν΄λ¬μ€ν°μ "minikube-m03" worker λ
Έλλ₯Ό μμνλ μ€
π κΈ°λ³Έ μ΄λ―Έμ§ v0.0.48λ₯Ό κ°μ Έμ€λ μ€ ...
π₯ docker container (CPUs=2, λ©λͺ¨λ¦¬=2200MB) λ₯Ό μμ±νλ μ€ ...
π³ μΏ λ²λ€ν°μ€ v1.34.0 μ Docker 28.4.0 λ°νμμΌλ‘ μ€μΉνλ μ€
π Kubernetes κ΅¬μ± μμλ₯Ό νμΈ...
π m03 λ₯Ό minikube μ μ±κ³΅μ μΌλ‘ μΆκ°νμμ΅λλ€!
meatsby ξ° ~ ξ° minikube node add --worker
π λ
Έλ m04 λ₯Ό ν΄λ¬μ€ν° minikube μ [worker] λ‘ μΆκ°ν©λλ€
π "minikube" ν΄λ¬μ€ν°μ "minikube-m04" worker λ
Έλλ₯Ό μμνλ μ€
π κΈ°λ³Έ μ΄λ―Έμ§ v0.0.48λ₯Ό κ°μ Έμ€λ μ€ ...
π₯ docker container (CPUs=2, λ©λͺ¨λ¦¬=2200MB) λ₯Ό μμ±νλ μ€ ...
π³ μΏ λ²λ€ν°μ€ v1.34.0 μ Docker 28.4.0 λ°νμμΌλ‘ μ€μΉνλ μ€
π Kubernetes κ΅¬μ± μμλ₯Ό νμΈ...
π m04 λ₯Ό minikube μ μ±κ³΅μ μΌλ‘ μΆκ°νμμ΅λλ€!
meatsby ξ° ~ ξ° minikube node list
minikube 192.168.49.2
minikube-m02 192.168.49.3
minikube-m03 192.168.49.4
minikube-m04 192.168.49.5
meatsby ξ° ~ ξ° k get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 3h39m v1.34.0
minikube-m02 Ready <none> 2m8s v1.34.0
minikube-m03 Ready <none> 114s v1.34.0
minikube-m04 Ready <none> 99s v1.34.0
# worker node labeling
meatsby ξ° ~ ξ° k label node minikube-m02 node-role.kubernetes.io/worker=worker
node/minikube-m02 labeled
meatsby ξ° ~ ξ° k label node minikube-m03 node-role.kubernetes.io/worker=worker
node/minikube-m03 labeled
meatsby ξ° ~ ξ° k label node minikube-m04 node-role.kubernetes.io/worker=worker
node/minikube-m04 labeled
meatsby ξ° ~ ξ° k get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 3h40m v1.34.0
minikube-m02 Ready worker 2m52s v1.34.0
minikube-m03 Ready worker 2m38s v1.34.0
minikube-m04 Ready worker 2m23s v1.34.0
References