mcpField
G
gcp-compute

gcp-compute

github.com/bagelhole云与 DevOps1.2k331 次安装23 周前更新
代码仓库

关于 gcp-compute

面向 GCP 运维与开发人员的 Compute Engine 命令行操作指南,涵盖虚拟机创建、扩缩、托管实例组、快照和故障排查,并提供 Terraform 配置示例。

主要功能

  1. 01创建和管理 Compute Engine 虚拟机
  2. 02配置实例模板与托管实例组
  3. 03使用 Spot VM 运行工作负载
  4. 04创建磁盘快照与计划策略
  5. 05提供 Terraform 配置示例
  6. 06常见故障诊断建议

适用场景

  1. 01部署需要操作系统控制的应用服务器
  2. 02搭建自动修复和自动扩缩的实例组
  3. 03为机器学习训练配置 GPU 虚拟机
  4. 04在非关键任务中使用 Spot VM 降低成本

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/bagelhole/devops-security-agent-skills --skill gcp-compute

安装后在 Claude Code 中输入/gcp-compute确认已加载。

详细介绍

GCP Compute Engine

在 Google Cloud Platform 上部署、管理和扩展 Compute Engine 虚拟机。

适用场景

  • 在 GCP 上部署 Web 服务器、应用后端或批处理工作负载
  • 运行需要完全控制操作系统级别的工作负载(不同于 Cloud Run 或 App Engine)
  • 创建托管实例组,在负载均衡器后实现自动修复和自动扩缩
  • 配置附加 GPU 的虚拟机,用于机器学习训练或渲染流水线
  • 使用可抢占式或 Spot 虚拟机,为非关键工作负载优化成本

前提条件

  • 已安装并完成身份验证的 Google Cloud SDK(gcloud)
  • 已启用 Compute Engine API 的 GCP 项目
  • IAM 角色 roles/compute.admin 或用于实例管理的范围限定角色
gcloud auth list
gcloud config set project $PROJECT_ID
gcloud services enable compute.googleapis.com

机器类型参考

系列示例vCPU内存用途
E2e2-micro0.251 GB开发/测试、微服务
E2e2-medium14 GB轻量级 Web 服务器
N2n2-standard-4416 GB通用生产环境
N2n2-highmem-8864 GB内存缓存、数据库
C2c2-standard-161664 GB计算密集型工作负载、高性能计算
# List machine types available in a zone
gcloud compute machine-types list --zones=us-central1-a --filter="name~'e2-'"

# Create a custom machine type (6 vCPUs, 24 GB RAM)
gcloud compute instances create custom-vm \
  --custom-cpu=6 --custom-memory=24GB \
  --zone=us-central1-a \
  --image-family=debian-12 --image-project=debian-cloud

创建实例

# Production instance with shielded VM and startup script
gcloud compute instances create web-server \
  --machine-type=e2-medium \
  --zone=us-central1-a \
  --image-family=debian-12 \
  --image-project=debian-cloud \
  --boot-disk-size=20GB \
  --boot-disk-type=pd-balanced \
  --tags=http-server,https-server \
  --labels=env=production,team=backend \
  --metadata=enable-oslogin=TRUE \
  --shielded-secure-boot \
  --shielded-vtpm \
  --shielded-integrity-monitoring

# Instance with a startup script and service account
gcloud compute instances create app-server \
  --machine-type=e2-standard-2 \
  --zone=us-central1-a \
  --image-family=ubuntu-2204-lts \
  --image-project=ubuntu-os-cloud \
  --boot-disk-size=50GB \
  --metadata-from-file=startup-script=startup.sh \
  --service-account=app-sa@${PROJECT_ID}.iam.gserviceaccount.com \
  --scopes=cloud-platform

# Instance with an additional data disk
gcloud compute instances create db-server \
  --machine-type=n2-highmem-4 \
  --zone=us-central1-a \
  --image-family=debian-12 --image-project=debian-cloud \
  --boot-disk-size=20GB \
  --create-disk=name=data-disk,size=200GB,type=pd-ssd,auto-delete=no

启动脚本示例

#!/bin/bash
# startup.sh - runs on first boot and every reboot
set -euo pipefail
apt-get update && apt-get install -y nginx
systemctl enable nginx && systemctl start nginx
curl -X PUT -H "Metadata-Flavor: Google" \
  "http://metadata.google.internal/computeMetadata/v1/instance/guest-attributes/startup/status" \
  -d "complete"

实例模板和托管实例组

# Create an instance template
gcloud compute instance-templates create web-template \
  --machine-type=e2-medium \
  --image-family=debian-12 --image-project=debian-cloud \
  --boot-disk-size=20GB --tags=http-server \
  --metadata-from-file=startup-script=startup.sh

# Create a regional managed instance group (MIG) with health check
gcloud compute health-checks create http http-health-check \
  --port=80 --request-path=/healthz \
  --check-interval=10s --timeout=5s \
  --healthy-threshold=2 --unhealthy-threshold=3

gcloud compute instance-groups managed create web-mig \
  --template=web-template --size=3 \
  --region=us-central1 \
  --health-check=http-health-check --initial-delay=120

