HN 日本語サマリー

← 一覧へ戻る
インフラ・DevOps

Hetzner Cloud 上での安価なセルフホスト Kubernetes

Cheap Self-Hosted Kubernetes on Hetzner Cloud (blog.qstars.nl)

44 pointsby victorbrink19 コメント

要約

この記事では、Hetzner Cloud 上に安価で本番稼働可能な Kubernetes クラスターをデプロイするためのオープンソース Terraform プロジェクト「terraform-hcloud-kube-hetzner」を紹介します。K3s と openSUSE MicroOS を利用し、コスト効率と使いやすさのバランスを取りながら、信頼性の高い Kubernetes 環境を構築する方法を解説しています。

全文翻訳

この記事のスタータープロジェクトは github.com/qstarsit/hcloud-kube-hetzner で見つけることができます Kubernetes は素晴らしいワークロードAPIであり、コミュニティは基盤となるマシンやインフラストラクチャをアプリケーションデプロイメントから抽象化する、高度に拡張可能な標準を構築してきました。しかし、クラウドネイティブエコシステムにはベンダーロックインの感覚が伴うことがあります。マネージドロードバランシング、シームレスなノードオートスケーリング、豊富なストレージオプション、統合ネットワーキング、洗練された運用ツールといった機能は、プレミアム価格で提供されます。Kubernetes を自分で「The Hard Way」で実行・運用するのは、圧倒されるほど大変で時間のかかる作業になり得ます。そのため、この記事では terraform-hcloud-kube-hetzner を取り上げます。これは、Hetzner Cloud 上に本番稼働可能な K3s クラスターを簡単にデプロイできるオープンソースの Terraform プロジェクトで、使いやすさ、信頼性、コスト効率のバランスを取っています。そして、私たちのヨーロッパ起源 🇪🇺 に忠実であり続けています。 Hetzner Hetzner は、高性能なハードウェアを手頃で予測可能な価格で提供することで高い評価を築いているドイツのインフラストラクチャプロバイダーです。ハイパースケーラーよりも機能は少ないですが、少数のことを非常にうまくこなすことに焦点を当てています。これにより、インディーハッカーやスタートアップの間で人気のホスティングプロバイダーとなっています。同社のクラウド製品は近年大きく成熟し、リソースを管理するための堅牢なAPIを備えています。プライベートネットワーキング、ロードバランサー、ネットワークアタッチトストレージ、仮想マシンを提供しています。これは、よりコスト効率の高いプラットフォームで適切な自動化を求めるチームにとって、堅実な代替手段となります。Hetzner は主にヨーロッパで最新のデータセンターを運営しており、米国やアジアにもロケーションを提供しています。最近のデータ主権への注目の高まりを考慮すると、Hetzner がドイツ企業であるという事実は、データ主権に関する安心感を与えます。 Kube-Hetzner Kube-Hetzner は、(高可用性) 自動アップグレードクラスターを設定するための、最適化された使いやすい Terraform モジュールです。K3s を Hetzner Cloud 上で信頼性高く実行するために必要な多くのベストプラクティスをコード化しています。このプロジェクトは、クラスターのブートストラップとメンテナンスに関わる多くの重労働を処理します。コンピューティングリソースのプロビジョニング、プライベートネットワーキングの設定、ロードバランサーのセットアップ、ノードプールの管理、そしてそれらすべてを連携させる作業です。アップグレードはデフォルトで自動的かつローリングで行われるため、メンテナンス中の手動介入とダウンタイムを削減します。Hetzner のネイティブツールをクラスターに直接統合しており、hcloud CSIドライバーとhcloud Cloud Controller Manager (CCM) が含まれます。これにより、Kubernetes はロードバランサーやブロックストレージなどのリソースを Kubernetes 経由で自動的にプロビジョニングおよび管理できるようになります。 MicroOS コンテナの世界では、少ない方が多いです。これは、ワークロードの基盤となるオペレーティングシステムにも当てはまります。Ubuntu、Debian、RedHat Enterprise Linux のような従来のサーバーディストリビューションには、汎用的な使用のための幅広いパッケージやサービスが含まれていますが、コンテナワークロードには不要なものも多く含まれています。このため、Talos、CoreOS、Bottlerocket、flatcar など、コンテナ中心のオペレーティングシステムが開発されてきました。Kube-Hetzner は、すべてのノードで openSUSE の MicroOS を利用しています。MicroOS は、コンテナワークロードの実行に特化した、フットプリントの小さい安定したオペレーティングシステムです。ローリングリリース、アトミック&トランザクショナルアップデート、デフォルトでのセキュアアップデートを備えています。この OS は、予測可能で、回復力があり、起動ごとに同じように動作するように設計されています。MicroOS はイミュータブルであり、実行時に変更することはできません。アップデートは Btrfs スナップショットを使用してトランザクショナルに適用され、システムが完全に成功するか、クリーンな状態にロールバックすることを可能にします。誤ったアップデートが発生した場合、手動操作なしで以前のスナップショットが自動的に起動されます。読み取り専用のルートファイルシステムは、攻撃対象領域を減らします。コンテナが侵害された後でも、ホストバイナリやオペレーティングシステムの構成を変更することはできません。攻撃者がホストレベルのアクセス権を取得した場合でも、再起動時に変更は破棄されます。アプリケーションワークロードはホストオペレーティングシステムとは独立して管理され、ルートファイルシステムにはインストールされません。これにより、設定ドリフトを防ぎ、すべてのノードが交換可能であり、繰り返し展開、交換、または復旧できることを保証します。 K3s クラスターの心臓部は、Rancher の軽量 Kubernetes ディストリビューションである K3s です。エッジや IoT デバイスのようなコンピューティングリソースが限られた環境向けに特別に設計されています。K3s は、Kubernetes API サーバー、kube proxy、kubelet などのコンポーネントを単一のバイナリにパッケージ化し、依存関係とクラスターブートストラップに必要な手順を削減します。これは完全に準拠したディストリビューションであり、運用を簡素化します。最小限のデザインにもかかわらず、K3s は本番稼働可能であり、小規模から中規模のクラスターに適しています。標準的な Kubernetes インストールを実行する際のオーバーヘッドの多くをコンパクトにし、抽象化します。さらに、K3s と Kube-Hetzner は適切なデフォルト設定を備えています。Pod およびサービスネットワークで使用される IP 範囲を変更したり、内部クラスターホスト名を変更したりするなど、クラスターの高度な設定を自由に変更できます。これらの設定については、Terraform で設定する際にさらに詳しく説明します。 K3s サーバー設定 クラスターの計画 この記事では、標準的な高可用性クラスターをデプロイします。3つのコントロールプレーンノードと3つのワーカーノードを、Falkenstein、Nuremberg、Helsinki に分散させます。コスト効率のため、Rancher のローカルパスプロビジョナーを有効にして、VPS ノードにアタッチされたディスクを利用します。これにより、ワークロードに応じて、リージョナルブロックストレージまたはノードにアタッチされたディスクをローカルパスを使用して選択できます。Longhorn は使用せず、ローカルパスプロビジョナーとブロックストレージの組み合わせで私のワークロードには十分です。リージョン間でレプリケートされ、Pod スケジューリングの決定に依存しないストレージが必要な場合は、Longhorn を有効にできます。Longhorn を使用する際のパフォーマンスのボトルネックに注意し、ユースケースに合わせてベンチマークしてください。💡 代替案として、2つのドイツサイト間でのデュアルリージョンフェイルオーバー設定を選択することもできます。Helsinki リージョンは一般的にサーバーの可用性が高く、本番ワークロードに対して許容できるレイテンシがありますが、Falkenstein と Nuremberg 間のサイト間接続よりもレイテンシが高くなります。 コントロールプレーンとワーカーノードの希望するマシンタイプを選択してください。私は CX23 コントロールプレーン (2 vCPU / 4GB RAM / 40GB ディスク @ €3.49/月) と、ワーカーには CX33 (4 vCPU / 8GB RAM / 80GB ディスク @ €5.49/月) を選択します。これらのインスタンスは Hetzner の共有クラウドオファリングの一部であり、リソースは同じ物理ホスト上の他の顧客と共有されます。私の経験では、CPU スティールタイムは顕著ではなく、Hetzner がサーバーを積極的に過剰サブスクライブしているとは考えていません。とはいえ、特定のワークロードとビジネス要件に基づいて、この選択を慎重に評価する必要があります。これにより、6台のマシンで月額 €26.97 になります。次に、クラスターのネットワーク構成を決定する必要があります。この記事では、シンプルに保ちます。各ノードにパブリックIPアドレスを割り当て、ポート22 (SSH) への接続を私のIPアドレスにホワイトリスト登録します。API サーバーは外部トラフィックには閉じますが、コントロールプレーンの前にロードバランサーを配置します。さらに、Traefik イングレスクラスには独自のロードバランサーが用意されます。これにより、クラスター管理とアプリケーショントラフィックのための、高可用性で独立したエントリポイントが得られます。これらの2つの追加ロードバランサー (lb11) は、月額 €5.39 の追加料金となります。パブリックIPアドレスは月額 €1.70 で、追加で €10.20 となり、VAT 除外で合計 €47.95/月、VAT 込みで €58.03/月になります。私にとって、これはクラスターのコストとしては非常に合理的です。プロモーション割引や無料ティアを除けば、GCP GKE や AWS EKS での典型的なマネージドクラスターは月額 $70-$75 から始まります。これはクラスターを実行するためのコストだけであり、スケジュールするワークロードのコストではありません。しかし、