av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

挖掘Kubernetes 彈性伸縮:利用 KEDA實(shí)現(xiàn)基于事件驅(qū)動(dòng)的自動(dòng)縮放器

挖掘Kubernetes 彈性伸縮:利用 KEDA實(shí)現(xiàn)基于事件驅(qū)動(dòng)的自動(dòng)縮放器

作者:Willie 2023-08-31 08:21:42

云計(jì)算

云原生 在本文中,我們利用KADA實(shí)現(xiàn)了基于事件的彈性伸縮,更加緊密的擁抱業(yè)務(wù),基于服務(wù)的“事件”實(shí)現(xiàn)伸縮,使得伸縮更加合理,高效。但事實(shí)上,針對(duì)像Mysql 這類有狀態(tài)服務(wù)伸縮,如何實(shí)現(xiàn)伸縮過程中的數(shù)據(jù)一致性及可用性是需要各個(gè)服務(wù)需要考慮的問題,但我相信在不久的將來,有狀態(tài)服務(wù)的伸縮也可以像現(xiàn)如今的無狀態(tài)服務(wù)一樣順滑。

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供銅仁網(wǎng)站建設(shè)、銅仁做網(wǎng)站、銅仁網(wǎng)站設(shè)計(jì)、銅仁網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、銅仁企業(yè)網(wǎng)站模板建站服務(wù),10年銅仁做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

簡(jiǎn)介與總結(jié)

前兩篇關(guān)于HPA的文章,我們了解到HPA的實(shí)現(xiàn)原理,通過對(duì)服務(wù)CPU的metrics的監(jiān)控實(shí)現(xiàn)了Deployment的彈性伸縮,我們本篇文章來實(shí)現(xiàn)基于事件驅(qū)動(dòng)的HPA,基于事件可以讓HPA更“理解”業(yè)務(wù),實(shí)現(xiàn)更加基于業(yè)務(wù)的彈性伸縮。接下來就讓我們一探究竟吧~

KEDA是什么?

KEDA(Kubernetes Event-driven Autoscaling)是云原生計(jì)算基金會(huì)孵化項(xiàng)目,是一個(gè)Kubernetes基于事件驅(qū)動(dòng)的自動(dòng)縮放器。借助 KEDA,可以根據(jù)需要處理的事件數(shù)量來驅(qū)動(dòng) Kubernetes 中任何容器的擴(kuò)展。KEDA是一個(gè)單一用途的輕量級(jí)組件,可以部署到任何 Kubernetes 集群中。KEDA 與標(biāo)準(zhǔn) Kubernetes 組件(例如Horizontal Pod Autoscaler)一起可以擴(kuò)展K8S功能。借助 KEDA,您可以明確映射要使用事件驅(qū)動(dòng)規(guī)模的應(yīng)用程序,而其他應(yīng)用程序繼續(xù)運(yùn)行。這讓 KEDA 成為一個(gè)靈活且安全的選項(xiàng),可以與任意數(shù)量的任何其他 Kubernetes 應(yīng)用程序或框架一起運(yùn)行。下圖展示了 KEDA 如何與 Kubernetes Horizontal Pod Autoscaler、外部事件源和 Kubernetes 的etcd結(jié)合使用數(shù)據(jù)存儲(chǔ):

圖片

概述: KEDA 使用三個(gè)組件來完成其任務(wù):

  • Scaler:連接到外部服務(wù)(例如,MYsql)并獲取指標(biāo)(例如,表的數(shù)據(jù)量)
  • Operator(代理):負(fù)責(zé)“激活”一個(gè) Deployment/Stafulset 并創(chuàng)建一個(gè) Horizontal Pod Autoscaler 對(duì)象
  • Metrics Adapter:將來自外部源的指標(biāo)呈現(xiàn)給 Horizontal Pod Autoscaler KEDA Operator 由一個(gè)控制器組成,該控制器實(shí)現(xiàn)“協(xié)調(diào)循環(huán)”,并充當(dāng)激活和停用部署以從零擴(kuò)展或從零擴(kuò)展的代理。這是由安裝 KEDA 時(shí)運(yùn)行的 KEDA-operator 容器實(shí)現(xiàn)的。ScaledObject它通過創(chuàng)建(HPA)對(duì)資源的創(chuàng)建做出“反應(yīng)”并創(chuàng)建Horizontal Pod Autoscaler。

看到這里就大致了解到了KEDA的主要工作是通過獲取各個(gè)服務(wù)具體的“指標(biāo)”暴露給HPA以實(shí)現(xiàn)彈性擴(kuò)展。

最佳實(shí)踐

描述

上面了解到了KEDA的架構(gòu),我們接下來通過安裝Mysql和KEDA,然后創(chuàng)建一個(gè)自定義資源 ScaledObject實(shí)現(xiàn)對(duì)Mysql"事件"的監(jiān)控,并將指標(biāo)暴露給HPA,以實(shí)現(xiàn)彈性伸縮,接下來就動(dòng)手試試吧~

安裝KEDA

在K8S集群中部署KEDA,因?yàn)槲业腒8S的版本是1.23,安裝KEDA2.9版本(具體版本配套關(guān)系詳見官網(wǎng)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

查看keda 狀態(tài)

# 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: ""
  ## E.g.
  ## imagePullSecrets:
  ##   - myRegistryKeySecretName
  ##
  imagePullSecrets: []
  storageClass: "nfs-storage"  ##配置自己的存儲(chǔ)配置,其余可暫不配置

# 開始安裝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

創(chuàng)建ScaledObject

(詳細(xì)描述可參考鏈接)

# 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   #擴(kuò)容的控制器的類型,默認(rèn)是deployment
    name: mysql
  triggers:
  - type: mysql
    metadata:
      queryValue: "4"   #在 HPA 中用作targetValue或targetAverageValue(取決于觸發(fā)指標(biāo)類型)的閾值。(這個(gè)值可以是浮點(diǎn)數(shù))
      query: "SELECT COUNT(*) FROM test;"   #應(yīng)返回單個(gè)數(shù)值的 MySQL 查詢,此為本次測(cè)試的enent
    authenticationRef:
      name: keda-trigger-auth-mysql-secret

#創(chuàng)建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

#同時(shí)也會(huì)創(chuàng)建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

測(cè)試

上面的配置中我們以test表中的行數(shù)作為"事件",并且閾值為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  |          |
+----+------------+-----------+------------+-------------------+------+----------+

#添加數(shù)據(jù)
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 沒有起來,但是我們看到了今天實(shí)驗(yàn)?zāi)康囊呀?jīng)成功

結(jié)論

在本文中,我們利用KADA實(shí)現(xiàn)了基于事件的彈性伸縮,更加緊密的擁抱業(yè)務(wù),基于服務(wù)的“事件”實(shí)現(xiàn)伸縮,使得伸縮更加合理,高效。但事實(shí)上,針對(duì)像Mysql 這類有狀態(tài)服務(wù)伸縮,如何實(shí)現(xiàn)伸縮過程中的數(shù)據(jù)一致性及可用性是需要各個(gè)服務(wù)需要考慮的問題,但我相信在不久的將來,有狀態(tài)服務(wù)的伸縮也可以像現(xiàn)如今的無狀態(tài)服務(wù)一樣順滑~


網(wǎng)頁題目:挖掘Kubernetes 彈性伸縮:利用 KEDA實(shí)現(xiàn)基于事件驅(qū)動(dòng)的自動(dòng)縮放器
分享地址:http://uogjgqi.cn/article/djcjscs.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流