K8s YAML生成器
概览
这项技能提供了一个完整的工作流程,用于生成、验证和管理Kubernetes YAML资源。使用这项技能可以在创建Kubernetes清单(Deployments、Services、ConfigMaps、StatefulSets等)、处理自定义资源定义(CRDs)或生成生产就绪的K8s配置时。
使用这项技能的时候
使用这项技能的时候:
- 生成Kubernetes YAML清单(Deployments、Services、ConfigMaps等)
- 创建自定义资源(ArgoCD应用程序、Istio VirtualServices等)
- 构建生产就绪的Kubernetes配置
- 需要确保YAML有效性和K8s API合规性
- 处理需要文档查找的CRDs
核心工作流程
按照这个工作流程生成Kubernetes YAML资源:
1. 理解需求
收集信息:
- 资源类型(Deployment、Service、ConfigMap、CRD等)
- 目标Kubernetes版本(如果指定)
- 应用需求(副本、端口、卷等)
- 环境特定需求(命名空间、标签、注解)
- 自定义资源规范(对于CRDs)
对于CRDs特别:
- 确定CRD类型和版本(例如,ArgoCD应用程序v1alpha1、Istio VirtualService v1beta1)
- 确定是否需要文档(复杂的CRDs、不熟悉的APIs)
2. 获取CRD文档(如果需要)
处理自定义资源定义(CRDs)时:
重要:处理CRDs时,始终考虑版本兼容性
步骤2a:确定CRD和版本
- 从用户请求中提取CRD的apiVersion和kind
- 示例:
- ArgoCD应用程序:
apiVersion: argoproj.io/v1alpha1, kind: Application - Istio VirtualService:
apiVersion: networking.istio.io/v1beta1, kind: VirtualService - Cert-Manager证书:
apiVersion: cert-manager.io/v1, kind: Certificate
- ArgoCD应用程序:
步骤2b:使用Context7 MCP解析库ID
使用mcp__context7__resolve-library-id工具找到正确的库:
libraryName: "<项目名称>"
示例:
- 对于ArgoCD:
libraryName: "argo-cd" - 对于Istio:
libraryName: "istio" - 对于Cert-Manager:
libraryName: "cert-manager"
该工具将返回:
- 带有Context7兼容ID的匹配库列表(格式:
/org/project或/org/project/version) - 表示文档质量的基准分数
- 显示覆盖范围的代码片段计数
根据以下选择最合适的库:
- 名称匹配精度
- 目标版本兼容性(如果用户指定了版本)
- 基准分数(越高越好,100是最高)
- 文档覆盖范围(代码片段计数)
步骤2c:使用Context7 MCP获取文档
使用mcp__context7__get-library-docs工具和选定的库ID:
context7CompatibleLibraryID: "/org/project/version"
topic: "特定CRD类型或功能"
page: 1
示例:
- 对于ArgoCD应用程序CRD:
context7CompatibleLibraryID: "/argoproj/argo-cd/v2.9.0", topic: "application crd spec", page: 1 - 对于Istio VirtualService:
context7CompatibleLibraryID: "/istio/istio/1.20.0", topic: "virtualservice", page: 1
如果上下文不足:
- 使用相同的主题增加
page参数(page: 2, page: 3等) - 尝试不同的主题关键词
- 最大页数为10
步骤2d:回退到网络搜索
如果context7 MCP失败或返回的信息不足:
- 使用
WebSearch工具进行版本特定的查询 - 在搜索查询中包含版本:
"<CRD名称> <版本> spec documentation" - 示例:
"ArgoCD Application v1alpha1 spec documentation""Istio VirtualService v1beta1 configuration""cert-manager Certificate v1 spec fields"
关键:始终在网络搜索中包含版本信息以确保兼容性
3. 生成YAML资源
应用Kubernetes最佳实践:
通用最佳实践:
- 使用明确的API版本(避免弃用的版本)
- 包括有意义的标签以组织和选择(使用Kubernetes推荐标签):
labels: app.kubernetes.io/name: myapp app.kubernetes.io/instance: myapp-abc123 app.kubernetes.io/version: "1.0.0" app.kubernetes.io/component: frontend app.kubernetes.io/part-of: myplatform app.kubernetes.io/managed-by: claude-code - 添加注解以进行元数据和工具处理:
annotations: description: "此资源的目的" contact: "team@example.com" - 指定资源请求和限制(对于Pods):
resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" - 使用命名空间进行多租户管理
- 实施健康检查(livenessProbe, readinessProbe)
- 遵循命名约定(小写、连字符、描述性)
安全最佳实践:
- 永远不要以root身份运行容器(使用
securityContext) - 实施Pod安全标准
- 使用最小权限RBAC
- 在Secret对象中存储机密,而不是ConfigMaps
- 适当使用
imagePullPolicy: Always或IfNotPresent
对于CRDs:
- 参考获取的文档以获得准确的spec字段
- 包括所有必需字段
- 对于可选字段使用适当的默认值
- 添加注释以解释复杂配置
常见资源模板:
Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
namespace: default
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
app.kubernetes.io/version: "1.0.0"
app.kubernetes.io/component: backend
app.kubernetes.io/part-of: myplatform
app.kubernetes.io/managed-by: claude-code
spec:
replicas: 3
selector:
matchLabels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
template:
metadata:
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
app.kubernetes.io/version: "1.0.0"
app.kubernetes.io/component: backend
app.kubernetes.io/part-of: myplatform
app.kubernetes.io/managed-by: claude-code
spec:
containers:
- name: myapp
image: myapp:1.0.0
ports:
- containerPort: 8080
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
Service:
apiVersion: v1
kind: Service
metadata:
name: myapp-service
namespace: default
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
app.kubernetes.io/component: backend
app.kubernetes.io/part-of: myplatform
app.kubernetes.io/managed-by: claude-code
spec:
type: ClusterIP # 或LoadBalancer, NodePort
selector:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
ports:
- protocol: TCP
port: 80
targetPort: 8080
name: http
ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-config
namespace: default
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
app.kubernetes.io/component: config
app.kubernetes.io/part-of: myplatform
app.kubernetes.io/managed-by: claude-code
data:
app.properties: |
key1=value1
key2=value2
config.json: |
{
"setting": "value"
}
4. 验证生成的YAML
关键:始终使用devops-skills:k8s-yaml-validator技能验证生成的YAML
生成YAML资源后,立即调用devops-skills:k8s-yaml-validator技能:
使用技能工具:
技能:devops-skills:k8s-yaml-validator
devops-skills:k8s-yaml-validator技能将:
- 使用
yamllint验证YAML语法 - 使用
kubeconform验证Kubernetes API合规性 - 检查最佳实践和常见问题
- 对于CRDs:自动检测自定义资源并获取文档(如果需要)
- 对集群执行干运行验证(如果可用)
等待验证结果并解决任何问题:
- 语法错误:修复YAML格式问题
- 架构错误:更正字段名称、类型或结构
- 最佳实践违规:根据建议进行更新
- CRD验证错误:重新获取文档并更正spec字段
如果验证失败:
- 仔细阅读错误消息
- 更新YAML以解决问题
- 重新运行验证
- 重复直到验证通过
5. 交付资源
一旦验证通过:
- 向用户展示验证过的YAML
- 包括生成内容的摘要
- 突出显示任何重要的配置选择
- 建议后续步骤(kubectl apply、定制等)
格式:
# 生成并验证的Kubernetes资源
# 资源:<Type>
# 命名空间:<namespace>
# 验证:通过
<YAML内容在这里>
建议后续步骤:
# 应用资源
kubectl apply -f <filename>.yaml
# 验证资源
kubectl get <resource-type> <name> -n <namespace>
# 检查状态
kubectl describe <resource-type> <name> -n <namespace>
高级功能
多资源生成
当生成多个相关资源时:
- 按照核心工作流程创建每个资源
- 在资源之间使用一致的标签进行分组
- 考虑资源依赖性(在Deployments之前创建ConfigMaps)
- 使用devops-skills:k8s-yaml-validator分别验证每个资源
- 可选地将它们组合成一个单文档YAML文件,使用
---分隔符
示例多文档YAML:
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-config
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
app.kubernetes.io/part-of: myplatform
data:
key: value
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
app.kubernetes.io/part-of: myplatform
spec:
# 带有匹配标签的deployment spec
---
apiVersion: v1
kind: Service
metadata:
name: myapp-service
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
app.kubernetes.io/part-of: myplatform
spec:
# 带有匹配选择器的服务spec
版本特定生成
当针对特定Kubernetes版本时:
- 使用适当的API版本(检查弃用)
- 参考版本特定功能
- 注意任何版本特定的限制
- 示例:Ingress从
extensions/v1beta1移动到networking.k8s.io/v1在K8s 1.19+
命名空间管理
命名空间处理的最佳实践:
- 始终在元数据中指定命名空间(集群范围资源除外)
- 使用命名空间进行环境分离(开发、暂存、生产)
- 考虑命名空间范围资源与集群范围资源
- 如有需要,包括命名空间创建YAML
常见CRDs和示例
ArgoCD应用程序
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: myapp
namespace: argocd
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
app.kubernetes.io/part-of: myplatform
app.kubernetes.io/managed-by: argocd
spec:
project: default
source:
repoURL: https://github.com/org/repo
targetRevision: HEAD
path: manifests
destination:
server: https://kubernetes.default.svc
namespace: myapp
syncPolicy:
automated:
prune: true
selfHeal: true
Istio VirtualService
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: myapp
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
app.kubernetes.io/component: networking
app.kubernetes.io/part-of: myplatform
spec:
hosts:
- myapp.example.com
gateways:
- myapp-gateway
http:
- route:
- destination:
host: myapp-service
port:
number: 8080
Cert-Manager证书
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: myapp-tls
namespace: default
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
app.kubernetes.io/component: tls
app.kubernetes.io/part-of: myplatform
spec:
secretName: myapp-tls-secret
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- myapp.example.com
故障排除
CRD文档未找到
- 问题:Context7 MCP无法找到CRD文档
- 解决方案:
- 尝试使用替代搜索词(项目名称变体)
- 使用WebSearch作为回退,进行版本特定的查询
- 直接检查官方项目文档
验证失败
- 问题:devops-skills:k8s-yaml-validator报告错误
- 解决方案:
- 仔细阅读错误消息
- 根据文档检查字段名称和类型
- 验证API版本兼容性
- 确保必需字段存在
版本不匹配
- 问题:生成的YAML使用错误的API版本
- 解决方案:
- 与用户确认目标Kubernetes版本
- 检查API弃用状态
- 更新apiVersion字段到正确的版本
- 重新验证
与其他技能的集成
这项技能与以下技能无缝集成:
- devops-skills:k8s-yaml-validator:自动验证生成的资源
- k8s-debug:部署资源的故障排除
- helm-validator:验证使用这些资源的Helm图表
总结
k8s-generator技能提供:
- ✌智能YAML生成,适用于任何Kubernetes资源
- ✌通过devops-skills:k8s-yaml-validator自动验证
- ✌通过context7 MCP进行版本感知CRD文档查找
- ✌CRD规范的网络搜索回退
- ✌最佳实践和安全考虑
- ✌生产就绪配置
始终遵循核心工作流程:理解 → 获取CRD文档(如果需要) → 生成 → 验证 → 交付