K8S中部署 Nacos 集群

1. 准备

  • Git
  • K8S
  • kubectl
  • helm

咱也没想到 K8S 部署系列能搞这么多次,我一个开发天天干运维的活,前端后端运维测试工程师实至名归。
Snipaste_2024-07-05_09-06-05.png

2. 方案选择

https://github.com/nacos-group/nacos-k8s

我替你们看了一下,有好几种方式能部署,但我们选择其中一种。

image.png

主要是其他的部署方式我也不想验证啊,我只选了最简单的 nacos-operator。跟着我部署,包跑起来的。

3. 利用 nacos-operator 搭建 Nacos 集群

先看看文档:https://github.com/nacos-group/nacos-k8s/blob/master/operator/README-CN.md

3.1 先把仓库拉到本地

git clone git@github.com:nacos-group/nacos-k8s.git

3.2 安装nacos-operator

cd nacos-k8s/operator

helm install nacos-operator ./chart/nacos-operator --namespace infrastructure

安装完成之后提示:

NAME: nacos-operator

LAST DEPLOYED: Fri Jun 28 09:10:41 2024

NAMESPACE: infrastructure

STATUS: deployed

REVISION: 1

3.3 修改配置文件并生效

# 配置文件示例目录
cd config/samples

# 这个表示集群并使用MySQL进行持久化
vim nacos_cluster_mysql.yaml

nacos_cluster_mysql.yaml:

apiVersion: nacos.io/v1alpha1
kind: Nacos
metadata:
  name: nacos-dev
  namespace: infrastructure
spec:
  type: cluster
  image: nacos/nacos-server:v2.2.3
  replicas: 1
  env:
    # 开启鉴权
    - name: NACOS_AUTH_ENABLE
      value: "true"
    - name: NACOS_AUTH_TOKEN
      value: "XXXXXXXXXX"
    - name: NACOS_AUTH_IDENTITY_KEY
      value: "XXXXXX"
    - name: NACOS_AUTH_IDENTITY_VALUE
      value: "XXXXXX"
  resources:
    requests:
      cpu: 100m
      memory: 512Mi
    limits:
      cpu: 500m
      memory: 1Gi
  mysqlInitImage: "registry.cn-hangzhou.aliyuncs.com/choerodon-tools/mysql-client:10.2.15-r0"
  database:
    type: mysql
    mysqlHost: <HOST>
    mysqlDb: <DB>
    mysqlUser: <USER>
    mysqlPort: <PORT>
    mysqlPassword: <PASSWROD>
  config: |
    management.endpoints.web.exposure.include=*

开启鉴权:Nacos 提供了一个管理后台,部署成功后通过 host:port/nacos 访问。如果我们将这个路径暴露到公网,那么任何人都能访问。可怕的是, Nacos API 接口的 path 也是 /nacos
那么一旦开启,配置中心API 将直接对外,配置中心里面的东西是什么就不用多说了。

也有同学说我保证它只能在内网访问就行了吧?这当然可以,Nacos 也是这样说的。

image.png

但我还是建议打开这个开关,因为一旦有人非常不小心暴露了出去,那你就得提桶。我们应该做的是把鉴权打开,然后把管理员权限给老板,如果他没改默认密码,我们还要提醒他修改默认。懂我意思了吧?

image.png

mysqlInitImage:这是 initContainer 的镜像,initContainer 是 k8s中的概念,表示服务启动之前先做一些操作。在这个场景中是连接上MySQL,然后创建库表这些操作。我实测没有生效,会报错 No Datasource set,所以需要我们自己先初始化好库表以及插入必要的记录。
执行这个MySQL初始化脚本

No Datasource set 有很多的原因,有可能是我刚刚的这种情况,也有可能MySQL用户没有权限等等。遇到问题可以在 issue 看看其他大佬的骚操作。
Issues · nacos-group/nacos-k8s (github.com)

3.4 验证集群是否可用

根据刚刚的配置文件,我们可以访问这个路径来查看Nacos的管理后台,当然,这是通过内网访问的。http://nacos-dev-headless.infrastructure:8848/nacos,访问能看见管理后台就大功告成了。可以使用默认的账户密码登录:nacos/nacos

