K8sYAML生成器 k8s-yaml-generator

Kubernetes YAML资源生成与管理工具,适用于创建和验证Kubernetes清单文件,支持CRD文档查找和生产就绪配置。

Docker/K8s 0 次安装 0 次浏览 更新于 3/4/2026

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

步骤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: AlwaysIfNotPresent

对于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技能将:

  1. 使用yamllint验证YAML语法
  2. 使用kubeconform验证Kubernetes API合规性
  3. 检查最佳实践和常见问题
  4. 对于CRDs:自动检测自定义资源并获取文档(如果需要)
  5. 对集群执行干运行验证(如果可用)

等待验证结果并解决任何问题:

  • 语法错误:修复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>

高级功能

多资源生成

当生成多个相关资源时:

  1. 按照核心工作流程创建每个资源
  2. 在资源之间使用一致的标签进行分组
  3. 考虑资源依赖性(在Deployments之前创建ConfigMaps)
  4. 使用devops-skills:k8s-yaml-validator分别验证每个资源
  5. 可选地将它们组合成一个单文档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技能提供:

  1. ✌智能YAML生成,适用于任何Kubernetes资源
  2. ✌通过devops-skills:k8s-yaml-validator自动验证
  3. ✌通过context7 MCP进行版本感知CRD文档查找
  4. ✌CRD规范的网络搜索回退
  5. ✌最佳实践和安全考虑
  6. ✌生产就绪配置

始终遵循核心工作流程:理解 → 获取CRD文档(如果需要) → 生成 → 验证 → 交付