本教學示範如何使用 minikube 在 Kubernetes 上執行一個範例應用程式。 教學提供了一個使用 NGINX 回應所有請求的容器映像檔。
本教學假設您已完成 minikube 的設定。
請參閱 minikube start 中的步驟 1 以取得安裝說明。
請只執行步驟 1:安裝中的指令,其餘部分將在本頁說明。
您還需要安裝 kubectl。
請參閱安裝工具以取得安裝說明。
minikube start
確認 minikube 叢集的狀態,以確保所有元件都處於執行狀態。
minikube status
上述指令的輸出應顯示所有元件為 Running 或 Configured,如以下範例輸出所示:
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
開啟 Kubernetes Dashboard,您可以透過以下兩種方式進行:
開啟一個新的終端機,並執行:
# Start a new terminal, and leave this running.
# 開啟新終端機,讓此指令持續執行。
minikube dashboard
接著,切換回您執行 minikube start 的終端機。
若您不想讓 minikube 自動開啟網頁瀏覽器,請使用 --url 旗標執行 dashboard 子指令。
minikube 會輸出一個 URL,您可以在偏好的瀏覽器中開啟。
開啟一個新的終端機,並執行:
# Start a new terminal, and leave this running.
# 開啟新終端機,讓此指令持續執行。
minikube dashboard --url
接著,您可以使用此 URL 並切換回您執行 minikube start 的終端機。
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
有關 kubectl 指令的更多資訊,請參閱 kubectl 概述。
預設情況下,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 類型讓您可透過 minikube service 指令存取 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 叢集的基本步驟,您現在已準備好部署應用程式。