Hello Minikube
本教學課程示範如何使用 minikube 在 Kubernetes 上執行範例應用程式。本教學課程提供一個容器映像檔,該映像檔使用 NGINX 回應所有請求。
目標
- 將範例應用程式部署到 minikube。
- 執行應用程式。
- 檢視應用程式日誌。
開始之前
本教學課程假設您已設定 minikube
。如需安裝指示,請參閱 minikube start 中的步驟 1。
注意
僅執行步驟 1,安裝中的指示。其餘部分將在本頁中涵蓋。您還需要安裝 kubectl
。如需安裝指示,請參閱安裝工具。
建立 minikube 叢集
minikube start
開啟儀表板
開啟 Kubernetes 儀表板。您可以使用兩種不同的方式執行此操作
開啟新的終端機,然後執行
# Start a new terminal, and leave this running.
minikube dashboard
現在,切換回您執行 minikube start
的終端機。
注意
dashboard
命令會啟用儀表板附加元件,並在預設的網頁瀏覽器中開啟 Proxy。您可以在儀表板上建立 Kubernetes 資源,例如 Deployment 和 Service。
若要瞭解如何避免從終端機直接調用瀏覽器,並取得網頁儀表板的 URL,請參閱「URL 複製與貼上」標籤。
預設情況下,儀表板只能從內部 Kubernetes 虛擬網路內存取。dashboard
命令會建立臨時 Proxy,使儀表板可從 Kubernetes 虛擬網路外部存取。
若要停止 Proxy,請執行 Ctrl+C
以結束程序。命令結束後,儀表板仍會在 Kubernetes 叢集中執行。您可以再次執行 dashboard
命令以建立另一個 Proxy 來存取儀表板。
如果您不希望 minikube 為您開啟網頁瀏覽器,請使用 --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.39 -- /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
建立服務
預設情況下,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
旗標表示您想要在叢集外部公開您的服務。測試映像檔內的應用程式程式碼僅監聽 TCP 連接埠 8080。如果您使用
kubectl expose
公開不同的連接埠,用戶端將無法連線到該其他連接埠。檢視您建立的服務
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 位址以存取服務。在 minikube 上,
LoadBalancer
類型可透過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 VM
# Optional
minikube delete
如果您想再次使用 minikube 來進一步了解 Kubernetes,則無需刪除它。
結論
本頁涵蓋了啟動並執行 minikube 叢集的基本方面。您現在已準備好部署應用程式。
接下來
- *使用 kubectl 在 Kubernetes 上部署您的第一個應用程式* 的教學課程。
- 深入了解 Deployment 物件。
- 深入了解 部署應用程式。
- 深入了解 Service 物件。