2024.04.05Ænixでは、Kubernetesに対する深い愛着があり、近いうちにすべての最新テクノロジーがKubernetesの驚くべきパターンを活用し始めることを夢見ています。自分だけのクラウドを構築することを考えたことはありませんか?きっと考えたことがあるでしょう。Cozystackの開発における私たちの経験は、その点を深く掘り下げる必要がありました。自分だけのクラウドを構築することを考えたことはありませんか?Kubernetesはこの目的のために設計されたものではなく、ベアメタルサーバー用にOpenStackを使用し、意図したとおりにその内部でKubernetesを実行すればよいのではないかと主張する人もいるかもしれません。することで、単に責任があなたの手からOpenStack管理者の手に移っただけです。これにより、少なくとも1つの巨大で複雑なシステムがエコシステムに追加されることになります。結局のところ、Kubernetesにはテナント用のKubernetesクラスターを実行するために必要なものがすべて揃っています。Kubernetesをベースにしたクラウドプラットフォームの開発における私たちの経験を共有したいと思います。私たち自身が使用しており、あなたの注目に値すると信じているオープンソースプロジェクトを紹介します。この一連の記事では、オープンソースのテクノロジーのみを使用して、ベアメタルから管理されたKubernetesを準備する方法についての私たちの物語をお伝えします。データセンターの準備、仮想マシンの実行、ネットワークの分離、フォールトトレラントなストレージのセットアップといった基本的なレベルから、動的なボリュームのプロビジョニング、ロードバランサー、オートスケーリングを備えた本格的なKubernetesクラスターのプロビジョニングまでを扱います。自分のクラウドの基礎を準備する。ベアメタル上でのKubernetesの準備と運用における課題、およびインフラストラクチャをプロビジョニングするための既成のレシピ。ネットワーク、ストレージ、仮想化。Kubernetesを仮想マシン起動のためのツールにする方法とそのために必要なもの。APIと、ボタンを押すだけでKubernetesクラスターのプロビジョニングを開始する方法。オートスケーリング、ボリュームの動的プロビジョニング、ロードバランサーの仕組み。さまざまなテクノロジーをできるだけ独立して説明しようと思いますが、同時に、私たちの経験と、なぜある解決策に至ったのかを共有します。Kubernetesの主な利点と、それがクラウドリソースの使用へのアプローチをどのように変えたかを理解しましょう。クラウドとベアメタルでは、Kubernetesの使い方が異なることを理解することが重要です。クラウド上のKubernetesクラウド上でKubernetesを運用する場合、永続ボリューム、クラウドロードバランサー、ノードのプロビジョニングプロセスを気にする必要はありません。これらはすべて、Kubernetesオブジェクトの形式であなたのリクエストを受け入れるクラウドプロバイダーによって処理されます。サーバー側は完全にあなたから隠されており、クラウドプロバイダーがどのように正確に実装しているかを知る必要はありません。それはあなたの責任範囲ではないからです。クラウド上のKubernetesを示す図。ロードバランシングとストレージはクラスターの外部で行われていますKubernetesは、どこでも同じように機能する便利な抽象化を提供しているため、あらゆるクラウドのKubernetes上にアプリケーションをデプロイできます。クラウドでは、Kubernetesコントロールプレーン、仮想マシン、永続ボリューム、ロードバランサーなど、いくつかの個別のエンティティを持つことが非常に一般的です。これらのエンティティを使用することで、高度に動的な環境を作成できます。Kubernetesのおかげで、仮想マシンは今やクラウドリソースを利用するための単なるユーティリティエンティティとしてのみ見られるようになりました。仮想マシンの中にデータを保存することはありません。仮想マシンをすべて削除して、アプリケーションを壊すことなく再作成できます。Kubernetesコントロールプレーンは、クラスター内で何が実行されるべきかについての情報を保持し続けます。ロードバランサーは、新しいノードにトラフィックを送信するためにエンドポイントを変更するだけで、ワークロードにトラフィックを送信し続けます。データはクラウドが提供する外部の永続ボリュームに安全に保存されます。このアプローチは、クラウドでKubernetesを使用する際の基本です。その理由はかなり明白です。システムが単純であるほど安定性が高くなり、このシンプルさのためにクラウドでKubernetesを選択するのです。ベアメタル上のKubernetesクラウドでKubernetesを使用することは本当に簡単で便利ですが、ベアメタルへのインストールについては同じことが言えません。ベアメタルの世界では、Kubernetesは逆に非常に複雑になります。ネットワーク全体、バックエンドストレージ、クラウドバランサーなどは、通常、クラスターの外部ではなく内部で実行されるためです。その結果、このようなシステムは更新と保守がはるかに難しくなります。ベアメタル上のKubernetesを示す図。ロードバランシングとストレージはクラスターの内部で行われていますご自身で判断してみてください。nodeを使用する)だけで、イミュータブルなイメージに基づいて新しいノードを作成することをノード管理ツールに任せることができます。新しいノードはクラスターに参加し、Kubernetesの世界で非常にシンプルでよく使われるパターンに従って、ノードとして「そのまま動作」します。多くのクラスターでは、安価なスポットインスタンスを利用できるため、数分ごとに新しい仮想マシンをオーダーしています。物理サーバーを使用している場合は、簡単に削除して再作成することはできません。物理サーバーはクラスターサービスを実行していたり、データを保存していたりすることが多いため、その更新プロセスははるかに複雑になるからです。この問題を解決するアプローチはさまざまです。APIとMetal3を通じた物理ノードのプロビジョニングの完全な自動化まで幅広くあります。Linuxが提供するハイブリッドアプローチが気に入っています。このアプローチでは、システム全体が単一の設定ファイルで記述されます。このファイルのほとんどのパラメーターは、Kubernetesコントロールプレーンコンポーネントのバージョンを含め、ノードを再起動または再作成することなく適用できます。それでも、Kubernetesの宣言的な性質を最大限に保持しています。このアプローチは、ベアメタルノードを更新する際のクラスターサービスへの不要な影響を最小限に抑えます。ほとんどの場合、マイナーアップデートの際に仮想マシンを移行したり、クラスターファイルシステムを再構築したりする必要はありません。将来のクラウドの基盤を準備するさて、自分だけのクラウドを構築することに決めたとしましょう。基盤となるレイヤーが必要です。サーバーにKubernetesをインストールする方法だけでなく、それをどのように更新し、維持していくかについても考える必要があります。カーネルの更新、必要なモジュールのインストール、パッケージやセキュリティパッチなどについても考えなければならないことを考慮してください。クラウド上の既製のKubernetesを使用する際に気にする必要のないことをはるかに多く考えなければなりません。Linuxのような特殊なディストリビューションを検討することもできます。それぞれに長所と短所があります。Ænixでは、ZFS、DRBD、OpenvSwitchなどのかなり特殊なカーネルモジュールを使用しているので、必要なモジュールをすべて事前に含んだシステムイメージを形成する方法を選びました。Linuxが私たちにとって最も便利であることがわかりました。-その結果、必要なものがすべて含まれたDockerコンテナイメージが得られます。Linuxをインストールできます。このイメージには、必要なすべてのファームウェアとカーネルモジュールが含まれます。新しく形成されたイメージをノードにどのように配信するかという問題が発生します。間、PXEブートのアイデアについて考えていました。2年前に記事を書いたKubefarmプロジェクトは、完全にこのアプローチを使用して構築されました。残念ながら、他のクラスターを保持する最初の親クラスターをデプロイするのに役立つわけではありません。そこで今回、PXEアプローチを使用して同じことを行うのに役立つソリューションを用意しました。基本的に必要なのは、コンテナ内で一時的なDHCPとPXEサーバーを実行することだけです。すれば、ノードはあなたのイメージから起動し、Debianベースの簡単なスクリプトを使用して、ノードのブートストラップに役立てることができます。talos-bootstrapスクリプトのソースコードはGitHubで入手できます。このスクリプトを使用すると、ベアメタル上に5分でKubernetesをデプロイし、それにアクセスするためのkubeconfigを取得できます。多くの未解決の問題が残っています。システムコンポーネントの配信この段階では、さまざまなワークロードを実行できるKubernetesクラスターがすでに手に入っています。完全に機能しているわけではありません。ネットワークとストレージを設定する必要があるだけでなく、仮想マシンを実行するためのKubeVirtや、監視スタックやその他のシステム全体のコンポーネントなど、必要なクラスター拡張機能をインストールする必要があります。従来、これはHelmチャートをクラスターにインストールすることで解決されています。installコマンドを実行することで実現できますが、アップデートを追跡したい場合や、複数のクラスターを持っていてそれらを均一に保ちたい場合、このアプローチは不便になります。実際には、これを宣言的に行う方法はたくさんあります。これを解決するには、最高のGitOpsプラクティスを使用することをお勧めします。ArgoCDやFluxCDのようなツールを指します。ArgoCDはグラフィカルインターフェースと中央コントロールプレーンを備えているため開発目的には便利ですが、一方でFluxCDはKubernetesディストリビューションの作成により適しています。FluxCDを使用すると、どのチャートをどのパラメーターで起動すべきかを指定し、依存関係を記述できます。すれば、FluxCDがすべてを処理してくれます。新しく作成したクラスターにFluxCDを1回インストールし、適切に設定することをお勧めします。これにより、FluxCDは必要不可欠なコンポーネントをすべて自動的にデプロイできるようになり、クラスターを目的の状態にアップグレードできます。succeededまとめ結果として、誰にでも提供できる高い再現性を持つ環境を実現でき、意図したとおりに動作することがわかります。これは、実際にCozystackプロジェクトが行っていることであり、あなた自身が無料で試すことができます。次の記事では、仮想マシンを実行するためのKubernetesの準備方法とボタンをクリックするだけでKubernetesクラスターを実行する方法について説明します。京ICP备17074266号-3。