GCP Compute Engine:弹性虚拟机

FreeGuideOnline 最新 2026-06-30

全球 → 区域 (Region) → 可用区 (Zone) 示例: asia-east1 (台湾) → asia-east1-a, asia-east1-b, asia-east1-c


### 虚拟机实例

实例就是一台运行在云中的虚拟计算机。每个实例包含:
- vCPU(虚拟中央处理器)
- 内存(RAM)
- 启动磁盘(操作系统安装盘)
- 可选的额外存储(数据盘)
- 网络接口(内网 IP、外网 IP 可选)

实例名称在项目内同一区域内必须唯一,创建后不可更改。

### 机器类型

机器类型定义了虚拟机的 vCPU 和内存容量比。Compute Engine 提供预定义和自定义两种模式。

**预定义机器类型**:

| 类型系列 | 适用场景 | vCPU:内存比例 |
|----------|----------|---------------|
| E2 共享核心 | 中小型工作负载,突发流量 | 0.5GB~8GB 内存/vCPU |
| N2/N2D | 通用工作负载,均衡性价比 | 4GB/vCPU |
| N1 | 经典通用型 | 3.75GB/vCPU |
| C2 | 计算密集型 (高性能计算) | 4GB/vCPU |
| M2/M3 | 大内存型 (内存数据库) | 12GB/vCPU 或更高 |
| A2 | 加速器优化型 (GPU) | 固定搭配 GPU |

**自定义机器类型**:你可以在 1 到 96 个 vCPU 之间自由组合,内存上限 6.5 GB/vCPU,针对非标准需求。

### 镜像与启动盘

虚拟机实例的启动盘包含操作系统和你的软件。你可以选择:
- **公共镜像**:由 Google 维护的 Debian、Ubuntu、CentOS、Windows Server 等。
- **自定义镜像**:从现有启动盘或导入的虚拟磁盘创建。
- **市场镜像**:第三方提供的预配置软件栈(如 LAMP、WordPress)。

启动盘默认使用持久磁盘,大小取决于镜像,一般最小 10 GB,可在创建时调整。

## 创建你的第一台虚拟机

我们分别演示 Cloud Console(网页界面)和 gcloud 命令行工具两种方式。请确保你已经有一个 GCP 项目并启用了 Compute Engine API。

### 使用 Cloud Console

1. 访问 [console.cloud.google.com](https://console.cloud.google.com),进入 Compute Engine → 虚拟机实例。
2. 点击“创建实例”。
3. 填写配置:
   - **名称**:例如 `my-first-vm`
   - **区域和可用区**:保持默认,或选择离你最近的区域(如 `asia-east1-a`)
   - **机器类型**:选择 `E2-medium`(2 vCPU,4 GB 内存)作为入门
   - **启动盘**:点击“更改”,选择公共镜像 `Debian 11`
   - **防火墙**:勾选“允许 HTTP 流量”和“允许 HTTPS 流量”
4. 点击“创建”,等待实例启动。

### 使用 gcloud 命令行

首先安装并初始化 [gcloud CLI](https://cloud.google.com/sdk/docs/install),然后执行:

```bash
gcloud compute instances create my-first-vm \
    --zone=asia-east1-a \
    --machine-type=e2-medium \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --tags=http-server,https-server

检查实例状态:

gcloud compute instances list

连接和管理虚拟机

SSH 连接

实例运行后,你可以通过内置 SSH 直接连接(无需管理密钥对,基于 IAM 临时密钥):

控制台:在实例列表中点击“SSH”按钮,会打开浏览器内终端。

命令行

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

首次连接会自动生成并上传 SSH 密钥,你的 Google 账号需拥有 roles/compute.osLogin 角色或实例级别权限。

基本管理操作

  • 启动/停止:停止实例会保留磁盘和 IP,不计费 vCPU 和内存,但会继续收取磁盘和静态 IP 费用。

    gcloud compute instances stop my-first-vm --zone=asia-east1-a
    gcloud compute instances start my-first-vm --zone=asia-east1-a
    
  • 删除:注意会同时删除启动盘(除非选择保留)。

    gcloud compute instances delete my-first-vm --zone=asia-east1-a
    
  • 查看详细信息

    gcloud compute instances describe my-first-vm --zone=asia-east1-a
    

弹性伸缩:实例组与自动扩缩

单独一台虚拟机无法保证高可用。Compute Engine 提供托管实例组 (Managed Instance Group, MIG) 来统一管理一组相同配置的虚拟机。

托管实例组基础

MIG 基于实例模板自动创建和恢复实例。实例模板定义了机器类型、启动盘、网络等不可变配置。

创建实例模板

gcloud compute instance-templates create my-template \
    --machine-type=e2-medium \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --tags=http-server

创建托管实例组(初始大小为 2):

gcloud compute instance-groups managed create my-mig \
    --base-instance-name=my-mig-vm \
    --template=my-template \
    --size=2 \
    --zone=asia-east1-a

MIG 会自动保持指定数量的实例运行。如果某台实例发生故障,MIG 会重建它。

自动扩缩策略

自动扩缩 (Autoscaling) 根据负载动态调整实例数量。你可以定义扩缩策略:

  • 基于 CPU 利用率(最常用)
  • 基于 HTTP(S) 负载均衡的每秒请求数
  • 基于 Stackdriver 监控指标
  • 基于负载均衡的容量利用率

为 MIG 启用自动扩缩:

gcloud compute instance-groups managed set-autoscaling my-mig \
    --zone=asia-east1-a \
    --max-num-replicas=10 \
    --min-num-replicas=2 \
    --target-cpu-utilization=0.7 \
    --cool-down-period=60

参数说明:

  • --max-num-replicas:最大实例数
  • --min-num-replicas:最小实例数
  • --target-cpu-utilization:目标平均 CPU 利用率(70%)
  • --cool-down-period:冷却时间,防止频繁波动(秒)

当平均 CPU 超过 70% 时,MIG 会自动增加实例;低于 70% 时逐步缩减,但不会低于最小实例数。

负载均衡基础

要实现流量分发到多个实例,你需要配置负载均衡器。对于 HTTP/HTTPS 流量,推荐使用外部 HTTP(S) 负载均衡。

基本架构:

用户 → 全局外部 IP(转发规则)→ 目标代理 → URL 映射 → 后端服务 → 实例组

快速配置步骤(简化版):

  1. 创建健康检查:

    gcloud compute health-checks create http my-health-check \
        --port 80
    
  2. 创建后端服务并关联 MIG:

    gcloud compute backend-services create my-backend-service \
        --protocol HTTP \
        --health-checks my-health-check \
        --global
    gcloud compute backend-services add-backend my-backend-service \
        --instance-group my-mig \
        --instance-group-zone asia-east1-a \
        --global
    
  3. 创建 URL 映射(默认规则):

    gcloud compute url-maps create my-url-map \
        --default-service my-backend-service
    
  4. 创建目标 HTTP 代理:

    gcloud compute target-http-proxies create my-http-proxy \
        --url-map my-url-map
    
  5. 创建全局转发规则(提供公共 IP):

    gcloud compute forwarding-rules create my-http-rule \
        --global \
        --target-http-proxy my-http-proxy \
        --ports 80
    

几分钟后,一个全局 IP 地址即可将流量分发到 MIG 中的虚拟机。你可以通过 gcloud compute forwarding-rules describe my-http-rule --global 查看 IP。

存储选项

Compute Engine 提供多种存储方案来适配不同性能与持久性要求。

存储类型 特点 适用场景 持久性
标准永久性磁盘 (pd-standard) 成本低,HDD 底层 顺序读写、批量处理 高,自动冗余
SSD 永久性磁盘 (pd-ssd) 高 IOPS,低延迟 数据库、随机读写
均衡永久性磁盘 (pd-balanced) 性价比 SSD,通用 多数工作负载
极端永久性磁盘 (pd-extreme) 超高性能,可调 IOPS SAP HANA 等关键负载
本地 SSD 超高吞吐、极低延迟 临时工作空间、缓存 临时,实例停止后数据丢失
Cloud Storage 存储桶 对象存储,通过网络访问 静态资源、备份归档 极高(跨区域冗余)

挂载额外磁盘

gcloud compute disks create my-data-disk --size=100GB --zone=asia-east1-a
gcloud compute instances attach-disk my-first-vm --disk=my-data-disk --zone=asia-east1-a

挂载后需在操作系统内格式化并挂载。

网络与防火墙

每个实例默认属于一个 VPC(虚拟私有云)网络,系统会分配一个内网 IP,并可通过防火墙规则控制访问。

防火墙规则

防火墙规则基于标签服务账号应用于实例。例如,允许 HTTP 流量进入带有 http-server 标签的实例:

gcloud compute firewall-rules create allow-http \
    --direction=INGRESS \
    --priority=1000 \
    --network=default \
    --action=ALLOW \
    --rules=tcp:80 \
    --source-ranges=0.0.0.0/0 \
    --target-tags=http-server
  • --source-ranges:允许的来源 IP 范围,0.0.0.0/0 表示任何来源
  • --target-tags:实例需有与之匹配的网络标签

常用规则:SSH(TCP 22)默认通过 IAM 控制的防火墙规则允许,无需手动开放。

外部 IP 与静态 IP

创建实例时可选择分配临时外部 IP。如需固定 IP,预留静态外部地址:

gcloud compute addresses create my-static-ip --region=asia-east1

并将实例访问配置中的 Network 接口绑定此静态 IP。

成本优化

承诺使用折扣 (Committed Use Discounts)

对于长时间运行的工作负载,购买承诺使用合同可获得高达 70% 的折扣(按区域和机器类型)。适合 1 年或 3 年期的稳定需求。

抢占式虚拟机 (Preemptible / Spot VMs)

抢占式实例价格仅为常规实例的 60-91%,但计算机会在 24 小时内被终止(Spot VM 无最大运行时间限制,但同样可抢占)。适用于容错批处理任务。

创建抢占式实例:

gcloud compute instances create my-spot-vm \
    --zone=asia-east1-a \
    --machine-type=e2-medium \
    --preemptible

其他优化建议

  • 为无状态应用使用托管实例组和自动扩缩,避免资源闲置。
  • 选择适当磁盘类型,按需调整大小,避免超配。
  • 使用 Cloud Billing 预算和警报,防止意外费用。

监控与日志

Compute Engine 集成 Cloud Monitoring 和 Cloud Logging,提供默认的系统指标和自定义指标能力。

  • 监测 CPU、内存、磁盘、网络:在 Cloud Console 中查看每个实例的监控图表。
  • 安装 Ops Agent:可收集更详细的系统和应用指标(如内存使用率、进程)。默认基本指标不包括内存使用率。
  • 日志:可通过 Cloud Logging 查看串行控制台输出、启动日志、系统日志等。

启用串行端口访问(排错用):

gcloud compute instances add-metadata my-first-vm \
    --metadata=serial-port-enable=TRUE