Claude Code Kubernetes 部署指南:从 Deployment 到回滚
用 Claude Code 安全生成 Kubernetes Deployment、Service、Ingress、探针、资源限制和回滚流程。
先让 Kubernetes 部署可审查
Kubernetes 可以把容器化应用稳定地运行在集群中,但初学者真正难的不是写几行 YAML,而是同时理解 Deployment、Service、Ingress、ConfigMap、Secret、探针、资源请求、滚动发布和回滚。如果只对 Claude Code 说“帮我生成 Kubernetes 配置”,它可能会给出看似合理、实际却缺少 readinessProbe、使用 latest、把 Secret 示例写进 Git,或者直接创建不适合本地练习的 LoadBalancer。
本文把 Claude Code 当成“生成安全脚手架并辅助 review 的工具”,而不是自动上线按钮。示例使用 nginx:1.27-alpine 和一个 ConfigMap 页面,不需要私有镜像仓库。你可以在 kind、minikube、Docker Desktop Kubernetes 或测试集群中直接执行。理解流程后,再替换成自己的镜像和健康检查路径。
改写示例时请对照官方文档:Deployments、Services、Ingress、Probes、Resource management、ConfigMap、Secret 和 kubectl rollout。相关内容可以继续读 Docker 集成、CI/CD 设置、代码审查 和 权限指南。
真实使用场景
最适合入门的不是大型生产平台,而是一个可以创建、验证、破坏、回滚的小应用。这样你能看清 Kubernetes 在每一步做了什么,也能训练团队在事故前熟悉命令。
| 场景 | 目标 | 让 Claude Code 起草什么 |
|---|---|---|
| 内部工具首次部署 | 把一个 Web 应用放到稳定 Service 后面 | Deployment、ClusterIP Service、探针、requests 和 limits |
| 培训或演示集群 | 所有人执行同一套练习命令 | 带 namespace 的 manifest、验证步骤、失败练习 |
| 生产前 YAML 审查 | 在发布前发现危险配置 | selector、Secret、probe、Ingress 检查 |
| Pull Request 门禁 | 在合并前阻止基础设施错误 | dry-run CI、review prompt、回滚清单 |
这类文章也适合商业化,因为读者通常不是随便查概念,而是害怕把线上部署搞坏。ClaudeCodeLab 会把这种指南连接到免费资料、模板和 Claude Code 培训与咨询,帮助团队把流程放进真实仓库。
给 Claude Code 明确边界
提示词里要写清目标,也要写清不要做什么。Kubernetes 场景中,模糊提示很容易产生危险默认值:直接暴露 LoadBalancer、把 Secret 明文写入 YAML、创建集群级 RBAC,或假设你使用某个特定 Ingress Controller。
请创建一个初学者可以在本地验证的 Kubernetes 部署示例。
要求:
- namespace 为 claude-k8s-demo
- 使用 nginx:1.27-alpine,不使用私有镜像
- 使用 ConfigMap 提供一个 HTML 页面
- Deployment 包含 replicas 2、RollingUpdate、readinessProbe、livenessProbe 和 resources
- Service 使用 ClusterIP
- Ingress 作为可选项,host 为 claude-k8s.local
- 说明 Secret 策略,但不要提交真实 Secret
- 给出 apply、rollout status、port-forward、失败和 rollback 命令
限制:
- 不使用 NodePort 或 LoadBalancer
- 不把真实 Secret 值写进 YAML
- 不创建 ClusterRole、ClusterRoleBinding 或破坏性清理命令
好的提示词会把审查范围固定下来。reviewer 可以检查 selector 是否一致、probe 是否指向真实端口、resources 是否存在、Secret 是否不会泄漏。如果经常重复这些规则,就把它们写入 CLAUDE.md;可参考 CLAUDE.md 最佳实践。
可直接复制的 manifest
把下面内容保存为 k8s/claude-k8s-demo.yaml。即使暂时没有 Ingress Controller,也可以先通过 Service 的 port-forward 验证。
apiVersion: v1
kind: Namespace
metadata:
name: claude-k8s-demo
---
apiVersion: v1
kind: ConfigMap
metadata:
name: demo-page
namespace: claude-k8s-demo
data:
APP_ENV: "demo"
index.html: |
<!doctype html>
<html lang="zh">
<head><meta charset="utf-8" /><title>Claude Code Kubernetes Demo</title></head>
<body><h1>Claude Code Kubernetes Demo</h1><p>Deployment, Service, ConfigMap, probes are running.</p></body>
</html>
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-web
namespace: claude-k8s-demo
labels:
app: demo-web
spec:
replicas: 2
revisionHistoryLimit: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: demo-web
template:
metadata:
labels:
app: demo-web
spec:
containers:
- name: nginx
image: nginx:1.27-alpine
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
resources:
requests:
cpu: "50m"
memory: "64Mi"
limits:
cpu: "250m"
memory: "128Mi"
readinessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 3
periodSeconds: 5
livenessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 10
periodSeconds: 10
volumeMounts:
- name: demo-page
mountPath: /usr/share/nginx/html/index.html
subPath: index.html
readOnly: true
volumes:
- name: demo-page
configMap:
name: demo-page
---
apiVersion: v1
kind: Service
metadata:
name: demo-web
namespace: claude-k8s-demo
spec:
type: ClusterIP
selector:
app: demo-web
ports:
- name: http
port: 80
targetPort: http
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-web
namespace: claude-k8s-demo
spec:
ingressClassName: nginx
rules:
- host: claude-k8s.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: demo-web
port:
name: http
初学者最容易漏掉的是 label 对齐。spec.selector.matchLabels、Pod template 的 labels、Service 的 selector 必须指向同一组 Pod。让 Claude Code review 时,要明确要求它检查这三处。
本地验证流程
先确认 kubectl cluster-info 指向正确集群,再执行:
kubectl apply -f k8s/claude-k8s-demo.yaml
kubectl -n claude-k8s-demo rollout status deployment/demo-web
kubectl -n claude-k8s-demo get pods -l app=demo-web
kubectl -n claude-k8s-demo get service demo-web
kubectl -n claude-k8s-demo port-forward service/demo-web 8080:80
另开终端确认页面:
curl http://localhost:8080/
如果使用 Ingress,先证明 Pod 和 Service 正常,再查 Ingress。不要一开始就怀疑域名或 Controller。
kubectl -n claude-k8s-demo get ingress demo-web
kubectl -n claude-k8s-demo describe ingress demo-web
ConfigMap、Secret 和回滚
ConfigMap 只放非敏感配置。示例里的 APP_ENV 和 HTML 可以进入 Git,但数据库密码、API token、签名密钥不能放进去。Secret 是敏感值资源,但常见 YAML 只是 base64 表示;base64 不是加密。生产环境应使用云 Secret Manager、External Secrets、Sealed Secrets、SOPS 或团队认可的 vault 流程。
本地练习可以这样生成临时 Secret,并把 secret.local.yaml 加入 .gitignore:
kubectl -n claude-k8s-demo create secret generic demo-api-secret \
--from-literal=API_TOKEN='replace-me-locally' \
--dry-run=client \
-o yaml > secret.local.yaml
kubectl apply -f secret.local.yaml
然后练习正常发布和失败回滚:
kubectl -n claude-k8s-demo set image deployment/demo-web nginx=nginx:1.27-alpine
kubectl -n claude-k8s-demo rollout status deployment/demo-web
kubectl -n claude-k8s-demo rollout history deployment/demo-web
kubectl -n claude-k8s-demo set image deployment/demo-web nginx=nginx:not-a-real-tag
kubectl -n claude-k8s-demo rollout status deployment/demo-web --timeout=30s
kubectl -n claude-k8s-demo rollout undo deployment/demo-web
回滚不一定会还原 ConfigMap、Secret、数据库迁移或 DNS。请让 Claude Code 在 runbook 中写清“会回滚什么”和“不会回滚什么”。
CI 审查与常见失败
至少在 Pull Request 中做一次 dry-run:
name: Kubernetes manifest review
on:
pull_request:
paths:
- "k8s/**"
jobs:
dry-run:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/setup-kubectl@v4
with:
version: "v1.30.0"
- run: kubectl apply --dry-run=client -f k8s/
常见失败包括:生产使用 latest;readiness 和 liveness 意义混淆;未设置 resources;把 base64 当安全;Service 没通就开始查 Ingress;把 Claude Code 输出不经人工 review 直接发布。解决办法是让 CI、官方文档、review prompt 和实际验证记录共同工作。
咨询路径与验证结果
这个示例是学习用最小构成。真实项目还要处理镜像构建、TLS、Secret 注入、监控、RBAC、CI/CD、事故沟通和团队权限。个人可以从 免费 cheatsheet 开始;团队如果要把 Claude Code 用在基础设施变更中,建议通过 Claude Code 培训与咨询 把 CLAUDE.md、review 规则、回滚演练和 CI 门禁一起建立。
我按 apply、rollout status、列出 Pod、port-forward、curl、改成错误镜像、观察失败、rollout undo 的顺序设计了本文。实际最容易出错的不是高级网络,而是 selector 不一致、probe path 错误、resources 缺失和 Secret 示例处理不当。把这些限制写进第一条 Claude Code prompt,比事后修 YAML 更快。
免费 PDF: Claude Code 速查表
输入邮箱即可获取一页 PDF,整理常用命令、审查习惯和安全工作流。
我们会妥善保护你的信息,不发送垃圾邮件。
把 Claude Code 变成真正能带来结果的工作流
先领取中文说明的免费 PDF,再进入英文商品页选择合适的教材。如果你需要团队落地、流程设计或内容变现支持,也可以直接咨询。
关于作者
Masa
专注 Claude Code 实务流程、团队导入和内容转化的工程师。
相关文章
从Obsidian到CLAUDE.md的Claude Code流程:不再反复解释上下文
把 Obsidian 工作笔记整理成 CLAUDE.md 运行说明,让 Claude Code 每次都带着正确上下文开始。
Claude Code 收入 CTA 路由:从文章分流到 PDF、Gumroad 与咨询
用 Claude Code 按读者意图把文章流量分到免费 PDF、Gumroad 教材或咨询入口。
Claude Code 团队交接规则: 把审查证据、权限、回滚和收入路径一起交付
面向团队的 Claude Code 交接格式: 证据、权限、回滚、免费 PDF、Gumroad 与咨询路径都要可审查。