OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  gcloud: 通过 gcloud 命令行深度管理谷歌云平台资源

gcloud: 通过 gcloud 命令行深度管理谷歌云平台资源

 
  code ·  2026-02-02 09:36:18 · 3 次点击  · 0 条评论  

名称: gcloud
描述: 通过 gcloud CLI 管理 Google Cloud Platform 资源。适用于 Compute Engine 虚拟机、Cloud Run 服务、Firebase Hosting、Cloud Storage 和项目管理。涵盖部署、监控、日志查看和 SSH 访问。


Google Cloud Platform 技能

使用 gcloudgsutilfirebase 命令行工具管理 GCP 资源。

安装

gcloud CLI(一次性设置)

# 下载并解压
cd ~ && curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-linux-x86_64.tar.gz
tar -xzf google-cloud-cli-linux-x86_64.tar.gz

# 安装(通过 .bashrc 添加到 PATH)
./google-cloud-sdk/install.sh --quiet --path-update true

# 重新加载 shell 或 source 配置文件
source ~/.bashrc

# 身份验证
gcloud auth login

Firebase CLI

npm install -g firebase-tools
firebase login

快速参考

身份验证与配置

# 列出已认证的账户
gcloud auth list

# 切换活动账户
gcloud config set account EMAIL

# 列出项目
gcloud projects list

# 设置默认项目
gcloud config set project PROJECT_ID

# 查看当前配置
gcloud config list

Compute Engine(虚拟机)

列出实例

# 跨项目的所有实例
gcloud compute instances list --project PROJECT_ID

# 指定字段显示
gcloud compute instances list --project PROJECT_ID \
  --format="table(name,zone,status,networkInterfaces[0].accessConfigs[0].natIP)"

启动/停止/重启

gcloud compute instances start INSTANCE_NAME --zone ZONE --project PROJECT_ID
gcloud compute instances stop INSTANCE_NAME --zone ZONE --project PROJECT_ID
gcloud compute instances reset INSTANCE_NAME --zone ZONE --project PROJECT_ID

SSH 访问

# 交互式 SSH
gcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID

# 远程执行命令
gcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID --command "uptime"

# 端口转发(例如本地端口转发)
gcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID -- -L 8080:localhost:8080

查看日志

# 串口输出(启动日志)
gcloud compute instances get-serial-port-output INSTANCE_NAME --zone ZONE --project PROJECT_ID

# 通过 SSH 实时查看日志
gcloud compute ssh INSTANCE_NAME --zone ZONE --project PROJECT_ID --command "journalctl -f"

Cloud Run

列出服务

# 列出指定区域的所有服务
gcloud run services list --region REGION --project PROJECT_ID

# 所有区域
gcloud run services list --project PROJECT_ID

部署

# 从源代码部署(自动构建容器)
gcloud run deploy SERVICE_NAME \
  --source . \
  --region REGION \
  --project PROJECT_ID \
  --allow-unauthenticated

# 部署现有容器镜像
gcloud run deploy SERVICE_NAME \
  --image gcr.io/PROJECT_ID/IMAGE:TAG \
  --region REGION \
  --project PROJECT_ID

查看服务详情

gcloud run services describe SERVICE_NAME --region REGION --project PROJECT_ID

查看日志

# 流式读取日志
gcloud run services logs read SERVICE_NAME --region REGION --project PROJECT_ID --limit 50

# 或使用 Cloud Logging
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE_NAME" \
  --project PROJECT_ID --limit 20 --format="table(timestamp,textPayload)"

更新环境变量

gcloud run services update SERVICE_NAME \
  --region REGION \
  --project PROJECT_ID \
  --set-env-vars "KEY1=value1,KEY2=value2"

流量管理

# 将 100% 流量路由到最新版本
gcloud run services update-traffic SERVICE_NAME --to-latest --region REGION --project PROJECT_ID

# 分流(金丝雀发布)
gcloud run services update-traffic SERVICE_NAME \
  --to-revisions=REVISION1=90,REVISION2=10 \
  --region REGION --project PROJECT_ID

Firebase Hosting

列出项目

firebase projects:list

部署

# 部署所有内容(托管 + 函数 + 规则)
firebase deploy --project PROJECT_ID

# 仅托管
firebase deploy --only hosting --project PROJECT_ID

