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 componentstatusesWarning: v1 ComponentStatus is deprecated in v1.19+NAME STATUS MESSAGE ERRORcontroller-manager Healthy okscheduler Healthy oketcd-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 ingressclassNAME CONTROLLER PARAMETERS AGEnginx k8s.io/ingress-nginx <none> 9s# ingress-controller 로 nginx 파드가 구동중이다.meatsby ~ k get pods -n ingress-nginxNAME READY STATUS RESTARTS AGEingress-nginx-admission-create-77dsb 0/1 Completed 0 14singress-nginx-admission-patch-wgw4h 0/1 Completed 1 14singress-nginx-controller-9cc49f96f-gf9mt 1/1 Running 0 14s# 예제 ingress 를 배포해보자.meatsby ~ kubectl apply -f https://storage.googleapis.com/minikube-site-examples/ingress-example.yamlpod/foo-app createdservice/foo-service createdpod/bar-app createdservice/bar-service createdingress.networking.k8s.io/example-ingress created# ingress 생성 확인.meatsby ~ k get ingress -wNAME CLASS HOSTS ADDRESS PORTS AGEexample-ingress nginx * 80 6sexample-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/barRequest served by bar-appHTTP/1.1 GET /barHost: 127.0.0.1Accept: */*User-Agent: curl/8.7.1X-Forwarded-For: 10.244.0.1X-Forwarded-Host: 127.0.0.1X-Forwarded-Port: 80X-Forwarded-Proto: httpX-Forwarded-Scheme: httpX-Real-Ip: 10.244.0.1X-Request-Id: 8fcbd14bfef458a7f88a9cef50b6698dX-Scheme: http# foo-app 으로 트래픽이 전달된다.meatsby ~ curl 127.0.0.1/fooRequest served by foo-appHTTP/1.1 GET /fooHost: 127.0.0.1Accept: */*User-Agent: curl/8.7.1X-Forwarded-For: 10.244.0.1X-Forwarded-Host: 127.0.0.1X-Forwarded-Port: 80X-Forwarded-Proto: httpX-Forwarded-Scheme: httpX-Real-Ip: 10.244.0.1X-Request-Id: d1903d0f75a0cb744c3b5d01f08bd419X-Scheme: http# X-Forwarded-For: 10.244.0.1 가 뭔지 살펴보자.meatsby ~ minikube node listminikube 192.168.49.2# bridge 10.244.0.1 에서 Pod 로 전달된다.meatsby ~ minikube sshdocker@minikube:~$ ip addr show | grep bridge: -A513: 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 noerror: Metrics API not availablemeatsby ~ k top poerror: 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 noNAME CPU(cores) CPU(%) MEMORY(bytes) MEMORY(%)minikube 309m 3% 1110Mi 14%meatsby ~ k top poNAME CPU(cores) MEMORY(bytes)bar-app 1m 8Mifoo-app 1m 6Mi
multi-node cluster 구성
meatsby ~ minikube node listminikube 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 listminikube 192.168.49.2minikube-m02 192.168.49.3minikube-m03 192.168.49.4minikube-m04 192.168.49.5meatsby ~ k get nodesNAME STATUS ROLES AGE VERSIONminikube Ready control-plane 3h39m v1.34.0minikube-m02 Ready <none> 2m8s v1.34.0minikube-m03 Ready <none> 114s v1.34.0minikube-m04 Ready <none> 99s v1.34.0# worker node labelingmeatsby ~ k label node minikube-m02 node-role.kubernetes.io/worker=workernode/minikube-m02 labeledmeatsby ~ k label node minikube-m03 node-role.kubernetes.io/worker=workernode/minikube-m03 labeledmeatsby ~ k label node minikube-m04 node-role.kubernetes.io/worker=workernode/minikube-m04 labeledmeatsby ~ k get nodesNAME STATUS ROLES AGE VERSIONminikube Ready control-plane 3h40m v1.34.0minikube-m02 Ready worker 2m52s v1.34.0minikube-m03 Ready worker 2m38s v1.34.0minikube-m04 Ready worker 2m23s v1.34.0