第17章 Kubernetesを拡張する Kubernetesを拡張する
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
アプリケーションがKubernetesクラスタ内でオーケストレーションされれば、APIオブジェクトとしてKubernetesクラスタにデプロイできる便利なツールやユーティリティは無数に存在する。課題は、APIが無制限に広がることなく、この爆発的なオブジェクトとユースケースをどのように受け入れるかだった。
拡張ユースケースとAPIの乱立の間のこの緊張を解決するために、Kubernetes APIを拡張可能にすることに多大な努力が払われた。この拡張性は、クラスタ演算子が自分のニーズに合った追加コンポーネントで自分のクラスタをカスタマイズできることを意味する。この拡張性により、クラスタを自分で増強したり、コミュニティが開発したクラスタアドオンを利用したり、さらにはクラスタプラグインのエコシステムにバンドルされて販売される拡張機能を開発したりすることが可能になった。拡張性は、演算子パターンのような、システム全体を管理する全く新しいパターンも生み出した。
独自の拡張子を構築するのか、エコシステムから演算子を消費するのかにかかわらず、Kubernetes APIサーバがどのように拡張され、どのように拡張子を構築して提供できるかを理解することは、Kubernetesとそのエコシステムの完全なパワーを引き出すための重要な要素である。これらの拡張性メカニズムを使用してKubernetesの上に構築される高度なツールやプラットフォームが増えているため、最新のKubernetesクラスタでアプリケーションを構築する方法を理解するためには、これらの動作方法に関する実務知識が不可欠である。
Kubernetesを拡張するとはどういうことか?
一般的に、Kubernetes APIサーバへの拡張は、クラスタに新しい機能を追加するか、ユーザがクラスタと対話できる方法を制限して調整する。クラスタ管理者がクラスタにサービスや機能を追加するために使用できるプラグインの豊富なエコシステムがある。注意すべき点は、クラスタを拡張することは非常に高い権限を必要とするということだ。クラスタを拡張するにはクラスタ管理者権限が必要なので、任意のユーザや任意のコードに拡張すべき機能ではない。クラスタ管理者であっても、サードパーティツールをインストールする際には注意深く慎重を期す必要がある。アドミッションコントローラのように、クラスタ内で作成されているすべてのオブジェクトを表示するために使用できる拡張機能もあり、Secretsを盗んだり悪意のあるコードを実行したりするためのベクトルとして簡単に使用できる。さらに、クラスタを拡張すると、純正のKubernetesとは異なるものになる。複数のクラスタで実行する場合、クラスタ間のエクスペリエンスの一貫性を維持するためのツールを構築することは非常に価値があり、これにはインストールされるエクステンションも含まれる。
拡張性の点
CustomResourceDefinitionsからコンテナネットワークインタフェースプラグインまで、Kubernetesを拡張する方法はたくさんある。CNI/CSI/CRI(Container Network Interface/Container Storage Interface/Container Runtime Interface)拡張は、本書が執筆されたKubernetesエンドユーザよりも、むしろKubernetesクラスタプロバイダによって一般的に使用されるため、ここでは取り上げない。 ...