Nacos 2.3.0 正式版发布,Nacos Controller 项目开源
作者:杨翊
新版本发布
Nacos 2.3.0-BETA 版本经过 1 个多月的社区测试,修复了部分的问题并对部分新功能的使用进行了少量优化后,于 2023 年 12 月 7 日正式发布。
Nacos 2.3.0 版本基于 2.3.0-BETA 版本为基础,主要进行了如下更新:
- 基于能力协商机制,支持通过 Grpc 的方式进行持久化服务实例的注册及删除。
- Console UI 中显示更多内容,例如部署模式等。
- 对参数校验功能的实现方式进行优化。
- 对 TopN 指标的实现进行重构,优化准确性和内存消耗。
详细的更新日志请查看:
## Feature [#11393] Support register or deregister persistent instance by grpc. ## Enhancement&Refactor [#11275] Enhance console ui deploy, show more information like `mode`. [#11298] Strip groupNamePrefix of instance serviceName at register or deregister. [#11310] Simplify the validate method for serviceinfo. [#11342] Simplify BatchDeregister instances conditions to ip and port. [#11343] Simplified parameters checker control logic. [#11352] Refactor topN logic to enhance memory usage and accuracy. ## BugFix [#10353] Handling DataIntegrityViolationException and DuplicateKeyException together. [#11299] Fix console ui auth pagination failure. [#11382] Fix console ui listening query pagination failure. [#11384] Fix console ui comparing configuration failure. [#11390] Fix Config EncryptionPluginService order problem. [#11442] Fix listen configuration check failed without namespace. ## Dependency [#11216] Declare httpcore as direct dependency to fix avoid conflict. [#11396] Upgrade jackson same with spring boot dependency. [#11439] Upgrade some UI component to solve security problem.
Nacos Controller 项目开源
在云原生下,应用代码与运行环境可以通过 Helm 或 Kustomize 等软件进行交付、维护、CICD,但应用的 Nacos 配置依然需要手工地迁移、或使用控制台修改发布配置。借助于 Nacos Controller [ 1] 项目,我们可以将 Nacos 配置管理下移到 Kubernetes 集群中,又或是可以将 Kubernetes 中 ConfigMap 配置上移到 Nacos 控制台中,从而实现统一管理能力。
Nacos 配置下移到 Kubernetes 集群中
工作机制
Nacos Controller 监听集群内的 DC 资源,当 DC 资源发生变化时,Nacos Controller 将其中的配置内容同步到 Nacos Server 中。
简易 Demo
在 Nacos Controller 中,我们定义了一份 CRD:DynamicConfiguration(简称 DC),我们将 Nacos 配置保存在 ConfigMap 中,对配置的任何修改都通过 DC 将其中的配置同步到对应的 Nacos 服务端中。在后续的配置维护中,直接修改对应的 ConfigMap 即可。以下是一份简易的 Demo 示例:
apiVersion: nacos.io/v1 kind: DynamicConfiguration metadata: name: dc-demo-cluster2server spec: dataIds: - data-id1.properties - data-id2.yml nacosServer: endpoint: <your-nacos-server-endpoint> namespace: <your-nacos-namespace-id> group: <your-nacos-group> authRef: apiVersion: v1 kind: Secret name: nacos-auth strategy: syncPolicy: Always syncDirection: cluster2server syncDeletion: true objectRef: apiVersion: v1 kind: ConfigMap name: nacos-config-cm --- apiVersion: v1 kind: ConfigMap metadata: name: nacos-config-cm namespace: default data: data-id1.properties: | key=value key2=value2 data-id2.yml: | app: name: test --- apiVersion: v1 kind: Secret metadata: name: nacos-auth data: ak: <base64 ak> sk: <base64 sk>
Kubernetes 配置上移到 Nacos 控制台
工作机制
首先需要用户创建 DC 资源指定需要同步哪些 DataId,Nacos Controller 根据读取到的 DC 配置,选择性监听 Nacos Server 中的相关配置并将配置改动同步到 Kubernetes 集群中。
简易 Demo
云原生下,应用除了需要加载 Nacos 配置外,还可能依赖一些环境变量,比如 JVM 参数通过环境变量注入。做得比较好的方式是通过 ConfigMap 等 Kubernetes 原生方式管理配置,通过引用的方式传递给应用 Pod。在 Nacos Controller 中,我们可以定义一份 DC,将 Nacos 服务端中的某些 DataId 同步到 Kubernetes 集群中的 ConfigMap 中,从而实现配置的统一管理。以下是一份示例 Demo:
apiVersion: nacos.io/v1 kind: DynamicConfiguration metadata: name: dc-demo-server2cluster spec: dataIds: - APP1_JVM_PARAMS - APP2_JVM_PARAMS nacosServer: endpoint: <your-nacos-server-endpoint> namespace: <your-nacos-namespace-id> group: <your-nacos-group> authRef: apiVersion: v1 kind: Secret name: nacos-auth strategy: syncPolicy: Always syncDirection: server2cluster syncDeletion: true --- apiVersion: v1 kind: Secret metadata: name: nacos-auth data: ak: <base64 ak> sk: <base64 sk>
云原生下的配置管理最佳实践
在使用 Kubernetes 的场景下,一个微服务应用的配置被分割成两部份,一部分存放管理在 Kubernetes 集群中的 Secret 或 ConfigMap 中,另一部份存放管理与 Nacos 配置中心。对于运维人员,我们需要知道哪些配置是存放在何处且同时需要对两个平台的配置管理操作均有所了解,一来是增加了运维人员的知识门槛,二来是增加了应用配置运维的操作成本。通过 Nacos Controller 项目,我们将应用的所有配置集中于一处管理,降低应用配置运维的门槛与复杂性。
面向 Kubernetes 运维偏好的用户
通过 Nacos Controller 项目,我们将应用与应用配置的交付和维护集中在 Kubernetes 集群中。
以下通过一份 Helm 应用 Chart 包说明如何集中管理。
. ├── Chart.yaml ├── charts ├── conf │ ├── application-dev.properties │ ├── application.properties │ ├── consumer-app.properties │ └── provider-app.yaml ├── templates │ ├── consumer.yaml │ ├── dc.yaml │ └── provider.yaml └── values.yaml
以上是一份 Chart 包目录结构,其中 conf 目录存放的是 Nacos 配置,文件名即 DataId,文件内容即对应的 Content。在 templates/dc.yaml 中,我们定义一份 ConfigMap 来组装这些配置。templates 目录中的 consumer.yaml 与 provider.yaml 分别是应用定义。
apiVersion: v1 kind: ConfigMap metadata: name: nacos-config namespace: {{ .Release.Namespace }} data: {{- range $path, $_ := .Files.Glob "conf/**" }} {{ $path | base }}: |- {{ $.Files.Get $path | indent 4}} {{- end }}
使用上述方式定义好应用与配置后,可以借助 git 实现应用、配置的版本管理。当需要发布应用或配置时,修改对应文件后,执行 helm upgrade 命令即可。
面向 Nacos 运维偏好的用户
Nacos 配置管理能力使得应用可以动态调整运行配置,但对于一些特殊的参数,如 JVM 参数、特殊环境变量、特殊目录文件等内容,Nacos 配置管理依然无法涵盖。在 Kubernetes 集群中,我们一般将环境变量或一些特殊文件配置写入 ConfigMap 中,通过 envFrom 能力将内容引用到环境变量中或者 volumeMount 挂载到文件系统中。这样的配置管理能力与 Nacos 配置管理能力是散开的,不利于统一管理。借助于 Nacos Controller,我们将这些配置上移到 Nacos 控制台中,进行统一管理。
以下是一份 Demo 应用,通过 Nacos 控制台管理 JVM 启动参数:
apiVersion: apps/v1 kind: Deployment metadata: name: demo-app spec: replicas: 1 selector: matchLabels: app: demo-app template: metadata: labels: app: demo-app spec: containers: - name: demo-app image: openjdk:8 #替换为你的应用镜像 command: ["/bin/sh", "-c", "java -jar ${JVM_PARAMS} /app.jar"] env: - name: JVM_PARAMS # 从ConfigMap中载入JVM参数到环境变量中 valueFrom: configMapKeyRef: name: nacos-config key: APP1_JVM_PARAMS --- apiVersion: nacos.io/v1 kind: DynamicConfiguration metadata: name: nacos-config spec: dataIds: - APP1_JVM_PARAMS - APP2_JVM_PARAMS nacosServer: endpoint: <your-nacos-server-endpoint> namespace: <your-nacos-namespace-id> group: <your-nacos-group> authRef: apiVersion: v1 kind: Secret name: nacos-auth strategy: syncPolicy: Always syncDirection: server2cluster syncDeletion: true --- apiVersion: v1 kind: Secret metadata: name: nacos-auth data: ak: <base64 ak> sk: <base64 sk>
在 Nacos 控制台中,修改 DataId:APP1_JVM_PARAMS 后,配置将自动同步到集群的 ConfigMap 中。只需重启相关应用,则对应的 JVM 参数将自动变化。成功实现将应用的所有配置集中管理在 Nacos 上。
Nacos 社区新晋 Committer
社区中新增了 2 位 Committer Karsonto [ 2] 和 Daydreamer-ia [ 3] 。同时,Nacos 社区又迎来了一位来自开源之夏的 Committer 同学 Daydreamer-ia 。
展望
2.X 后续计划
从 2021 年 3 月 2.0.0 正式版发布至今,2.X 版本已经走了接近2年时间,如今 2.3.0 版本发布,完成了大部分功能的插件化提炼,在之后的 2.3.X 版本中,会主要对当前版本的问题进行修复,并做出小范围的功能优化。同时对于 2.4.0 版本,会作为一个 Nacos3.0 的过度版本,对大量代码进行优化重构,在提升稳定性、健壮性的同时,提升易用性和可观测性,向 Nacos3.0 版本平稳过度。
3.0 计划
Nacos 社区同时也开启了关于 Nacos3.0 的畅想和规划,Nacos 将会从统一控制面、支持国产化、存储计算分离等方向进一步演进 Nacos 的功能和架构,欢迎社区积极参与到新版本的建设中。
About Nacos
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
最后欢迎大家使用钉钉搜索群号加入 Nacos 社区群,钉钉群号:12810027056
相关链接:
[1] Nacos Controller
https://github.com/nacos-group/nacos-controller
[2] Karsonto
[3] Daydreamer-ia
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
网易云音乐第三方开源 API 因侵权被要求删除
NeteaseCloudMusicApi 是 Node.js 编写的非官方网易云音乐 API,可用于获取网易云音乐平台的歌曲信息。该项目完全开源,在 GitHub 上的 star 数超过 3 万。 根据公开的信息,NeteaseCloudMusicApi 主要是整理了网易云音乐公开的网页接口,在此基础上进行聚合后以便其他项目进行调用。 近日,NeteaseCloudMusicApi 的开源仓库清空了所有代码,以及 commit 记录等信息,并在 README 写道:“保护版权,此仓库不再维护”。 据称原因是网易云音乐发送法律通知给 NeteaseCloudMusicApi 开发者,声明该项目侵犯网易公司的相关版权,要求开发者立即下线该项目中盗链网易云音乐的方法及内容。 网易云音乐由杭州网易云音乐有限公司独立开发运营,网易云音乐作为国内知名的在线音乐平台,致力于为用户提供优质的音乐内容服务,我司以高额的成本采购了海量音乐作品的内容,在未我司合法授权的任何第三方均没有权利播放由我司享有版权的音乐作品,我司有权以自己的名义或授权第三方进行维权。 我司收到用户的举报,您开发的 NeteaseC...
- 下一篇
飞致云旗下开源项目 GitHub Star 数量突破 100,000 个!
2024年1月19日,中国领先的开源软件提供商FIT2CLOUD飞致云宣布,其旗下开源项目在代码托管平台GitHub上所获得的Star数量已经超过100,000个。与此同时,飞致云旗下开源项目的月度新增软件下载次数也超过100,000次。 飞致云的开源之旅起步于2017年11月对JumpServer开源堡垒机项目(https://github.com/jumpserver)的收购。此后基于长期的开源企业战略和持续完善的社区生态,飞致云相继创立MeterSphere开源持续测试平台项目(https://github.com/metersphere)、DataEase开源数据可视化分析平台项目(https://github.com/dataease)和1Panel开源面板项目(https://github.com/1Panel-dev),并且于2021年1月收购Halo开源建站工具项目(https://github.com/halo-dev)。 在创新与并购的双轮驱动下,飞致云以“为数字经济时代创造好软件”为使命的开源生态体系不断发展壮大。目前,飞致云旗下开源项目的贡献者超过1,700位,...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题