# 特定站点(多站点设置)
firebase deploy --only hosting:SITE_NAME --project PROJECT_ID

预览频道

# 创建预览频道
firebase hosting:channel:deploy CHANNEL_NAME --project PROJECT_ID

# 列出频道
firebase hosting:channel:list --project PROJECT_ID

# 删除频道
firebase hosting:channel:delete CHANNEL_NAME --project PROJECT_ID

回滚

# 列出最近部署
firebase hosting:releases:list --project PROJECT_ID

# 回滚到特定版本
firebase hosting:rollback --project PROJECT_ID

Cloud Storage (gsutil)

# 列出存储桶
gsutil ls

# 列出内容
gsutil ls gs://BUCKET_NAME/

# 复制文件
gsutil cp LOCAL_FILE gs://BUCKET_NAME/path/
gsutil cp gs://BUCKET_NAME/path/file LOCAL_PATH

# 同步目录
gsutil -m rsync -r LOCAL_DIR gs://BUCKET_NAME/path/

# 设为公开
gsutil iam ch allUsers:objectViewer gs://BUCKET_NAME

日志与监控

Cloud Logging

# 读取最近日志
gcloud logging read "resource.type=gce_instance" --project PROJECT_ID --limit 20

# 按严重性过滤
gcloud logging read "severity>=ERROR" --project PROJECT_ID --limit 20

# 特定资源
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=my-service" \
  --project PROJECT_ID --limit 20

监控指标

# 列出可用指标
gcloud monitoring metrics list --project PROJECT_ID | head -50

# 描述指标
gcloud monitoring metrics-scopes describe projects/PROJECT_ID

计费与成本监控

查看当前成本

# 列出计费账户
gcloud billing accounts list

# 获取项目关联的计费账户
gcloud billing projects describe PROJECT_ID

# 查看成本明细(需要将账单导出到 BigQuery 或使用控制台)
# 通过已启用的 API 快速估算:
gcloud services list --enabled --project PROJECT_ID

设置预算提醒

# 创建预算(通过 gcloud beta)
gcloud billing budgets create \
  --billing-account=BILLING_ACCOUNT_ID \
  --display-name="月度预算" \
  --budget-amount=50EUR \
  --threshold-rule=percent=50 \
  --threshold-rule=percent=90 \
  --threshold-rule=percent=100

# 列出预算
gcloud billing budgets list --billing-account=BILLING_ACCOUNT_ID

# 描述预算
gcloud billing budgets describe BUDGET_ID --billing-account=BILLING_ACCOUNT_ID

成本节约技巧

# 停止未使用的虚拟机(节省费用)
gcloud compute instances stop INSTANCE_NAME --zone ZONE --project PROJECT_ID

# 安排自动启动/停止(使用 Cloud Scheduler + Cloud Functions 或 cron)

# 检查闲置资源
gcloud recommender recommendations list \
  --project=PROJECT_ID \
  --location=global \
  --recommender=google.compute.instance.IdleResourceRecommender

Secret Manager

创建与管理密钥

# 启用 API
gcloud services enable secretmanager.googleapis.com --project PROJECT_ID

# 创建密钥
echo -n "my-secret-value" | gcloud secrets create SECRET_NAME \
  --data-file=- \
  --project PROJECT_ID

# 或从文件创建
gcloud secrets create SECRET_NAME --data-file=./secret.txt --project PROJECT_ID

访问密钥

# 获取最新版本
gcloud secrets versions access latest --secret=SECRET_NAME --project PROJECT_ID

# 获取特定版本
gcloud secrets versions access 1 --secret=SECRET_NAME --project PROJECT_ID

# 列出所有密钥
gcloud secrets list --project PROJECT_ID

# 列出密钥的所有版本
gcloud secrets versions list SECRET_NAME --project PROJECT_ID

更新密钥

# 添加新版本
echo -n "new-value" | gcloud secrets versions add SECRET_NAME --data-file=- --project PROJECT_ID

# 禁用旧版本
gcloud secrets versions disable VERSION_ID --secret=SECRET_NAME --project PROJECT_ID

# 删除版本(永久删除!)
gcloud secrets versions destroy VERSION_ID --secret=SECRET_NAME --project PROJECT_ID

在 Cloud Run 中使用

