CNPA — クラウドネイティブプラットフォームエンジニアリングアソシエイト
APIサーバが実際に拒否するものを見る
このラボは本物のAPIサーバーで動きます
CRDは、「APIサーバーがすでに持っている能力を、自分の型に貸してくれる」ものです。 その能力とは、スキーマ検証・デフォルト値・RBAC・監査・watchです。
ところが、偽のクラスターにはその能力がありません。何を入れても受け入れるため、 誤った値が拒否されるところも、デフォルト値が補われるところも見られませんでした。 拒否されてみて初めて、契約が何なのかがわかります。
最初の起動に2分ほどかかります。
目標
開発者に渡すプラットフォームAPIを1つ設計し、それが実際に柵の役割を 果たしているかを確認します。
ステップ
- CRDを作成し、APIサーバーがそれを受け入れることを、次のファイルに保存してください:
/root/cnpa/crd.txt - スキーマが誤った値を拒否することを、次のファイルに保存してください:
/root/cnpa/validate.txt - デフォルト値が補われることを、次のファイルに保存してください:
/root/cnpa/defaults.txt kubectl getで見やすく表示されるように出力列を付けて、次のファイルに保存してください:/root/cnpa/columns.txt- RBACで開発者にできることを定め、次のファイルに保存してください:
/root/cnpa/rbac.txt - クォータでリソースの柵を立て、次のファイルに保存してください:
/root/cnpa/quota.txt - デプロイ元帳からDORAメトリクスを計算し、次のファイルに保存してください:
/root/cnpa/dora.txt - 次のファイルに
crd_kind=、rejected=yes、deploy_freq=の3行と説明を書いてください:/root/cnpa/report.md
参考
kubectl explainが、CRDのスキーマを読んで表示してくれます。ドキュメントを別に書かなくてよい理由です。- 拒否メッセージは、そのまま残してください。それが契約の証拠です。
- よくある間違い:
x-kubernetes-preserve-unknown-fields: trueを入れることです。切り捨ても検証も、丸ごとオフにしてしまいます。 - よくある間違い:
additionalProperties: falseを使うことです。propertiesと一緒には使えず、使う必要もありません。 - よくある間違い: デフォルト値をコントローラーで補うことです。APIサーバーが補えば、
kubectl get -o yamlにすぐ表示されます。
自分の型をAPIに登録する
CRDを作成し、APIサーバーがそれを受け入れることを、次のファイルに保存してください: /root/cnpa/crd.txt
group・names・versionsの3つが必要です。servedとstorageも確認しておいてください。
拒否されてみて初めて契約がわかる
スキーマが誤った値を拒否することを、次のファイルに保存してください: /root/cnpa/validate.txt
必須フィールドを抜いてみて、型を間違えてみて、存在しないフィールドを入れてみてください。
抜けた値をAPIサーバーが補う
デフォルト値が補われることを、次のファイルに保存してください: /root/cnpa/defaults.txt
スキーマにdefault:を置くと、保存時点で補われます。kubectl get -o yamlで確認してください。
kubectl getが使いやすいと、実際に使われる
kubectl getで見やすく表示されるように出力列を付けて、次のファイルに保存してください: /root/cnpa/columns.txt
additionalPrinterColumnsをversionsの下に置きます。
開発者にできることを決める
RBACで開発者にできることを定め、次のファイルに保存してください: /root/cnpa/rbac.txt
CRDにも、ほかのリソースとまったく同じようにRBACがかかります。kubectl auth can-i --asで確認してください。
リソースの柵
クォータでリソースの柵を立て、次のファイルに保存してください: /root/cnpa/quota.txt
ResourceQuotaはネームスペース全体の合計を制限し、LimitRangeは個々のPodのデフォルト値と上限を決めます。
メトリクスは計算の仕方で分かれる
デプロイ元帳からDORAメトリクスを計算し、次のファイルに保存してください: /root/cnpa/dora.txt
デプロイ元帳から、4つのメトリクスを自分で計算してください。定義ではなく、何を数えるかが答えを変えます。
何を学んだか
次のファイルにcrd_kind=、rejected=yes、deploy_freq=の3行と説明を書いてください: /root/cnpa/report.md
crd_kind=、rejected=yes、deploy_freq=の3行と説明を書いてください。