開発者ツール · 構文コンバーター
kubectl JSON 出力を実際に読み取れるマニフェストに変換する
· なぜそれが重要なのか
json yaml 開発者ワークフロー
Kubernetes ツールは、正確ではあるがスキャンが難しい JSON を生成しますが、マニフェストは YAML で記述されます。この投稿では、リソース定義間の変換により、リソース定義の読み取り、比較、再利用が高速化される理由を説明します。
午前 2 の 200 行の中括弧 — JSON としてフェッチされたデプロイメントとステータス ブロックに埋め込む必要があるフィールド
インシデント中に、大きなリソース オブジェクトによって、関連するセレクターや条件がメタデータとステータスの間に埋もれてしまう可能性があります。キャプチャされた JSON をインデントされた YAML に変換すると、通常のオブジェクト、配列、ブール値、数値、文字列、および null 値を変更せずに句読点が削除されます。得られるのは視覚的なスキャンであり、新しい真実の情報源ではありません。
ブラウザ ページを使用する前に、トークン、アドレス、識別子を編集します。 ToolAcre は JSON を厳密に解析し、YAML をローカルにダンプします。クラスターに接続したり、オブジェクトが kubectl から来たのか、別のクライアントから来たのか、保存されたフィクスチャから来たのかを認識することはありません。
API が JSON を話し、人間が YAML を書く理由 — API サーバーの形式、マニフェストの伝統、および両方が同じオブジェクトを記述する理由
同じ JSON 型のリソース ツリーは、YAML マッピングおよびシーケンスとして表すことができます。このリポジトリは、特定の Kubernetes コンポーネントが 1 つのワイヤ表現を選択する理由や、すべての API エンドポイントがメディア タイプをネゴシエートする方法を確立していないため、この記事では一般的な慣行を Kubernetes の内部に関する実装の主張に変えることを避けています。
証明できることはより限定的です。JSON 入力は JavaScript 値に解析され、js-yaml はその値をブロック スタイルでシリアル化します。配列は順序付けされたままで、オブジェクト キーは同じ値に関連付けられたままで、あいまいな文字列は保護引用符で囲まれます。
JSON と YAML は同じリソース ツリーを保持できます。 API トランスポートの主張はこのコンバーターの証拠の外にあります
インデントとダッシュによりネストのスキャンが容易になり、ブロック スカラーにより複数行の文字列が読みやすくなります。これらはシリアライザーの選択です。ステータスの削除、API バージョンの検証、再アプリケーションに適したライブ オブジェクトの作成は行いません。 YAML が JSON よりも明示的ではないように見える場合でも、引用符で囲まれた日付のような文字列はテキストのままです。
変換を使用してフィールドを検索し、形状を比較し、レビュー コピーを準備します。正確な証拠として、元の JSON を保管しておいてください。ソートキーオプションが有効になっている場合、配列の順序は変更されずに、オブジェクトの表示がさらに変更されます。
YAML は、Kubernetes オブジェクトやその有効性ではなく、プレゼンテーションを変更します。
ライブ オブジェクトには、サーバーまたはコントローラーによって維持されるフィールドが含まれることがよくあります。 `status`、`managedFields`、`uid`、または `resourceVersion` の削除は再利用可能なマニフェストにとって適切な場合がありますが、ToolAcre はそのポリシーを認識せず、それらを削除しません。すべての削除は、変換後に意図的に Kubernetes を意識した編集を行う必要があります。
他のフィールドも生成される可能性がありますが、意図を保持するために依然として必要です。 git 内のバージョンと比較し、記憶されているクリーンアップ リストを適用するのではなく、所有しているシステムの現在のドキュメントを参照してください。コンバーターは、ドメインのセマンティクスを意図的に認識しません。
作業例: JSON としてフェッチされたサービス — YAML に変換し、サーバーに入力されたフィールドを削除し、git のバージョンと比較します
メタデータ、仕様ポート、およびステータス ブロックを含む編集されたサービス型オブジェクトを取得します。これを YAML に変換し、操作手順を使用してサーバーに入力されたフィールドを特定し、再利用可能なアーティファクトとして承認されたフィールドのみを削除します。適用ステップの前に、ラベル、セレクター、ポート、およびタイプをバージョン管理と比較します。
YAML ライターは、型を保護するために、`NO`、`yes`、`1.0` などの文字列、または日付を示すテキストを引用符で囲む場合があります。これらの引用は、気軽に削除できる乱雑なものではありません。編集済みの YAML を JSON に再変換し、データ ツリーを比較します。ただし、編集中に追加されたコメントはその逆パスに耐えられないことに注意してください。
逆方向 — YAML マニフェストを JSON に変換して、引用符で囲まれた値の型付け方法など、API が受け取る内容を正確に確認します。
逆方向も可能です。 YAML は、厳密な JSON スキーマまたはコア スキーマのいずれかで読み取られ、選択されたインデントで JSON が書き込まれます。厳密モードでは、`~`、空の値、および `0o755` がテキストとして保持されます。コアはそれらを別の方法で解決します。どちらも `NO` を false として扱いません。
これにより、ToolAcre のパーサーが JSON 形式のデータとして送信するものが明確になります。これは、特にカスタム タグやアプリケーション固有のフィールドに対して、クラスターの YAML ライブラリまたはスキーマの許可が何を行うかを証明するものではありません。
これでカバーされないもの — Kubernetes スキーマに対するマニフェストの検証 (kubectl のドライランまたはスキーマ ツールが必要)
Kubernetes スキーマ、CRD 定義、またはアドミッション ルールがロードされていません。不明なフィールド、非推奨のバージョン、無効な組み合わせは完全に変換される可能性があります。これらの質問には、ターゲット プラットフォームのドライランまたはスキーマ認識バリデータを使用してください。
ToolAcre は、認証、ライブ リソースのフェッチ、または望ましい状態と観察された状態の比較もできません。その仕事は構文マッピングで終了します。この境界を明示的に保つことで、読み取り可能なファイルが受け入れられたマニフェストと間違われるのを防ぎます。
要点: YAML で読み取り、JSON で検証 — そして、タブを離れることなく構文コンバーター パネルが 2 つの間で切り替わる方法
タスクに役立つ表記でリソースを読み取りますが、そのデータとドメイン ルールを個別に確認します。 JSON は明示的な句読点を提供します。 YAML は、コンパクトなブロック ビューを提供します。通常の JSON 型の値の場合、コメントとスタイルがラウンドトリップできない場合でも、2 つはツリーを保持できます。
構文コンバーターはブラウザーでこれらのビューを切り替え、スキーマ オプションと警告を表示します。これをフィールドの削除やリソースのデプロイの権限としてではなく、検査段階として使用します。
インシデントのメモとして、元のコマンド出力、変換された検査コピー、およびすべての手動削除を個別の成果物として記録します。この証跡により、別のエンジニアはクラスターから返されたものと、可読性や再利用のために削除されたものを区別できるようになります。また、クリーンな YAML の抜粋が完全なライブ リソースと間違われるのを防ぎます。コンバーターは表記の変更のみに貢献します。来歴と変更管理は引き続き運用ワークフローの一部です。