+86 189 8218 1436 周一至五 10:00-22:00

Google Cloud Platform (GCP)基础

TL;DR:用小白能懂的方式梳理 GCP 项目、权限、计费与核心服务,并带你完成 VM 创建、SSH 连接和基础运维检查。

它是什么

一句话:GCP基础就是把计算、存储、网络、数据库、监控等能力按需放到云上,用户按“项目”组织资源,用多少开多少、按账单付钱。

先别急着开 VM。结算账号像信用卡,可给多个项目付款;项目是资源盒子,权限、配额、费用和 API 开关都围着它转,VM、存储桶、

解决什么问题

学 Google Cloud Platform (GCP)基础,别先理解成“买一台云主机”。它先解决试错成本:以前做网站要买服务器、装系统、找地方放;现在不用先买物理服务器,在控制台顶部选好项目(没有就按引导建一个),打开 Cloud Shell,按需求创建或释放 VM,练完删掉即可,不用为一次想法先掏硬件钱。

先复制下面命令,确认账号和项目,开启常用服务,并看看可选区域:

gcloud auth list
gcloud config list project
gcloud services enable compute.googleapis.com logging.googleapis.com monitoring.googleapis.com bigquery.googleapis.com
gcloud compute regions list --format="table(name,status)"

为什么:项目像一个文件夹,资源都记在里面,权限、账单、监控才不会乱。坑是没看清项目,把机器建到别的项目;或没绑定结算、没开 API,以为命令错了。若输出里没显示 project,先回顶部切换,并按提示绑定结算账号。

再体验“随用随建、用完释放”:

VM="gcp-basic-$(date +%s)-$RANDOM"
ZONE="asia-east1-b"
gcloud compute instances create "${VM}" --zone="${ZONE}" --machine-type=e2-micro --image-family=debian-12 --image-project=debian-cloud
gcloud compute instances list
gcloud compute instances delete "${VM}" --zone="${ZONE}" --quiet

为什么:创建命令只申请临时练习机,删除命令把计算资源还回去,适合验证配置或跑一次脚本。坑是“停止”不等于完全不花钱,磁盘、静态 IP 可能继续计费;创建和删除的 zone 要一致;删除后系统盘通常不可恢复,重要数据先备份。若提示配额不足,换区域或让管理员提额。

它还解决“东西太散”:网站放 VM 或 Cloud Run,备份放 Cloud Storage,日志进 Cloud Logging,数据分析放 BigQuery,但都在同一项目里,用同一套权限、计费、监控体系管谁能看谁能改、看花费、看指标和告警。

最后,多区域和托管服务能减少单机故障、扩容搬机、人工巡检压力:平台处理副本、容量和基础巡检,少做搬机、加硬盘、半夜看磁盘的活。坑是多区域不等于一台 VM 自动高可用,真做高可用网站还要负载均衡或多实例;托管服务也收费,权限别图省事全开。

怎么上手

第一步:先把“钱袋子”和权限收好。项目可以理解成一个盒子,后面所有 VM、权限、账单都装在里面;先建项目,练习完删项目就能一次清干净。结算账号决定谁付钱,不绑定通常开不了 Compute Engine。先确认已有结算账号,没有就去控制台「结算」创建;有多个结算账号时,下面命令会取第一个,别绑错。

gcloud auth login
PROJECT_ID="gcp-basic-$(date +%s)"
gcloud projects create "$PROJECT_ID" --name="GCP 基础练习"
gcloud config set project "$PROJECT_ID"
BILLING_ACCOUNT_ID="$(gcloud billing accounts list --format='value(name)' | sed 's#billingAccounts/##' | head -n 1)"
if [ -z "$BILLING_ACCOUNT_ID" ]; then
  echo "请先在控制台「结算」创建结算账号,再重新执行本段"
