正在加载,请稍候…

Google Cloud Run:可缩放到零的无服务器容器

在 Cloud Run 上部署容器——自动扩缩、最小实例数、流量拆分、Secret Manager 集成及成本优化。

Google Cloud Run:可缩放到零的无服务器容器

Cloud Run:任意容器,全托管

空闲时缩放到零,数秒内可扩展到 1000 多个实例。

Google Cloud Run:可缩放到零的无服务器容器 示意图

从源代码部署

gcloud run deploy my-api \
  --source . \
  --region us-central1 \
  --allow-unauthenticated \
  --memory 512Mi \
  --min-instances 0 \
  --max-instances 100 \
  --concurrency 80

Google Cloud Run:可缩放到零的无服务器容器 示意图

优化的多阶段 Dockerfile

FROM node:20-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json tsconfig.json ./
RUN npm ci
COPY src/ ./src/
RUN npm run build

FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production PORT=8080
RUN addgroup -S app && adduser -S app -G app
COPY --from=deps /app/node_modules ./node_modules
COPY --from=build /app/dist ./dist
USER app
EXPOSE 8080
CMD ["node", "dist/main.js"]

Google Cloud Run:可缩放到零的无服务器容器 示意图

安全部署的流量拆分

# 部署但不分配流量
gcloud run deploy my-api --image gcr.io/project/v2 --no-traffic

# 金丝雀发布:10% 到新版本
gcloud run services update-traffic my-api --to-revisions=my-api-v2=10,my-api-v1=90

# 全量发布
gcloud run services update-traffic my-api --to-latest

最小实例数

gcloud run services update my-api --min-instances 2
# 每个实例约 $0.10/天——防止关键服务的冷启动

-> 使用 Base64 转换器 对密钥进行编码。