快速入門

本快速入門導覽課程說明如何使用 Google Kubernetes Engine 部署容器化應用程式。

您可以按照本頁提供的步驟,或依 Google Cloud 訓練研究室程序嘗試本快速入門。

透過研究室嘗試

事前準備

請依照下列步驟啟用 Kubernetes Engine API:
  1. 造訪 Google Cloud Platform 主控台的 Kubernetes Engine 頁面
  2. 建立或選取專案。
  3. 等待 API 和相關服務完成啟用。這可能需要幾分鐘的時間。
  4. 請確認您已啟用 Google Cloud Platform 專案的計費功能。

    瞭解如何啟用計費功能

選擇殼層

要完成此快速入門,您可以使用 Google Cloud Shell 或本機殼層:

Google Cloud Shell 是用來管理 Google Cloud Platform (GCP) 上託管資源的殼層環境。Cloud Shell 已預先安裝 gcloudkubectl 指令列工具。gcloud 提供主要的 GCP 的指令列介面,而 kubectl 則提供對 Kubernetes 叢集執行指令的指令列介面。

如果您想要使用本機殼層,則必須在您的環境中安裝 gcloudkubectl 指令列工具。

Cloud Shell

請執行下列步驟來啟動 Cloud Shell:

  1. 前往 Google Cloud Platform 主控台。

    Google Cloud Platform 主控台

  2. 在主控台的右上角,按一下 [Activate Google Cloud Shell] (啟用 Google Cloud Shell)按鈕:

主控台底部的頁框中會開啟一個 Cloud Shell 工作階段。請使用這個殼層執行 gcloudkubectl 指令。

本機殼層

請執行下列步驟來安裝 gcloudkubectl

  1. 安裝 Google Cloud SDK,其中包含 gcloud 指令列工具。
  2. 安裝 Cloud SDK 後,執行下列指令以安裝 kubectl 指令列工具:

    gcloud components install kubectl

設定 gcloud 預設設定

在開始之前,您應使用 gcloud 設定兩個預設設定:您的預設專案運算區域

您的專案有一個專案 ID,這是專案的唯一識別碼。首次建立專案時,您可以使用自動生成的專案 ID,或者自行建立專案 ID。

您的運算區域是叢集及其資源所在的大致地區位置例如,us-west1-aus-west 地區的一個區域。

透過設定這些預設設定,您可以更輕鬆地執行 gcloud 指令,因為 gcloud 要求您指定要使用的專案和運算區域。您也可以指定這些設定,或是將作業標記如 --zone--clustergcloud 指令傳入 --project 來覆寫預設設定。

設定預設的專案和運算區域後,系統會在建立 GKE 資源時,在預設的專案和區域中自動建立資源。

設定預設專案

要設定預設專案,請從 Cloud Shell 執行以下指令:

gcloud config set project [PROJECT_ID]

用您的專案 ID 取代 [PROJECT_ID]

設定預設的運算區域

如要設定預設的運算區域,請執行下列指令:

gcloud config set compute/zone [COMPUTE_ZONE]

其中 [COMPUTE_ZONE] 是所需的地理運算區域,例如 us-west1-a

建立 GKE 叢集

一個叢集至少包含一個叢集主要執行個體機器,以及多個稱為「節點」的工作站機器。節點為 Compute Engine 虛擬機器 (VM) 執行個體,執行所需的 Kubernetes 程序,使節點成為叢集的一部分。您將應用程式部署至叢集,而應用程式會在節點上運作。

如要建立叢集,請執行下列指令:

gcloud container clusters create [CLUSTER_NAME]

其中 [CLUSTER_NAME] 是您為叢集選擇的名稱。

取得叢集的驗證憑證

建立叢集後,您需要取得驗證憑證才能與叢集互動。

如要驗證叢集,請執行下列指令:

gcloud container clusters get-credentials [CLUSTER_NAME]

此指令將 kubectl 設定為使用您建立的叢集。

將應用程式部署至叢集

您已經建立了一個叢集,現在您可以在叢集部署一個容器化應用程式。在這個快速入門導覽課程中,您可以部署範例網路應用程式 hello-app

GKE 使用 Kubernetes 物件建立並管理您的叢集資源。Kubernetes 提供 Deployment 物件,用來部署無狀態應用程式,如網路伺服器。 Service 物件定義從網路存取應用程式的規則和負載平衡。

