• KubeGems 启用 Nacos 配置中心


    KubeGems是一款以围绕 Kubernetes 通过自研和集成云原生项目而构建的通用性开源 PaaS 云管理平台。经过我们内部近一年的持续迭代,当前 KubeGems 的核心功能已经初步具备多云多租户场景下的统一管理。并通过插件化的方式,在用户界面中灵活控制包括 监控系统日志系统微服务治理 等众多插件的启用和关闭。

    Nacos 介绍

    Nacos 是阿里云开源一款在微服务场景下用于处理应用配置发布管理和服务注册管理的服务平台。其主要提供了如下几个特性:

    • 服务发现和服务健康监测

      基于 DNS 和 RPC 的服务发现。服务提供者使用 原生SDK、OpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。

    • 动态配置服务

      动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

    • 动态 DNS 服务

      动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。

    • 服务及其元数据管理

      Nacos 从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

      KubeGems 中的 Nacos

      KubeGems 自v1.21版本之后开启了对 Nacos 配置中心的支持,并利用了内置 Plugins CRD 实现了对 Nacos 的快速启动。

    • KubeGems 中的 Nacos 安装源来至官方社区提供https://github.com/nacos-group/nacos-k8s,并在 plugin crd 中来管理部署的版本。用过 Nacos 的同学可能知道,其内部的数据模型主要围绕dataidgroupnamespace这 3 个进行操作。由于 KubeGems 的设计是一个支持多租户的平台,所以在应用 nacos 数据模型时,按照了 tenant + project来区分内部的命名空间。

    启用和配置插件

    KubeGems 启用 Nacos 需要具备系统管理员的权限进行操作。管理员进入管理后台的“插件管理”,点击“启用“按钮“即可开启Nacos。

    直到出现如下状态,代表插件运行正常

    此时,我们就可以在租户的环境中开始使用 Nacos 服务

    个性化配置

    Nacos插件的配置以 CRD 的形式存放在 nacos命名空间中,我们可以通过命令kubectl edit plugin nacos -n nacos对插件进行个性化配置。

    1. apiVersion: plugins.kubegems.io/v1beta1
    2. kind: Plugin
    3. metadata:
    4.   finalizers:
    5.   - plugins.kubegems.io/finalizer
    6.   generation: 1
    7.   name: nacos
    8.   namespace: nacos
    9. spec:
    10.   kind: helm
    11.   path: helm
    12.   url: https://github.com/nacos-group/nacos-k8s.git
    13.   values:
    14.     namespace: nacos
    15.     global:
    16.       mode: cluster
    17.     nacos:
    18.       replicaCount: 1
    19.       image:
    20.         repository: registry.cn-beijing.aliyuncs.com/kubegems/nacos-server
    21.         tag: v2.1.1
    22.       plugin:
    23.         image:
    24.           repository: registry.cn-beijing.aliyuncs.com/kubegems/nacos-peer-finder-plugin
    25.     persistence:
    26.       data:
    27.         storageClassName: local-path
    28.       enabled: true
    29.     service:
    30.       type: ClusterIP
    31.   version: master

    提示:KubeGems的插件 CRD 由 https://github.com/kubegems/bundle-controller提供支持,我们也可以直接使用 bundle-controller 在非 kubegems 集群中管理插件。

    集群部署

    Nacos集群由社区提供支持部署,kubegems 默认将 nacos 的全局运行模式设置为“cluster”,如果您需要扩展成多集群,只需修改replicaCount的副本数为 3 即可。

    开放集群外访问

    Nacos 插件默认运行在 Kubernetes 内部,如果需要在集群外访问 Nacos 需借助网关实现。管理员可以在后台创建一条基于默认网关的 ingress 来代理 nacos api。过程如下:

    第一步:进入路由功能页面,选择 nacos 命名空间

    第二步:创建并提交一条路由规则,用于 nacos 的代理

    第三步:获取访问地址

    提示:Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成

    使用配置中心

    进入应用环境下的“应用配置”,可以点击右上角的“获取访问信息”查看当前环境下的 nacos sdk 所需的配置信息

    配置管理

    点击“创建配置项”就可以创建配置

    配置历史与回滚

    监听列表

    运行测试

    我们用 nacos-sdk-go/v1来做一个简单的认证

    1. package main
    2. import (
    3.  "fmt"
    4.  "time"
    5.  "github.com/nacos-group/nacos-sdk-go/clients"
    6.  "github.com/nacos-group/nacos-sdk-go/common/constant"
    7.  "github.com/nacos-group/nacos-sdk-go/vo"
    8. )
    9. func main() {
    10.  sc := []constant.ServerConfig{
    11.   {
    12.    IpAddr: "nacos.kubegems.io",
    13.    Port:   31956,
    14.   },
    15.  }
    16.  cc := constant.ClientConfig{
    17.   NamespaceId:         "69f7325702bc396a8773f9a0a94eea310b21ec39"//namespace id
    18.   TimeoutMs:           5000,
    19.   NotLoadCacheAtStart: true,
    20.   LogDir:              "/tmp/nacos/log",
    21.   CacheDir:            "/tmp/nacos/cache",
    22.   LogLevel:            "debug",
    23.  }
    24.  client, err := clients.NewConfigClient(
    25.   vo.NacosClientParam{
    26.    ClientConfig:  &cc,
    27.    ServerConfigs: sc,
    28.   },
    29.  )
    30.  if err != nil {
    31.   panic(err)
    32.  }
    33.  content, err := client.GetConfig(vo.ConfigParam{
    34.   DataId: "test",
    35.   Group:  "e3",
    36.  })
    37.  fmt.Println("GetConfig,config :" + content)
    38.  err = client.ListenConfig(vo.ConfigParam{
    39.   DataId: "test",
    40.   Group:  "e3",
    41.   OnChange: func(namespace, group, dataId, data string) {
    42.    fmt.Println("config changed group:" + group + ", dataId:" + dataId + ", content:" + data)
    43.   },
    44.  })
    45.  time.Sleep(300 * time.Second)
    46. }

    以下是运行情况

    总结

    本文主要介绍了在 KubeGems 中启用并使用Nacos插件作为应用的配置中心的基本管理功能。Nacos 是一个非常棒的应用配置管理平台,KubeGems 团队将持续关注此项目,并为用户在 Kubernetes 集群提供更友好的支持。

  • 相关阅读:
    【BFS最短路】HDU A strange lift
    剑指offer 13. 剪绳子
    shell脚本之数组
    【mybatis基础(二)】实现对数据库的CRUD
    金融网站如何做好安全防护措施?
    什么是 vuejs 加载器?
    Ubuntu22.10安装Docker运行SRS流媒体服务
    用C语言解决三个整数比大小,x,y,z三个整数求最小整数,从键盘上输入3个不同的整数×,y,Z,请设计一个算法找出其中最小的数,并画出流程图。
    Python升级之路( Lv13 ) pyinstaller 使用详解
    15 Spring Security OAuth2登录(三方登录)
  • 原文地址:https://blog.csdn.net/weixin_49366475/article/details/126777572