image.png

3.5 在Springboot程序中集成Nacos

先在管理后台创建好命名空间和dataId 配置文件等

了解Springboot 的配置读取机制,想装x的(bushi)看这个:21. Externalized Configuration (spring.io)英语看不懂就看这个:Felo搜索 - 你的免费AI智能搜索引擎,不是把中文的内容给你了你都能挑出毛病?好吧!

image.png

太长不看就让我给你嚼一下,然后喂给你:

工作目录下的 config 目录中的配置文件先加载,配置文件 bootstrap 比 application 先加载。所以我们只要把配置文件挂载到工作目录下的config中就行了。

老规矩,先整理好配置 bootstrap.properties

spring.application.name=<app-name>
server.port=8080
spring.profiles.active=<profile>

spring.cloud.nacos.config.server-addr=nacos-dev-0.nacos-dev-headless.infrastructure.svc.cluster.local:8848
spring.cloud.nacos.config.enabled=true
spring.cloud.nacos.config.refresh-enabled=true
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.username=<username>
spring.cloud.nacos.password=<password>
spring.cloud.nacos.config.namespace=74a2a3bc-cded-4090-b326-993dba2871e6
spring.cloud.nacos.config.group=DEFAULT_GROUP

spring.cloud.nacos.config.shared-configs[0].data-id=redis-dev.properties
spring.cloud.nacos.config.shared-configs[1].data-id=kafka-dev.properties
spring.cloud.nacos.config.shared-configs[2].data-id=xxl-job-dev.properties
spring.cloud.nacos.config.shared-configs[3].data-id=druid-dev.properties

然后,在 k8s 配置文件中挂载配置文件:ConfigMaps | Kubernetes 或者这个 k8s deployment挂载配置文件-Felo搜索

最后当然是在应用中引入 Nacos 的依赖,因为我只使用配置中心,我只引入了

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.10-RC1</version>
</dependency>

启动服务,查看监听查询

image.png

elegant!

Ref

集群模式部署 | Nacos 官网

nacos-operator方式部署

Nacos API 接口

属性配置列表

MySQL初始化脚本

相关推荐

  1. k8s部署EdgeMesh

    2024-07-11 09:58:02       42 阅读
  2. Kubernetes (K8s) 部署

    2024-07-11 09:58:02       70 阅读
  3. kubeadm部署k8s

    2024-07-11 09:58:02       54 阅读
  4. kubeasz部署k8s

    2024-07-11 09:58:02       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 09:58:02       101 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 09:58:02       108 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 09:58:02       91 阅读
  4. Python语言-面向对象

    2024-07-11 09:58:02       98 阅读

热门阅读

  1. 系统架构设计师——数据模型

    2024-07-11 09:58:02       31 阅读
  2. AEC10 SA计算整理 --- ExtremeColorSA & SaliencySA

    2024-07-11 09:58:02       24 阅读
  3. 探索 Postman API 网络图:可视化 API 交互的窗口

    2024-07-11 09:58:02       28 阅读
  4. (131)EMIF接口--->(003)基于FPGA实现EMIF接口

    2024-07-11 09:58:02       27 阅读
  5. 分析一下多方联合计算中的数据泄露场景

    2024-07-11 09:58:02       24 阅读
  6. VSCode,请打开文件始终在新标签页打开

    2024-07-11 09:58:02       27 阅读
  7. JIRA的高级搜索JIRA Query Language(JQL)详解

    2024-07-11 09:58:02       30 阅读
  8. 开源项目有哪些机遇与挑战?

    2024-07-11 09:58:02       21 阅读
  9. 多器官功能障碍综合征

    2024-07-11 09:58:02       25 阅读
  10. ABAP中预制会计凭证的BAPI使用方法

    2024-07-11 09:58:02       26 阅读
  11. 力扣题解( 最长湍流子数组)

    2024-07-11 09:58:02       26 阅读
  12. ORACLE 数据库ADG切换

    2024-07-11 09:58:02       24 阅读