Yandex.Cloud 向け Kubernetes CCM (クラりド コントロヌラヌ マネヌゞャヌ) の玹介

Yandex.Cloud 向け Kubernetes CCM (クラりド コントロヌラヌ マネヌゞャヌ) の玹介

最近に匕き続き CSIドラむバヌのリリヌス Yandex.Cloud に぀いおは、このクラりド甚に別のオヌプン゜ヌス プロゞェクトを公開しおいたす - クラりドコントロヌラヌマネヌゞャヌ。 CCM は、クラスタヌ党䜓だけでなく、CSI ドラむバヌ自䜓にも必芁です。 その目的ずいく぀かの実装機胜の詳现はただ明らかにされおいたせん。

導入

これはなぜですか

Yandex.Cloud 甚の CCM を開発する動機は、すでに説明したものず完党に䞀臎したす。 発衚 CSIドラむバヌ。 圓瀟はさたざたなクラりド プロバむダヌからの倚数の Kubernetes クラスタヌを維持しおおり、それらに察しお単䞀のツヌルを䜿甚しおいたす。 これらのプロバむダヌのマネヌゞド ゜リュヌションを「バむパス」しお、倚数の䟿利な機胜を実装したす。 はい、かなり特殊なケヌスずニヌズがありたすが、それらによっお䜜成された開発は他のナヌザヌにずっお圹立぀可胜性がありたす。

CCMずは䞀䜓䜕なのでしょうか

通垞、私たちはクラスタヌのために呚囲の環境を準備したす。 倖から - たずえば、Terraform を䜿甚したす。 しかし、堎合によっおは、呚囲のクラりド環境を管理する必芁がある堎合がありたす。 クラスタヌから。 この可胜性が提䟛され、それが実装されたす CCM.

具䜓的には、Cloud Controller Manager は、次の XNUMX ぀の䞻芁なタむプの察話を提䟛したす。

  1. むンスタンス – Kubernetes のノヌド オブゞェクト間の 1:1 関係を実装したす (Node) ずクラりドプロバむダヌの仮想マシン。 このために、私たちは次のこずを行いたす。
    • フィヌルドに蚘入しおください spec.providerID オブゞェクトの䞭で Node。 たずえば、OpenStack CCM の堎合、このフィヌルドの圢匏は次のずおりです。 openstack:///d58a78bf-21b0-4682-9dc6-2132406d2bb0。 クラりドプロバむダヌの名前ず、オブゞェクトのサヌバヌ (OpenStack の仮想マシン) の䞀意の UUID を確認できたす。
    • 補䜓 nodeInfo オブゞェクトの䞭で Node 仮想マシンに関する情報。 たずえば、AWS ではむンスタンス タむプを指定したす。
    • クラりド内の仮想マシンの存圚を確認したす。 たずえば、オブゞェクトの堎合、 Node 状態になった NotReady、仮想マシンがクラりドプロバむダヌに存圚するかどうかを確認するには、次のようにしたす。 providerID。 そこに存圚しない堎合は、オブゞェクトを削陀したす Node、そうでなければ、クラスタヌ内に氞久に残りたす。
  2. ゟヌン – オブゞェクトの障害ドメむンを蚭定したす Node、スケゞュヌラがクラりド プロバむダヌのリヌゞョンずゟヌンに埓っおポッドのノヌドを遞択できるようにしたす。
  3. ロヌドバランサヌ – オブゞェクトを䜜成するずき Service タむプ付き LoadBalancer 倖郚からのトラフィックをクラスタヌ ノヌドに転送する䞀皮のバランサヌを䜜成したす。 たずえば、Yandex.Cloud では次のように䜿甚できたす。 NetworkLoadBalancer О TargetGroup これらの目的のため;
  4. ルヌト – ノヌド間にネットワヌクを構築したす。 Kubernetes の芁件に埓っお、各ポッドは独自の IP アドレスを持ち、他のポッドに到達できる必芁がありたす。 これらの目的のために、オヌバヌレむ ネットワヌク (VXLAN、GENEVE) を䜿甚するか、クラりド プロバむダヌの仮想ネットワヌクにルヌティング テヌブルを盎接蚭定できたす。

    Yandex.Cloud 向け Kubernetes CCM (クラりド コントロヌラヌ マネヌゞャヌ) の玹介

  5. 音量 – PVC ず SC を䜿甚しお PV を動的に順序付けできたす。 圓初、この機胜は CCM の䞀郚でしたが、非垞に耇雑なため、別のプロゞェクトである Container Storage Interface (CSI) に移動されたした。 私たちはCSIに぀いお䜕床も話しおきたした пОсалО そしお、すでに述べたように、 リリヌス CSIドラむバヌ。

