Kubernetes のエラスティック スケーリングの探索: KEDA を使用したイベント駆動型オートスケーラーの実装

Kubernetes のエラスティック スケーリングの探索: KEDA を使用したイベント駆動型オートスケーラーの実装

はじめにと概要

HPA に関する最初の 2 つの記事では、HPA の実装原理について学び、サービス CPU メトリックを監視することでデプロイメントの柔軟なスケーリングを実現しました。この記事では、イベント駆動型 HPA を実装します。イベントベースの HPA は、ビジネスをより深く「理解」し、よりビジネスベースの弾力的なスケーリングを実現します。次は調べてみましょう〜

KEDAとは何ですか?

KEDA (Kubernetes イベント駆動型自動スケーリング) は、Cloud Native Computing Foundation のインキュベーション プロジェクトです。これは、Kubernetes 用のイベント駆動型オートスケーラーです。 KEDA を使用すると、処理する必要があるイベントの数に基づいて、Kubernetes 内の任意のコンテナのスケーリングを実行できます。 KEDA は、あらゆる Kubernetes クラスターにデプロイできる、単一目的の軽量コンポーネントです。 KEDA は、Horizo​​ntal Pod Autoscaler などの標準の Kubernetes コンポーネントと連携して、K8S 機能を拡張します。 KEDA を使用すると、他のアプリケーションの実行を継続しながら、イベント駆動型スケールを使用するアプリケーションを明示的にマップできます。これにより、KEDA は、他の任意の数の Kubernetes アプリケーションやフレームワークと一緒に実行できる柔軟で安全なオプションになります。次の図は、KEDA が Kubernetes Horizo​​ntal Pod Autoscaler、外部イベント ソース、Kubernetes の etcd と組み合わせてデータ ストレージを使用する方法を示しています。

写真

概要: KEDA は、その使命を達成するために 3 つのコンポーネントを使用します。

  • スケーラー: 外部サービス (MYSQL など) に接続し、メトリック (テーブル内のデータ量など) を取得します。
  • オペレーター(エージェント):デプロイメント/ステータスセットを「アクティブ化」し、水平ポッドオートスケーラーオブジェクトを作成する責任があります。
  • メトリクス アダプター: 外部ソースからのメトリクスを Horizo​​ntal Pod Autoscaler KEDA Operator に提示します。KEDA Operator は、「オーケストレーション ループ」を実装するコントローラーで構成され、デプロイメントをアクティブ化および非アクティブ化してスケールアップまたはスケールダウンするエージェントとして機能します。これは、KEDA のインストール時に実行される KEDA オペレーター コンテナーによって実現されます。 ScaledObject は、(HPA) を作成することでリソースの作成に「反応」し、Horizo​​ntal Pod Autoscaler を作成します。

これを見ると、KEDA の主なタスクは、各サービスの特定の「インジケーター」を取得し、それを HPA に公開して弾力的な拡張を実現することであると大まかに理解できます。

ベストプラクティス

説明する

KEDA のアーキテクチャについて学習したので、MySQL と KEDA をインストールし、MySQL の「イベント」を監視するカスタム リソース ScaledObject を作成し、インジケーターを HPA に公開して、弾力的なスケーリングを実現します。試してみましょう。

KEDAをインストールする

K8S クラスターに KEDA をデプロイします。私のK8Sバージョンは1.23なので、KEDAバージョン2.9をインストールします(具体的なバージョンのマッチングについては、公式ウェブサイトkeda.shを参照してください)。

 #Including admission webhooks #kubectl apply --server-side -f https://github.com/kedacore/keda/releases/download/v2.9.3/keda-2.9.3.yaml

ケダのステータスを確認する

# kubectl get po -n keda NAME READY STATUS RESTARTS AGE keda-admission-webhooks-5f7cdd4745-7zhxn 1/1 Running 0 4d9h keda-metrics-apiserver-5c55d5d55f-gwv29 1/1 Running 0 4d9h keda-operator-c8d6bd9bb-ct978 1/1 Running 0 4d9h keda-operator-metrics-apiserver-769bb99569-knh7g 1/1 Running 0 4d9h

MySQLをインストールする

