name: gcloud description: 实现 Google Cloud SDK (gcloud CLI) 的指南 - 一个用于管理 Google Cloud 资源的命令行工具。在安装/配置 gcloud、与 Google Cloud 认证、管理项目/配置、部署应用程序、使用 Compute Engine/GKE/App Engine/Cloud Storage、编写 gcloud 操作脚本、实施 CI/CD 流水线或故障排除 Google Cloud 部署时使用。
Google Cloud SDK (gcloud) 技能
全面指南,用于使用 Google Cloud SDK (gcloud CLI) - 主要命令行界面,用于与 Google Cloud Platform 服务交互、管理资源和自动化云操作。
何时使用此技能
在以下情况下使用此技能:
- 安装和配置 Google Cloud SDK
- 与 Google Cloud 认证(用户账户、服务账户、ADC)
- 初始化 gcloud 并设置项目/配置
- 管理多个 Google Cloud 项目和环境
- 部署应用到 GCP(Compute Engine、GKE、App Engine、Cloud Run)
- 使用 Cloud Storage、数据库和其他 GCP 服务
- 编写 gcloud 命令脚本以进行自动化和 CI/CD 流水线
- 故障排除认证、授权或部署问题
- 优化 gcloud 命令性能和输出格式
- 实施云操作的安全最佳实践
核心概念
gcloud CLI
架构:
- 命令结构:
gcloud + [发布级别] + 组件 + 实体 + 操作 + [参数] + [标志] - 发布级别: alpha、beta、GA(通用可用性)
- 组件: compute、container、app、sql、iam、config、auth、storage 等
- 全局标志:
--project、--format、--filter、--quiet、--verbosity
关键特性:
- 100 多个 Google Cloud 服务的统一 CLI
- 所有服务的一致命令模式
- 丰富的输出格式(JSON、YAML、CSV、表格)
- 内置过滤和服务器端查询优化
- 用于自动化的交互式和非交互式模式
认证 vs 授权
认证(你是谁):
- 用户账户(开发人员、管理员)
- 服务账户(应用程序、自动化)
- 应用程序默认凭证(ADC)
- OAuth 2.0、API 密钥、工作负载/工作身份联盟
授权(你能做什么):
- IAM 角色和权限
- 服务账户模拟
- 资源级访问控制
配置管理
命名配置:
- 用于不同环境的多个配置配置文件
- 每个配置存储:账户、项目、区域、区域和其他属性
- 即时切换配置
属性:
- 7 个类别中的 50 多个可配置属性
- 优先级:CLI 标志 > 环境变量 > 配置文件 > 默认值
I. 安装与设置
A. 安装方法
Linux(存档安装)
# 下载(选择架构)
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-linux-x86_64.tar.gz
# 提取
tar -xf google-cloud-cli-linux-x86_64.tar.gz
# 安装
./google-cloud-sdk/install.sh
# 初始化
./google-cloud-sdk/bin/gcloud init
Debian/Ubuntu(包管理器)
# 添加仓库
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
# 导入密钥
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
# 安装
sudo apt-get update && sudo apt-get install google-cloud-cli
macOS
# 下载安装程序
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-darwin-arm.tar.gz
# 提取并安装
tar -xf google-cloud-cli-darwin-arm.tar.gz
./google-cloud-sdk/install.sh
Windows
# 从 https://cloud.google.com/sdk/docs/install 下载安装程序
# 运行 GoogleCloudSDKInstaller.exe
# 按照安装向导操作
B. 初始化
# 交互式设置(推荐首次使用)
gcloud init
# 它做什么:
# 1. 打开浏览器进行 OAuth 认证
# 2. 选择或创建项目
# 3. 设置默认配置(区域、区域)
# 4. 存储凭证
# 非交互式(CI/CD 环境)
gcloud auth activate-service-account --key-file=key.json
gcloud config set project PROJECT_ID
gcloud config set compute/region us-central1
gcloud config set compute/zone us-central1-a
C. 组件
# 列出可用组件
gcloud components list
# 安装额外组件
gcloud components install kubectl # Kubernetes CLI
gcloud components install app-engine-python # App Engine
gcloud components install cloud-sql-proxy # Cloud SQL 代理
gcloud components install pubsub-emulator # Pub/Sub 模拟器
# 更新所有组件
gcloud components update
# 移除组件
gcloud components remove COMPONENT_ID
核心组件(默认安装):
gcloud- 主 CLIgsutil- Cloud Storage 工具bq- BigQuery CLIcore- 核心库
II. 认证与授权
A. 认证方法
1. 用户账户(OAuth 2.0)
# 使用浏览器登录
gcloud auth login
# 无浏览器登录(远程/无头)
gcloud auth login --no-browser
# 使用特定账户登录
gcloud auth login user@example.com
# 列出已认证账户
gcloud auth list
# 切换活动账户
gcloud config set account user@example.com
# 撤销凭证
gcloud auth revoke user@example.com
2. 服务账户
# 使用密钥文件激活服务账户
gcloud auth activate-service-account SA_EMAIL --key-file=path/to/key.json
# 创建服务账户
gcloud iam service-accounts create SA_NAME \
--display-name="服务账户显示名称"
# 创建并下载密钥
gcloud iam service-accounts keys create key.json \
--iam-account=SA_EMAIL
# 授予 IAM 角色
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SA_EMAIL" \
--role="roles/compute.admin"
3. 应用程序默认凭证(ADC)
# 为客户端库设置 ADC
gcloud auth application-default login
# 使用服务账户模拟设置 ADC
gcloud auth application-default login \
--impersonate-service-account=SA_EMAIL
# 撤销 ADC
gcloud auth application-default revoke
# ADC 搜索顺序:
# 1. GOOGLE_APPLICATION_CREDENTIALS 环境变量
# 2. ~/.config/gcloud/application_default_credentials.json
# 3. 元数据服务器(在 GCP 资源上)
4. 服务账户模拟(推荐用于生产)
# 为单个命令模拟
gcloud compute instances list \
--impersonate-service-account=SA_EMAIL
# 设置默认模拟
gcloud config set auth/impersonate_service_account SA_EMAIL
# 验证模拟
gcloud config get-value auth/impersonate_service_account
# 清除模拟
gcloud config unset auth/impersonate_service_account
为什么模拟?
- 短期临时凭证(无持久密钥风险)
- 无需分发服务账户密钥
- 集中权限管理
- 易于审计和轮换
B. 配置配置文件
创建和管理配置
# 创建新配置
gcloud config configurations create dev
# 列出所有配置
gcloud config configurations list
# 激活配置
gcloud config configurations activate dev
# 为单个命令切换配置
gcloud compute instances list --configuration=prod
# 设置属性
gcloud config set project my-project-dev
gcloud config set compute/region us-central1
gcloud config set compute/zone us-central1-a
# 查看所有属性
gcloud config list
# 取消设置属性
gcloud config unset compute/zone
# 删除配置
gcloud config configurations delete dev
多环境模式
# 开发环境
gcloud config configurations create dev
gcloud config set project my-project-dev
gcloud config set account dev@example.com
gcloud config set compute/region us-central1
# 暂存环境
gcloud config configurations create staging
gcloud config set project my-project-staging
gcloud config set auth/impersonate_service_account staging-sa@project.iam.gserviceaccount.com
# 生产环境
gcloud config configurations create prod
gcloud config set project my-project-prod
gcloud config set auth/impersonate_service_account prod-sa@project.iam.gserviceaccount.com
# 切换环境
gcloud config configurations activate dev
gcloud config configurations activate prod
III. 常见工作流
A. 项目管理
# 列出项目
gcloud projects list
# 创建项目
gcloud projects create PROJECT_ID --name="项目名称"
# 设置活动项目
gcloud config set project PROJECT_ID
# 获取当前项目
gcloud config get-value project
# 启用 API
gcloud services enable compute.googleapis.com
gcloud services enable container.googleapis.com
# 列出已启用 API
gcloud services list
# 描述项目
gcloud projects describe PROJECT_ID
B. Compute Engine
# 列出实例
gcloud compute instances list
# 创建实例
gcloud compute instances create my-instance \
--zone=us-central1-a \
--machine-type=e2-medium \
--image-family=debian-11 \
--image-project=debian-cloud \
--boot-disk-size=10GB
# SSH 进入实例
gcloud compute ssh my-instance --zone=us-central1-a
# 复制文件
gcloud compute scp local-file.txt my-instance:~/remote-file.txt \
--zone=us-central1-a
# 停止实例
gcloud compute instances stop my-instance --zone=us-central1-a
# 删除实例
gcloud compute instances delete my-instance --zone=us-central1-a
C. Google Kubernetes Engine (GKE)
# 创建集群
gcloud container clusters create my-cluster \
--zone=us-central1-a \
--num-nodes=3 \
--machine-type=e2-medium
# 获取集群凭证
gcloud container clusters get-credentials my-cluster --zone=us-central1-a
# 列出集群
gcloud container clusters list
# 调整集群大小
gcloud container clusters resize my-cluster \
--num-nodes=5 \
--zone=us-central1-a
# 删除集群
gcloud container clusters delete my-cluster --zone=us-central1-a
D. Cloud Storage
# 创建桶
gsutil mb gs://my-bucket-name
# 上传文件
gsutil cp local-file.txt gs://my-bucket-name/
# 下载文件
gsutil cp gs://my-bucket-name/file.txt ./
# 列出桶内容
gsutil ls gs://my-bucket-name/
# 同步目录
gsutil rsync -r ./local-dir gs://my-bucket-name/remote-dir
# 设置桶权限
gsutil iam ch user:user@example.com:objectViewer gs://my-bucket-name
# 删除桶
gsutil rm -r gs://my-bucket-name
E. App Engine
# 部署应用程序
gcloud app deploy app.yaml
# 查看应用程序
gcloud app browse
# 查看日志
gcloud app logs tail
# 列出版本
gcloud app versions list
# 删除版本
gcloud app versions delete VERSION_ID
# 设置流量分割
gcloud app services set-traffic SERVICE \
--splits v1=0.5,v2=0.5
F. Cloud Run
# 部署容器
gcloud run deploy my-service \
--image=gcr.io/PROJECT_ID/my-image:tag \
--platform=managed \
--region=us-central1 \
--allow-unauthenticated
# 列出服务
gcloud run services list
# 描述服务
gcloud run services describe my-service --region=us-central1
# 删除服务
gcloud run services delete my-service --region=us-central1
IV. 脚本编写与自动化
A. 输出格式
# JSON(推荐用于脚本编写)
gcloud compute instances list --format=json
# YAML
gcloud compute instances list --format=yaml
# CSV
gcloud compute instances list --format="csv(name,zone,status)"
# 表格(默认)
gcloud compute instances list --format=table
# 值(单个字段提取)
gcloud config get-value project --format="value()"
# 自定义格式
gcloud compute instances list \
--format="table(name,zone,machineType,status)"
B. 过滤
# 服务器端过滤(更高效)
gcloud compute instances list --filter="zone:us-central1-a"
gcloud compute instances list --filter="status=RUNNING"
gcloud compute instances list --filter="name~^web-.*"
# 多条件
gcloud compute instances list \
--filter="zone:us-central1 AND status=RUNNING"
# 否定
gcloud compute instances list --filter="NOT status=TERMINATED"
# 复杂表达式
gcloud compute instances list \
--filter="(status=RUNNING OR status=STOPPING) AND zone:us-central1"
C. 错误处理
#!/bin/bash
# 简单错误检查
if ! gcloud compute instances create my-instance; then
echo "创建实例失败"
exit 1
fi
# 捕获退出代码
gcloud compute instances describe my-instance
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo "实例未找到或发生错误"
exit $EXIT_CODE
fi
# 捕获 stderr
ERROR_OUTPUT=$(gcloud compute instances create my-instance 2>&1)
if [ $? -ne 0 ]; then
echo "错误:$ERROR_OUTPUT"
exit 1
fi
# 创建前验证(幂等模式)
if ! gcloud compute instances describe my-instance &>/dev/null; then
gcloud compute instances create my-instance
else
echo "实例已存在,跳过创建"
fi
D. 重试逻辑
#!/bin/bash
MAX_RETRIES=5
RETRY_DELAY=5
for i in $(seq 1 $MAX_RETRIES); do
if gcloud compute instances create my-instance; then
echo "实例创建成功"
exit 0
else
echo "尝试 $i 失败,${RETRY_DELAY}s 后重试..."
sleep $RETRY_DELAY
RETRY_DELAY=$((RETRY_DELAY * 2)) # 指数回退
fi
done
echo "$MAX_RETRIES 次尝试后失败"
exit 1
E. 批量操作
#!/bin/bash
# 并行实例创建
INSTANCES=("web-1" "web-2" "web-3")
for instance in "${INSTANCES[@]}"; do
gcloud compute instances create "$instance" \
--zone=us-central1-a \
--machine-type=e2-medium \
--async # 在后台运行
done
# 等待所有操作完成
gcloud compute operations list --filter="status=RUNNING" \
--format="value(name)" | while read op; do
gcloud compute operations wait "$op" --zone=us-central1-a
done
echo "所有实例已创建"
F. CI/CD 集成
GitHub Actions
name: 部署到 GCP
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- id: auth
uses: google-github-actions/auth@v1
with:
credentials_json: ${{ secrets.GCP_SA_KEY }}
- name: 设置 Cloud SDK
uses: google-github-actions/setup-gcloud@v1
- name: 部署到 Cloud Run
run: |
gcloud run deploy my-service \
--image=gcr.io/${{ secrets.GCP_PROJECT_ID }}/my-image:${{ github.sha }} \
--region=us-central1 \
--platform=managed
GitLab CI
deploy:
image: google/cloud-sdk:alpine
script:
- echo $GCP_SA_KEY | base64 -d > key.json
- gcloud auth activate-service-account --key-file=key.json
- gcloud config set project $GCP_PROJECT_ID
- gcloud app deploy
only:
- main
V. 最佳实践
A. 安全
1. 永不提交凭证
# 添加到 .gitignore
echo "key.json" >> .gitignore
echo ".config/gcloud/" >> .gitignore
echo "application_default_credentials.json" >> .gitignore
2. 使用服务账户模拟
# 优先模拟而非密钥文件
gcloud config set auth/impersonate_service_account SA_EMAIL
# 不推荐:gcloud auth activate-service-account --key-file=key.json
3. 最小权限原则
# 授予最小必需角色
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:SA_EMAIL" \
--role="roles/compute.instanceAdmin.v1" # 特定角色,非 "owner"
4. 定期轮换密钥
# 创建新密钥
gcloud iam service-accounts keys create new-key.json \
--iam-account=SA_EMAIL
# 删除旧密钥
gcloud iam service-accounts keys delete KEY_ID \
--iam-account=SA_EMAIL
B. 性能
1. 使用服务器端过滤
# 好:在服务器上过滤
gcloud compute instances list --filter="zone:us-central1"
# 差:本地使用 grep 过滤
gcloud compute instances list | grep us-central1
2. 限制输出
# 只获取所需内容
gcloud compute instances list --limit=10
# 仅投影所需字段
gcloud compute instances list --format="value(name,zone)"
3. 批量操作
# 使用 --async 进行并行操作
gcloud compute instances create instance-1 --async
gcloud compute instances create instance-2 --async
gcloud compute instances create instance-3 --async
C. 可维护性
1. 使用命名配置
# 分离开发/暂存/生产配置
gcloud config configurations create dev
gcloud config configurations create prod
2. 记录命令
#!/bin/bash
# 目的:部署应用到 Cloud Run
# 用法:./deploy.sh [环境]
# 示例:./deploy.sh production
ENV=${1:-staging}
gcloud config configurations activate "$ENV"
gcloud run deploy my-service --image=gcr.io/project/image:latest
3. 使用环境变量
# 使脚本可移植
PROJECT_ID=${GCP_PROJECT_ID:-default-project}
REGION=${GCP_REGION:-us-central1}
gcloud config set project "$PROJECT_ID"
gcloud config set compute/region "$REGION"
D. 监控与日志
# 启用审计日志
gcloud logging read "resource.type=gce_instance" \
--limit=10 \
--format=json
# 跟踪命令历史
gcloud info --show-log
# 调试的详细输出
gcloud compute instances create my-instance --verbosity=debug
VI. 故障排除
常见问题
1. 认证失败
# 检查当前认证
gcloud auth list
# 验证凭证
gcloud auth application-default print-access-token
# 重新认证
gcloud auth login
gcloud auth application-default login
2. 权限被拒绝
# 检查 IAM 权限
gcloud projects get-iam-policy PROJECT_ID \
--flatten="bindings[].members" \
--filter="bindings.members:user@example.com"
# 检查服务账户权限
gcloud iam service-accounts get-iam-policy SA_EMAIL
3. 配额超出
# 检查配额使用
gcloud compute project-info describe --project=PROJECT_ID
# 通过 Cloud Console 请求配额增加
4. 网络问题
# 检查连接性
gcloud info
# 使用代理
gcloud config set proxy/type http
gcloud config set proxy/address PROXY_HOST
gcloud config set proxy/port PROXY_PORT
5. 配置问题
# 查看当前配置
gcloud config list
# 重置配置
gcloud config configurations delete default
gcloud init
VII. 快速参考
基本命令
| 任务 | 命令 |
|---|---|
| 初始化 gcloud | gcloud init |
| 登录 | gcloud auth login |
| 设置项目 | gcloud config set project PROJECT_ID |
| 列出资源 | gcloud [服务] list |
| 描述资源 | gcloud [服务] describe RESOURCE |
| 创建资源 | gcloud [服务] create RESOURCE |
| 删除资源 | gcloud [服务] delete RESOURCE |
| 获取帮助 | gcloud [服务] --help |
| 查看配置 | gcloud config configurations list |
| 切换配置 | gcloud config configurations activate CONFIG |
全局标志
| 标志 | 目的 | 示例 |
|---|---|---|
--project |
覆盖项目 | --project=my-project |
--format |
输出格式 | --format=json |
--filter |
服务器端过滤器 | --filter="status=RUNNING" |
--limit |
限制结果 | --limit=10 |
--quiet |
抑制提示 | --quiet |
--verbosity |
日志级别 | --verbosity=debug |
--async |
不等待 | --async |
常见属性
# 核心
gcloud config set project PROJECT_ID
gcloud config set account EMAIL
gcloud config set disable_usage_reporting true
# 计算
gcloud config set compute/region us-central1
gcloud config set compute/zone us-central1-a
# 容器
gcloud config set container/cluster CLUSTER_NAME
# App Engine
gcloud config set app/cloud_build_timeout 1200
VIII. 资源
官方文档
- gcloud CLI 参考: https://cloud.google.com/sdk/gcloud/reference
- 安装指南: https://cloud.google.com/sdk/docs/install
- 认证指南: https://cloud.google.com/docs/authentication
- 备忘单: https://cloud.google.com/sdk/docs/cheatsheet
- 脚本编写指南: https://cloud.google.com/sdk/docs/scripting-gcloud
工具
- Cloud Console: https://console.cloud.google.com
- Cloud Shell: 浏览器基于的 shell,预装 gcloud
- Cloud Code: IDE 扩展(VS Code、IntelliJ)
最佳实践总结
- 认证: 使用服务账户模拟而非密钥文件
- 配置: 使用命名配置处理多环境
- 安全: 授予最小 IAM 权限,定期轮换密钥
- 性能: 使用服务器端过滤,批量操作使用 --async
- 脚本编写: 输出 JSON 格式,实施错误处理和重试
- 自动化: 使用环境变量,操作前验证
- 监控: 启用 Cloud Audit Logs,跟踪命令历史
- 维护: 保持 SDK 更新,彻底记录脚本
常见用例
多环境部署
- 分离开发/暂存/生产配置
- 每个环境使用服务账户模拟
- 通过 CI/CD 自动部署
基础设施即代码
- 使用 gcloud 在 shell 脚本中创建资源
- 将配置导出为 YAML/JSON
- 版本控制基础设施命令
数据管道自动化
- 计划的 BigQuery 作业
- Cloud Storage 文件传输
- Pub/Sub 消息处理
安全合规
- 所有操作的审计日志
- 加密静态和传输中数据
- 定期密钥轮换和访问审查
此技能提供了全面的 gcloud CLI 知识,用于实现 Google Cloud 解决方案,从基本认证到高级自动化工作流。始终参考官方文档以获取最新特性和服务特定细节。