# 将密钥作为环境变量部署
gcloud run deploy SERVICE_NAME \
  --image IMAGE \
  --region REGION \
  --project PROJECT_ID \
  --set-secrets="ENV_VAR_NAME=SECRET_NAME:latest"

# 挂载为文件
gcloud run deploy SERVICE_NAME \
  --image IMAGE \
  --region REGION \
  --project PROJECT_ID \
  --set-secrets="/path/to/secret=SECRET_NAME:latest"

Artifact Registry(容器镜像)

设置

# 启用 API
gcloud services enable artifactregistry.googleapis.com --project PROJECT_ID

# 创建 Docker 仓库
gcloud artifacts repositories create REPO_NAME \
  --repository-format=docker \
  --location=REGION \
  --project PROJECT_ID \
  --description="Docker 镜像"

配置 Docker 认证

# 配置 Docker 使用 gcloud 凭据
gcloud auth configure-docker REGION-docker.pkg.dev

构建与推送镜像

# 使用 Cloud Build 构建(无需本地 Docker)
gcloud builds submit --tag REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE:TAG

# 或使用本地 Docker
docker build -t REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE:TAG .
docker push REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE:TAG

列出与管理镜像

# 列出镜像
gcloud artifacts docker images list REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME

# 列出镜像的标签
gcloud artifacts docker tags list REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE

# 删除镜像
gcloud artifacts docker images delete REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE:TAG

Cloud SQL(数据库)

创建实例

# 启用 API
gcloud services enable sqladmin.googleapis.com --project PROJECT_ID

# 创建 PostgreSQL 实例
gcloud sql instances create INSTANCE_NAME \
  --database-version=POSTGRES_15 \
  --tier=db-f1-micro \
  --region=REGION \
  --project PROJECT_ID

# 创建 MySQL 实例
gcloud sql instances create INSTANCE_NAME \
  --database-version=MYSQL_8_0 \
  --tier=db-f1-micro \
  --region=REGION \
  --project PROJECT_ID

管理数据库与用户

# 创建数据库
gcloud sql databases create DB_NAME --instance=INSTANCE_NAME --project PROJECT_ID

# 列出数据库
gcloud sql databases list --instance=INSTANCE_NAME --project PROJECT_ID

# 创建用户
gcloud sql users create USERNAME \
  --instance=INSTANCE_NAME \
  --password=PASSWORD \
  --project PROJECT_ID

# 列出用户
gcloud sql users list --instance=INSTANCE_NAME --project PROJECT_ID

连接

# 通过 Cloud SQL 代理连接(推荐)
# 首先,下载代理:https://cloud.google.com/sql/docs/mysql/sql-proxy

# 直接连接(需要公网 IP 和授权网络)
gcloud sql connect INSTANCE_NAME --user=USERNAME --project PROJECT_ID

# 获取连接信息
gcloud sql instances describe INSTANCE_NAME --project PROJECT_ID \
  --format="value(connectionName)"

备份

# 创建按需备份
gcloud sql backups create --instance=INSTANCE_NAME --project PROJECT_ID

# 列出备份
gcloud sql backups list --instance=INSTANCE_NAME --project PROJECT_ID

# 从备份恢复
gcloud sql backups restore BACKUP_ID --restore-instance=INSTANCE_NAME --project PROJECT_ID

从 Cloud Run 连接

# 部署时连接 Cloud SQL
gcloud run deploy SERVICE_NAME \
  --image IMAGE \
  --region REGION \
  --project PROJECT_ID \
  --add-cloudsql-instances=PROJECT_ID:REGION:INSTANCE_NAME \
  --set-env-vars="DB_HOST=/cloudsql/PROJECT_ID:REGION:INSTANCE_NAME"

故障排除

"API 未启用"

# 启用 API
gcloud services enable run.googleapis.com --project PROJECT_ID
gcloud services enable compute.googleapis.com --project PROJECT_ID

"权限被拒绝"

# 检查 IAM 角色
gcloud projects get-iam-policy PROJECT_ID --flatten="bindings[].members" \
  --format="table(bindings.role)" --filter="bindings.members:EMAIL"

"未认证"

gcloud auth login
gcloud auth application-default login  # 用于应用程序默认凭据(库使用)

刷新凭据

gcloud auth login --force
3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor