問題タブ [kubernetes-apiserver]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kubernetes - Kubernetes CRD - 既存の検証仕様を参照
既存の検証仕様にアクセスする方法はありますか? たとえば、CRD で NodeAffinity を設定できるようにしたいのですが、 $ref: だけにしたいと考えています。ここで API 全体を見つけました: https://github.com/kubernetes/kubernetes/blob/master/api/openapi-spec/swagger.json または kubectl プロキシ -> localhost:8001/openapi/v2 (クラスター内から)
API 検証スキーマを手動でコピー ペーストすることもできましたが、CRD 内から既存の OpenAPI 検証仕様を $ref. $ref: localhost:8001/openapi/v2/definitions/io.k8s.api.core.v1.NodeAffinity のようなものを想像します
これが可能である場合、内部の $refs も解決されますか?
参考までに、API での nodeaffinity 定義は次のようになります。
(重要な場合は、Ansible で Operator-SDK を使用)
編集:(さらに説明するために完全な例を追加)
Workshop という名前の CRD があり、特定の仕様パラメーターの検証が必要です。
次に、この CustomResourceDefinition の下にあるすべてのポッドに適用される nodeAffinity 仕様フィールドを追加する必要があります。その検証は、ポッドの nodeAffinity の検証とまったく同じになります。
https://github.com/kubernetes/kubernetes/blob/master/api/openapi-spec/swagger.jsonから OpenApi で既に作成されている検証仕様を取得し 、YAML に変換して仕様に追加します。 .
うわー、たった 1 つのフィールド (およびそのサブ フィールド) を検証するために、私の CRD 定義は 100 行以上増えました。これらはすべて、Kubernetes ネイティブのポッド API 定義に既に存在するものを再実装するためのものです。また、手動でコピーして貼り付け、Kubernetes 仕様のすべての参照を手動で解決するのに約 15 分かかりました。次のいずれかを行うのはあまり意味がありません。
A) この長い API 仕様を外部ファイルに保存し、$ref: externalfile.json を使用してそれを取り込み、CRD を小さくクリーンに保ちます。
またはさらに良い
B) 次のように $ref タグを使用して、既に存在する実際の Kubernetes ネイティブの検証仕様を挿入します。
30 行ほどのコードに戻り、さらに、Kubernetes API 自体から情報を取得しているため、検証仕様は Kubernetes ネイティブ検証で最新の状態に保たれます。これによると、これを行う際に $ref をサポートする必要があります: https://swagger.io/docs/specification/using-ref/#syntax