Hello Minikube
本教程將向你展示如何使用 minikube 在 Kubernetes 上執行示例應用。本教程提供一個容器映象,該映象使用 NGINX 回顯所有請求。
目標
- 將示例應用部署到 minikube。
- 執行應用程式。
- 檢視應用程式日誌。
準備工作
本教程假定你已經設定好 minikube
。有關安裝說明,請參閱 minikube 啟動中的步驟 1。
注意
僅執行步驟 1:安裝中的說明。其餘部分將在本頁介紹。你還需要安裝 kubectl
。有關安裝說明,請參閱安裝工具。
建立 minikube 叢集
minikube start
開啟控制面板
開啟 Kubernetes 控制面板。你可以透過兩種不同的方式執行此操作
開啟新的終端,並執行
# Start a new terminal, and leave this running.
minikube dashboard
現在,切換回你執行 minikube start
的終端。
注意
dashboard
命令會啟用控制面板外掛,並在預設 Web 瀏覽器中開啟代理。你可以在控制面板上建立 Kubernetes 資源,例如 Deployment 和 Service。
要了解如何避免直接從終端呼叫瀏覽器並獲取 Web 控制面板的 URL,請參閱“複製並貼上 URL”選項卡。
預設情況下,控制面板只能從 Kubernetes 內部虛擬網路中訪問。dashboard
命令會建立一個臨時代理,使控制面板可以從 Kubernetes 虛擬網路外部訪問。
要停止代理,請按 Ctrl+C
退出程序。命令退出後,控制面板仍在 Kubernetes 叢集中執行。你可以再次執行 dashboard
命令以建立另一個代理來訪問控制面板。
如果你不想讓 minikube 為你開啟 Web 瀏覽器,請使用 --url
標誌執行 dashboard
子命令。minikube
會輸出一個你可以在你喜歡的瀏覽器中開啟的 URL。
開啟新的終端,並執行
# Start a new terminal, and leave this running.
minikube dashboard --url
現在,你可以使用此 URL 並切換回你執行 minikube start
的終端。
建立 Deployment
Kubernetes Pod 是一個或多個容器的組,為了管理和網路目的而繫結在一起。本教程中的 Pod 只有一個容器。Kubernetes Deployment 檢查 Pod 的健康狀況,並在 Pod 的容器終止時重新啟動它。Deployment 是管理 Pod 建立和擴縮的推薦方式。
使用
kubectl create
命令建立一個管理 Pod 的 Deployment。Pod 執行基於提供的 Docker 映象的容器。# Run a test container image that includes a webserver kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.53 -- /agnhost netexec --http-port=8080
檢視 Deployment
kubectl get deployments
輸出類似於:
NAME READY UP-TO-DATE AVAILABLE AGE hello-node 1/1 1 1 1m
(Pod 可能需要一些時間才能可用。如果你看到“0/1”,請等待幾秒鐘後重試。)
檢視 Pod
kubectl get pods
輸出類似於:
NAME READY STATUS RESTARTS AGE hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
檢視叢集事件
kubectl get events
檢視
kubectl
配置kubectl config view
檢視 Pod 中容器的應用程式日誌(將 Pod 名稱替換為從
kubectl get pods
獲取的名稱)。注意
在kubectl logs
命令中,將hello-node-5f76cf6ccf-br9b5
替換為kubectl get pods
命令輸出的 Pod 名稱。kubectl logs hello-node-5f76cf6ccf-br9b5
輸出類似於:
I0911 09:19:26.677397 1 log.go:195] Started HTTP server on port 8080 I0911 09:19:26.677586 1 log.go:195] Started UDP server on port 8081
建立 Service
預設情況下,Pod 只能透過其在 Kubernetes 叢集內部的內部 IP 地址訪問。要使 hello-node
容器可以從 Kubernetes 虛擬網路外部訪問,你必須將 Pod 作為 Kubernetes Service 暴露出去。
警告
agnhost 容器有一個/shell
端點,這對於除錯很有用,但暴露給公共網際網路是危險的。不要在面向網際網路的叢集或生產叢集上執行此操作。使用
kubectl expose
命令將 Pod 暴露給公共網際網路kubectl expose deployment hello-node --type=LoadBalancer --port=8080
--type=LoadBalancer
標誌表示你希望在叢集外部暴露你的 Service。測試映象中的應用程式程式碼僅偵聽 TCP 埠 8080。如果你使用
kubectl expose
暴露了不同的埠,客戶端將無法連線到該其他埠。檢視你建立的 Service
kubectl get services
輸出類似於:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
在支援負載均衡器的雲提供商上,將提供外部 IP 地址來訪問 Service。在 minikube 上,
LoadBalancer
型別使 Service 可以透過minikube service
命令訪問。執行以下命令:
minikube service hello-node
這會開啟一個瀏覽器視窗,其中提供你的應用程式並顯示應用程式的響應。
啟用外掛
minikube 工具包含一組內建的外掛,可以在本地 Kubernetes 環境中啟用、停用和開啟。
列出當前支援的外掛
minikube addons list
輸出類似於:
addon-manager: enabled dashboard: enabled default-storageclass: enabled efk: disabled freshpod: disabled gvisor: disabled helm-tiller: disabled ingress: disabled ingress-dns: disabled logviewer: disabled metrics-server: disabled nvidia-driver-installer: disabled nvidia-gpu-device-plugin: disabled registry: disabled registry-creds: disabled storage-provisioner: enabled storage-provisioner-gluster: disabled
啟用一個外掛,例如
metrics-server
minikube addons enable metrics-server
輸出類似於:
The 'metrics-server' addon is enabled
檢視透過安裝該外掛建立的 Pod 和 Service
kubectl get pod,svc -n kube-system
輸出類似於:
NAME READY STATUS RESTARTS AGE pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m pod/metrics-server-67fb648c5 1/1 Running 0 26s pod/etcd-minikube 1/1 Running 0 34m pod/influxdb-grafana-b29w8 2/2 Running 0 26s pod/kube-addon-manager-minikube 1/1 Running 0 34m pod/kube-apiserver-minikube 1/1 Running 0 34m pod/kube-controller-manager-minikube 1/1 Running 0 34m pod/kube-proxy-rnlps 1/1 Running 0 34m pod/kube-scheduler-minikube 1/1 Running 0 34m pod/storage-provisioner 1/1 Running 0 34m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s
檢查
metrics-server
的輸出kubectl top pods
輸出類似於:
NAME CPU(cores) MEMORY(bytes) hello-node-ccf4b9788-4jn97 1m 6Mi
如果你看到以下訊息,請等待並重試
error: Metrics API not available
停用
metrics-server
minikube addons disable metrics-server
輸出類似於:
metrics-server was successfully disabled
清理
現在你可以清理在叢集中建立的資源
kubectl delete service hello-node
kubectl delete deployment hello-node
停止 Minikube 叢集
minikube stop
(可選)刪除 Minikube 虛擬機器
# Optional
minikube delete
如果你想再次使用 minikube 學習更多關於 Kubernetes 的知識,你不需要刪除它。
總結
本頁涵蓋了啟動和執行 minikube 叢集的基本方面。你現在已準備好部署應用程式。
下一步
- 使用 kubectl 在 Kubernetes 上部署你的第一個應用程式教程。
- 瞭解更多關於 Deployment 物件 的資訊。
- 瞭解更多關於部署應用程式的資訊。
- 瞭解更多關於Service 物件的資訊。