HetznerでKubernetesを使い、インフラコストを75%削減
(bilbof.com)Hetzner
- Hetznerへの移行は主にコスト削減のため。Hetznerの価格は世界的に見ても競争力がある。
- Hetznerは仮想マシンとベアメタルマシンを提供しており、AWSと比べると機能は限定的だが、価格でそれを補っている。
- Hetznerへの移行により、インフラコストを75%以上削減した。
Kubernetes on Hetzner
セルフマネージド Kubernetes
- DigitalOceanでKubernetesを運用しており、Hetznerでもセルフマネージド方式で運用している。
- Hetznerはマネージド Kubernetes コントロールプレーンを提供していないため、自分たちで管理する必要がある。
- TerraformとPuppetを使ってノードを管理・構成している。
ノードの役割
- クラスター内の役割をシンプルに保つため、
control-plane、worker、databaseというノード命名規則を使っている。 - 役割の追加は簡単だが、リソース利用の効率を損なう可能性がある。
ノード構築
- Terraformを使ってクラスターをブートストラップする。
- Hetznerはマネージドファイアウォールとネットワーキングを提供しており、Terraformで簡単に構成できる。
- サーバーはTerraformで完全に管理され、役割ごとのモジュールを作成することでサーバー追加を簡単にしている。
ネットワーキング
- ノードへの管理接続にはTailscale VPNを使用している。
- TailscaleはNATホールパンチングを提供するため、ポートを閉じたままでも安全に接続できる。
- HetznerのマネージドファイアウォールとUbuntuのUFWを使ってポートを遮断している。
- Calicoを使ってコンテナネットワークインターフェースを構成している。
ストレージ
- HetznerはnVME SSDとSSDベースのブロックストレージを提供している。
- Hetznerのボリュームにはスナップショット機能がないため、データバックアップは手動で行う必要がある。
- データベースノードではLocal Persistence Volume Static Provisionerを使ってローカルボリュームを事前プロビジョニングしている。
バックアップ
- Hetznerはボリュームバックアップを提供していないが、サーバー全体のバックアップは提供している。
- VMwareのVeleroを使ってネームスペースとPVCをバックアップしている。
- PostgresではpgBackRestを使用している。
追加機能
- SealedSecretsを使ってシークレットを管理。
- Node Exporter、Prometheus、Grafana、Lokiを使ってクラスターを監視。
- Alertmanagerを使ってSlackとの通知連携を行う。
HetznerでKubernetesを運用することについての所感
- Hetznerへの移行には約1週間かかり、追加のテストとチューニングに4週間を要した。
- Hetznerの価格は妥当で、他のプロバイダーと比べても低く維持されると考えている。
- HetznerにはIP品質の問題やカスタマーサービスの制約がある。
- Hetznerは新機能の投入が速い一方、採算の低いサービスはすぐに終了する可能性がある。
- 中央ヨーロッパのデータセンターは、ドイツのFalkenstein、Nuremberg、フィンランドのHelsinkiにある。
要約
- この移行はスムーズに進み、インフラコストを75%以上削減しつつ、クラスターのコンピューティングリソースを2倍に増やした。
- Hetznerはコスト削減が必要な場合に非常に有力な選択肢である。
- Hetznerのオープンソースコントローラーにより、ロードバランサー管理と永続ボリューム接続が容易になる。
1件のコメント
Hacker News の意見
数年にわたり、Hetznerの専用サーバーで顧客に Kubernetes クラスターを提供してきたが、性能は確かに優れており、通常はリクエスト時間が半分程度まで短縮される
ハードウェアが安いため、顧客ごとに専任の DevOps エンジニアリング時間も提供できるが、いくつか前提がある。アップデート検証用のステージングクラスターは事実上必須で、本番アップデートを日曜に勘で押し切りたい人はいない。アプリケーションレベルのレプリケーションが最重要で、その次がブロックレベルのレプリケーションであり、OpenEBS/Mayastor を使っている。複数の Postgres オペレーターを試した結果、現時点では StackGres が最も良いと見ている
Ansible プレイブックは資産なので、特定サービス向けによく整理してコメントを付けておけば、後で同じサービスを別の場所に再デプロイしやすくなる。可能なら、サーバー接続用の専用 10G ネットワークを勧める。1G は本番トラフィック、イメージの pull、サービス間トラフィックが合わさると不足し、AWS のようなアベイラビリティゾーン内通信よりレイテンシが 10 倍改善される
ネットワーク冗長化が必要なら、1G ポートに内部用の 1G vSwitch(VLAN)を作り、各サーバーにループバック IP を与え、BGP でルートを配布すればよい(bird)。MinIO クラスターはオペレーターを通じて定石どおりに運用すればそれほど難しくなく、ローカルの高帯域・低レイテンシなオブジェクトストレージを提供できる。初期投資には、邪魔されない熟練エンジニアリング時間が 2〜4 か月ほど必要で、HTTP ロードバランシングのような補助的で面倒な作業は、依然として CloudFlare のようなクラウドプロバイダーに任せられる
公開ドキュメントには 10G アップリンクのオプションがあるが外部ネットワーク用で、20TB 制限はかなり厳しそうに見える。内部クラスターの入出力なら、20TB は簡単に問題になり得る
その会社の社員で、数分で本番対応済みのクラスターを提供するプラットフォームを作った
コンサルティング会社ならその作業を売りたいだろうが、顧客の立場では月の AWS コストが 1 万ドル程度見込まれるのでなければ、まったく価値があるようには見えない。xkcd を思い出す: https://xkcd.com/1319/
Hetzner の専用サーバーで Kubernetes クラスターを運用したことがあり、Aurora、S3、ECS Fargate のような完全または高度なマネージドサービスも扱ったことがある
経験上、Hetzner のクラウド請求額は同等の AWS と比べて20% 程度まで下がることもあるが、そのコストメリットには大きなトレードオフが伴う
Hetzner Kubernetes では、NVMe ストレージベースの Ceph クラスター、MariaDB オペレーター、ネットワーキング用の Cilium、Helm チャート配信用の ArgoCD を管理していた。Kubernetes クラスターのアップデートも自分たちで処理する必要があり、一度はクラスター全体の障害まで経験した。Kubernetes と Ceph の両方で複数のバグに遭遇し、その多くは GitHub issue や Ceph トラッカーに記録されていた。管理・監視すべき作業リストは果てしなく、ワークロード数や環境の複雑さによっては、このような構成を維持することが DevOps チームのフルタイム業務になり得る
反対に、AWS や他の主要クラウドプロバイダーを使えば、はるかに手のかからない構成が可能になる。マネージドサービスを使えば保守の労力が大きく減り、チームの運用負担も下がる。結局、AWS は DevOps の作業量を大きく減らし、Hetzner はクラウド請求額を大きく下げる。どちらがより費用対効果に優れるかは**総所有コスト(TCO)**分析が必要で、Hetzner が初期には安く見えても、追加の DevOps 時間が節約分を相殺する可能性がある
例として 2 vCPU、4GB 構成と AWS の似た構成を比べると AWS ははるかに高いので、コスト分析を見てみたい。運用負担を減らすツールとして https://github.com/kube-hetzner/terraform-hcloud-kube-hetzner もある
根本原因を突き止めるのも簡単ではなく、オンラインには復旧に必要な呪文のようなコマンドがたくさんあったが、結局すべて消してクラスターを作り直した。それ以来、数週間ごとにそうしている。実際の Kubernetes 運用者なら証明書の自動アップグレードやその他多くのツールを備えているはずだが、会社ならそのような運用者に費用を払う必要がありそうだ
使っているところがあるのは知っているが、成熟したシステムである Lustre や GPFS と比べると、とてつもない時間の無駄になる。むしろ小さなファイルシステムを複数 NFS でエクスポートし、ブロックレベルのレプリケーションを保証するほうがよい。単一アドレス空間のファイルシステムは便利だが、大規模で安定させるための管理コストを負担する価値がない場合が多い。データベースのシャーディングのようにファイルシステムもシャーディングし、Kubernetes で正しいイメージに正しいストレージが付くよう、マッピングロジックを簡単に追加できる
DevOps の負担を大幅に減らしながら、ベアメタルの性能と柔軟性を両方得られる。完全マネージドの高価なサービスと完全な自前構築の間にある優れたハイブリッドだ。費用はかなりかかるのでスタートアップには良い選択ではないかもしれないが、72GB RAM または 36 CPU 以上、おおよそ中規模ノード 9 台程度のクラスターなら、OpenShift のようなものを必ず検討する価値がある
Hetznerのボリュームが本番データベースには遅すぎるという問題は、意外と簡単に解決できる。非常に安価なHetznerのベアメタル機をノードとして使えばよい。
NVMeストレージを備えたマシンはデータベース性能が優れており、RAMも十分にあることが多い。Kubernetesでデータベースを動かすより、マスター・レプリカ構成用に堅牢なベアメタル機を2台以上置くほうがよいくらいだ。設定が面倒なら、Pigstyのような最近のパッケージを使える: https://pigsty.cc/
データベースPodを特定ノードに固定してLocalPathProvisionerを使うか、JuiceFSやOpenEBSのような分散ソリューションを使えばよい。
顧客向けに書いたガイドはこちら: https://syself.com/docs/hetzner/apalla/how-to-guides/storage/local-storage-in-baremetal
10年以上Hetznerを満足して使ってきて、以前はドイツのデータセンターの専用サーバーを使っていたが、米国でのレイテンシを下げるためにCloud US VMへ移行した。
最近、余裕のあった20TBの無料トラフィックが3TBに減り、追加1TBあたり€1.19になったのは少し残念だが、評価した他の米国クラウドプロバイダーよりは今でもはるかにコストパフォーマンスがよさそうだ。
Kubernetesをあえて選ぶことはないだろうが、従来のSSH/Docker ComposeデプロイをGitHub Actionsとkamal-deploy.orgへ移行し、うまく使えている。設定が簡単で、リモートにデプロイしたアプリを監視するUXツールもよい: https://servicestack.net/posts/kamal-deployments
ドイツのデータセンターはまだ20TBの帯域幅を提供している: https://www.hetzner.com/cloud/
しかし米国は同じ価格で1桁以上少ない。
昔はお金を節約できて楽しくもあったので車の整備を自分でしていたが、思ったより複雑で、時間が経つにつれあちこちが壊れたり割れたりした。
「直し直す」ことにかなり時間を使い、数年間で工具に数千ドルは使ったはずだ。安い工具が壊れたりすぐ錆びたりして買い替えた費用もあり、車がしばしばジャッキスタンドの上に載っていた。それでも多くのすばらしい教訓を得たが、最大の教訓は、自分でやる価値のない作業もあるということだ。生計がかかっているなら、整備士に任せるか車をリースするほうがよい。
オイル交換のような単純な作業でさえ、自分でやる価値はあまりない。オイル受け、フィルターレンチ、漏斗、整備用クリーパーのような工具を買い、時間を空け、汚れてもよい作業服を探し、店に行って新しいオイルとフィルターを買い、家に戻って交換し、その日か別の日に廃油を引き取ってくれる店へ行かなければならない。一方、整備工場ではオイルとフィルター代に15ドルほど上乗せするだけで、20分で終わる。
Kubernetesは車1台まるごとであり、しかも複雑な車だ。趣味でやるのでなければ、自分で保守する価値は本当にない。
かなり割のよい見返りで、学んでおく価値のあるスキルだ。近所の人が自動車用リフトを持っていたので、それは確かに助かった。
要点は、自分でやることと外注することのバランスを見つけることで、ここで言われているほど簡単でもきれいでもない。
Kubernetesに頻繁に関わるコンサルタントの立場からは、初期支援と継続的な支援窓口を確保しつつ、社内でも十分に関心のある人が一緒に学ぶほうがよい。
コンサルタントや専門家は、初期に悪い判断を避けさせ、数か月間壁に頭を打ちつけるような事態を減らしてくれる。中核事業にも集中しなければならない状況で、技術やエコシステムによくある暗部や落とし穴を妥当な時間内に身につけるのは簡単ではない。助けは受けるべきだが、魚の釣り方と火の起こし方も学ぶべきだ。
興味深い記事だが、クラスターとその上で動いているワークロードの説明が欠けているように感じる。
ノードは何台なのか、トラフィックをどれくらい受けているのか、稼働時間とレイテンシの要件は何なのかが気になる。そして絶対額としてのコスト削減額も重要だ。月10万ドルの75%削減と、月100ドルの75%削減ではまったく違う。
実際、月10万ドルが分岐点だと思う。年120万ドルである。
洗練されたベアメタルデプロイをきちんと支えるには、エンジニアの給与で年40万ドルほどかかり、データセンター契約、ハードウェアの減価償却、帯域幅でおよそ年10万ドルかかる。こうした人材はたいてい、その仕事をしながらビジネスの他の部分にも大きな価値を提供するため、実際のコストはもっと低いかもしれない。すると年70万ドルを節約できるので素晴らしく、同等のクラウド支出がそれ以上に大きくなるほどメリットはさらに大きくなる。
10年以上前、ウェブホスティングの仕事をしていたときは、悪質な行為が原因で Hetzner の IP を何度もブラックホール処理していた
ほかの低価格 VM プロバイダーも同じで、地理データベースとは関係なく、純粋に行為が理由だった。安いのには理由がある
製品機能は気に入っていたが、無料ティアの IP の評判はひどく、特に Hotmail や Yahoo ではメールがほとんど受け入れられなかった。無料ホスティングサービスはスパマーや詐欺師に圧倒され、低価格サービスも程度が低いだけで似たようなもの。価格が高いほど、詐欺やスパムに使われにくい
AWS、Google、DigitalOcean、Linode、Contabo なども、ログインのブルートフォース攻撃や一般的な脆弱性探索攻撃を多くホストしている
企業のインフラ構築とセキュリティを支援するコンサルティング会社で働いており、Hetzner のような低価格プロバイダー、地域の中堅プロバイダー、AWS/GCP/Azure のような上位3大クラウドで Kubernetes を運用している顧客が多い
パブリッククラウドで運用できない、またはしたくない政府機関、金融、医療系企業もあり、通常はオンプレミスでホスティングしている
Hetzner で月に1回問題や障害があるとすれば、中堅プロバイダーでは2〜3か月に1回、AWS のようなところでは5〜6か月に1回程度だ。ただし価格もその観察と同じように動くため、追加機器やバックアップ、障害シナリオを足すほうが得なのかは、ケースごとに慎重に検討する必要がある
基本的なホスティングサービスを使う大きな利点は、価格の予測可能性がはるかに高いことだ。機器費用を払い、必要なだけ拡張すればよい。AWS のようなプロバイダーの付加サービスに縛られると、予想外の高額請求を受けることがあり、抜け出すのもはるかに難しくなる。小さな会社なら、初期の手軽な解決策や「無料クレジット」に釣られて、長期的な存続能力を脅かす近視眼的な判断をしないほうがよい
ここに正解はなく、あるのはトレードオフだけだ
自分では使ったことはないが、https://github.com/kube-hetzner/terraform-hcloud-kube-hetzner は Hetzner に Kubernetes をセットアップして管理する方法として優れていそうだ
今は Oracle の無料ティアを使っているが、Oracle から離れるためにこちらへ移ろうかとずっと考えている
かなりよく動く。SuSE MicroOS で自動セキュリティアップデートのため、毎週日曜日にマシンを再起動するスケジュールも入れている。ワークロードの増加に合わせてマシンのスケールも試した。Terraform が行おうとするすべての変更は必ず確認する必要があるが、そうすればかなり安全だ
唯一の欠点は、すべてのノードがファイアウォールの背後にあっても 公開 IP が必要なことだが、この部分は対応中だ
一晩でクラスターが動作し、かなりよく稼働している。小さな問題が1つあり、arm ノードで自動アップデートが実行されなかった。というのも、その時点では単一ノードしか動いておらず、コントロールプレーンの taint のためアップデート Pod が実行できずに止まっていた
https://github.com/syself/cluster-api-provider-hetzner
非常に安定して動作している
移行したくなるような具体的な不満があるのか気になる
DigitalOcean がほかのプロバイダーと同様に無料のマネージドコントロールプレーンを提供している一方で、マネージドクラスターのノードには通常100%のマークアップが乗る、という話は正しくないと思う
DigitalOcean ではワーカーノードの費用は通常の Droplet と同じで、追加料金はない。そのため DigitalOcean の提供形態はかなり魅力的だ。心配不要の無料コントロールプレーン、無料アップグレード、ロードバランサーやストレージのような追加統合がある。自分で管理するよりこちらを選ばない理由はあまり思い浮かばない
Hetzner の 8GB RAM 共有 CPU は約10ドルで、DigitalOcean の同等品は48ドルだ
Hetzner でマネージドな体験を求めるなら、https://syself.com を見てみるとよい。同社の社員です