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