返回首頁GCP

GCP 核心服務實戰教學:Compute Engine、Cloud Run、GKE 完整操作指南

22 min 分鐘閱讀
#GCP 教學#Compute Engine#Cloud Run#GKE#Kubernetes#VM#容器部署#Serverless#雲端運算#實戰指南

GCP 核心服務實戰教學:Compute Engine、Cloud Run、GKE 完整操作指南

GCP 核心服務實戰教學:Compute Engine、Cloud Run、GKE 完整操作指南

想在 GCP 上跑你的程式,但不知道該用哪個服務?

Compute Engine、Cloud Run、GKE... 名字都很像,到底差在哪裡?

這篇文章會帶你實際操作 GCP 三大運算服務。從建立第一台 VM,到部署 Serverless 容器,再到管理 Kubernetes 叢集,Step-by-step 教你上手。

想先了解 GCP 的整體架構?請參考「GCP 完整指南:從入門概念到企業實戰」。


GCP 運算服務選擇指南

開始動手之前,先搞清楚這三個服務的差異。

VM vs Container vs Serverless 比較

服務類型你需要管理什麼適合場景
Compute EngineVM作業系統、Runtime、應用程式需要完全控制、特殊軟體需求
GKE容器編排容器、Pod、Deployment大規模微服務、複雜編排
Cloud RunServerless 容器容器映像檔API 服務、Web 應用、快速部署

簡單記法:

  • 要完全控制 → Compute Engine
  • 要省事省錢 → Cloud Run
  • 要大規模管理 → GKE

根據工作負載選擇適合的服務

選 Compute Engine 的情況:

  • 需要安裝特定軟體(如授權軟體)
  • 需要 GPU 做機器學習訓練
  • 需要 Windows Server
  • 傳統的單體應用(Monolithic App)
  • 需要固定 IP 的服務

選 Cloud Run 的情況:

  • HTTP 服務(API、Web)
  • 流量不穩定(有時很忙、有時沒人用)
  • 想要自動擴展
  • 想要按請求計費(沒流量不收錢)
  • 快速部署和迭代

選 GKE 的情況:

  • 大量的微服務需要編排
  • 需要細緻的網路控制
  • 有 On-premise K8s 經驗想搬上雲
  • 需要有狀態服務(Stateful)
  • 企業級的容器平台需求

服務搭配與混合架構

實務上,很多專案會混用這些服務:

常見組合 1:前後端分離

  • 前端:Cloud Run(靜態網站、SSR)
  • 後端 API:Cloud Run
  • 背景任務:Compute Engine

常見組合 2:微服務架構

  • 主要服務:GKE
  • 輕量 Webhook:Cloud Run
  • 批次處理:Compute Engine(Spot VM)

常見組合 3:ML 工作流

  • 模型訓練:Compute Engine(GPU)
  • 模型服務:Cloud Run 或 GKE
  • 資料處理:Dataflow

Compute Engine(VM)實戰教學

Compute Engine 是 GCP 最基本的運算服務。就像在雲端租一台電腦。

建立第一個 VM 執行個體

方法 1:使用 Cloud Console(Web 介面)

  1. 進入 Cloud Console → Compute Engine → VM instances

  2. 點擊「Create Instance」

  3. 設定基本資訊:

    • Name:my-first-vm
    • Region:asia-east1(台灣)
    • Zone:asia-east1-b
  4. 選擇機器類型(下一節詳談)

  5. 選擇開機磁碟(下一節詳談)

  6. 設定防火牆:

    • 勾選「Allow HTTP traffic」(如果要跑 Web)
    • 勾選「Allow HTTPS traffic」
  7. 點擊「Create」

方法 2:使用 gcloud CLI

gcloud compute instances create my-first-vm \
  --zone=asia-east1-b \
  --machine-type=e2-medium \
  --image-family=debian-11 \
  --image-project=debian-cloud \
  --boot-disk-size=20GB \
  --tags=http-server,https-server

CLI 的好處是可以寫成腳本,方便重複執行和版本控制。

機器類型與規格選擇

GCP 有很多機器系列,選錯會浪費錢。

機器系列比較:

系列特色適用場景價格
E2最便宜、共享 CPU開發測試、小型服務💰
N2平衡型、獨立 CPU一般生產環境💰💰
N2DAMD 處理器性價比要求高💰💰
C2運算優化CPU 密集型工作💰💰💰
M2記憶體優化大型資料庫、SAP💰💰💰💰
A2GPU 優化ML 訓練、渲染💰💰💰💰💰

怎麼選?

  • 開發測試環境 → e2-micro(免費)或 e2-small
  • 小型 Web 服務 → e2-medium
  • 一般生產環境 → n2-standard-2 起跳
  • 資料庫 → n2-highmem-*
  • 批次運算 → c2-standard-*

Custom Machine Type:

如果標準規格不符合需求,可以自訂 vCPU 和記憶體數量。

gcloud compute instances create custom-vm \
  --custom-cpu=6 \
  --custom-memory=12GB

開機磁碟與映像檔設定

映像檔選擇:

類型選項費用
公開映像檔Debian、Ubuntu、CentOS免費
Premium 映像檔Windows、RHEL、SUSE額外收費
自訂映像檔你自己做的儲存費用

磁碟類型:

類型IOPS適用場景價格
pd-standard(HDD)備份、冷資料$0.04/GB
pd-balanced(SSD)一般用途$0.10/GB
pd-ssd(SSD)資料庫、高 I/O$0.17/GB
pd-extreme(SSD)極高高效能資料庫$0.125/GB

建議:

  • 開發測試 → pd-balanced,20-50GB
  • 一般生產 → pd-balanced,50-100GB
  • 資料庫 → pd-ssd 或 pd-extreme

網路與防火牆規則配置

預設網路設定:

每個 VM 預設會有:

  • 內部 IP(VPC 內部使用)
  • 外部 IP(對外連線用,可選)

防火牆規則設定:

# 允許 HTTP
gcloud compute firewall-rules create allow-http \
  --allow=tcp:80 \
  --target-tags=http-server

# 允許 HTTPS
gcloud compute firewall-rules create allow-https \
  --allow=tcp:443 \
  --target-tags=https-server

# 允許特定 IP 的 SSH
gcloud compute firewall-rules create allow-ssh-from-office \
  --allow=tcp:22 \
  --source-ranges=203.0.113.0/24

安全建議:

  • 不要開放 0.0.0.0/0 的 SSH(全世界都能連)
  • 使用 IAP(Identity-Aware Proxy)取代直接 SSH
  • 定期檢視不必要的防火牆規則

SSH 連線與基本管理

連線方式:

1. Cloud Console 內建 SSH

最簡單的方式,點一下就能連。

2. gcloud CLI

gcloud compute ssh my-first-vm --zone=asia-east1-b

3. 標準 SSH Client

# 先設定 SSH Key
gcloud compute config-ssh

# 然後用一般 SSH 連線
ssh my-first-vm.asia-east1-b.your-project

常用管理指令:

# 列出所有 VM
gcloud compute instances list

# 停止 VM(停止計費 vCPU,但磁碟還是收費)
gcloud compute instances stop my-first-vm --zone=asia-east1-b

# 啟動 VM
gcloud compute instances start my-first-vm --zone=asia-east1-b

# 刪除 VM
gcloud compute instances delete my-first-vm --zone=asia-east1-b

費用相關說明請見「GCP 定價與費用計算完整指南」。


Cloud Run 容器部署教學

Cloud Run 是 GCP 的 Serverless 容器服務。你只要給它一個容器,其他都不用管。

Cloud Run 運作原理

核心概念:

  1. 你打包一個容器映像檔
  2. 部署到 Cloud Run
  3. Cloud Run 自動處理:
    • 啟動容器
    • 負載平衡
    • 自動擴展(0 到 N 個實例)
    • HTTPS 憑證
    • 自訂網域

計費方式:

  • 只有在處理請求時才收費
  • 沒有請求可以縮到 0 個實例
  • 按 CPU 時間和記憶體計費

限制:

  • 必須是 HTTP 服務(監聽在 PORT 環境變數指定的 Port)
  • 請求超時最長 60 分鐘
  • 單一請求最大記憶體 32GB

從 Container Registry 部署服務

步驟 1:準備你的應用程式

以 Node.js 為例,建立 index.js

const express = require('express');
const app = express();
const port = process.env.PORT || 8080;

app.get('/', (req, res) => {
  res.send('Hello from Cloud Run!');
});

app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

步驟 2:建立 Dockerfile

FROM node:18-slim
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
CMD ["node", "index.js"]

步驟 3:建置並推送到 Artifact Registry

# 設定 Docker 認證
gcloud auth configure-docker asia-east1-docker.pkg.dev

# 建置映像檔
docker build -t asia-east1-docker.pkg.dev/PROJECT_ID/REPO_NAME/my-app:v1 .

# 推送
docker push asia-east1-docker.pkg.dev/PROJECT_ID/REPO_NAME/my-app:v1

步驟 4:部署到 Cloud Run

gcloud run deploy my-service \
  --image=asia-east1-docker.pkg.dev/PROJECT_ID/REPO_NAME/my-app:v1 \
  --region=asia-east1 \
  --platform=managed \
  --allow-unauthenticated

部署完成後,會給你一個 HTTPS 網址。

自動擴展與流量管理

自動擴展設定:

gcloud run deploy my-service \
  --min-instances=0 \    # 最小實例數(0 = 可縮到 0)
  --max-instances=100 \  # 最大實例數
  --concurrency=80       # 每個實例最大同時請求數

流量分配(多版本部署):

# 部署新版本但不轉流量
gcloud run deploy my-service \
  --image=my-app:v2 \
  --no-traffic

# 逐步轉移流量
gcloud run services update-traffic my-service \
  --to-revisions=my-service-v2=50,my-service-v1=50

# 全部轉到新版
gcloud run services update-traffic my-service \
  --to-latest

自訂網域與 HTTPS 設定

設定自訂網域:

  1. 進入 Cloud Run → 選擇服務 → Manage Custom Domains
  2. 點擊「Add Mapping」
  3. 輸入你的網域(例如 api.example.com)
  4. 按照指示設定 DNS

DNS 設定:

  • 在你的 DNS 服務商加入 CNAME 記錄
  • 指向 Cloud Run 提供的目標

HTTPS:

  • Cloud Run 自動提供 SSL 憑證
  • 支援自動續約
  • 不需要額外設定

環境變數與 Secret 管理

設定環境變數:

gcloud run deploy my-service \
  --set-env-vars=DATABASE_URL=xxx,API_KEY=yyy

使用 Secret Manager:

# 先建立 Secret
echo -n "my-secret-value" | gcloud secrets create my-secret --data-file=-

# 部署時掛載 Secret
gcloud run deploy my-service \
  --set-secrets=API_KEY=my-secret:latest

好處:

  • Secret 不會出現在部署指令或環境變數列表
  • 可以設定 IAM 權限控制誰能存取
  • 支援版本管理

GKE(Google Kubernetes Engine)入門

如果你的服務規模夠大、夠複雜,GKE 是最強大的選擇。

GKE 叢集建立與設定

使用 Console 建立:

  1. 進入 GKE → Create Cluster
  2. 選擇模式:Autopilot 或 Standard(下一節說明)
  3. 設定名稱和區域
  4. 設定節點池(Standard 模式)
  5. 建立

使用 gcloud 建立:

# Autopilot 模式
gcloud container clusters create-auto my-cluster \
  --region=asia-east1

# Standard 模式
gcloud container clusters create my-cluster \
  --zone=asia-east1-b \
  --num-nodes=3 \
  --machine-type=e2-medium

取得叢集認證:

gcloud container clusters get-credentials my-cluster \
  --region=asia-east1

執行後就可以用 kubectl 操作叢集。

Autopilot vs Standard 模式比較

項目AutopilotStandard
節點管理Google 管理你自己管理
計費單位Pod 資源節點資源
設定彈性較少完全自訂
安全性預設強化自行設定
複雜度
適合對象大多數使用者需要特殊配置

建議:

  • 剛開始用 GKE → Autopilot
  • 需要 GPU、特殊節點配置 → Standard
  • 想省管理心力 → Autopilot
  • 有專職 K8s 團隊 → Standard

工作負載部署基礎

部署一個簡單的應用:

建立 deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: asia-east1-docker.pkg.dev/PROJECT_ID/REPO/my-app:v1
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"

部署:

kubectl apply -f deployment.yaml

常用指令:

# 查看 Deployment
kubectl get deployments

# 查看 Pod
kubectl get pods

# 查看 Pod 日誌
kubectl logs <pod-name>

# 進入 Pod
kubectl exec -it <pod-name> -- /bin/sh

# 擴展副本數
kubectl scale deployment my-app --replicas=5

服務暴露與負載平衡

建立 Service:

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
  - port: 80
    targetPort: 8080

Service 類型:

類型用途外部存取
ClusterIP叢集內部通訊
NodePort開放節點 Port是(較少用)
LoadBalancerGCP 負載平衡器

Ingress(進階):

如果要管理多個服務的路由:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: api.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app-service
            port:
              number: 80

儲存服務整合

運算服務常常需要搭配儲存。

Cloud Storage 掛載與使用

從 VM 存取 Cloud Storage:

# 安裝 gsutil(通常已預裝)
# 上傳檔案
gsutil cp local-file.txt gs://my-bucket/

# 下載檔案
gsutil cp gs://my-bucket/file.txt ./

# 同步資料夾
gsutil rsync -r ./local-folder gs://my-bucket/folder

從 Cloud Run 存取:

const {Storage} = require('@google-cloud/storage');
const storage = new Storage();

async function uploadFile() {
  await storage.bucket('my-bucket').upload('local-file.txt');
}

Persistent Disk 配置

新增磁碟到 VM:

# 建立磁碟
gcloud compute disks create my-disk \
  --size=100GB \
  --type=pd-ssd \
  --zone=asia-east1-b

# 掛載到 VM
gcloud compute instances attach-disk my-vm \
  --disk=my-disk \
  --zone=asia-east1-b

在 VM 內掛載:

# SSH 進入 VM 後
sudo mkfs.ext4 -m 0 -F /dev/sdb
sudo mkdir /mnt/data
sudo mount /dev/sdb /mnt/data

# 設定開機自動掛載
echo '/dev/sdb /mnt/data ext4 defaults 0 0' | sudo tee -a /etc/fstab

Filestore(NFS)應用場景

適合場景:

  • 多台 VM 需要共享檔案
  • 需要 POSIX 檔案系統語意
  • 傳統應用需要 NFS

建立 Filestore:

gcloud filestore instances create my-filestore \
  --zone=asia-east1-b \
  --tier=BASIC_HDD \
  --file-share=name=vol1,capacity=1TB \
  --network=name=default

在 VM 掛載:

sudo apt-get install nfs-common
sudo mkdir /mnt/filestore
sudo mount 10.0.0.2:/vol1 /mnt/filestore

常見問題與最佳實踐

實務上常遇到的問題和解決方案。

效能調校建議

Compute Engine:

  • 選擇正確的機器類型(不要過度配置)
  • 使用 SSD 而非 HDD 做資料庫
  • 考慮使用 Local SSD 做暫存
  • 開啟 Preemptible/Spot VM 做批次作業

Cloud Run:

  • 設定適當的 concurrency(預設 80)
  • 使用 min-instances 避免冷啟動
  • 容器映像檔要小(使用 Alpine、Distroless)
  • 善用 CPU boost 功能

GKE:

  • 設定 Resource Requests 和 Limits
  • 使用 HPA(Horizontal Pod Autoscaler)
  • 考慮使用 Node Auto-provisioning
  • 善用 Pod Disruption Budget

成本控制技巧

Compute Engine:

  • 開發環境用 Spot VM
  • 用 Scheduling 設定下班自動關機
  • 定期清理未使用的磁碟和快照

Cloud Run:

  • min-instances 設 0(允許縮到 0)
  • 不需要時不要設太高的 max-instances
  • 優化容器啟動時間

GKE:

  • Autopilot 模式按 Pod 計費更精準
  • 使用 Cluster Autoscaler
  • 考慮 Spot Node Pool 跑可中斷工作

監控與日誌設定

Cloud Monitoring:

所有 GCP 服務的指標都會自動送到 Cloud Monitoring。

重要指標:

  • CPU 使用率
  • 記憶體使用率
  • 網路流量
  • 延遲和錯誤率

Cloud Logging:

# 查看 VM 日誌
gcloud logging read "resource.type=gce_instance"

# 查看 Cloud Run 日誌
gcloud logging read "resource.type=cloud_run_revision"

# 查看 GKE 日誌
gcloud logging read "resource.type=k8s_container"

設定警報:

  1. 進入 Cloud Monitoring → Alerting
  2. 建立 Alert Policy
  3. 選擇指標和條件
  4. 設定通知管道(Email、Slack、PagerDuty)