else
  gcloud billing projects link "$PROJECT_ID" --billing-account="$BILLING_ACCOUNT_ID"
  gcloud services enable iam.googleapis.com compute.googleapis.com logging.googleapis.com monitoring.googleapis.com
  gcloud iam service-accounts create beginner-reader --display-name="只读练习账号"
  gcloud projects add-iam-policy-binding "$PROJECT_ID" --member="serviceAccount:beginner-reader@$PROJECT_ID.iam.gserviceaccount.com" --role="roles/viewer"
fi

接着在控制台「结算 → 预算和提醒 → 创建预算」,范围选刚建的项目,金额填一个能接受的小额,例如 50(按结算币种),阈值设 50%、90%、100%,收件人填自己邮箱。再到「IAM 与管理 → IAM」给同伴只加 Viewer。这样是为了先有提醒和最小权限。坑:项目 ID 全球唯一,所以命令自动加时间戳;预算提醒只是发邮件,不会自动停机;别把 Owner 或服务账号密钥随便发人。

第二步:在控制台开一台最小规格 VM。进入「Compute Engine → VM 实例 → 创建实例」,名称随意,区域选离自己近的 asia-east1,可用区选 asia-east1-b;机器类型选 E2 系列的 e2-micro,启动磁盘 10GB;系统镜像选官方 Debian 12。区域近一点延迟低,镜像用官方版少踩依赖坑,最小规格最省钱。防火墙只勾「允许 HTTP 流量」,并确认默认 SSH 规则存在,也就是只放行 22 和 80,别开全部端口。创建后点实例右侧的「SSH」按钮登录。坑:别顺手选 GPU 或高配;区域选错后迁移麻烦;浏览器拦截弹窗会让你以为连不上,连不上先看 VM 状态和 22 端口规则。

第三步:把同一套动作再用命令行工具做一遍。好处是以后能复制、能复盘,不用记菜单。下面会先删同名练习资源,方便反复练;别把名字改成正式业务机器。

PROJECT_ID="$(gcloud config get-value project)"
gcloud config set project "$PROJECT_ID"
ZONE="asia-east1-b"
gcloud compute instances delete gcp-basic-cli --zone="$ZONE" --quiet 2>/dev/null || true
gcloud compute firewall-rules delete allow-beginner-ssh-http --quiet 2>/dev/null || true
gcloud compute firewall-rules create allow-beginner-ssh-http --allow=tcp:22,tcp:80 --target-tags=beginner-web --description="练习用:只放行 SSH 和 HTTP"
gcloud compute instances create gcp-basic-cli --zone="$ZONE" --machine-type=e2-micro --image-family=debian-12 --image-project=debian-cloud --boot-disk-size=10GB --tags=beginner-web
gcloud compute instances list
gcloud compute instances describe gcp-basic-cli --zone="$ZONE"
gcloud logging read 'resource.type="gce_instance"' --limit=10 --format="table(timestamp,textPayload)"
gcloud compute instances stop gcp-basic-cli --zone="$ZONE"

这里已经完成创建、查看、读日志和关机。再去控制台「监控 → Metrics Explorer」看 CPU 利用率,「日志浏览器」看系统日志,「结算 → 账单报告」按项目和 SKU 看钱花在哪。这三处分别回答:机器忙不忙、发生过什么、花了多少钱。坑:关机不等于不花钱,磁盘和预留公网 IP 仍可能计费;同名资源重复创建会报错,所以命令先删练习用同名资源;练习完在控制台删除实例和磁盘最干净。

与替代方案对比

和自建服务器比,GCP 最明显的是上线快、弹性强:不用买机器、装系统、拉宽带,控制台点几下就能开 VM;流量涨了换规格、加磁盘或加负载均衡,闲了再缩回去。代价是云上把“一台服务器”拆成很多计费项,还要理解 IAM 权限、VPC、子网和防火墙规则。小白常踩的坑是:机器能开机,不代表网站能访问;端口没放行、权限没给、项目或计费账号选错,都会卡住。

和其他云厂商比,核心概念很相近:计算、硬盘、对象存储、数据库、网络、权限都是同一套积木;GCP 的 Compute Engine 大致就是别家的云主机,Cloud Storage 大致就是对象存储。差异主要在控制台习惯、产品命名、默认网络、防火墙写法、免费额度和价格模型,尤其是出网流量、磁盘和折扣算法。别把别家教程里的“安全组”等词硬套到 GCP,先找 VPC 网络和防火墙规则。

和本地虚拟机比,VirtualBox、VMware 适合离线练习;云上 VM 有区域、公网 IP 和团队访问能力,更适合远程协作和对外服务。但长期 24 小时开机不一定便宜,要按规格、开机时长、磁盘、快照、静态 IP、日志和出网流量核算,最好用价格计算器按真实用量估一遍。

先按官方安装页装好 Google Cloud CLI,再打开终端。先单独复制下面这行完成登录和选项目,等它结束再复制第二组;因为 gcloud init 会交互提问,不要和后面几行一起粘,免得后续命令被当成回答吃掉。

gcloud init

接着做一次只读体检:确认账号和项目,再看已有 VM、防火墙和计费账号。为什么这么做?因为云上“能运行”“能访问”“谁付钱”是三件事;这些命令不会创建资源,比较安全。

gcloud config list
gcloud projects list
gcloud compute instances list
gcloud compute firewall-rules list
gcloud billing accounts list
  • 坑一:gcloud init 不要一路回车,选错项目会以为资源消失;执行后先看 config list 里的 project。
  • 坑二:列表为空或提示权限不足、API 未启用,不一定是命令错,也可能是项目选错、Compute Engine API 没开,或没拿到只读权限。
  • 坑三:公网服务只开放必要端口,例如网站用 80/443;别把 SSH 的 22 端口对全网开放。
  • 坑四:关机不等于全免费,磁盘、静态 IP、快照、NAT、日志可能继续计费;练习完删除资源,长期项目按月复核用量。

最佳实践

刚学 Google Cloud Platform (GCP)基础 时,别把云主机当“随便开的大电脑”。先打开控制台右上角的 Cloud Shell,若提示授权就点授权,并确认已选好项目。按最小成本做实验:选 e2-micro 这类小规格,给每台 VM 写清标签、用途说明和自动关机时间。这样月底账单、资源列表和同事协作都看得懂;以后每开一台都套这个模板,只改名字和用途。下面命令可直接复制,系统定时关机是最简策略,不用一上来研究复杂调度服务:

ZONE=asia-east1-b
gcloud compute instances create gcp-basics-lab 
  --zone="$ZONE" 
  --machine-type=e2-micro 
  --image-family=debian-12 
  --image-project=debian-cloud 
  --labels=env=test,owner=beginner,purpose=lab 
  --description="GCP基础练习机,测试后删除" 
  --metadata=startup-script='#!/bin/bash
echo "0 15 * * * root /sbin/shutdown -h now" > /etc/cron.d/auto-stop
'

这里的 UTC 15:00 相当于北京时间 23:00,VM 默认按 UTC 看时间,别把 23 直接写进去,那会变成北京时间早上 7 点关机。练完再执行清理;如果接着做下面的上线前演练,先别删:

ZONE=asia-east1-b
gcloud compute instances delete gcp-basics-lab --zone="$ZONE" --quiet

权限也要“够用就好”。日常账号只保留 Viewer 或按岗位授权,不要为了省事给自己 Owner、Editor;程序用服务账号,只给当前需要的一个角色,不够再加。原因是高权限或密钥一旦泄露,别人可能花你的钱、删你的资源。不要创建、下载或提交 JSON 密钥,本机用 ADC 或临时模拟服务账号即可;下面命令会建一个只写日志的低权限账号,并给仓库加忽略规则、检查疑似密钥文件:

PROJECT_ID=$(gcloud config get-value project 2>/dev/null)
ACCOUNT=$(gcloud config get-value account 2>/dev/null)
SA="gcp-basics-app@$PROJECT_ID.iam.gserviceaccount.com"
gcloud iam service-accounts describe "$SA" || 
  gcloud iam service-accounts create gcp-basics-app 
    --display-name="GCP基础练习账号"
