通過Kubernetes集群管理微服務應用時,一些用戶習慣使用命令行操作,但維護微服務配置仍需在控制臺進行。因此,EDAS將微服務配置的運維操作集成至Kubernetes集群中,您可以直接通過Kubectl等工具發布相關微服務配置。同時,EDAS還支持將Kubernetes中的ConfigMap內容管理集成至微服務配置控制臺中,實現配置的統一管理。本文介紹如何管理Kubernetes ConfigMap與微服務配置。
技術原理
集群導入EDAS后,EDAS會托管一個增強版的Nacos Controller組件。 該控制器監聽DynamicConfiguration資源,根據YAML中定義的內容將配置從Kubernetes集群中的ConfigMap同步至Nacos Server,或將配置從Nacos Server同步寫入至Kubernetes集群中的ConfigMap。
通過Kubernetes ConfigMap管理微服務配置時,Kubernetes集群配置和微服務配置的運維操作都在Kubernetes集群中,由Nacos Controller完成微服務配置的同步。
通過微服務配置管理Kubernetes ConfigMap時,ConfigMap配置和微服務配置的運維操作都在控制臺,由Nacos Controller完成配置并下發至ConfigMap中。
前提條件
K8s集群已導入EDAS,且集群版本≥1.16。具體操作,請參見在EDAS控制臺導入Kubernetes集群。
使用限制
當前僅支持通過配置YAML使用該功能。
黑屏操作入口
方式一:在ACK控制臺通過CloudShell操作。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面中,單擊目標集群右側操作列下的
。
方式二:通過配置KubeConfig在本地終端操作。具體操作,請參見獲取集群KubeConfig并通過kubectl工具連接集群。
通過Kubernetes ConfigMap管理微服務配置
使用場景
如果您是經常使用K8s黑屏操作的運維人員,可以執行以下步驟通過ConfigMap發布微服務配置。
操作步驟
創建
dc.yaml
文件,定義同步ConfigMap中的配置至微服務配置控制臺的參數信息。apiVersion: nacos.io/v1 kind: DynamicConfiguration metadata: name: demo namespace: default spec: # 定義哪些dataId需要被同步。 dataIds: - demo-data-id1.properties - demo-data-id2.yml # 定義同步到哪個微服務空間以及分組。 nacosServer: # EDAS微服務空間ID。 namespace: cn-hangzhou:demo group: demo_group # 同步策略 strategy: syncPolicy: Always # Always/IfAbsent,當策略為IfAbsent時,當被同步側存在配置時,跳過同步行為。 syncDirection: cluster2server # cluster2server 表示從K8s集群同步到nacos server。 syncDeletion: true # 同步刪除配置操作。 # 配置實際存放處,當前僅支持ConfigMap。 objectRef: apiVersion: v1 kind: ConfigMap name: configmap-for-nacos --- apiVersion: v1 kind: ConfigMap metadata: name: configmap-for-nacos namespace: default data: # 以DataId為key,Content為Value。需要被同步的DataId需要在DynamicConfiguration.spec.DataIds中注冊。 demo-data-id1.properties: | demo-key=demo.value demo-key2=demo.value2 demo-data-id2.yml: | app: name: demo-app-name
其中
nacosServer
下的namespace
需替換為您當前Region的所屬微服務空間ID,獲取方式:登錄EDAS控制臺。
在左側導航欄中選擇 。
在微服務空間頁面查看當前Region的所有微服務空間ID,您可以任選其中一個替換。
執行以下命令,創建DynamicConfiguration資源。
kubectl apply -f dc.yaml
日志提示以下信息,表明DynamicConfiguration已成功創建。
dynamicconfiguration.nacos.io/demo created configmap/configmap-for-nacos created
執行以下命令,查詢Demo部署狀態。
kubectl get dc -A
日志提示以下信息,表明已成功部署。
NAMESPACE NAME PHASE AGE default demo succeed 4s
在EDAS控制臺,選擇應用管理> 微服務配置,在配置列表頁面選擇所屬微服務空間后查看配置,可查看部署好的Demo。您可單擊操作列的編輯查看配置詳情。
執行以下命令,修改ConfigMap內容,本文示例為修改
demo-data-id2.yml
配置文件。kubectl edit configmap configmap-for-nacos
以下部分代碼示例是將
demo-data-id2.yml
配置文件中app
的name
由demo-app-name
修改為demo-app-name2
。apiVersion: v1 data: demo-data-id1.properties: | demo-key=demo.value demo-key2=demo.value2 demo-data-id2.yml: | app: name: demo-app-name2 # 修改名稱。 kind: ConfigMap metadata: name: configmap-for-nacos namespace: default
執行以下命令,查看已修改后的
demo-data-id2.yml
文件,確認已修改成功。kubectl get cm configmap-for-nacos -oyaml
執行以下命令,查看DynamicConfiguration狀態。
kubectl get dc demo -oyaml
可以看到status.syncStatuses中
lastSyncTime
發生了變化。apiVersion: nacos.io/v1 kind: DynamicConfiguration metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"nacos.io/v1","kind":"DynamicConfiguration","metadata":{"annotations":{},"name":"demo","namespace":"default"},"spec":{"dataIds":["demo-data-id1.properties","demo-data-id2.yml"],"nacosServer":{"group":"demo_group","namespace":"cn-hangzhou"},"objectRef":{"apiVersion":"v1","kind":"ConfigMap","name":"configmap-for-nacos"},"strategy":{"syncDeletion":true,"syncDirection":"cluster2server","syncPolicy":"Always"}}} creationTimestamp: "2023-11-08T11:48:55Z" finalizers: - nacos.io/dc-finalizer generation: 1 name: demo namespace: default resourceVersion: "138343446" uid: ca4a6ff8-20e7-4371-a072-9336403b**** spec: dataIds: - demo-data-id1.properties - demo-data-id2.yml nacosServer: group: demo_group namespace: cn-hangzhou objectRef: apiVersion: v1 kind: ConfigMap name: configmap-for-nacos strategy: syncDeletion: true syncDirection: cluster2server syncPolicy: Always status: objectRef: apiVersion: v1 kind: ConfigMap name: configmap-for-nacos namespace: default observedGeneration: 1 phase: succeed syncStatuses: - dataId: demo-data-id1.properties lastSyncFrom: cluster lastSyncTime: "2023-11-08T11:48:55Z" md5: 903f7d9a989744f3058266617514**** ready: true - dataId: demo-data-id2.yml lastSyncFrom: cluster lastSyncTime: "2023-11-08T11:52:08Z" md5: 843229a8c3d760be382562ed70a6**** ready: true
在EDAS控制臺,也可以看到配置已更新。
通過微服務配置管理Kubernetes ConfigMap內容
使用場景
如果您是經常使用微服務配置白屏的運維人員,可以執行以下步驟通過微服務配置控制臺集中管理ConfigMap內容。
操作步驟
在應用管理 > 微服務配置頁面創建配置。具體操作,請參見創建配置。
創建
dc2.yaml
文件,定義同步微服務配置至集群中的ConfigMap內容。apiVersion: nacos.io/v1 kind: DynamicConfiguration metadata: name: demo2 namespace: default spec: # 定義哪些dataId需要被同步。 dataIds: - DEMO_JVM_CONFIG # 定義同步到哪個微服務空間以及分組。 nacosServer: # EDAS微服務空間ID。 namespace: cn-hangzhou:demo group: demo_group # 同步策略。 strategy: syncPolicy: Always # Always / IfAbsent,當策略為IfAbsent時,當被同步側存在配置時,跳過同步行為。 syncDirection: server2cluster # cluster2server 表示nacos server同步到K8s中。 syncDeletion: true # 同步刪除配置操作。
執行以下命令,創建DynamicConfiguration資源。
kubectl apply -f dc2.yaml
日志顯示以下信息,表明DynamicConfiguration已成功創建。
dynamicconfiguration.nacos.io/demo2 created
執行以下命令,查看Demo部署狀態。
kubectl get dc -A
日志顯示以下信息,表明Demo已成功部署。
NAMESPACE NAME PHASE AGE default demo succeed 19m default demo2 succeed 9s
創建成功后,執行以下命令,集群內出現一個存放著同步配置信息的同名ConfigMap。
kubectl get cm | grep demo2 demo2 1 38s
執行以下命令,查看集群內的ConfigMap。
kubectl get cm demo2 -oyaml
可以看到目前的ConfigMap配置內容如下所示:
apiVersion: v1 data: DEMO_JVM_CONFIG: -Xmx1g -Xms1g kind: ConfigMap metadata: creationTimestamp: "2023-11-08T12:08:42Z" labels: nacos.io/owned-by-dc: demo2 name: demo2 namespace: default ownerReferences: - apiVersion: nacos.io/v1 blockOwnerDeletion: true controller: true kind: DynamicConfiguration name: demo2 uid: 7a94527d-c8e5-4ebe-b2df-25448a3e**** resourceVersion: "138354722" uid: a3437c94-5304-41b2-a2ad-15cf090b****
在EDAS控制臺修改配置內容后發布。
執行以下命令,查看集群內的ConfigMap。
kubectl get cm demo2 -oyaml
可以看到配置已同步修改成功。
apiVersion: v1 data: DEMO_JVM_CONFIG: -Xmx2g -Xms2g kind: ConfigMap metadata: creationTimestamp: "2023-11-08T12:08:42Z" labels: nacos.io/owned-by-dc: demo2 name: demo2 namespace: default ownerReferences: - apiVersion: nacos.io/v1 blockOwnerDeletion: true controller: true kind: DynamicConfiguration name: demo2 uid: 7a94527d-c8e5-4ebe-b2df-25448a3e**** resourceVersion: "138367066" uid: a3437c94-5304-41b2-a2ad-15cf090b****