- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
Nacos 是 Dynamic Naming and Configuration Service 的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台.
Nacos 是构建以服务为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。更多的功能特性介绍请查看 Nacos 概览.
在本文中,我将为您提供一份全面的实战指南,详细地指导您如何在 Kubernetes 集群中部署以集群模式运行的 Nacos 服务.
主机名 | IP | CPU | 内存 | 系统盘 | 数据盘 | 用途 |
---|---|---|---|---|---|---|
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+ |
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
Nacos 需要使用 MySQL,本文使用更加贴近生产的 MySQL 主从复制方案部署 MySQL,具体可以参考 一文搞定,在 Kubernetes 集群上部署主从复制 MySQL .
提示: 也可以使用官方提供的资源清单 deploy/mysql/mysql-nfs.yaml ,部署单机版的 MySQL 服务.
Step 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>
-- 创建数据库
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;
# 进入数据库初始化 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:查看导入的数据 。
$ kubectl exec -it mysql-source-0 -- mysql -u nacos -p
Enter password:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| nacos |
+--------------------+
2 rows in set (0.01 sec)
# 切换数据库
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 服务的相关表和数据.
本实战环境使用 NFS 作为 K8s 集群的持久化存储,如果是新集群可以参考《探索 Kubernetes 持久化存储之 NFS 终极实战指南》 部署 NFS 存储.
提示: 也可以使用官方提供的 deploy/nfs/ 目录下的资源清单,部署单机版的 NFS 服务.
$ cd /srv/nacos
$ unzip nacos-k8s-master.zip
$ cd nacos-k8s-master/deploy/nacos
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"
默认的配置文件使用的 StoreClass 名称为 managed-nfs-storage,使用下面的命令修改为实际的值.
$ sed -i 's/managed-nfs-storage/nfs-sc/g' nacos-pvc-nfs.yaml
sed -i '/serviceAccountName/d' nacos-pvc-nfs.yaml
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
Nacos 默认配置没有开启鉴权,生产环境建议开启。在 containers.env 部分增加下面的内容:
- name: NACOS_AUTH_ENABLE
value: "true"
- name: NACOS_AUTH_TOKEN
value: "SecretKeyYzJlMTMxOTU5ZTljZTkxZGQ2MDcwZGIxMzU1YTFkMjg="
- name: NACOS_AUTH_IDENTITY_KEY
value: "serverIdentity"
- name: NACOS_AUTH_IDENTITY_VALUE
value: "ChangeMe"
注意: 自定义 NACOS_AUTH_TOKEN 密钥时,推荐将配置项设置为Base64 编码的字符串,且原始密钥长度不得低于32字符.
可以执行下面的命令生成TOKEN 密钥:
echo -n $(openssl rand -hex 16) | base64 -w0
$ 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
$ 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>
我们采用 NodePort 方式在 Kubernetes 集群中对外发布 Nacos 服务,以便管理员能够访问图形化控制台,同时也为集群外的应用提供服务,指定的端口为 31848.
使用 vi 编辑器,新建 NodePort 服务资源清单文件 nacos-external.yaml,并输入以下内容:
kind: Service
apiVersion: v1
metadata:
name: nacos-external
labels:
app: nacos-external
spec:
ports:
- protocol: TCP
port: 8848
targetPort: 8848
nodePort: 31848
selector:
app: nacos
type: NodePort
自 2.4.0 版本开始,Nacos构建时不再提供管理员用户nacos的默认密码,需要在首次开启鉴权后,通过 API 或 Nacos 控制台进行管理员用户nacos的密码初始化.
本文选择 Nacos 控制台的方式初始化密码,当 Nacos 集群开启鉴权后,访问 Nacos 控制台时,会校验管理员用户nacos的密码是否已经初始化,若发现未初始化密码时,则会跳转至初始化密码的页面进行初始化.
在该页面密码文本框内输入自定义密码,然后点击提交即可.
注意: 若密码文本框内未输入自定义密码或输入空白密码,Nacos 将会生成随机密码,请保存好生成的随机密码.
初始化成功后会弹窗提示初始化成功,并明文展示指定的密码或随机生成的密码,请保存好此密码.
点击「确定」后,会跳转到登录页面,并弹出权限认证失败的提示框.
点击「确定」后,输入 nacos 用户名和对应的密码.
登录成功后,进入「配置管理」页面.
使用 curl 命令,在 K8s 集群外的机器上调用 Nacos API 接口,通过 Nacos 对外服务对应的 NodePort 端口,验证测试 Nacos 服务是否正常.
首先,使用用户名和密码登陆 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"}
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'
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}[
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"
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
至此,我们完成了在 KubeSphere 管理的 Kubernetes 集群上手动部署 Nacos 集群的全过程,后续的配置管理请根据实际应用的需求进行配置.
免责声明:
本文内容首发:运维有术.
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 。
最后此篇关于KubeSphere最佳实战:Kubernetes部署集群模式Nacos实战指南的文章就讲到这里了,如果你想了解更多关于KubeSphere最佳实战:Kubernetes部署集群模式Nacos实战指南的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
1. 引言 很多同学了解r-nacos特性后最开始只将r-nacos用于开发测试环境。 经过一段时间的使用后,部分同学有打算生产环境也从nacos迁移到r-nacos。 一些之前使用nacos服
学习不用那么功利,二师兄带你从更高维度轻松阅读源码~ 上篇文章,我们分析了Nacos客户端订阅的核心流程:Nacos客户端通过一个定时任务,每6秒从注册中心获取实例列表,当发现实例发生变化时,
Nacos 的部署,我使用的时docker 部署(单机模式 Mysql),官网文档:https://nacos.io/zh-cn/docs/quick-start-docker.html 拉取代码
目录 前言 准备工作 Nacos安装及使用入门 准备三个SpringBoot服务,引入Nacos及Kafka 业务解读
前置内容 1、SpringCloud Alibaba简介和Nacos【注册中心】 1、Nacos(下) 1.1、服务配置中心演示 1.1.1、基础配置 1. 建Module Module的名称为clo
前言: 我们经常在springboot单体项目中,集成swagger来整合接口文档; 但是在微服务springcloud项目下,业务模块众多,如果再像之前一样单独访问每个模块的 swagger-ui.
前面我们分析了携程的 apollo(见 详解apollo的设计与使用),现在再来看看阿里的 nacos。和 apollo 一样,nacos 也是一款配置中心,同样可以实现配置的集中管理、分环境管理、即
默认你已经看过我之前的教程了,并且拥有上个教程完成的项目, 。 之前的教程 https://www.cnblogs.com/leafstar/p/17638782.html 。 项目链接
本文转载自微信公众号「Java中文社群」,作者磊哥 。转载本文请联系Java中文社群公众号。 在 Nacos 中,服务调用主要是通过 RestTemplate + Ribbon 实现的,RestT
目录 前言 1、Nacos环境准备 1、启动Nacos配置中心并创建路由配置 2、连接Nacos配置中心 2、项目
首先从github上下载nacos的压缩包:https://github.com/alibaba/nacos/releases 下载完成之后,通过WinSCP把文件传到linux服务器上 接着
一、简介 Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast
前言 其实也就是相当于之前用的 eureka 和 config (或者阿波罗)。 本篇提供给初学者,最快速最简单地去使用上nacos 。 正文 1.首先以最快的速度 ,本地(windows环境) ,把
动态规则 规则 Sentinel 的理念是开发者只需要关注资源的定义,当资源定义成功后可以动态增加各种流控降级规则。 在实际使用过程中,设置规则之后,保存在内存中,应用重启后,规则失效,而目前s
目录 1、SpringBoot 使用 Nacos Config 实现多环境切换 1. 现象 2. 引入依赖 3. 添加bootst
Sentinel 规则配置,一旦我们重启服务过后,所有的规则都会消失。我们可以通过 Zookeeper , Applo , Nacos 等配置中心将这些规则配置存储起来,让服务重启或者启动多节点
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章Spring Cloud Alibaba Nacos 入门详解由作者收集
1、spring-cloud-starter-alibaba-nacos-discovery 这里依赖报红,无法引入,或显示无法找到,更换版本也无法解决,启动项目后nacos中也无法发现服务 ①错
我是一名优秀的程序员,十分优秀!