gcloud projects add-iam-policy-binding "$PROJECT_ID" 
  --member="serviceAccount:$SA" 
  --role="roles/logging.logWriter"
gcloud iam service-accounts add-iam-policy-binding "$SA" 
  --member="user:$ACCOUNT" 
  --role="roles/iam.serviceAccountUser"
printf 'n# 不要提交 GCP 服务账号密钥n*service-account*.jsonn*credentials*.jsonn' >> .gitignore
find . -maxdepth 3 -type f ( -name "*service-account*.json" -o -name "*credentials*.json" ) -print

上线前按这个清单走一遍:

  1. 在控制台搜索“预算和提醒”:新建预算,范围选当前项目,金额填能接受的上限,提醒阈值设 50%、80%、100%,通知邮箱填常用邮箱。
  2. 在“监控→提醒”建一条 CPU 使用率超过 80% 且持续 5 分钟的告警,并绑定同一邮箱;预算邮件不是故障告警,别互相替代。
  3. 执行下面命令,把默认日志桶改成 30 天留存,配置每天快照、做一次恢复演练,并写运维记录。若练习机已删,重新执行前面的创建命令即可。
PROJECT_ID=$(gcloud config get-value project 2>/dev/null)
ZONE=asia-east1-b
REGION=asia-east1
gcloud logging buckets update _Default --location=global --retention-days=30
gcloud compute resource-policies describe gcp-basics-daily-snapshot --region="$REGION" || 
  gcloud compute resource-policies create snapshot-schedule gcp-basics-daily-snapshot 
    --region="$REGION" 
    --daily-schedule 
    --start-time=23:00 
    --max-retention-days=7
gcloud compute disks add-resource-policies gcp-basics-lab 
  --zone="$ZONE" 
  --resource-policies="projects/$PROJECT_ID/regions/$REGION/resourcePolicies/gcp-basics-daily-snapshot"
STAMP=$(date +%Y%m%d%H%M%S)
SNAPSHOT="gcp-basics-restore-$STAMP"
RESTORE_DISK="gcp-basics-restore-test-$STAMP"
gcloud compute disks snapshot gcp-basics-lab 
  --zone="$ZONE" 
  --snapshot-names="$SNAPSHOT"
gcloud compute disks create "$RESTORE_DISK" 
  --zone="$ZONE" 
  --source-snapshot="$SNAPSHOT"
gcloud compute disks delete "$RESTORE_DISK" --zone="$ZONE" --quiet
gcloud compute snapshots delete "$SNAPSHOT" --quiet
printf '%s 项目=%s 操作=上线前检查:预算提醒、CPU告警、日志30天、快照恢复演练、清理测试盘完成n' "$(date -Is)" "$PROJECT_ID" >> gcp-basics-ops.log
  • 小白容易踩的坑:开完机忘了删,或把测试机叫 test-1,几天后谁也不知道能不能关;静态 IP、磁盘、快照没删也可能继续计费。
  • 把密钥文件删了不等于安全,Git 历史里还在,必须立刻在 IAM 删除该密钥并轮换。
  • 日志默认不是永久保存;只备份不恢复,真出事才发现快照不可用;运维记录靠记忆会漏,至少写清谁在什么时候改了什么、为什么改、怎么回滚。
  • 命令里的时间按 UTC 理解;重复执行提示已存在,通常说明已经配好,别删掉重建。

常见问题(FAQ)

学 GCP基础一定要会命令行吗?

不一定要精通,但会看目录、权限、进程和日志,操作 VM 会更顺手。

新手最容易忽略哪项设置?

先设预算提醒和最小权限,避免测试后产生意外费用。

控制台和 gcloud 该先用哪个?

先用控制台理解流程,再把重复操作交给 gcloud 命令。

GCP 免费额度能练手吗?

可以,但要看适用区域、机型和有效期,并定期检查账单。

不想自己折腾 GCP?我们提供云平台代维护、上云迁移与账单代付服务,一对一技术支持。

查看代维服务 →

发表评论