k8s-yaml-generator について
k8s-yaml-generatorは、KubernetesリソースのYAMLを作成・更新するためのスキルです。段階的にマニフェストを生成し、カスタムAPIの調査範囲を限定します。完全なマニフェストには検証を必須とし、チェック結果と前提を報告します。
主な機能
- 01Kubernetesマニフェストの生成
- 02必要な入力とパスの事前確認
- 03CRD調査の範囲設定
- 04マニフェストの基本品質チェック
- 05完全なマニフェストの検証必須化
- 06検証状況と前提の報告
活用シーン
- 01DeploymentとServiceのマニフェスト作成
- 02カスタムリソースのYAML作成
- 03ストレージ付きStatefulSetの生成
- 04検証結果を踏まえたマニフェスト更新
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ akin-ozer/ cc-devops-skills --skill k8s-yaml-generatorインストール後、Claude Code で/k8s-yaml-generatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/configmap-secret.yamldeployment-service.yamlhpa-pdb.yamlingress.yamlrbac-cluster-reader-optional.yamlrbac.yamlstatefulset.yamlreferences/resource_patterns.mdsecurity_patterns.mdtests/test_regression.sh詳細
Kubernetes YAML ジェネレーター
決定的な手順、範囲を限定した CRD 調査、完全なリソース出力に対する必須の検証を行って、Kubernetes マニフェストを生成します。
使用する状況
ユーザーから Kubernetes YAML の作成または更新を依頼された場合に、このスキルを使用します。たとえば、次のような依頼です。
- 「アプリ用の Deployment と Service のマニフェストを生成してください。」
- 「Argo CD の Application CRD を作成してください。」
- 「PVC テンプレートを含む StatefulSet を作成してください。」
- 「ベストプラクティスに沿った、本番環境向けの Kubernetes YAML を作成してください。」
検証のみの依頼には、このスキルを使用しないでください。検証のみの場合は、k8s-yaml-validator を使用してください。
実行モデル
規範的なキーワード:
MUST:必須ですSHOULD:ユーザーから別の指定がない限り、既定の動作ですMAY:任意です
決定的な手順:
- 依頼内容と、パスおよびレンダリングの妥当性を事前確認します。
- 必要最小限の入力情報を収集します。
- CRD 参照を解決します(CRD またはカスタム API が関係する場合に限り、範囲を限定したワークフローを実行します)。
- 基本的な品質チェックを行いながら YAML を生成します。
- 必須の検証を実行します(ツールが利用できない場合は、文書化された代替手順を実行します)。
- YAML と、明示的な検証レポートおよび前提条件を提示します。
環境上の制約によりいずれかの手順を実行できない場合は、その手順の代替処理を実行して続行します。
1) 事前確認
生成前に、次の項目を確認します。
- 出力が完全なマニフェスト一式か、スニペットのみかを確認します。
- 指定されている場合は、対象の Kubernetes バージョンを確認します。
- 参照されているローカルファイルのパスが、使用前に存在することを確認します。
- 該当する場合は、リソース名を DNS-1123 互換の形式に正規化します。
事前確認の停止条件:
- 必須の基本情報(リソースの種類、Pod ベースのリソースの場合はワークロードのイメージ、または CRD の kind/apiVersion)が不足している場合は、まずそれらを確認します。
2) 必須入力情報の収集
次の情報を収集します。
- リソースの種類(
Deployment、Service、ConfigMap、CRD の kind など) apiVersionとkind- Namespace とスコープに関する要件
- ポート、レプリカ数、イメージ、プローブ、ストレージ、シークレット/設定の要件
- 環境に関する前提(dev/staging/prod)
- CRD の場合:プロジェクト名と、判明していれば対象の CRD バージョン
安全な既定値(出力で明示します):
- Namespace:
default(Namespace スコープのリソース) - Deployment のレプリカ数:
2 - Service の種類:
ClusterIP - イメージのプルポリシー:
IfNotPresent(ユーザーが強制プルを必要としている場合を除く)
3) CRD 検索ワークフロー(範囲限定)
Kubernetes 組み込みグループ以外のカスタム API に限り、この手順を実行します。
3.1 CRD の対象を特定
次の項目を抽出します。
- API グループ、バージョン、kind(例:
argoproj.io/v1alpha1、Application) - 指定された製品/バージョン(例:Argo CD
v2.9.x)
3.2 Context7 の優先手順
適切な Context7 ツールとペイロードを使用します。
mcp__context7__resolve-library-idmcp__context7__query-docs
ペイロードの例:
Tool: mcp__context7__resolve-library-id
libraryName: "argo-cd"
query: "Find Argo CD documentation for Application CRD schema compatibility"
Tool: mcp__context7__query-docs
libraryId: "/argoproj/argo-cd/v2.9.0"
query: "Application CRD required spec fields for apiVersion argoproj.io/v1alpha1 with minimal valid example"
選択ルール:
- プロジェクト名/ライブラリ名が完全に一致するものを優先します。
- ユーザーがバージョンを指定している場合は、バージョン付きの
libraryIdを優先します。 - それ以外の場合は、バージョンなしの ID を使用し、バージョンが不確かなことを明記します。
3.3 上限と停止条件
際限のない再試行を防ぐため、検索の範囲を制限します。
resolve-library-id:最大 2 回(優先する名前で 1 回、別名で 1 回)。query-docs:焦点を絞ったクエリを合計最大 3 回。- Web 検索へのフォールバック:バージョンを指定した検索を最大 2 回。
次のすべてを満たした時点で、早期に終了します。
- 必須の CRD フィールドを特定できている。
- 信頼できる例を少なくとも 1 つ確認できている。
- バージョンの互換性が判明しているか、不明であることを明示している。
上限に達した場合の強制終了:
- ソースで確認できたフィールドのみを生成します。
- 残りのフィールドには
Needs confirmationと記載します。 - 残存リスクを報告し、次のいずれかを依頼します。
- 正確な CRD ドキュメントの URL、または
- クラスターのイントロスペクション出力(利用可能な場合は、たとえば
kubectl explain <kind>.spec)。
3.4 フォールバックの順序
次の順序で使用します。
- Context7(
resolve-library-id->query-docs) - Web 検索による公式プロジェクトドキュメント
- クラスター内のイントロスペクション(クラスターにアクセスできる場合は
kubectl explain)
いずれも利用できない場合は、最小限のドラフトを提示して、ドラフトであることを明確に示します。また、CRD の完全な正確性を保証する表現は使用しません。
4) YAML 生成ルール
次のチェックを適用します。
- 明示的で、非推奨ではない API バージョンを使用します。
- 関連するリソース間で、一貫したラベル(
app.kubernetes.io/*)を含めます。 - 名前空間スコープのリソースには、名前空間を指定します。
- ユーザーが指定を省略する場合を除き、Pod ワークロードにリソースのリクエストと制限を追加します。
- 該当する場合、長時間稼働するサービスに readiness/liveness プローブを追加します。
- デフォルトで root 実行を避けるため、
securityContextを使用します。 - 複数リソースの順序は、依存関係に問題が生じないようにします(たとえば、Deployment の参照先となる ConfigMap を先に配置します)。
最小限のラベル基準:
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp-prod
app.kubernetes.io/part-of: myplatform
app.kubernetes.io/managed-by: codex
5) 必須の検証と代替手段
マニフェスト全体を生成する場合、検証は必須です。
優先手順:
k8s-yaml-validatorを呼び出します。- ブロッキング問題がなくなるまで、「修正 → 再検証」を繰り返します。
各検証後に必ず報告する項目:
Validation mode:k8s-yaml-validator|script fallback|manual fallbackSyntax:pass/failSchema:pass/fail/partialCRD check:pass/fail/partialDry-run:server/client/skippedBlocking issues remaining:yes/no
代替手段 A:バリデータースキルを利用できない場合
次のコマンドを直接実行します。
bash devops-skills-plugin/skills/k8s-yaml-validator/scripts/setup_tools.sh
yamllint -c devops-skills-plugin/skills/k8s-yaml-validator/assets/.yamllint <file.yaml>
kubeconform -schema-location default -strict -ignore-missing-schemas -summary <file.yaml>
server_out="$(mktemp)"
client_out="$(mktemp)"
trap 'rm -f "$server_out" "$client_out"' EXIT
if kubectl apply --dry-run=server -f <file.yaml> >"$server_out" 2>&1; then
echo "server_validation=passed"
elif grep -Eqi "connection refused|no such host|i/o timeout|tls handshake timeout|unable to connect to the server|no configuration has been provided|the server doesn't have a resource type" "$server_out"; then
echo "server_validation=skipped"
if kubectl apply --dry-run=client -f <file.yaml> >"$client_out" 2>&1; then
echo "client_validation=passed"
else
echo "client_validation=failed"
cat "$client_out"
exit 1
fi
else
echo "server_validation=failed"
cat "$server_out"
exit 1
fi
代替手段 B:ローカルツールを一部利用できない場合
- 利用可能なチェックを実行します。
- スキップしたチェックを明示的に記録します。
- スキップしたチェックごとに、残存リスクを追加します。
代替手段 C:検証に繰り返し失敗する場合
- 修正・再検証のサイクルは最大 3 回です。
- それでも失敗する場合は処理を停止し、次を返します。
- 現在の YAML
- 失敗したエラーの正確な内容
- 処理を進めるためにユーザーに必要な最小限の判断・入力
検証の例外:
- スニペットのみ、またはドキュメントのみの依頼では、検証全体を省略してもかまいません。ただし、出力に
Validation status: Skipped (reason)を必ず記載します。
6) 納品要件
最終出力には、次の内容を必ず含めます。
- 生成した YAML。
- 生成した内容(リソース一覧、名前空間/スコープ)。
- 指定の形式での検証レポート。
- 使用した前提とデフォルト設定。
- 使用した参照情報:
- 使用した Context7 の ID/検索クエリ(CRD 用)
- 使用した外部ドキュメント/検索
- 省略・未確認の項目とその影響
次に実行するコマンドの例:
kubectl apply -f <filename>.yaml
kubectl get <resource-type> <name> -n <namespace>
kubectl describe <resource-type> <name> -n <namespace>
7) 標準的な実行例
例 A:組み込みリソース(Deployment + Service)
- アプリのイメージ、ポート、レプリカ数、名前空間を確認します。
- 一貫したラベルとセレクターを使用して Deployment と Service を生成します。
k8s-yaml-validatorで検証します。- YAML、検証レポート、前提を返します。
例 B:CRD リソース(Argo CD Application)
argoproj.io/v1alpha1とApplicationを特定します。- 範囲を限定した Context7 検索を実行します(
resolve-library-idの後にquery-docs)。 - 必要に応じて、範囲を限定したウェブ検索に切り替えます。
- 検証済みのフィールドのみを使用して CRD YAML を生成します。
- 検証し、部分的な確認がある場合は報告したうえで、残存リスクを返します。
8) 完了の定義
該当するすべてのチェックに合格した場合にのみ、実行は完了です。
- トリガーとなったユースケースが正しい(検証のみではなく生成である)。
- 必須の入力が揃っているか、明示的な前提が文書化されている。
- CRD の検索が、上限と停止条件の範囲内で行われている。
- ツール名とコマンドパスが有効で、一貫している。
- マニフェスト全体が検証されている(または、残存リスクを記載した代替手順が文書化されている)。
- 最終回答に YAML、検証レポート、前提、参照情報が含まれている。