# Configure autoscaling
gcloud compute instance-groups managed set-autoscaling web-mig \
  --region=us-central1 \
  --min-num-replicas=2 --max-num-replicas=10 \
  --target-cpu-utilization=0.65 --cool-down-period=90

# Rolling update to a new template
gcloud compute instance-groups managed rolling-action start-update web-mig \
  --version=template=web-template-v2 \
  --region=us-central1 --max-surge=3 --max-unavailable=0

可抢占式和 Spot 虚拟机

# Spot VM (recommended over legacy preemptible)
gcloud compute instances create spot-worker \
  --machine-type=n2-standard-8 \
  --zone=us-central1-a \
  --image-family=debian-12 --image-project=debian-cloud \
  --provisioning-model=SPOT \
  --instance-termination-action=STOP

# Spot instance template for batch MIG
gcloud compute instance-templates create batch-template \
  --machine-type=n2-standard-4 \
  --image-family=debian-12 --image-project=debian-cloud \
  --provisioning-model=SPOT \
  --instance-termination-action=DELETE

快照和映像

# Create a snapshot
gcloud compute disks snapshot web-server \
  --zone=us-central1-a \
  --snapshot-names=web-server-snap-$(date +%Y%m%d)

# Scheduled snapshot policy
gcloud compute resource-policies create snapshot-schedule daily-backup \
  --region=us-central1 --max-retention-days=14 \
  --daily-schedule --start-time=03:00

gcloud compute disks add-resource-policies web-server \
  --zone=us-central1-a --resource-policies=daily-backup

# Create a custom image from an instance
gcloud compute instances stop web-server --zone=us-central1-a
gcloud compute images create web-golden-image \
  --source-disk=web-server --source-disk-zone=us-central1-a \
  --family=web-server --labels=version=v1

Terraform 配置

resource "google_compute_instance" "web" {
  name         = "web-server"
  machine_type = "e2-medium"
  zone         = "us-central1-a"
  tags         = ["http-server", "https-server"]

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-12"
      size  = 20
      type  = "pd-balanced"
    }
  }

  network_interface {
    subnetwork = google_compute_subnetwork.main.id
    access_config {}
  }

  metadata_startup_script = file("${path.module}/startup.sh")

  service_account {
    email  = google_service_account.app.email
    scopes = ["cloud-platform"]
  }

  shielded_instance_config {
    enable_secure_boot          = true
    enable_vtpm                 = true
    enable_integrity_monitoring = true
  }
}

resource "google_compute_instance_template" "web" {
  name_prefix  = "web-"
  machine_type = "e2-medium"

  disk {
    source_image = "debian-cloud/debian-12"
    auto_delete  = true
    boot         = true
    disk_size_gb = 20
  }

  network_interface {
    subnetwork = google_compute_subnetwork.main.id
  }

  lifecycle { create_before_destroy = true }
}

resource "google_compute_region_instance_group_manager" "web" {
  name               = "web-mig"
  base_instance_name = "web"
  region             = "us-central1"

  version {
    instance_template = google_compute_instance_template.web.id
  }

  target_size = 3
  named_port { name = "http"; port = 80 }

  auto_healing_policies {
    health_check      = google_compute_health_check.http.id
    initial_delay_sec = 120
  }
}

resource "google_compute_region_autoscaler" "web" {
  name   = "web-autoscaler"
  region = "us-central1"
  target = google_compute_region_instance_group_manager.web.id

  autoscaling_policy {
    min_replicas    = 2
    max_replicas    = 10
    cooldown_period = 90
    cpu_utilization { target = 0.65 }
  }
}

常见操作

# SSH into an instance
gcloud compute ssh web-server --zone=us-central1-a

# List all instances with status
gcloud compute instances list \
  --format="table(name,zone,status,machineType.basename())"

# Stop / start / resize
gcloud compute instances stop web-server --zone=us-central1-a
gcloud compute instances set-machine-type web-server \
  --machine-type=e2-standard-4 --zone=us-central1-a
gcloud compute instances start web-server --zone=us-central1-a

# View serial port output (debug startup scripts)
gcloud compute instances get-serial-port-output web-server --zone=us-central1-a

故障排除

症状原因解决方法
实例卡在 STAGING 状态配额超限或资源不可用使用 gcloud compute project-info describe 检查配额;尝试其他可用区
启动脚本未运行语法错误或元数据键错误检查串行端口输出;确保键为 startup-script,而不是 startup_script
无法通过 SSH 连接防火墙阻止了 22 端口,或 OS Login 配置错误添加 tcp:22 防火墙规则;检查 enable-oslogin 元数据
过于频繁地被抢占可用区资源紧张使用采用 STOP 操作的 Spot 虚拟机;在 MIG 中分散到多个可用区
磁盘空间不足启动磁盘太小使用 gcloud compute disks resize;为数据磁盘启用 --storage-auto-increase
MIG 未自动修复健康检查配置错误或初始延迟太短确认健康检查路径返回 200;增大 --initial-delay

相关技能

  • gcp-networking - Compute Engine 的 VPC、防火墙规则和负载均衡器
  • terraform-gcp - 使用基础设施即代码配置 Compute Engine 资源
  • gcp-gke - 适用于更适合使用容器而非虚拟机的工作负载
  • gcp-cloud-sql - Compute Engine 应用连接的托管数据库

评论

支持 Markdown