>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Go

десятки OpenShift クラスターの起動時にリソースと時間を節約する方法

Kubernetes や OpenShift を本番環境にデプロイしたことのある人なら 누구나、この痛苦を経験しているはずです。ステージング用や別のチーム用に小さな分離クラスターを起動したいと思っても、etcd やコントローラーが動作する少なくとも3つのノードをマスター用にデプロイするのはオーバースペックです。10個、30個、100個のクラスターが必要になると、クラウド請求書はすぐに天文学的な金額になり、別の環境を作成する時間は数十分にまで膨れ上がります。

Red Hat のエンジニアも同じ問題にぶつかり、オープンソースとしてソリューションをリリースしました。このプロジェクトは HyperShift(または Hosted Control Planes)と呼ばれています。本質的には、クラスターのコントロールプレーンを別個のノードから、中央管理クラスター内の通常の Pod へと移動させるレイヤーです。

今回は、この仕組みと誰が恩恵を受けるのかを説明します。

アーキテクチャのコアとなる焦点

классическая OpenShift или Kubernetes の классическая setup では、各クラスターには API サーバー、etcd、コントローラー、スケジューラー用の専用仮想マシンまたは物理マシンがあります。クラスターが大部分アイドル状態であっても、これらのノードには料金が発生します。

HyperShift は、コントロールプレーンをワーカーノードから分離します。

1つの大きな管理クラスターを用意します。ユーザーや開発チーム用に新しい OpenShift クラスターを作成する必要がある場合、HyperShift は新しいクラスターの管理コンポーネント(etcd、kube-apiserver、openshift-apiserver)を、管理クラスター内の標準的な Pod(Deployment と StatefulSet)としてデプロイします。

一方、ワーカーノードは AWS、Azure、ベアメタルのどこにでも、必要に応じて別途作成されます。ワーカーノードは、管理インフラストラクチャ内の Pod として動作する API サーバーに接続します。

Overview

従来のアプローチを変更する理由

複数のクラスターを管理している場合、利点は3つの領域で即座に明らかになります。

1つ目——コスト効率です。各クラスター用にマスター用に少なくとも3台の VM を購入するのではなく、既存の管理クラスターのリソースを活用します。その結果、ドロイドのコントロールプレーンが単一のリソースプール上で動作し、はるかに高密度なパッキングを実現します。

2つ目——インフラストラクチャのプロビジョニング速度です。オペレーティングシステム、etcd 設定、コンポーネントの初期化を備えた完全なノードのブートストラッピングには15〜45分かります。HyperShift のコントロールプレーン Pod は数分、または数秒で起動します。これにより dev/test 環境へのアプローチが完全に変わります:クラスターは、タスク用に簡単に起動して素早く削除できる一時的なリソースになります。

3つ目——責任とセキュリティの分離です。開発者とアプリケーションは、自分のワーカーノードと API サーバーへのアクセスのみを持ちます。コントロールプレーンや etcd が動作するマシンへの物理的またはネットワーク的なアクセスはありません。運用チームは1箇所で集中してすべての API サーバーを更新・監視します。

実際の動作

HyperShift は標準的な Kubernetes API と OpenShift Container Platform(OCP)ツールとの100%の互換性を維持しています。開発者や CI/CD パイプラインの観点から見ると、作成されたクラスターは通常のものと区別できません:標準的な kubeconfig が提供され、kubectl や oc を通じて作業します。

管理は CLI ユーティリティ hypershift または Custom Resources(CRD)を通じて行われ、ArgoCD のような GitOps アプローチに完璧に適合します。

以下は、CLI を通じて AWS でクラスターを作成する場合の例です:

hypershift create cluster aws \
  --name dev-cluster \
  --node-pool-replicas 2 \
  --base-domain example.com \
  --pull-secret /path/to/pull-secret.json \
  --aws-creds /path/to/aws-credentials

舞台裏では、このコマンドは CRD HostedClusterNodePool を作成します。HyperShift は管理クラスター内でコントロールプレーン Pod を起動し、AWS でワーカーノード用に一組の EC2 インスタンスをプロビジョニングして、それらをリンクします。

内部構造とニュアンス

このプロジェクトは Go で書かれており、OpenShift チームによって積極的に開発されています。リポジトリにはすでに500を超えるフォークがありますが、星の数はまだ比較的少なく、500少しだけです。これは、HyperShift が長い間 ROSA サービス(Red Hat OpenShift Service on AWS)向けの内部 Red Hat 技術であったためであり、今はオンプレミスおよびマルチクラウドインストール向けの標準になりつつあります。

重要な機能には以下が含まれます:

  • 管理クラスターとクライアントワークロード間の完全な分離。
  • 異なるプロバイダーでのワーカーノードのデプロイメントサポート:AWS、Azure、KubeVirt、ベアメタル。
  • 統一された更新ベクトル。コントロールプレーンの OpenShift バージョンの更新は、すべてのワーカーノードを即座に再起動することなく、CRD のバージョンを変更するだけで独立して行えます。

落とし穴はありますか?もちろんあります。管理クラスターは、すべてのクライアントクラスターのコントロールプレーンにとっての単一障害点になります。管理クラスターが停止すると、ワーカーノードで動作するサービスは引き続き動作しますが、インフラストラクチャが復元されるまで管理可能性が失われます。したがって、管理クラスターの信頼性と etcd バックアップにはより高い要件があります。

注目すべき対象者

HyperShift は、社内のための単一のモノリシッククラスターを持っている場合は必要ありません。しかし、以下のような場合に命を救う存在になります:

  • 内部チーム向けのプラットフォームを構築しており、オンデマンドで分離クラスターを提供したい場合。
  • クライアントの物理的分離を備えた Kubernetes ベースの SaaS ソリューションを販売している場合。
  • のパブリッククラウドでアイドル状態のマスターノードに料金を払うことにうんざりしている場合。

公式ドキュメント hypershift.pages.dev を使用してプロジェクトを試すことができます。管理クラスターとして既存の OpenShift 4.x クラスターと、ワーカーを作成するための AWS またはローカル VM へのアクセスが必要です。

関連プロジェクト