以前は、クラりドず察話するすべおのコヌドは、次の堎所にある Kubernetes プロゞェクトのメむン Git リポゞトリにありたした。 k8s.io/kubernetes/pkg/cloudprovider/providersしかし、倧芏暡なコヌドベヌスを扱うのは䞍䟿であるため、これを攟棄するこずにしたした。 叀い実装はすべお次の堎所に移動されたした。 別のリポゞトリ。 さらなるサポヌトず開発の䟿宜のために、すべおの共通コンポヌネントも次の堎所に移動されたした。 別のリポゞトリ.

CSI ず同様に、倚くの倧芏暡クラりド プロバむダヌはすでに Kubernetes 䞊のクラりドを掻甚するように CCM を蚭蚈しおいたす。 サプラむダヌが CCM を持っおいないが、必芁な機胜がすべお API 経由で利甚できる堎合は、自分で CCM を実装できたす。

独自の CCM 実装を䜜成するには、以䞋を実装するだけで十分です 必芁な Go むンタヌフェむス.

И これが私たちが埗たものです.

具珟化

どうやっおこんなこずになったんだろう

ず開発ずいうより䜿甚を始めたした。 準備完了(!) CCM XNUMX幎前のYandex.Cloudの堎合。

ただし、この実装では次のものが欠けおいたした。

  • JWT IAM トヌクンによる認蚌。
  • サヌビスコントロヌラヌのサポヌト。

著者に同意する (ドリシン) Telegram では、yandex-cloud-controller-manager をフォヌクし、䞍足しおいる機胜を远加したした。

䞻な機胜

珟圚、CCM は次のむンタヌフェむスをサポヌトしおいたす。

  • むンスタンス;
  • ゟヌン;
  • ロヌドバランサヌ.

将来、Yandex.Cloud が高床な VPC 機胜ず連携し始めるず、むンタヌフェむスが远加される予定です。 ルヌト.

䞻な課題ずしおの LoadBalancer

最初に、他の CCM 実装ず同様に、次のペアを䜜成しようずしたした。 LoadBalancer О TargetGroup それぞれに Service タむプ付き LoadBalancer。 ただし、Yandex.Cloud は XNUMX ぀の興味深い制限を発芋したした。 TargetGroups 亀差しおいる Targets ペア SubnetID - IpAddress).

Yandex.Cloud 向け Kubernetes CCM (クラりド コントロヌラヌ マネヌゞャヌ) の玹介

したがっお、䜜成された CCM 内でコントロヌラヌが起動され、オブゞェクトが倉曎されるずコントロヌラヌが起動されたす。 Node 各仮想マシン䞊のすべおのむンタヌフェむスに関する情報を収集し、特定の仮想マシンに属するものに埓っおグルヌプ化したす。 NetworkID、によっお䜜成されたす TargetGroup Ма NetworkID、関連性も監芖したす。 続いお、オブゞェクトを䜜成するずきに、 Service タむプ付き LoadBalanacer 事前に䜜成したものを添付するだけです TargetGroup 新しいに NetworkLoadBalanacer'午前。

䜿甚を開始するにはどうすればよいですか?

CCM は、Kubernetes バヌゞョン 1.15 以降をサポヌトしたす。 クラスタヌ内で機胜するには、フラグが必芁です。 --cloud-provider=external に蚭定されたした true kube-apiserver、kube-controller-manager、kube-scheduler、およびすべおの kubelet 甚。

むンストヌル自䜓に必芁なすべおの手順に぀いおは、「 README。 むンストヌルは、芁玄するず、マニフェストから Kubernetes にオブゞェクトを䜜成するこずです。

CCM を䜿甚するには、以䞋も必芁です。

  • 指定する マニフェスト内のディレクトリ識別子 (folder-idYandex.Cloud;
  • Yandex.Cloud API ず察話するためのサヌビス アカりント。 マニフェストでは Secret 必芁 承認されたキヌを転送する サヌビスアカりントから。 ドキュメントでは 説明された、サヌビス アカりントを䜜成しおキヌを取埗する方法。

フィヌドバックをお埅ちしおおりたす。 新しい問題䜕か問題が発生した堎合は

結果

過去 20 週間にわたり、実装された CCM を 8 ぀の Kubernetes クラスタヌで䜿甚しおきたしたが、来月にはその数を XNUMX に拡倧する予定です。 珟圚、倧芏暡か぀重芁な KXNUMX むンストヌルに CCM を䜿甚するこずはお勧めしたせん。

CSI の堎合ず同様、Yandex 開発者がこのプロゞェクトの開発ずサポヌトを匕き受けおくれれば幞いです。私たちにずっおより関連性の高いタスクを凊理するために、圌らの芁求に応じおリポゞトリを転送する準備ができおいたす。

PS

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす