KubeSphere 最佳实战:Kubernetes 部署集群模式 Nacos 实战指南

Nacos 是 Dynamic Naming and Configuration Service 的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 是构建以服务为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

在本文中,我将为您提供一份全面的实战指南,详细地指导您如何在 Kubernetes 集群中部署以集群模式运行的 Nacos 服务。

实战服务器配置(架构1:1复刻小规模生产环境,配置略有不同)

实战环境涉及软件版本信息

  • 操作系统:openEuler 22.03 LTS SP3 x86_64

  • KubeSphere:v3.4.1

  • Kubernetes:v1.28.8

  • KubeKey: v3.1.1

  • MySQL:v5.7.44

  • Nacos: v2.4.2.1

1. 部署方案规划

1.1 部署架构图

1.2 准备 Nacos 部署资源

  • 创建部署资源根目录

mkdir /srv/nacos
cd /srv/nacos

  • 获取官方资源配置清单

# wget 方式(推荐)
wget https://codeload.github.com/nacos-group/nacos-k8s/zip/refs/heads/master -O nacos-k8s-master.zip# git 方式
git clone https://github.com/nacos-group/nacos-k8s.git

  • 获取初始化数据库文件

wget https://raw.githubusercontent.com/alibaba/nacos/refs/heads/master/distribution/conf/mysql-schema.sql

1.3 准备 MySQL

Nacos 需要使用 MySQL,本文使用更加贴近生产的 MySQL 主从复制方案部署 MySQL

提示: 也可以使用官方提供的资源清单 deploy/mysql/mysql-nfs.yaml ,部署单机版的 MySQL 服务。

Step 1:导入 MySQL 初始化数据

1、进入 MySQL 主节点容器内部。

$ kubectl exec -it mysql-source-0 -- mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44-log MySQL Community Server (GPL)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

2、创建数据库及 Nacos 用户。

-- 创建数据库
mysql> CREATE DATABASE IF NOT EXISTS `nacos` DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;-- 创建用户
mysql> CREATE USER 'nacos'@'%' IDENTIFIED BY 'ChangeMe';-- 赋予权限
mysql> GRANT ALL PRIVILEGES ON `nacos`.* TO 'nacos'@'%';-- 刷新权限
mysql> FLUSH PRIVILEGES;

3、导入数据(无需登录容器内部)。

# 进入数据库初始化 sql 文件目录
$ cd /srv/nacos/# 导入数据
kubectl exec -i mysql-source-0 -- mysql -S /var/lib/mysql/mysql.sock -u nacos -pChangeMe nacos < mysql-schema.sql

Step 2:查看导入的数据

1、登陆 MySQL 主节点容器内部。

$ kubectl exec -it mysql-source-0 -- mysql -u nacos -p
Enter password:

2、查看数据库。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| nacos              |
+--------------------+
2 rows in set (0.01 sec)

3、查看表。

# 切换数据库
mysql> use nacos;
Database changed# 查看表
mysql> show tables;
+----------------------+
| Tables_in_nacos      |
+----------------------+
| config_info          |
| config_info_aggr     |
| config_info_beta     |
| config_info_tag      |
| config_tags_relation |
| group_capacity       |
| his_config_info      |
| permissions          |
| roles                |
| tenant_capacity      |
| tenant_info          |
| users                |
+----------------------+
12 rows in set (0.00 sec)

从结果中可以看到执行 mysql-schema.sql 后,自动创建了 Nacos 服务的相关表和数据。

1.4 准备持久化存储

本实战环境使用 NFS 作为 K8s 集群的持久化存储,如果是新集群可以参考《探索 Kubernetes 持久化存储之 NFS 终极实战指南》 部署 NFS 存储。

提示: 也可以使用官方提供的 deploy/nfs/ 目录下的资源清单,部署单机版的 NFS 服务。

2. 集群模式 Nacos 部署

2.1 修改配置文件

1、解压部署代码。

$ cd /srv/nacos
$ unzip nacos-k8s-master.zip
$ cd nacos-k8s-master/deploy/nacos

2、编辑 nacos-pvc-nfs.yaml,修改数据库配置。

data:mysql.host: "mysql-source-headless.default.svc.cluster.local"		# 数据库地址,本文使用 MySQL 服务在 k8s 集群内的 DNS 域名mysql.db.name: "nacos"mysql.port: "3306"mysql.user: "nacos"mysql.password: "ChangeMe"

3、修改 StoreClass 名称(可选,自建 NFS 存储时使用)。

默认的配置文件使用的 StoreClass 名称为 managed-nfs-storage,使用下面的命令修改为实际的值。

$ sed -i 's/managed-nfs-storage/nfs-sc/g' nacos-pvc-nfs.yaml

4、删除 serviceAccountName(可选,自建 NFS 存储时使用)。

