它是什么
开始使用 Google Compute Engine 虚拟机前,先记住一句话:Google Compute Engine(常简称 GCE)是 GCP 提供的云上虚拟机服务。说人话,它就是一台放在 Google 数据中心里的 Linux 或 Windows 服务器:你不用买主机、插网线、装系统,只要按需创建、启动、停止和删除。想临时跑网站、测试程序、练习命令行,就开一台;不用了就删掉。之所以强调“按需”,是因为云资源通常按时间和配置计费,停止 VM 不等于所有费用都消失,启动盘、静态外部 IP 等还可能继续收费;删除前也要确认数据已备份,因为启动盘可能一起被删。
但“虚拟机”不是一个孤零零的 CPU。一台能用的 VM 通常包含或要一起配置下面这些东西:
- 机器类型:选几核 CPU、多少内存,类似选电脑配置。
- 系统镜像:决定装 Ubuntu、Debian、Windows Server 等哪个系统。
- 启动盘:系统文件、程序和你保存的数据放这里。
- 网络、外部 IP、防火墙规则:决定 VM 在哪个私有网络里、有没有公网地址、哪些端口允许访问;很多人连不上 SSH 或远程桌面,就是外部 IP 或防火墙没配好。
- 身份权限:也就是服务账号和 IAM 权限,决定这台 VM 能不能读存储桶、访问数据库等;新手容易图省事给太大权限,后面很难收拾。
为什么先讲这些?因为控制台创建页面里的每个选项,都会对应上面的一个部分;选项看不懂,后面就容易出现“机器开了但连不上”“以为没收费”“权限给太多”等问题。你可以在 GCP 控制台右上角打开 Cloud Shell(它自带 gcloud 和登录态,别先复制到自己电脑的普通终端),复制下面几行:前两行确认环境,第三行只启用 Compute Engine API,后面都是查看;不会创建 VM。
gcloud auth list
gcloud config list project
gcloud services enable compute.googleapis.com
gcloud compute machine-types list --limit=5
gcloud compute images list --limit=5
gcloud compute instances list
gcloud compute networks list
gcloud compute firewall-rules list
前两行用来确认登录账号和当前项目,最常见的坑是选错项目,然后以为刚开的机器不见了。第三行如果提示权限或结算账号问题,说明当前项目还没准备好,先找项目管理员,不要反复点创建按钮。后面几行分别列出机器类型、镜像、现有实例、网络和防火墙规则,用来把抽象概念和可选项对上。看到列表为空也别慌,可能只是这个项目还没建过相关资源。
解决什么问题
想搭个小网站、跑个测试脚本,或者临时试个新软件,难道非得掏钱买台沉甸甸的服务器放家里?开始使用 Google Compute Engine 虚拟机,就是帮你省掉这步的:相当于在谷歌机房「租」台电脑,不搬机器、不拉网线,几分钟就能拿到一台能联网的主机,放网站、做测试环境、跑后台任务或当用完就扔的实验机都行。
想直观感受「不用买硬件」?装好 gcloud 并登录后,直接复制下面这行看现成配置:
gcloud compute machine-types list --zones=asia-east1-b --limit=3
为什么这么做:这只是「查菜单」,不会创建机器、也不会产生费用,最适合零基础先练手,让你秒懂 CPU 和内存是随挑随用的,根本不用去电脑城比价。小白常踩的坑:一上来就照着教程敲「停止实例」,可自己连机器都还没建,立马报「找不到资源」就慌了。记住顺序:先查、再建、最后才停。
计费也很友好:按秒算钱,但有最低计费时长(一般 1 分钟起),不是老式云主机那种「一开就扣整小时」。随用随停,特别适合流量忽高忽低的小站、只跑两三天的短期项目,以及一年练一次的灾备演练。坑就在这儿:关掉浏览器标签页 ≠ 关掉虚拟机!只要实例还在跑,费用就一直在跳表,练完务必回控制台点「停止」或直接删掉,别让它默默挂一整个月。
分工上更省心:硬件坏了、机房断电、物理网络抖动,这些全交给 GCP 兜底,你基本感知不到。自己主要管三样就够了——系统(装什么 Linux/Windows)、数据(存了什么文件)、应用(跑的网站或脚本),不用再半夜爬起来重启交换机。
最省时间的其实是复制环境。第一台装顺了之后,别再给第二台重装系统、重敲一遍依赖:用快照存个档、用镜像存整套系统盘、再用实例模板把「机型 + 镜像 + 启动设置」固定下来,下次要 1 台还是 10 台,照模板一键生成,配置一模一样,重复装机的麻烦直接没了。
- 快照:改配置前存一下,改崩了能退回去。
- 镜像:拿装好环境的盘,直接去开新机。
- 实例模板:批量开机器,避免每次手滑选错配置。
最后一个坑:快照和镜像不是免费无限存的,长期不用的旧快照也会一直收存储费。实验做完顺手清掉,才真的叫「随用随停」。
怎么上手
-
第一次开始使用 Google Compute Engine 虚拟机,别急着点创建:先打开 Google Cloud 控制台,顶部选好项目,到「结算」确认已绑定结算账号,再搜索「Compute Engine」并点「启用」,把 Compute Engine 服务打开。区域建议选离访客近的 asia-east1,可用区选 asia-east1-b。不想装工具就点右上角 Cloud Shell,下面命令可直接复制:
gcloud services enable compute.googleapis.com gcloud config set compute/region asia-east1 gcloud config set compute/zone asia-east1-b为什么:项目是资源和账单的篮子,结算账号没绑会创建失败;区域影响延迟、价格和机型,可用区是区域内的具体机房。坑:免费额度不是无限,配额不够、项目选错,都会让后面步骤莫名报错。
-
进入「创建实例」:机器类型先选 e2-micro,系统镜像选 Debian 12,启动盘 20GB,网络用 default,是否分配外部 IP 这项,这次选「临时」。也可以一次复制执行:
gcloud compute instances create my-first-vm --zone=asia-east1-b --machine-type=e2-micro --image-family=debian-12 --image-project=debian-cloud --boot-disk-size=20GB --network=default --tags=http-server为什么:小配置够练手又便宜,20GB 给系统和日志留空间,临时外部 IP 方便 SSH 和访问网页,标签方便后面只给这台机器开端口。坑:不选外部 IP 更安全省钱,但小白常常连不上;临时 IP 停止再启动可能变,别当固定地址用。
-
在实例列表点「SSH」按钮就能用浏览器终端登录;也可以用 gcloud 命令登录,并顺手更新系统、部署一个 Nginx 服务、检查防火墙端口 80:
gcloud compute ssh my-first-vm --zone=asia-east1-b --command='set -e; sudo apt-get update; sudo apt-get upgrade -y; sudo apt-get install -y nginx; sudo systemctl enable --now nginx' if ! gcloud compute firewall-rules describe allow-http >/dev/null 2>/dev/null; then gcloud compute firewall-rules create allow-http --network=default --allow=tcp:80 --target-tags=http-server fi gcloud compute firewall-rules describe allow-http --format='table(name,allowed,targetTags)' EXTERNAL_IP=$(gcloud compute instances describe my-first-vm --zone=asia-east1-b --format='get(networkInterfaces[0].accessConfigs[0].natIP)') curl -I "http://${EXTERNAL_IP}"为什么:先更新系统是为了补安全补丁;Nginx 是最容易验证的服务;云端防火墙默认常只放行 22,不放行 80 时浏览器会一直转圈。坑:云端防火墙和 Linux 内部防火墙是两层,服务装好了不等于外网能访问。
-
用完及时停止或删除实例。练习结束先停止,并确认磁盘、快照和静态 IP 是否仍在计费:
gcloud compute instances stop my-first-vm --zone=asia-east1-b gcloud compute disks list gcloud compute snapshots list gcloud compute addresses list确定不要了再删除;有数据先做快照:
gcloud compute instances delete my-first-vm --zone=asia-east1-b --delete-disks=all --quiet gcloud compute disks list gcloud compute snapshots list gcloud compute addresses list为什么:停止后 CPU 和内存通常不再收费,但启动盘、快照、未绑定的静态 IP 仍可能按存储或占用收费;删除能清掉实例和启动盘,却不会自动清掉所有额外资源。坑:看到列表里还有磁盘、快照或地址,就去控制台确认是否还需要,别以为关机就是全免费。
与替代方案对比
开始使用 Google Compute Engine 虚拟机时,别急着点「创建实例」。VM 就是「在云里租一台电脑」。和本地物理机比,它几分钟开通,配置能再调,做实验、压测很灵活;不用买机器、等上架。但物理机放着,账单基本停了;VM 开机、挂着磁盘、留着外部 IP,就可能继续计费。长期用要算出站流量、磁盘、快照、静态 IP,别只看每小时单价。
和 App Engine、Cloud Run 等托管服务比,VM 控制权更高:能选系统、装包、改 SSH、开端口、跑常驻进程;代价是补丁、防火墙、密钥、日志、备份都自己管。托管服务像「把菜交给厨房」,平台管扩容和底层安全;VM 像「连厨房一起租」,自由多,也要自己打扫。
和轻量云主机比,GCP 的网络、IAM 权限、镜像、监控更完整,以后扩展更顺;但项目、区域、VPC、服务账号、防火墙概念更多,初次配置更细。小白常照教程开了机,却漏看项目和防火墙,连不上就以为机器坏了。
怎么选:只跑一个容器化服务,比如一个网站接口,优先看 Cloud Run:平台自动扩容,不用管服务器;需要完整 Linux 权限,要装包、改系统配置、开守护进程,再选 VM。先在 GCP 控制台右上角打开 Cloud Shell,复制下面命令做「需求体检」,只查看信息,不创建收费资源:
uname -a
id
gcloud config list
为什么跑:第一条看系统,第二条看是否要管理员权限,第三条防项目选错。头大就选 Cloud Run;想到「我要改系统配置」再选 VM。
- Windows 坑:别在 CMD 试这些命令;Cloud Shell 是现成 Linux,也自带所需工具。
- 费用坑:删除实例不等于删掉磁盘、外部 IP、快照、防火墙规则,回控制台逐项看。
- 配置坑:别为「以后可能用到」开大规格,先小后调,才用得上弹性。
最佳实践
先把安全底线立住:别用默认高权限服务账号,更别给 Owner/Editor。下面整段复制到本地终端或 Cloud Shell 的 Bash 执行:选项目、建最小权限账号、把当前公网 IP 和 IAP 网段写进 SSH 防火墙、用 e2-micro 开练习机,并做快照和实例模板。第一次按屏幕登录选项目即可。
# 整段复制执行;第一次会提示登录并选择一个项目
gcloud init --console-only
PROJECT_ID="$(gcloud config get-value project 2>/dev/null)"
if [ -z "$PROJECT_ID" ]; then echo "还没选项目,请重新运行 gcloud init"; exit 1; fi
ZONE="asia-east1-a"
VM_NAME="web-dev-zhangsan-001"
SA_NAME="vm-app-readonly"
SA_EMAIL="${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com"
MY_IP="$(curl -s https://api.ipify.org || curl -s https://ipinfo.io/ip)"
if [ -z "$MY_IP" ]; then echo "取不到公网 IP,请联网后重试"; exit 1; fi
MY_IP="${MY_IP}/32"
SOURCE_RANGES="${MY_IP},35.235.240.0/20"
STARTUP_SCRIPT='#!/bin/bash
set -e
apt-get update
apt-get install -y curl
curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh
bash add-google-cloud-ops-agent-repo.sh --also-install'
gcloud iam service-accounts create "$SA_NAME"
--display-name="GCE beginner least privilege" || true
gcloud projects add-iam-policy-binding "$PROJECT_ID"
--member="serviceAccount:${SA_EMAIL}"
--role="roles/logging.logWriter" || true
gcloud projects add-iam-policy-binding "$PROJECT_ID"
--member="serviceAccount:${SA_EMAIL}"
--role="roles/monitoring.metricWriter" || true
gcloud projects add-iam-policy-binding "$PROJECT_ID"
--member="serviceAccount:${SA_EMAIL}"
--role="roles/stackdriver.resourceMetadata.writer" || true
# 默认网络常自带对全网开放 22 的旧规则,先删掉再建限制来源的规则
gcloud compute firewall-rules delete default-allow-ssh --quiet || true
gcloud compute firewall-rules update allow-ssh-from-my-ip
--allow=tcp:22
--source-ranges="$SOURCE_RANGES"
--target-tags=ssh-from-my-ip 2>/dev/null ||
gcloud compute firewall-rules create allow-ssh-from-my-ip
--network=default
--direction=INGRESS
--allow=tcp:22
--source-ranges="$SOURCE_RANGES"
--target-tags=ssh-from-my-ip || true
gcloud compute instances create "$VM_NAME"
--zone="$ZONE"
--machine-type=e2-micro
--image-family=debian-12
--image-project=debian-cloud
--service-account="$SA_EMAIL"
--scopes=cloud-platform
--tags=ssh-from-my-ip
--labels=env=dev,owner=zhangsan,cost_center=demo
--metadata=startup-script="$STARTUP_SCRIPT" || true
SNAPSHOT_NAME="${VM_NAME}-$(date +%Y%m%d%H%M%S)"
gcloud compute disks snapshot "$VM_NAME"
--zone="$ZONE"
--snapshot-names="$SNAPSHOT_NAME" || true
gcloud compute disks create "${VM_NAME}-restore-test"
--zone="$ZONE"
--source-snapshot="$SNAPSHOT_NAME" || true
gcloud compute instance-templates create "${VM_NAME}-template"
--machine-type=e2-micro
--image-family=debian-12
--image-project=debian-cloud
--service-account="$SA_EMAIL"
--scopes=cloud-platform
--tags=ssh-from-my-ip
--labels=env=dev,owner=zhangsan,cost_center=demo
--metadata=startup-script="$STARTUP_SCRIPT" || true
- 权限和端口:IAM 才决定能做什么,cloud-platform 只是访问范围,不是“全开”。练习机只开 22;以后要建站再单独加 80/443,别提前开。常见坑是默认网络自带 default-allow-ssh 对全网开 22,新增限制规则不会覆盖旧规则,所以命令先删旧规则。来源里除了你的 IP 还带了 IAP 网段,方便浏览器 SSH,仍不是全网;公网 IP 变了就更新来源,别改回 0.0.0.0/0。若提示没权限或找不到 default 网络,找管理员确认,别反复重试。
- 命名和标签:名字用「用途-环境-负责人-编号」,标签写 env、owner、cost_center,最后这个就是成本归属。账单、找机器、自动开关机都靠它们;别全叫 test、instance-1,月底不知道谁建的。
- 可观测和备份:启动脚本装了 Ops Agent(收日志和 CPU/内存指标),服务账号只给三个写角色;再去「结算 > 预算和提醒」设 50%/90%/100% 邮件提醒,别等账单出来才发现忘关机。快照不是备份的证明,命令先建恢复测试盘,演练时挂到临时小机器读一次文件再删;先 e2-micro 练,别一上来选高配或 GPU。
- 生产固化:练习可用启动脚本;生产把验证过的机器做成自定义镜像,再用实例模板或托管实例组(按模板自动建/换机器)重建。别每次 SSH 上去手工改,改着改着两台就不一样,这叫配置漂移,排障很痛苦。
常见问题(FAQ)
第一次创建 VM 选哪种机器类型?
先用 e2-micro 或 e2-small 练手,够跑 Linux 基础服务,费用也更容易控制。
为什么创建后连不上 SSH?
先查实例是否运行、防火墙是否放行、外部 IP 是否存在,再看账号和密钥。
停止实例后还会收费吗?
通常不再收实例运行费,但启动盘、静态 IP、快照等资源仍可能产生费用。
需要一开始就学命令行吗?
不用,先用控制台完成创建和 SSH 登录,熟悉后再逐步学 gcloud。
不想自己折腾 GCP?我们提供云平台代维护、上云迁移与账单代付服务,一对一技术支持。