資安相關設定請見「GCP 資安與 Cloud Armor 防護完整指南」。


架構設計需要第二意見?

好的架構能節省數倍的營運成本。

預約架構諮詢,讓我們一起檢視你的雲端架構。

CloudInsight 的架構諮詢服務:

  • 現有架構評估:找出效能瓶頸和成本浪費
  • 遷移規劃:從地端到雲端的完整規劃
  • 最佳實踐建議:根據你的需求推薦最適合的服務組合
  • 概念驗證(POC):幫你快速驗證架構可行性

結論:建構你的 GCP 運算架構

看完這篇教學,你應該知道怎麼選擇和使用 GCP 的運算服務了。

快速回顧:

需求選擇原因
需要完全控制Compute Engine可以裝任何軟體
想要最省事Cloud Run不用管基礎設施
大規模微服務GKE強大的編排能力
流量不穩定Cloud Run可以縮到 0
需要 GPUCompute Engine支援 NVIDIA GPU
複雜網路需求GKE細緻的網路控制

下一步建議:

  1. 如果是新專案,從 Cloud Run 開始
  2. 如果需要完整控制,用 Compute Engine
  3. 如果服務數量超過 10 個,考慮 GKE
  4. 混合使用是常態,不要硬要全部用同一種

動手做是最好的學習方式。開一個測試專案,把這篇教學的範例都跑一遍吧!


延伸閱讀


圖片說明

插圖:GCP 運算服務選擇決策樹

場景描述: 流程圖形式的決策樹,從頂部「選擇運算服務」開始,透過幾個問題分支到三個結果:Compute Engine、Cloud Run、GKE。問題包含「需要完全控制?」「是 HTTP 服務?」「需要大規模編排?」

視覺重點:

  • 主要內容清晰呈現

必須出現的元素:

  • 依據描述中的關鍵元素

需要顯示的中文字:

顏色調性: 專業、清晰

避免元素: 抽象圖形、齒輪、發光特效

Slug: gcp-compute-service-decision-tree


插圖:Cloud Run 自動擴展示意圖

場景描述: 時間軸圖表顯示 Cloud Run 的擴展行為。X 軸是時間,Y 軸左側是請求數量(折線),右側是實例數量(長條)。圖表顯示請求增加時實例跟著增加,請求減少時實例也減少,直到歸零。

視覺重點:

  • 主要內容清晰呈現

必須出現的元素:

  • 依據描述中的關鍵元素

需要顯示的中文字:

顏色調性: 專業、清晰

避免元素: 抽象圖形、齒輪、發光特效

Slug: cloud-run-autoscaling-timeline-chart


插圖:GKE 叢集架構圖

場景描述: 架構圖顯示 GKE 叢集的結構。外層是 Cluster 邊界,內部分為 Control Plane(Google 管理)和 Node Pool。Node Pool 內有多個 Node,每個 Node 內有多個 Pod。Load Balancer 在外部指向 Pod。

視覺重點:

  • 主要內容清晰呈現

必須出現的元素:

  • 依據描述中的關鍵元素

需要顯示的中文字:

顏色調性: 專業、清晰

避免元素: 抽象圖形、齒輪、發光特效

Slug: gke-cluster-architecture-diagram


插圖:三種運算服務成本比較圖

場景描述: 折線圖比較三種運算服務在不同流量下的月成本。X 軸是月請求數(從 0 到 1000 萬),Y 軸是月成本。三條線分別代表 Compute Engine(平坦線)、Cloud Run(從零開始逐漸上升)、GKE(有固定成本後上升)。

視覺重點:

  • 主要內容清晰呈現

必須出現的元素:

  • 依據描述中的關鍵元素

需要顯示的中文字:

顏色調性: 專業、清晰

避免元素: 抽象圖形、齒輪、發光特效

Slug: gcp-compute-services-cost-comparison-chart


參考資料

  1. Google Cloud,《Compute Engine Documentation》(2024)
  2. Google Cloud,《Cloud Run Documentation》(2024)
  3. Google Cloud,《Google Kubernetes Engine Documentation》(2024)
  4. Google Cloud,《Cloud Storage Documentation》(2024)
  5. Google Cloud,《Best Practices for Operating Containers》(2024)

需要專業的雲端建議?

無論您正在評估雲平台、優化現有架構,或尋找節費方案,我們都能提供協助

預約免費諮詢

相關文章