sed -i '/serviceAccountName/d' nacos-pvc-nfs.yaml

5、修改镜像地址(可选,镜像下载受限或是离线部署时可用)。

sed -i 's#nacos/nacos-peer-finder-plugin:1.1#registry.opsxlab.cn:8443/nacos/nacos-peer-finder-plugin:1.1#g' nacos-pvc-nfs.yaml
sed -i 's#nacos/nacos-server:latest#registry.opsxlab.cn:8443/nacos/nacos-server:v2.4.2.1#g' nacos-pvc-nfs.yaml

6、开启鉴权配置(建议)。

Nacos 默认配置没有开启鉴权,生产环境建议开启。在 containers.env 部分增加下面的内容:

- name: NACOS_AUTH_ENABLEvalue: "true"
- name: NACOS_AUTH_TOKENvalue: "SecretKeyYzJlMTMxOTU5ZTljZTkxZGQ2MDcwZGIxMzU1YTFkMjg="
- name: NACOS_AUTH_IDENTITY_KEYvalue: "serverIdentity"
- name: NACOS_AUTH_IDENTITY_VALUEvalue: "ChangeMe"

注意: 自定义 NACOS_AUTH_TOKEN 密钥时,推荐将配置项设置为Base64 编码的字符串,且原始密钥长度不得低于32字符

可以执行下面的命令生成TOKEN 密钥:

echo -n $(openssl rand -hex 16) | base64 -w0

2.2 部署 Nacos 集群

1、执行下面的命令,创建 Nacos。

$ kubectl create -f nacos-pvc-nfs.yaml

正确执行后,输出结果如下 :

$ kubectl create -f nacos-pvc-nfs.yaml
service/nacos-headless created
configmap/nacos-cm created
statefulset.apps/nacos created

2、验证 Nacos 节点状态。

$ kubectl get pod -l app=nacos -o wide
NAME      READY   STATUS    RESTARTS   AGE   IP              NODE           NOMINATED NODE   READINESS GATES
nacos-0   1/1     Running   0          25s   10.233.96.233   ksp-worker-3   <none>           <none>
nacos-1   1/1     Running   0          25s   10.233.94.125   ksp-worker-1   <none>           <none>
nacos-2   1/1     Running   0          25s   10.233.68.221   ksp-worker-2   <none>           <none>

2.3 配置 K8s 集群外部访问

我们采用 NodePort 方式在 Kubernetes 集群中对外发布 Nacos 服务,以便管理员能够访问图形化控制台,同时也为集群外的应用提供服务,指定的端口为 31848

使用 vi 编辑器,新建 NodePort 服务资源清单文件 nacos-external.yaml,并输入以下内容:

kind: Service
apiVersion: v1
metadata:name: nacos-externallabels:app: nacos-external
spec:ports:- protocol: TCPport: 8848targetPort: 8848nodePort: 31848selector:app: nacostype: NodePort

2.4 设置管理员密码

自 2.4.0 版本开始,Nacos构建时不再提供管理员用户nacos的默认密码,需要在首次开启鉴权后,通过 API 或 Nacos 控制台进行管理员用户nacos的密码初始化。

本文选择 Nacos 控制台的方式初始化密码,当 Nacos 集群开启鉴权后,访问 Nacos 控制台时,会校验管理员用户nacos的密码是否已经初始化,若发现未初始化密码时,则会跳转至初始化密码的页面进行初始化。

在该页面密码文本框内输入自定义密码,然后点击提交即可。

注意: 若密码文本框内未输入自定义密码或输入空白密码,Nacos 将会生成随机密码,请保存好生成的随机密码。

初始化成功后会弹窗提示初始化成功,并明文展示指定的密码或随机生成的密码,请保存好此密码。

点击「确定」后,会跳转到登录页面,并弹出权限认证失败的提示框。

点击「确定」后,输入 nacos 用户名和对应的密码。

登录成功后,进入「配置管理」页面。

3. 验证测试 Nacos 服务是否正确配置

使用 curl 命令,在 K8s 集群外的机器上调用 Nacos API 接口,通过 Nacos 对外服务对应的 NodePort 端口,验证测试 Nacos 服务是否正常。

3.1 获取 Token

首先,使用用户名和密码登陆 nacos,若用户名和密码正确,会返回 Token 信息。

curl -X POST 'http://192.168.9.91:31848/nacos/v1/auth/login' -d 'username=nacos&password=ChangeMe'

正确执行后,返回的结果如下:

{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcyNzcwOTk0Mn0.Ki2kgZyh_dj_Zfb9HKPCkKr1cgWfi3szQS4hlZPIwkI","tokenTtl":18000,"globalAdmin":true,"username":"nacos"}

3.2 服务注册

curl -X POST 'http://192.168.9.91:31848/nacos/v1/ns/instance?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcyNzcwOTk0Mn0.Ki2kgZyh_dj_Zfb9HKPCkKr1cgWfi3szQS4hlZPIwkI&serviceName=nacos.naming.serviceName&ip=192.168.9.81&port=8080'

3.3 服务发现

curl -X GET 'http://192.168.9.91:31848/nacos/v1/ns/instance/list?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcyNzcwOTk0Mn0.Ki2kgZyh_dj_Zfb9HKPCkKr1cgWfi3szQS4hlZPIwkI&serviceName=nacos.naming.serviceName'

正确执行后,返回的结果如下:

{"name":"DEFAULT_GROUP@@nacos.naming.serviceName","groupName":"DEFAULT_GROUP","clusters":"","cacheMillis":10000,"hosts":[],"lastRefTime":1727692102280,"checksum":"","allIPs":false,"reachProtectionThreshold":false,"valid":true}[

3.4 发布配置

curl -X POST "http://192.168.9.91:31848/nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcyNzcwOTk0Mn0.Ki2kgZyh_dj_Zfb9HKPCkKr1cgWfi3szQS4hlZPIwkI&dataId=nacos.cfg.dataId&group=test&content=helloWorld"

3.5 获取配置

curl -X GET "http://192.168.9.91:31848/nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcyNzcwOTk0Mn0.Ki2kgZyh_dj_Zfb9HKPCkKr1cgWfi3szQS4hlZPIwkI&dataId=nacos.cfg.dataId&group=test"

正确执行后,返回的结果如下:

helloWorld

3.6 Nacos 控制台查看

  • 配置管理列表

  • 配置详情

至此,我们完成了在 KubeSphere 管理的 Kubernetes 集群上手动部署 Nacos 集群的全过程,后续的配置管理请根据实际应用的需求进行配置。

文章转载自:kubesphere

原文链接:https://www.cnblogs.com/kubesphere/p/18493050

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/455359.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s备份恢复(velero)

velero简介 velero官网&#xff1a; https://velero.io/ velero-github&#xff1a; https://github.com/vmware-tanzu/velero velero的特性 备份可以按集群资源的子集&#xff0c;按命名空间、资源类型标签选择器进行过滤&#xff0c;从而为备份和恢复的内容提供高度的灵活…

怎么在线制作拼团活动

在这个快节奏的时代&#xff0c;我们总在寻找那份独特的购物乐趣与超值体验。传统购物模式已难以满足日益增长的个性化与性价比需求&#xff0c;而在线购物虽便捷&#xff0c;却常让人在琳琅满目的商品中迷失方向。正是在这样的背景下&#xff0c;一种全新的购物方式——“在线…

vue3处理货名的拼接

摘要&#xff1a; 货品的拼接规则是&#xff1a;【品牌】货名称/假如货品名称为空时&#xff0c;直接选择品牌为【品牌】赋值给货品&#xff0c;再选择品牌&#xff0c;会替换【品牌】&#xff1b;假如货名称为【品牌】名称&#xff0c;再选择品牌只会替换【品牌】&#xff0c;…

vue3项目页面实现echarts图表渐变色的动态配置

完整代码可点击vue3项目页面实现echarts图表渐变色的动态配置-星林社区 https://www.jl1mall.com/forum/PostDetail?postId202410151031000091552查看 一、背景 在开发可配置业务平台时&#xff0c;需要实现让用户对项目内echarts图表的动态配置&#xff0c;让用户脱离代码也…

2024下半年软考机考模拟系统已开放!小伙伴们速速练起来

千呼万唤使出来&#xff0c;软考机考的模拟练习系统已于10月23号正式开放&#xff01; 今年报名计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;软考&#xff09;的小伙伴们千万不要忘记哦&#xff01; 01、开放时间 据中国计算机技术职业资格网发…

基于AI识别数据的Vue.js图像框选标注

在数字化时代&#xff0c;图像识别技术的应用越来越广泛&#xff0c;尤其是在车牌识别、人脸识别等领域。本文将介绍如何使用Vue.js框架和JavaScript创建一个交互式组件&#xff0c;该组件不仅允许用户在图片上绘制多个区域&#xff0c;加载文字&#xff0c;还提供了清空功能。…

外包干了2个月,技术明显退步

回望过去&#xff0c;我是一名普通的本科生&#xff0c;于2019年通过校招有幸加入了南京某知名软件公司。那时的我&#xff0c;满怀着对未来的憧憬和热情&#xff0c;投入到了功能测试的岗位中。日复一日&#xff0c;年复一年&#xff0c;转眼间&#xff0c;我已经在这个岗位上…

常用shell指令

这些指令通常在adb shell环境中使用&#xff0c;或者通过其他方式&#xff08;如SSH&#xff09;直接在设备的shell中使用。 文件操作命令 ls&#xff1a;列出目录的内容 ls /sdcard cd&#xff1a;改变目录 cd /sdcard/Download pwd&#xff1a;打印当前工作目录 pwd cat&…

CV2通过一组轮廓点扣取图片

代码如下&#xff1a; import cv2 import numpy as np# 读取原始图像 original_image cv2.imread(img.png)# 定义一组轮廓点&#xff08;这里只是示例&#xff0c;你需要根据实际情况替换&#xff09; points np.array([[50, 100], [100, 200], [200, 150], [200, 50], [160…

负载均衡服务器攻击怎么解决最有效?

负载均衡服务器攻击怎么解决最有效&#xff1f;常见的有效解决方法包括&#xff1a;使用SYNCookie机制、限制ICMP包速率、基于源IP的连接速率限制、检测并丢弃异常IP包、配置访问控制列表&#xff08;ACL&#xff09;、设置虚拟服务器/服务器连接数量限制、设置HTTP并发请求限制…

【景观生态学实验】实验二 景观类型分类

实验目的 1.掌握ArcGIS软件的基本操作&#xff1a;通过课堂理论学习与实验课的实际动手操作&#xff0c;学习并熟练掌握如何利用ArcGIS软件对遥感影像进行一些较为基础的数据处理与分析工作&#xff0c;具体包括波段合成、图像镶嵌、图像裁剪与图像分类等&#xff1b; 2.熟悉…

基于STM32设计的养殖场环境监测系统(华为云IOT)

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】项目硬件模块组成【4】需求总结 1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】设备端开发【2】上位机开发 二、部署华为云物联网平台2.1 物联网平台介绍2.2 开通物联网服务2.3 创建产品&#x…

微信小程序-获取头像和昵称

一.获取头像 1.将button组件open-type的值设置为chooseAvatar 2.通过bindchooseavatar事件回调获取到头像信息的临时路径 wxml文件代码&#xff1a; <view> <button class"btn" open-type"chooseAvatar" bindchooseavatar"chooseavatar&qu…

生成式人工智能

这个接龙的生成就是概率式的&#xff0c;下一个接龙的字是有概率的 本身就是在做文字接龙的游戏&#xff0c;不会搜索网上的资料

Zig语言通用代码生成器:逻辑,冒烟测试版发布

#1024程序员节 | 征文# Zig语言通用代码生成器&#xff1a;逻辑&#xff0c;冒烟测试版发布 Zig语言是一种新的系统编程语言&#xff0c;其生态位类同与C&#xff0c;是前一段时间大热的rust语言的竞品。它某种意义上的确非常像rust&#xff0c;尤其是在开发过程中无穷无尽抛错…

【哈工大_操作系统理论】L282930 生磁盘的使用从生磁盘到文件文件使用磁盘的实现

L4.3 生磁盘的使用 1、认识磁盘 选择磁道旋转扇区数据读写 哪一个柱面 C哪一个磁头 H哪一个扇区 S 2、第一层抽象&#xff1a;盘块号block 发送盘块号block&#xff0c;磁盘驱动根据 block 计算出 cyl、head、sec&#xff08;CHS&#xff09; 磁盘访问时间主要是寻道时间…

精准布局:探索CSS中的盒子固定定位的魅力

一、概念 固定定位使元素相对于浏览器窗口进行定位&#xff0c;无论网页如何滚动&#xff0c;固定定位的元素也会保持在相同的位置&#xff0c;设置固定定位的元素脱离文档流。 二、语法结构 <style>选择器{/* fixed 固定定位 */position: fixed;}</style> 与绝…

LeetCode练习-删除链表的第n个结节

大家好&#xff0c;依旧是你们的萧萧啊。 今天我们来练习一个经典的链表问题&#xff1a;删除链表的第n个节点。在这篇文章中&#xff0c;我们将深入分析这个问题&#xff0c;并给出一个有效的解决方案。 问题描述 给定一个链表&#xff0c;要求删除链表的倒数第n个节点&…

WRB Hidden Gap,WRB隐藏缺口,MetaTrader 免费公式!(指标教程)

WRB Hidden Gap MetaTrader 指标用于检测和标记宽范围的柱体&#xff08;非常长的柱体&#xff09;或宽范围的烛身&#xff08;具有非常长实体的阴阳烛&#xff09;。此指标可以识别WRB中的隐藏跳空&#xff0c;并区分显示已填补和未填补的隐藏跳空&#xff0c;方便用户一眼识别…

GEE数据集:1984-2022 年间加拿大 6.5 亿公顷森林生态系统的年度优势树种(也称主要树种)地图

目录 简介 数据集说明 空间信息 变量 代码 代码链接 下载链接 引用 许可 网址推荐 0代码在线构建地图应用 机器学习 简介 加拿大长期树种&#xff08;1984-2022 年&#xff09;∥在该数据集中&#xff0c;我们利用空间分辨率为 30 米的 Landsat 时间序列图像&…