# helm repo add bitnami https://charts.bitnami.com/bitnami #helm pull bitnami/mysql #tar -xf mysql-9.3.3.tgz #vim mysql/value.yaml global: imageRegistry: "" ## Eg ## imagePullSecrets: ## - myRegistryKeySecretName ## imagePullSecrets: [] storageClass: "nfs-storage" ##配置自己的存储配置,其余可暂不配置# 开始安装mysql #helm install mysql ./mysql -n mysql --create-namespace # kubectl get po -n mysql NAME READY STATUS RESTARTS AGE mysql-0 1/1 Running 1 (5h29m ago) 5h31m

ScaledObject の作成

(詳しい説明はリンク先をご覧ください)

 # cat mysql-example.yaml apiVersion: v1 kind: Secret metadata: name: mysql-secrets namespace: mysql type: Opaque data: mysql_conn_str: cm9vdDptcXZkRmFtUWlXQHRjcChteXNxbC5teXNxbC5zdmMuY2x1c3Rlci5sb2NhbDozMzA2KS90ZXN0X2Ri # mysql的connectionString格式user:password@tcp(mysql:3306)/stats_db base64编码值--- apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: keda-trigger-auth-mysql-secret namespace: mysql spec: secretTargetRef: - parameter: connectionString name: mysql-secrets key: mysql_conn_str --- apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: mysql-scaledobject namespace: mysql spec: scaleTargetRef: kind: statefulset #扩容的控制器的类型,默认是deployment name: mysql triggers: - type: mysql metadata: queryValue: "4" #在HPA 中用作targetValue或targetAverageValue(取决于触发指标类型)的阈值。(这个值可以是浮点数) query: "SELECT COUNT(*) FROM test;" #应返回单个数值的MySQL 查询,此为本次测试的enent authenticationRef: name: keda-trigger-auth-mysql-secret #创建ScaledObject #kubectl apply -f mysql-example.yaml #查看ScaledObject # kubectl get scaledobject -n mysql NAME SCALETARGETKIND SCALETARGETNAME MIN MAX TRIGGERS AUTHENTICATION READY ACTIVE FALLBACK AGE mysql-scaledobject apps/v1.statefulset mysql mysql keda-trigger-auth-mysql-secret True True False 4h54m #同时也会创建HPA # kubectl get hpa -n mysql NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE keda-hpa-mysql-scaledobject statefulset/mysql 3/4 (avg) 1 100 1 4h54m

テスト

上記の設定では、テストテーブルの行数を「イベント」として使用し、しきい値は4です。

 #select * from test; +----+------------+-----------+------------+-------------------+------+----------+ | id | created_at | update_at | panel_name | link | icon | tag_name | +----+------------+-----------+------------+-------------------+------+----------+ | 6 | NULL | NULL | kubesre | www.kubesre.com/ | ECS | | | 7 | NULL | NULL | kubesre | www.kubesre.com/ | ECS | | | 8 | NULL | NULL | kubesre | www.kubesre.com/ | ECS | | +----+------------+-----------+------------+-------------------+------+----------+ #添加数据mysql> INSERT INTO `test` VALUES (1, NULL, NULL, 'kubesre', 'www.kubesre.com/', 'ECS', ''); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO `test` VALUES (2, NULL, NULL, 'kubesre', 'www.kubesre.com/', 'ECS', ''); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO `test` VALUES (3, NULL, NULL, 'kubesre', 'www.kubesre.com/', 'ECS', ''); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `test` VALUES (4, NULL, NULL, 'kubesre', 'www.kubesre.com/', 'ECS', ''); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO `test` VALUES (5, NULL, NULL, 'kubesre', 'www.kubesre.com/', 'ECS', 'Pod'); Query OK, 1 row affected (0.00 sec) mysql> select * from test; +----+------------+-----------+------------+-------------------+------+----------+ | id | created_at | update_at | panel_name | link | icon | tag_name | +----+------------+-----------+------------+-------------------+------+----------+ | 1 | NULL | NULL | kubesre | www.kubesre.com/ | ECS | | | 2 | NULL | NULL | kubesre | www.kubesre.com/ | ECS | | | 3 | NULL | NULL | kubesre | www.kubesre.com/ | ECS | | | 4 | NULL | NULL | kubesre | www.kubesre.com/ | ECS | | | 5 | NULL | NULL | kubesre | www.kubesre.com/ | ECS | Pod | | 6 | NULL | NULL | kubesre | www.kubesre.com/ | ECS | | | 7 | NULL | NULL | kubesre | www.kubesre.com/ | ECS | | | 8 | NULL | NULL | kubesre | www.kubesre.com/ | ECS | | +----+------------+-----------+------------+-------------------+------+----------+ # kubectl get hpa -n mysql NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE keda-hpa-mysql-scaledobject statefulset/mysql 4/4 (avg) 1 100 2 4h56m # kubectl get po -n mysql NAME READY STATUS RESTARTS AGE mysql-0 1/1 Running 1 (5h45m ago) 5h47m mysql-1 0/1 Running 0 55s由于我集群本身的原因,mysql-1 没有起来,但是我们看到了今天实验目的已经成功

結論は

この記事では、KADA を使用してイベントベースのエラスティック スケーリングを実装し、ビジネスをより密接に取り入れ、サービス「イベント」に基づいてスケーリングを実装して、スケーリングをより合理的かつ効率的にします。しかし実際には、MySQL のようなステートフル サービスのスケーリングでは、スケーリング プロセス中にデータの一貫性と可用性をどのように実現するかが、各サービスが考慮する必要がある問題です。しかし、近い将来、ステートフルサービスのスケーリングは、今日のステートレスサービスと同じくらいスムーズにできるようになると信じています。

<<:  OpenTelemetry Collector を使用して Kubernetes ログ データを収集する

>>:  AIの未来はエッジにある

推薦する

電子署名市場は引き続き活況を呈しており、リーダーであるShangshangqianの署名量は2018年に24億に達した。

電子署名業界は2019年に再び盛り上がりを見せました。資本の注目を浴びる人気分野となっただけでなく、...

WeChatが再びSogou Searchをリリース。テンセントはなぜいつも自社の弱点を利用して他社の強みを攻撃するのでしょうか?

BAT間の競争はインターネット業界の誰もがよく知っている。百度の検索、アリババの電子商取引、テンセン...

太湖珠網:Discuzをお選びください!迷いから決意への華麗な転換

最近、無錫最大かつ最も影響力のあるローカルポータルである太湖明珠網は、そのフォーラムプログラムを D...

プラットフォームの選択とSEO最適化技術

すべてのものには常に 2 つの反対の要素があるようです。これは自然の法則かもしれません。SEO にも...

SeFlow-i7-4770/32g メモリ/2x2T ハードディスク/20T フロー/500mddos 保護/39 ユーロ

2004 年に設立されたイタリアの企業である SeFlow は、2,000 を超える顧客、1,300...

acclouds: 全品 10% オフ、日本のソフトバンク VPS は月額 11 ドルから、香港の cn2 VPS は月額 7.8 ドルから

accloudsは主に日本と香港のVPSを運営しております。日本 VPS は日本のソフトバンクデータ...

「江南スタイル」の人気でマーケティングスタイルが広がる

「江南スタイル」を知らない人は時代遅れとしか言えません。最近世界中で人気を集めている「江南スタイル」...

#Cyber​​Monday# インターネットポート: スウェーデンの VPS、年間 15 ユーロ、4G メモリ/3 コア/100g SSD/10T トラフィック/1Gbps 帯域幅

2008年に設立されたスウェーデンの会社Internetportは現在、サイバーマンデー特別プロモー...

ヘルスケア分野ではパブリッククラウドの導入が拡大し続けている

Forrester の 2023 年ヘルスケア クラウドの現状レポートによると、ヘルスケアにおけるパ...

ブランドマーケティングトレンドの予測

流行2年目となる2018年、誰も防疫と制御が常態化するとは予想しておらず、人々に多くの不安をもたらし...

sharktech-$89/i3-2100/8g メモリ/1.5t ハードディスク/無制限 G ポート/29IP/IPMI/DDoS 保護

Sharktech (DDoS サーバーの有名な米国ブランド) は今月、特別価格のサーバーをいくつか...

Linux 仮想化 KVM-Qemu Virtio デバイスの分析

[[381734]]この記事はWeChatの公開アカウント「LoyenWang」から転載したもので...

地域人材ウェブサイトの迅速な発展を実現する方法

人材や求職リソースの増加に伴い、人材系サイトは近年、かなりの利益を上げています。しかし、市場の拡大に...

ウェブサイト上のリンク切れを見つけて削除するにはどうすればいいですか?

月収10万元の起業の夢を実現するミニプログラム起業支援プランBaidu Webmaster Plat...

香港高防御VPS推奨、香港高防御クラウド推奨、本土への直接接続、防御と速度の両方を考慮

香港のハイディフェンス企業の中で一番優れているのはどれですか?香港で推奨される高防御の VPS サー...