Nacos K8s

news/2024/10/22 19:50:58

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

Nacos 是构建以服务为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。更多的功能特性介绍请查看 Nacos 概览。

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

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

主机名IPCPU内存系统盘数据盘用途
ksp-registry 192.168.9.90 4 8 40 200 Harbor 镜像仓库
ksp-control-1 192.168.9.91 4 8 40 100 KubeSphere/k8s-control-plane
ksp-control-2 192.168.9.92 4 8 40 100 KubeSphere/k8s-control-plane
ksp-control-3 192.168.9.93 4 8 40 100 KubeSphere/k8s-control-plane
ksp-worker-1 192.168.9.94 8 16 40 100 k8s-worker/CI
ksp-worker-2 192.168.9.95 8 16 40 100 k8s-worker
ksp-worker-3 192.168.9.96 8 16 40 100 k8s-worker
ksp-storage-1 192.168.9.97 4 8 40 400+ ElasticSearch/Longhorn/Ceph/NFS
ksp-storage-2 192.168.9.98 4 8 40 300+ ElasticSearch/Longhorn/Ceph
ksp-storage-3 192.168.9.99 4 8 40 300+ ElasticSearch/Longhorn/Ceph
ksp-gpu-worker-1 192.168.9.101 4 16 40 100 k8s-worker(GPU NVIDIA Tesla M40 24G)
ksp-gpu-worker-2 192.168.9.102 4 16 40 100 k8s-worker(GPU NVIDIA Tesla P100 16G)
ksp-gateway-1 192.168.9.103 2 4 40   自建应用服务代理网关/VIP:192.168.9.100
ksp-gateway-2 192.168.9.104 2 4 40   自建应用服务代理网关/VIP:192.168.9.100
ksp-mid 192.168.9.105 4 8 40 100 部署在 k8s 集群之外的服务节点(Gitlab 等)
合计 15 68 152 600 2100+  

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

  • 操作系统: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,具体可以参考 一文搞定,在 Kubernetes 集群上部署主从复制 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>
  1. 创建数据库及 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;
  1. 导入数据(无需登录容器内部)。
# 进入数据库初始化 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:
  1. 查看数据库。
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| nacos              |
+--------------------+
2 rows in set (0.01 sec)
  1. 查看表。
# 切换数据库
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
  1. 编辑 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"
  1. 修改 StoreClass 名称(可选,自建 NFS 存储时使用)。

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

$ sed -i 's/managed-nfs-storage/nfs-sc/g' nacos-pvc-nfs.yaml
  1. 删除 serviceAccountName(可选,自建 NFS 存储时使用)。
sed -i '/serviceAccountName/d' nacos-pvc-nfs.yaml
  1. 修改镜像地址(可选,镜像下载受限或是离线部署时可用)。
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
  1. 开启鉴权配置(建议)。

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
  1. 验证 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

KubeSphere (https://kubesphere.io)是在 Kubernetes 之上构建的开源容器平台,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。

KubeSphere 已被 Aqara 智能家居、本来生活、东方通信、微宏科技、东软、华云、新浪、三一重工、华夏银行、四川航空、国药集团、微众银行、紫金保险、去哪儿网、中通、中国人民银行、中国银行、中国人保寿险、中国太平保险、中国移动、中国联通、中国电信、天翼云、中移金科、Radore、ZaloPay 等海内外数万家企业采用。KubeSphere 提供了开发者友好的向导式操作界面和丰富的企业级功能,包括 Kubernetes 多云与多集群管理、DevOps (CI/CD)、应用生命周期管理、边缘计算、微服务治理 (Service Mesh)、多租户管理、可观测性、存储与网络管理、GPU support 等功能,帮助企业快速构建一个强大和功能丰富的容器云平台。

✨ GitHub:https://github.com/kubesphere
💻 官网(中国站):https://kubesphere.io/zh
🙋 论坛:https://ask.kubesphere.io/forum/
👨‍💻‍ 微信群:请搜索添加群助手微信号 kubesphere

 
好文要顶 关注我 收藏该文 微信分享
1
0
 
 
升级成为会员
 
« 上一篇:  云原生周刊:CNCF 宣布 KubeEdge 毕业

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ - 总结

1. 为什么要使用MQ,使用场景是什么异步 : 减少请求响应时间,实现非核心流程异步化 (架构设计原则,能异步就不要同步) 解耦:屏蔽异构平台的细节,生产者消费者可自行扩展修改系统能力只需遵循消息约束,生产者消费者不受对方影响 流量削峰:消息堆积能力,消息保存在MQ中,…

数据采集作业一

一、用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020)的数据,屏幕打印爬取的大学排名信息点击查看代码 # 目标网址 url = "http://www.shanghairanking.cn/rankings/bcur/2020"# 获取网页内容 response = url…

PbootCMS提示错误信息“未检测到您服务器环境的sqlite3数据库扩展

检查并开启 sqlite3 扩展打开 PHPStudy Pro 软件。 导航至设置 -> 配置文件 -> php.ini。 选择你当前使用的 PHP 版本(例如 php7.3.4nts)并点击打开 php.ini 文件。 在 php.ini 文件中搜索 extension=sqlite3。 如果该行被注释掉(前面有分号 ;),则去掉分号以启用扩展…

PbootCMS上传空间后前台打开内页显示404错误怎么解决

检查 URL 规则配置登录 PbootCMS 后台。 导航至 配置参数 -> URL规则。 选择 伪静态模式 并保存。添加伪静态规则根据你的服务器环境,选择合适的伪静态规则文件。 一般情况下,Apache 环境使用 .htaccess 文件。Apache 环境配置将 rewrite 文件夹中的 .htaccess 文件复制到…

例题2.3

例题2.3代码 L = [abc, 12, 3.45, python, 2.789] print(L) print(L[0]) L[0] = a L[1:3] = [b, Hello] print(L) L[2:4] = [] print(L)

习题2.5

习题2.5代码 import numpy as np import pandas as pd import sympy as sp sp.init_printing(use_unicode=True) import matplotlib.pyplot as plt plt.rcParams[font.sans-serif]=[Times New Roman + SimSun + WFM Sans SC] plt.rcParams[mathtext.fontset]=cm Times New Roma…

高等数学 7.7常系数齐次线性微分方程

在二阶齐次线性微分方程 \[y + P(x)y + Q(x)y = 0 \tag{1} \]中,如果 \(y, y\) 的系数 \(P(x), Q(x)\) 均为常数,即 \((1)\) 式成为 \[y + py + qy = 0 \tag{2} \]其中 \(p, q\) 是常数,那么称 \((2)\) 为二阶常系数齐次线性微分方程。如果 \(p, q\) 不全为常数,就称 \((1)…

线性代数--线性方程组

线性方程组有解的判定 {x1+x2+x3=1x1−x2−x3=−32x1+9x2+10x3=11系数矩阵:A=(1111−1−12910)增广矩阵:A=(11111−1−1−3291011) n是未知量的个数,m是方程的个数怎么判断秩是否相等步骤:通过方程,写出增广系数矩阵 只做初等行变换,化为阶梯型 看系数矩阵的秩和增广系数…