1 - 詞彙表
2 - 教學
本節收錄了 Kubernetes 的教學。 教學示範了如何完成一個比單一任務更大的目標。 通常一個教學會有幾個小節,每個小節都有一系列的步驟。 在閱讀每個教學之前,建議您將詞彙表頁面加入書籤,以便日後參考。
基礎
- Kubernetes 基礎是一個深入的互動式教學,幫助您了解 Kubernetes 系統並實際嘗試一些基本的 Kubernetes 功能。
- Kubernetes 簡介(edX)
- Hello Minikube
設定
撰寫 Pod
無狀態應用程式
有狀態應用程式
服務
安全性
叢集管理
接下來
如果您想撰寫教學,請參閱 內容頁面類型 以取得有關教學頁面類型的資訊。
2.1 - Hello Minikube
本教學示範如何使用 minikube 在 Kubernetes 上執行一個範例應用程式。 教學提供了一個使用 NGINX 回應所有請求的容器映像檔。
Objectives
- 將範例應用程式部署到 minikube。
- 執行應用程式。
- 查看應用程式日誌。
Before you begin
本教學假設您已完成 minikube 的設定。
請參閱 minikube start 中的步驟 1 以取得安裝說明。
說明:
請只執行步驟 1:安裝中的指令,其餘部分將在本頁說明。
您還需要安裝 kubectl。
請參閱安裝工具以取得安裝說明。
建立 minikube 叢集
minikube start
確認 minikube 叢集狀態
確認 minikube 叢集的狀態,以確保所有元件都處於執行狀態。
minikube status
上述指令的輸出應顯示所有元件為 Running 或 Configured,如以下範例輸出所示:
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
開啟 Dashboard
開啟 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 的終端機。
建立 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
說明:
有關 kubectl 指令的更多資訊,請參閱 kubectl 概述。
建立 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類型讓您可透過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 叢集的基本步驟,您現在已準備好部署應用程式。
接下來
- 教學:使用 kubectl 在 Kubernetes 上部署您的第一個應用程式。
- 深入了解 Deployment 物件。
- 深入了解部署應用程式。
- 深入了解 Service 物件。