通过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****