導入この記事では、Prometheus、Istio、HPA、Keda、Karpenter に基づいて自己スケーリング Kubernetes クラスターを作成する方法について説明します。まず、terraform を使用して EKS クラスターを起動します。次に、Prometheus から抽出したメトリックに基づいて自動的にスケーリングできる nginx サービスを開始します (メトリックは istio ingress コントローラーから取得されます)。ここでのスケーリング ツールは keda を使用します。 上記のロジックを実装すると、ビジネスで必要なところにお金をかけながら、1 秒あたり数百万件のリクエストを処理できるようになります (インスタンスが増えるとコストも増えます)。新しいリソースは必要なときに表示され、必要がなくなったら破棄されます。もちろん、実際の環境には制御できない要因が他にもありますが、ここでは無視します。 EKSクラスターを起動するHashiCorp Terraform は、コードを使用して IT リソースを管理および保守できる IT インフラストラクチャ自動化オーケストレーション ツールです。仮想マシン、ストレージ アカウント、ネットワーク インターフェイスなどのクラウド リソースのトポロジを記述する構成ファイルにインフラストラクチャを書き込みます。 Terraform のコマンドライン インターフェース (CLI) は、AWS またはその他のサポートされているクラウドに構成ファイルをデプロイおよびバージョン管理するためのシンプルなメカニズムを提供します。 terraform を使用して、AWS に EKS クラスターを作成します。また、Helm を通じて IAM を設定し、Karpenter をインストールします。 モジュール「eks」 { ここで重要なのは、IAM ポリシーです。これにより、karpenter はメタデータを読み取り、必要なリソースを作成できるようになります。 terraform プラン --var cluster_name="chris" すべてがうまく進んでいることを確認するには、kubectl コマンドを使用してクラスターの準備ができていることを確認します。 istioとprometheusを設定する現在、空のクラスターを準備しています。まず、Prometheus をインストールする必要があります。 kubernetes に監視をインストールして管理するには、kube-prometheus-stack (https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) prometheus Operator を使用します。これにより、CLI を介して Kubernetes CRD を使用してターゲットを構成し、スクレイピング エンドポイントを定義し、Prometheus サービスを制御することが可能になります。次に、helm を介して k8s に prometheus をインストールします。 helm を使用してインストールします。 helm リポジトリにPrometheus を追加- コミュニティhttps://prometheus-community.github.io/helm-charts 数分後、Helm によって作成されたいくつかのステートフル セット、デプロイメント、およびデーモン セットが表示されます。 Prometheus CRD にアクセスすることで、Prometheus の構成を表示できます。 kubectl get pods - n モニタリング 注意: Prometheus が関連するストレージ ボリュームで構成されていない場合、再起動するとインジケーター情報が失われます。 Prometheus は、k8s API、ノード、その他のコンポーネントからメトリックを取得できるようになりました。他のアプリケーション (istio など) からメトリックをインポートすることもできます。また、スケーリングできるように、istio サイドカーからメトリックを取得したいと考えています。 クラスターに istio をインストールし、web 名前空間から始まるすべてのポッドにサイドカーを挿入するように指示します。 istioctl マニフェストのインストール すべてが整ったら、ゲートウェイと仮想サービスが適用されます。次の構成は、単に istio に、ホスト名 chris.somecompany.com のトラフィックを nginx ポッドに送信するように指示するだけです。 --- Web 名前空間を作成してラベルを付けます。 kubectl 作成 ns ウェブ nginx ポッドとサービスを作成します。 kubectl -n web create deploy nginx --image=nginx --port 80 nginx ポッドが 2 つのコンテナで起動されていることがわかります。これらは、nginx および istio サイドカー コンテナーになります。 kubectl -n web ポッドを取得します また、Prometheus に istio からメトリックをスクレイピングするように指示するためのサービス エントリとポッド モニターも定義します。もちろん、これらには好きなようにラベルを付けることができますが、ここではメトリック スクレイピング構成で定義されるものを示します。 apiVersion : 監視中。 コレオス。 com / v1 イングレス ゲートウェイを介してトラフィックを送信すると、nginx データが戻ってくるはずです。これは、パケットが Ingress ゲートウェイから nginx コンテナに到達し、アクセス回数が増加していることを示しています。 # フォアグラウンドトンネルを作成する http リクエストを送信します。 curl - H 'ホスト: chris.somecompany.com' ローカルホスト: 8080 | grep -- 色- i タイトル Prometheus に接続してターゲットを確認します。 kubectl -n 監視ポート-forward svc / prometheus -operated 9090 有効なターゲットを持つ envoy-stats-monitor があり、prometheus が nginx コンテナとメトリック エンドポイントを探していることがわかります。これらのメトリックは、各ポッドで実行されている istio サイドカーから取得されます。 nginx ラベルを使用して istio_requests_total メトリックをクエリすると、カウントが返されます。 um ( istio_requests_total { destination_app = "nginx" }) 上記で返された結果は 8 です。これは、nginx コンテナが 8 回アクセスされたことを意味します。 これで istio と prometheus が設定されました。処理する必要がある他のメトリックがある場合は、いつでもこれを拡張できます。 kedaをインストールしてHPAを定義するKEDA を使用すると、CPU やメモリなどの標準の組み込み Kubernetes メトリックだけでなく、メッセージ キューのキューの深さ、1 秒あたりのリクエスト数、スケジュールされた cron ジョブ、独自のアプリケーション ログからのカスタム メトリックなど、想像できるあらゆる高度なメトリックに基づいて、Kubernetes がポッド レプリカをゼロ以上にスケールできるようになります。これは、Kubernetes に組み込まれた HPA では簡単には実行できないことです。 helm 経由で keda をインストールします。このオープンソース ツールを Kubernetes に追加して、イベントに応答することができます (この記事では、Prometheus メトリックからイベントをトリガーするために使用されます)。 helm 経由で keda をインストールします。 helm リポジトリにkedacore を追加しますhttps://kedacore.github.io/charts 次に、Prometheus からの istio_requests_total メトリックを監視する ScaledObject CRD を定義します。メトリック数が 10 を超えると、ポッドのレプリカが増加します。 CRD の作成: --- 実際にポッドの数を変更する HPA も作成されます。 kubectl - n web get hpa keda - hpa - nginx トラフィックを生成します。 curl - H 'ホスト: chris.somecompany.com' ローカルホスト: 8080 | grep -- 色- i タイトル 十分なトラフィックが生成されると、keda が HPA 上のレプリカの数を増やし、ポッドのレプリカが増えることがわかります。 Prometheus メトリックを監視することでポッドのレプリカを増やすだけです。 # 新しいHPA 値kubectl get hpa - n web 次のコマンドを実行すると、なぜこのようにスケーリングされるのかがわかります。 kubectl はhpa keda を記述します- hpa - nginx - n web カーペンターKarpenter は、Kubernetes 用に構築されたオープンソースの自動スケーリング プロジェクトです。コンピューティング リソースを手動でプロビジョニングしたり、過剰にプロビジョニングしたりすることなく、Kubernetes アプリケーションの可用性が向上します。 Karpenter は、スケジュール不可能なポッドの集約的なリソース要求を監視し、ノードの起動と終了に関する決定を行うことで、スケジュールの遅延を最小限に抑えるように設計されており、数分ではなく数秒でアプリケーションのニーズを満たす適切なコンピューティング リソースを提供します。 クラスターを起動したときに karpenter をインストールしましたが、構成しませんでした。 terraform を使用して定義した自動スケーリング グループ (ASG) を見ると、最大値が 1 になっているため、この時点では 1 つの ec2 インスタンスが実行されているはずです。 helm を使用して手動でインストールする場合は、次のコマンドを参照してください。 Helm リポジトリにKarpenter を追加https://charts.karpenter.sh/ HPA は負荷に基づいてポッドを追加しますが、ノードのスペースが不足した場合はどうなるでしょうか?ここで、カーペンターを使用する必要があります。 必要なサイズをいくつか定義し、ラベルを使用するように指示し、どのクラスターに適用するかを指定する必要があります。 apiバージョン: karpenter.sh/v1alpha5 したがって、負荷の増加により多数の新しいポッドが追加された場合、karpenter は chris2022090904481313660000000c プロファイルを使用してさらに多くのノードを起動します。もちろん、さらにグループや設定を追加することもできますが、現在の構成で十分です。 トラフィックを生成し続けると、監視メトリックの数が増加し、レプリカをさらに追加する必要があることが HPA に通知されます。現時点ではスケジュールするのに十分なリソースがないため、ポッドは保留状態になります。 kubectl ポッドを取得する| grep 保留 ただし、新しいノードが起動すると、これらすべてが実行を開始します。 nginx - 6799f c88d8 - cc8x5 1 / 1 実行中0 24 秒 レプリカをスケールダウンする場合、ノードも破棄されます。 まとめこの記事では、Karpenter を使用してリソースに基づいて動的にノードを追加する Kubernetes クラスターを作成しました。 istio から Prometheus メトリックを表示することで、ポッドの数を制御できます。最終的に、コスト削減と効率向上の要件を満たしながら、高い弾力性と高負荷を実現する優れた自動スケーリング クラスターを作成しました。 |
<<: ネットユーザーの質問に答えます: Promise オブジェクトを Await すると何が起こりますか?
>>: クラウド上の OLAP エンジンのクエリ パフォーマンス評価フレームワーク: 設計と実装
HuluとYoutubeはオンライン動画ビジネスにおいてコインの表裏のような存在だ。両者はインターネ...
「モノのインターネット」(IoT)は、電子的に相互接続された物理的なモノのネットワークを表します。 ...
arkecxのデータセンターは現在、世界24の国と地域に設置されており、将来的にはヨーロッパのスペイ...
2020 年の出来事により、2021 年のほとんどの予測はすでに覆されています。来年も、人工知能 (...
Alipayは、2013年12月3日より、コンピューター上のAlipayアカウント間の送金に手数料が...
私の主観で色々と調べた結果、今年9月の素晴らしいVPSプロモーションをまとめてみました。もちろんあく...
トラフィックとユーザーの生成は一度きりのことではなく、モバイルで持続的かつ長期的な運用が必要です。な...
まず、黄金の言葉を述べさせてください。多次元性こそが生き残る道であり、単一次元性こそが物事を行う道で...
安価で高トラフィックの Windows VPS 業者として、hudsonvalleyhost をおす...
[51CTO.comより引用] 1日あたり100億回以上のAPI呼び出し、100万人以上の開発者、5...
SEO業界の競争はますます激しくなっています。SEOを始めるのは難しくありません。ウェブサイト編集者...
Redswitches は 6 歳だと言われていますが、実際のところはわかりません。現在はサーバーレ...
ハイブリッドクラウドストレージソリューションのトレンドパブリッククラウドストレージ容量無制限。パブリ...
1. WeiboとAlipayがWeChat 5.0に対抗するために提携WeChat 5.0は1か月...
12月のカレンダーのページをめくると、言葉では言い表せない一年が過ぎ去ろうとしていることがわかります...