它是什么:用云端资源理解 GCP
GCP 是谷歌云(Google Cloud)提供的一组云服务。零基础先把 GCP 想成「按需租用的机房」:不用买服务器、拉网线、装硬盘,需要时在网页或命令里租 CPU、内存、网络、硬盘,以及监控、日志、权限等管理工具;不用了就关机或删除。资源按项目组织、按账号授权、按用量计费。
这篇 GCP 教學不急着背概念,只围绕一台可远程管理的服务器展开:创建、连接、在控制台里看见它,再理解它由哪些云端资源拼起来。它通常叫 VM(虚拟机),但 VM 只是 GCP 的一种计算产品,旁边还有存储、数据库、容器、网络服务。
常见入口有三个:控制台是网页版总开关;gcloud 命令行把动作写成可复制步骤;权限体系决定「谁能在哪个项目里开什么」。小白常卡在没选到启用结算的项目、账号缺少创建 VM 的 IAM 权限、本机没装 gcloud。建议打开控制台右上角 Cloud Shell,再复制整段,它自带 gcloud。
gcloud --version
gcloud auth list
PROJECT_ID="$(gcloud config get-value project)"
if [ -z "$PROJECT_ID" ]; then gcloud init; fi
PROJECT_ID="$(gcloud config get-value project)"
gcloud services enable compute.googleapis.com --project="$PROJECT_ID"
gcloud compute instances describe gcpok-demo-vm
--project="$PROJECT_ID"
--zone=asia-east1-b
--format="value(name)" ||
gcloud compute instances create gcpok-demo-vm
--project="$PROJECT_ID"
--zone=asia-east1-b
--machine-type=e2-micro
--image-family=debian-12
--image-project=debian-cloud
--tags=gcpok-demo
gcloud compute firewall-rules describe gcpok-allow-ssh
--project="$PROJECT_ID" ||
gcloud compute firewall-rules create gcpok-allow-ssh
--project="$PROJECT_ID"
--network=default
--allow=tcp:22
--source-ranges=0.0.0.0/0
--target-tags=gcpok-demo
gcloud compute ssh gcpok-demo-vm
--project="$PROJECT_ID"
--zone=asia-east1-b
查版本、账号和项目,是确认资源开在对的位置;启用 Compute Engine API,是因为服务默认不一定打开;创建 VM 和放行 SSH,分别对应计算资源与网络规则。能进入远程终端,就说明服务器已经是云端可管理对象。
坑也要提前说:没启用结算、区域没配额、默认网络被删或组织策略禁止外部 IP,都会失败;重复执行提示已存在不用慌;开放 0.0.0.0/0 仅供演示,真实环境应限制来源 IP。最怕练习完忘记删除,VM 放着会继续计费;请在控制台删除 VM 和防火墙规则。
解决什么问题:少买机器、快交付、好扩容
在 GCP 教學里,先看它省掉什么:传统买服务器要采购、等货、装系统、拉网络、配路由,测试环境常拖一周;GCP 创建 VM、自动给公网 IP、换更大规格,通常分钟级,不用先搭机房。
打开 GCP Console 右上角 Cloud Shell,已带好 gcloud 和登录状态。下面不用改参数,直接复制:启用 Compute Engine、开最小练习机、打印公网 IP。这样是用真实资源理解「机器、网络、地址」,不是只看截图。
PROJECT_ID="$(gcloud config get-value project 2>/dev/null)"
if [ -z "$PROJECT_ID" ] || [ "$PROJECT_ID" = "(unset)" ]; then
echo "请先在 Cloud Shell 选择项目,再重新运行。"
else
gcloud services enable compute.googleapis.com
if ! gcloud compute instances describe gcpok-demo-vm --zone=asia-east1-b >/dev/null 2>/dev/null; then
gcloud compute instances create gcpok-demo-vm
--zone=asia-east1-b
--machine-type=e2-micro
--image-family=debian-12
--image-project=debian-cloud
--boot-disk-size=10GB
fi
gcloud compute instances describe gcpok-demo-vm
--zone=asia-east1-b
--format='get(networkInterfaces[0].accessConfigs[0].natIP)'
fi
坑:没选项目、公司项目禁用默认网络或外部 IP,都会失败,先用个人练习项目。有公网 IP 不代表网站能访问,默认没开 80/443;IP 是临时的,停止再启动可能变,固定才要静态地址,而它不绑定也可能收费;默认防火墙可能已允许 SSH 22,别用弱密码,也别把密钥写进命令。
常见运维痛点也能交给云端服务标准化:
- 流量波动:活动前加规格或实例,活动后缩回去,不按峰值常买机器。
- 备份恢复:快照、镜像、版本按固定步骤做,少靠「谁记得」。
- 监控告警:CPU、日志、错误率集中看,超阈值自动通知。
- 权限混乱:用 IAM 给最小权限,换人时好收回。
练「好扩容」可在创建成功后执行下面三行:停机、换规格、启动。为什么要停?调整机器类型要短暂关机;坑是公网 IP 可能变、e2-small 更贵,练完改回或删除。
gcloud compute instances stop gcpok-demo-vm --zone=asia-east1-b --quiet
gcloud compute instances set-machine-type gcpok-demo-vm
--zone=asia-east1-b
--machine-type=e2-small
--quiet
gcloud compute instances start gcpok-demo-vm --zone=asia-east1-b --quiet
新手最大价值是用小成本碰到真实环境:公网地址、防火墙、磁盘、日志、权限都和公司项目同一套逻辑,坏了删掉重来。练完执行清理,避免一直计费:
gcloud compute instances delete gcpok-demo-vm --zone=asia-east1-b --quiet
怎么上手:从项目到 SSH 的最短路线
这篇 GCP 教學只走最短路线:建练习项目、绑结算、设提醒,开一台小 VM,连上 SSH。项目单独放,练坏可整包删。先在控制台复制结算账号 ID,再到 Cloud Shell 整段执行:
gcloud beta billing accounts list
read -p "粘贴 BILLING_ACCOUNT_ID 后回车: " BILLING_ACCOUNT_ID
PROJECT_ID="gcp-teaching-$(date +%s)-$RANDOM"
gcloud projects create "$PROJECT_ID" --name="GCP 教学练习"
gcloud config set project "$PROJECT_ID"
gcloud beta billing projects link "$PROJECT_ID" --billing-account="$BILLING_ACCOUNT_ID"
gcloud services enable compute.googleapis.com
接着到「结算 > 预算和提醒」建预算:金额 50 元或 10 美元,阈值 50%、90%、100%,勾邮件提醒。提醒不是扣费开关,但能挡住常见意外账单:忘关机、误选 GPU/高配、留着磁盘、快照或预留静态 IP。别以为“没访问就不扣钱”。
创建 VM:控制台点「Compute Engine > VM 实例 > 创建实例」,区域/可用区用 us-west1 / us-west1-b(常见免费额度区域,后面别改),机器 e2-micro,镜像 Debian 12,10GB 标准盘;公网只留 SSH 的 22 端口,别勾 HTTP/HTTPS,做网站再开 80/443。等价命令:
RULE_NAME="allow-ssh-to-practice-vm-$(date +%s)"
gcloud compute firewall-rules create "$RULE_NAME"
--network=default
--allow=tcp:22
--source-ranges=0.0.0.0/0
--target-tags=ssh-only
for RULE in default-allow-ssh default-allow-rdp default-allow-icmp; do
gcloud compute firewall-rules describe "$RULE" >/dev/null 2>&1 && gcloud compute firewall-rules delete "$RULE" --quiet
done
gcloud compute instances create practice-vm
--zone=us-west1-b
--machine-type=e2-micro
--image-family=debian-12
--image-project=debian-cloud
--boot-disk-size=10GB
--boot-disk-type=pd-standard
--tags=ssh-only
先建规则再删默认外部规则,是为了只开必要端口又不把自己锁外面;坑是 VM 必须带 ssh-only 标签,区域一改,后面就找不到实例。
登录时第一次生成密钥,提示输 Y 即可:
gcloud compute ssh practice-vm --zone=us-west1-b
进 VM 后补安全补丁、装排错小工具、看启动和 SSH 日志,确认机器健康。升级别关窗口;日志没权限就看命令前已有 sudo:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl htop unzip
sudo journalctl -b -n 50 --no-pager
sudo journalctl -u ssh -n 50 --no-pager
回到 Cloud Shell 练快照、重启、关机。快照是改配置前的还原点;强制重启只适合练习;关机后 CPU/内存不计费,但磁盘和快照仍计费。
SNAP_NAME="practice-vm-snap-$(date +%s)"
gcloud compute disks snapshot practice-vm
--zone=us-west1-b
--snapshot-names="$SNAP_NAME"
gcloud compute instances reset practice-vm --zone=us-west1
与替代方案对比:别一上来就纠结全家桶
先别急着开数据库、负载均衡、容器平台。对比不是站队,是找最短路径:一台虚拟机、一条防火墙规则、一个预算提醒,先跑通页面,再谈全家桶。
和本地物理机相比,GCP 起步快、弹性强,不用买机器、等上架,几分钟开一台;忙时加配置,闲时关掉。但长期固定负载要算清持续费用:虚拟机、磁盘、公网 IP、出口流量按月相乘,别只盯免费额度。
和其他云厂商相比,思路相近,差别多在控制台习惯、网络产品、价格模型和中文资料体验。账号、项目、区域、网络、权限、账单都能对上;看 GCP 教學先抓共同概念,别因截图不同就换平台。
和本机虚拟机练习相比,GCP 更接近真实公网运维,外网真能访问,端口、日志、身份都像生产环境;但必须重视权限、防火墙和账单。先初始化并做只读检查,是为了看清身份、项目、开着哪些资源,避免“以为关了却还在计费”。装好 Google Cloud CLI 后复制执行:
gcloud init
gcloud config list
gcloud projects list
gcloud billing accounts list
gcloud compute instances list
gcloud compute addresses list
gcloud compute disks list
gcloud compute firewall-rules list
这些命令用来确认账号、项目、资源和放开的端口。小白常见坑:
- 找不到命令,多半是 CLI 没装或终端没重开。
- 看不到结算账号不等于没费用,可能只是权限不够;记得设预算提醒。
- 0.0.0.0/0 加全端口等于把门拆了;只放必要端口并限制来源 IP。
- 给练习账号最高权限、留着磁盘和公网 IP,月底容易收到惊喜账单。
最佳实践:先安全、再可用、最后优化
做 GCP 教學 练习,顺序别反:先锁账号,再让 VM 可观察,最后才优化。最常见的坑不是不会开机,而是图省事给所有人 Owner/Editor,或把服务账号 JSON 密钥、.env、含项目号的配置文件提交到公开仓库;这些文件会被自动扫描。请先在 Google 账号安全设置开启两步验证,练习账号只给当前需要的角色:只看资源给 Compute Viewer,要建 VM 才临时加更高权限,用完在 IAM 页面移除。复制下面命令完成登录、最小权限示例和本地忽略规则;初始化命令会让你选项目,按提示选自己的即可。
gcloud auth login
gcloud init
gcloud auth application-default login
read -r -p "输入练习账号邮箱(只查看资源):" USER_EMAIL
PROJECT_ID="$(gcloud config get-value project)"
gcloud projects add-iam-policy-binding "$PROJECT_ID" --member="user:$USER_EMAIL" --role="roles/compute.viewer"
printf '%sn' '.env' 'service-account*.json' 'credentials*.json' 'gcpok-lab.conf' | tee -a .gitignore
if git rev-parse --show-toplevel; then
git check-ignore -v .env service-account.json credentials.json gcpok-lab.conf || true
fi
接着做“可用”。下面会开一台便宜 VM,并打 env=lab、owner=beginner 标签;标签不是装饰,后面查资源、分账、批量清理都靠它。命令也安装 Ops Agent,把系统日志送进 Cloud Logging。基础 CPU 指标默认就有,系统日志不装代理常常看不到,这是小白常踩的坑。
PROJECT_ID="$(gcloud config get-value project)"
ZONE="asia-east1-b"
VM="gcpok-lab-vm"
gcloud services enable compute.googleapis.com logging.googleapis.com monitoring.googleapis.com
gcloud compute instances create "$VM" --zone="$ZONE" --machine-type=e2-micro --image-family=debian-12 --image-project=debian-cloud --labels=env=lab,owner=beginner,course=gcp
gcloud compute ssh "$VM" --zone="$ZONE" --command="sudo apt-get update; sudo apt-get install -y curl; curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh; sudo bash add-google-cloud-ops-agent-repo.sh --also-install; sudo systemctl status google-cloud-ops-agent --no-pager"
然后在控制台补三件事:「结算 > 预算和提醒」建 10 美元预算,设 50%、90%、100% 邮件提醒;「Monitoring > 告警」先加邮箱通知渠道,再建“CPU > 80% 持续 5 分钟”告警;到「Logging > 日志浏览器」按 VM 名称搜一次日志。为什么?预算和告警能把跑飞的程序、异常费用提前变成消息;只建策略不加通知渠道,等于没人收信。
快照要“能恢复”才算数。第一次执行一次下面两组命令:给默认启动盘(名字和 VM 同名)绑定每日快照计划、保留 7 天;再用快照造临时 VM,SSH 能输出 restore-ok 才说明备份有效。坑是只备份不演练、恢复盘和正式盘同名、演练 VM 忘删继续计费。
PROJECT_ID="$(gcloud config get-value project)"
ZONE="asia-east1-b"
REGION="asia-east1"
VM="gcpok-lab-vm"
DISK="$VM"
POLICY="gcpok-lab-daily-snapshot"
if ! gcloud compute resource-policies describe "$POLICY" --region="$REGION" --format="value(name)" | grep -q "$POLICY"; then
gcloud compute resource-policies create snapshot-schedule "$POLICY" --region="$REGION" --daily-schedule --start-time=03:00 --max-retention-days=7 --on-source-disk-delete=keep-auto-snapshots
fi
if ! gcloud compute disks describe "$DISK" --zone="$ZONE" --format="value(resourcePolicies)" | grep -q "$POLICY"; then
gcloud compute disks add-resource-policies "$DISK" --zone="$ZONE" --resource-policies="$POLICY"
fi
PROJECT_ID="$(gcloud config get-value project)"
ZONE="asia-east1-b"
VM="gcpok-lab-vm"
STAMP="$(date +%Y%m%d-%H%M%S)"
SNAPSHOT="$VM-snap-$STAMP"
RESTORE_DISK="$VM-restore-$STAMP"
RESTORE_VM="$VM-check-$STAMP"
gcloud compute disks snapshot "$VM" --zone="$ZONE" --snapshot-names="$SNAPSHOT"
gcloud compute disks create "$RESTORE_DISK" --zone="$ZONE" --source-snapshot="$SNAPSHOT"
gcloud compute instances create "$RESTORE_VM" --zone="$ZONE" --machine-type=e2-micro --disk="name=$RESTORE_DISK,boot=yes,mode=rw,auto-delete=no"
gcloud compute ssh "$RESTORE_VM" --zone="$ZONE" --command="echo restore-ok"
gcloud compute instances delete "$RESTORE_VM" --zone="$ZONE" --quiet
gcloud compute disks delete "$RESTORE_DISK" --zone="$ZONE" --quiet
练习结束立刻关机或删除。关机只停计算费,磁盘、快照、静态外部 IP 仍可能收费;删除后也要看清单,确认恢复点不用了再删快照。正式业务有真实流量和可用率目标后,再上多可用区、负载均衡、自动扩缩,并设最大实例数;别第一天全开,排错和账单都会变难。
PROJECT_ID="$(gcloud config get-value project)"
ZONE="asia-east1-b"
VM="gcpok-lab-vm"
read -r -p "只关机输入 s,确认删除输入 d:" ACTION
if [ "$ACTION" = "s" ]; then
gcloud compute instances stop "$VM" --zone="$ZONE"
elif [ "$ACTION" = "d" ]; then
gcloud compute instances delete "$VM" --zone="$ZONE" --quiet
gcloud compute disks list --filter="name~gcpok-lab" --format="table(name,zone,sizeGb)"
gcloud compute snapshots list --filter="name~gcpok-lab" --format="table(name,creationTimestamp,storageBytes)"
gcloud compute addresses list --filter="name~gcpok-lab" --format="table(name,region,address)"
fi
常见问题(FAQ)
完全没有 Linux 基础,能学 GCP 教学吗?
可以,先学登录、文件、权限和服务状态,再创建 VM 练习。
GCP 免费额度会不会突然扣费?
可能会;务必设置预算提醒,并确认 VM、公网地址和磁盘是否收费。
控制台和 gcloud 该先学哪个?
新手先用控制台建立直觉,再学 gcloud 批量操作和脚本化。
只开一台 VM 也要做备份吗?
要;至少做快照并验证恢复,误删文件或配置出错时能快速回滚。
不想自己折腾 GCP?我们提供云平台代维护、上云迁移与账单代付服务,一对一技术支持。
