GCP Compute Engine:弹性虚拟机
全球 → 区域 (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 映射 → 后端服务 → 实例组
快速配置步骤(简化版):
-
创建健康检查:
gcloud compute health-checks create http my-health-check \ --port 80 -
创建后端服务并关联 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 -
创建 URL 映射(默认规则):
gcloud compute url-maps create my-url-map \ --default-service my-backend-service -
创建目标 HTTP 代理:
gcloud compute target-http-proxies create my-http-proxy \ --url-map my-url-map -
创建全局转发规则(提供公共 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