建立部署

如要在叢集中執行 hello-app,請執行下列指令:

kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080

此 Kubernetes 指令 kubectl run 會建立名為 hello-server 的新 Deployment。Deployment 的 Pod 會在其容器中執行 hello-app 映像檔。

在這個指令中:

  • --image 指定要部署的容器映像檔。在這個情況下,指令會從 Google Container Registry 值區提取範例映像檔 gcr.io/google-samples/hello-app:1.0 表示要提取的特定映像檔版本。如果未指定版本,則使用最新版本。
  • --port 指定容器公開的通訊埠。

公開部署

部署應用程式後,您需要將應用程式公開到網路以讓使用者存取。您可以建立 Service 來公開您的應用程式,此服務是一種 Kubernetes 資源,可以將您的應用程式公開至外部流量。

若要公開您的應用程式,請執行下列 kubectl expose 指令:

kubectl expose deployment hello-server --type LoadBalancer \
  --port 80 --target-port 8080

傳入 --type LoadBalancer 標記會為容器建立 Compute Engine 負載平衡器。--port 標記將公開通訊埠 80 初始化至網際網路,而 --target-port 將流量轉送到應用程式的通訊埠 8080。

負載平衡器依照每個 Compute Engine 的負載平衡器定價計費。

檢查和查看應用程式

  1. 執行 kubectl get,以檢查 hello-server 服務:

    kubectl get service hello-server

    在此指令的輸出中,從 EXTERNAL-IP 欄複製 Service 的外部 IP 位址。

  2. 使用公開通訊埠的外部 IP 位址,從網路瀏覽器查看應用程式:

    http://[EXTERNAL_IP]/

您已經將一個容器化的網路應用程式部署到 GKE!

清除

如何避免系統向您的 GCP 帳戶收取您在本快速入門中所用資源的相關費用:

  1. 執行 kubectl delete,以刪除應用程式的服務:

    kubectl delete service hello-server

    這會刪除您在公開部署時建立的 Compute Engine 負載平衡器。

  2. 執行 gcloud container clusters delete,以刪除您的叢集:

    gcloud container clusters delete [CLUSTER_NAME]

選用:hello-app 程式碼審查

hello-app 是一個簡單的網路伺服器應用程式,包含兩個文件:main.goDockerfile

hello-app 被包裝為 Docker 容器映像檔。容器映像檔會儲存在任何 Docker 映像檔註冊資料庫中,例如 Google Container Registry 中。我們在名為 gcr.io/google-samples/hello-app.的 Container Registry 值區中託管 hello-app

main.go

main.go 是使用 Go 程式語言撰寫的網路伺服器實作。該伺服器會以「Hello, world!」訊息回應任何 HTTP 要求訊息。

package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

func main() {
	// use PORT environment variable, or default to 8080
	port := "8080"
	if fromEnv := os.Getenv("PORT"); fromEnv != "" {
		port = fromEnv
	}

	// register hello function to handle all requests
	server := http.NewServeMux()
	server.HandleFunc("/", hello)

	// start the web server on port and accept requests
	log.Printf("Server listening on port %s", port)
	err := http.ListenAndServe(":"+port, server)
	log.Fatal(err)
}

// hello responds to the request with a plain-text "Hello, world" message.
func hello(w http.ResponseWriter, r *http.Request) {
	log.Printf("Serving request: %s", r.URL.Path)
	host, _ := os.Hostname()
	fmt.Fprintf(w, "Hello, world!\n")
	fmt.Fprintf(w, "Version: 1.0.0\n")
	fmt.Fprintf(w, "Hostname: %s\n", host)
}

Dockerfile

Dockerfile 描述您要 Docker 建立的映像檔,包含映像檔的所有資源與依附元件,並指定應用程式應公開的網路通訊埠。如需進一步瞭解這個檔案的運作方式,請在 Docker 說明文件中參閱 Dockerfile 參考資料

FROM golang:1.8-alpine
ADD . /go/src/hello-app
RUN go install hello-app

FROM alpine:latest
COPY --from=0 /go/bin/hello-app .
ENV PORT 8080
CMD ["./hello-app"]

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件