第18章. 一般的なプログラミング言語からKubernetesにアクセスする
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
本書の大半は、kubectl を介して直接、または Helm のようなツールを介して、宣言的な YAML設定を使用することに特化しているが、プログラミング言語から直接 Kubernetes API と対話する必要がある状況もある。 例えば、Helmツールの作者自身は、プログラミング言語でそのアプリケーションを書く必要があった。 より一般化すると、kubectl プラグインのような何らかの加算演算子や、Kubernetes 演算子のようなより複雑なコードを書く必要がある場合によくあることだ。
Kubernetesエコシステムの多くはプログラミング言語Goで書かれている。その結果、Go言語が最も豊富で広範なクライアントを持っている。 しかし、ほとんどの一般的なプログラミング言語(そしていくつかの一般的でないプログラミング言語にも)用の高品質なクライアントがある。Goクライアントの使用方法については、すでに多くのドキュメントがあり、多くの例があるため、この章では、Python、Java、.NETの例を用いて、Kubernetes APIサーバとの対話の基本をカバーする。
Kubernetes API:クライアントの視点
結局のところ、 Kubernetes APIサーバは単なるHTTP(S)サーバであり、各クライアントライブラリもまさにそのように認識しているが、各クライアントには様々なAPI呼び出しを実装し、JSONとの間でシリアライズする多くの追加ロジックがある。このようなことを考えると、KubernetesのAPIを操作するために単にプレーンなHTTPクライアントを使いたくなるかもしれないが、クライアントライブラリは、これらのさまざまなHTTP呼び出しを、コードをより読みやすくする意味のあるAPIにラップし(例えば、readNamespacedPod(...) )、静的な型チェックを容易にする意味のある型付きオブジェクトモデルにして、バグを少なくする(例えば、Deployment )。おそらくより重要なこととして、クライアントライブラリは、kubeconfigファイルやPodの環境から認可情報をロードするような、Kubernetes固有の機能も実装している。クライアントはまた、ポートフォワード、ログ、ウォッチなど、Kubernetes APIサーフェスの非RESTful部分の実装も提供する。これらの高度な機能については、後のセクションで説明する。
OpenAPIと生成されたクライアントライブラリ
Kubernetes APIのリソースと関数のセットは膨大だ。 異なるAPIグループには多くの異なるリソースがあり、これらの各リソースには多くの異なる演算子がある。もし開発者がこれらのAPI呼び出しをすべて手作業でオーサリングしなければならないとしたら、これらの異なるリソースとリソースのバージョンをすべて把握し続けることは、大規模な(そして紛れもなく退屈な)仕事になるだろう。特に、プログラミング言語ごとにクライアントを手書きしなければならないことを考えるとなおさらだ。その代わりに、クライアントは異なるアプローチをとり、Kubernetes APIサーバと対話する基本はすべて、コンパイラを逆にしたようなコンピュータプログラムによって生成される。APIクライアント用のコードジェネレーターは、Kubernetes ...