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