你好,我是真成。
今天分享一个干货教程,是微服务架构中,必备组件:Nacos。
注意:云原生系列,已经上线两个项目了(含金量很高),运维导航目前已经有 3 个企业级项目。现在加入有大额优惠券领取,领取路径和项目介绍见这篇文章:耗时两月,完成了两个云原生企业级项目教程,40723 字!!
运维导航官网:https://ywdh.qiuyl.com/
本文目录结构如下:

安装 Nacos
Nacos 部署我们可以采用 Operator 方式部署 Nacos 集群,这也是官网推荐方式。本次将安装 Nacos-v3.2.3 目前最新版本。
Nacos 官网文档 K8s 集群部署方式:点击跳转
Nacos Operator 官网部署文档(文档比较旧):点击跳转

安装 Nacos Operator
1)下载 nacos-k8s 源码:https://github.com/nacos-group/nacos-k8s

下载地址:https://github.com/nacos-group/nacos-k8s/releases

上传到服务器解压
yum install -y unzip zip
mkdir -p /opt/platform-tools/operator
tar -xf nacos-k8s-1.0.2.tar.gz
mv nacos-k8s-1.0.2* /opt/platform-tools/operator
cd /opt/platform-tools/operator/nacos-k8s-1.0.2
2)helm 安装 Nacos Operator
./operator:operator 的代码家目录,存放 operator 所有相关信息。
# 默认镜像
nacos/nacos-operator
# 使用镜像
registry.cn-chengdu.aliyuncs.com/qiuyl01/nacos-server:latest
cd /opt/platform-tools/operator/nacos-k8s-1.0.2
kubectl create ns nacos-operator
# helm 安装
helm install nacos-operator ./operator/chart/nacos-operator \
--namespace nacos-operator \
--set image.repository=registry.cn-chengdu.aliyuncs.com/qiuyl01/nacos-operator \
--set image.pullPolicy=IfNotPresent
导入初始化 SQL
1)下载对应版本的初始化 SQL:https://github.com/alibaba/nacos/releases/tag/3.2.3

将这个 SQL 上传到 mysql-8 容器内
docker cp /root/mysql-schema.sql mysql-8:/root/mysql-schema.sql

2)登录 192.168.101.104 安装 MySQL 的节点,创建 nacos_dev 数据库。
进入 mysql-8 容器
docker exec -it mysql-8 bash
mysql -uroot -pmysql.yunwdh.cn
执行 SQL
create database nacos_dev;
use nacos_dev;
source /root/mysql-schema.sql;
-- 查看当前认证插件类型
SELECT user, host, plugin FROM mysql.user;
-- 创建 nacos 用户
CREATE USER 'nacos'@'%' IDENTIFIED BY 'nacos.mysql.yunwdh.cn';
-- 修改 nacos 用户使用 mysql_native_password 方式认证
ALTER USER 'nacos'@'%' IDENTIFIED WITH mysql_native_password BY "nacos.mysql.yunwdh.cn";
-- 开启远程登录权限
GRANT ALL PRIVILEGES ON *.* TO 'nacos'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'nacos'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

运行 Nacos Operator 的 CR
鉴权手册
运行 Nacos 需要开启对应的鉴权模式,本次使用默认鉴权类型。
参考官网文档:点击跳转至鉴权手册


选择 Docker 部署方式,可以获取对应的环境变量参考实例,K8s 部署时也需要这些变量。

各变量解释

生成变量值,安装 Nacos CR 时使用。
1. 自定义生成 NACOS_AUTH_TOKEN 的值,需要通过 base64 转码
$ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
SdzSkqHxpbCX0AiwFsIn4TCgUlB5sgsU
$ echo -n "SdzSkqHxpbCX0AiwFsIn4TCgUlB5sgsU" | base64
U2R6U2txSHhwYkNYMEFpd0ZzSW40VENnVWxCNXNnc1U=
2. NACOS_AUTH_IDENTITY_KEY # 这个值可以随意填
$ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
2DX2LYupf5fQFgbUP9OO2dqX864CiyrC
3. NACOS_AUTH_IDENTITY_VALUE # 这个值可以随意填
$ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 32
uwtopQSl5eOTLorjssQXskp5ZDL8AYKu
# 参考
NACOS_AUTH_ENABLE=true
NACOS_AUTH_ADMIN_ENABLE=true
NACOS_AUTH_CONSOLE_ENABLE=true
NACOS_AUTH_SYSTEM_TYPE=nacos
NACOS_AUTH_TOKEN=${custom_base64_token_secret_key}
NACOS_AUTH_IDENTITY_KEY=${custom_server_identity_key}
NACOS_AUTH_IDENTITY_VALUE=${custom_server_identity_value}
安装 Nacos 服务 CR
./operator/nacos-k8s-master/operator/config/samples:存放 CR 样本的目录,可以直接使用里面的 yaml 文件部署
# 默认镜像
nacos/nacos-server:v2.0.3
# 使用镜像
registry.cn-chengdu.aliyuncs.com/qiuyl01/nacos-server:v3.2.3
注意:需要修改 名称空间、镜像、MySQL 连接信息、环境变量值
cd /opt/platform-tools/operator/nacos-k8s-1.0.2
# 备份 nacos_cluster_mysql.yaml
cp ./operator/config/samples/nacos_cluster_mysql.yaml ./operator/config/samples/nacos_cluster_mysql.yaml.bak
kubectl create ns nacos
# 部署Naocs集群,注意修改:名称空间、镜像、环境变量
cat > ./operator/config/samples/nacos_cluster_mysql.yaml << EOF
apiVersion: nacos.io/v1alpha1
kind: Nacos
metadata:
name: nacos
namespace: nacos # 修改名称空间
spec:
type: cluster
# image: nacos/nacos-server:v2.0.3
image: registry.cn-chengdu.aliyuncs.com/qiuyl01/nacos-server:v3.2.3 # 使用Nacos最新版本
replicas: 3
env:
- name: NACOS_AUTH_ENABLE
value: "true"
- name: NACOS_AUTH_ADMIN_ENABLE
value: "true"
- name: NACOS_AUTH_CONSOLE_ENABLE
value: "true"
- name: NACOS_AUTH_SYSTEM_TYPE
value: nacos
- name: NACOS_AUTH_TOKEN
value: U2R6U2txSHhwYkNYMEFpd0ZzSW40VENnVWxCNXNnc1U=
- name: NACOS_AUTH_IDENTITY_KEY
value: 2DX2LYupf5fQFgbUP9OO2dqX864CiyrC
- name: NACOS_AUTH_IDENTITY_VALUE
value: uwtopQSl5eOTLorjssQXskp5ZDL8AYKu
resources:
requests:
cpu: 100m
memory: 512Mi
limits:
cpu: 1
memory: 2Gi
database:
type: mysql
mysqlHost: 192.168.101.104
mysqlDb: nacos_dev
mysqlUser: nacos
mysqlPort: "3305"
mysqlPassword: "nacos.mysql.yunwdh.cn"
config: | # 自定义配置
management.endpoints.web.exposure.include=* # 开发所有监控端点
EOF
# 创建Nacos集群
kubectl apply -f ./operator/config/samples/nacos_cluster_mysql.yaml
访问 Nacos
Nacos 端口介绍
-
8848 端口:基于HTTP 协议,为了兼容 Nacos1.x 旧版客户端的连接端口。 -
9848 端口:基于 HTTP/2 协议的 gRPC,用于 Nacos 2.x 以及当前最新版本都是使用的该端口进行的通讯,实现服务注册 / 发现、配置监听、长连接推送、实例心跳上报。在实际配置过程中,我们还是配置 8848 端口,因为程序的 SDK 会自动与在 8848 + 1000得到 9848 端口。 -
7848 端口:基于 JRaft 分布式一致性算法,用于 Nacos 集群 Raft 选举、数据同步,仅集群内部互通。 -
8080 端口:目前只有 Nacos-3.x 采用,主要用于将 Web 控制台端口独立和 8848 分离。3.x 之前版本是通过 http://ip:8848/nacos访问的 UI 页面。
Nacos Operator 版本和 Nacos 版本有点不一致。比如:目前最新版本的 Nacos UI 访问端口为 8080,然而 CR 创建的 Nacos,名为 nacos-healess 的 Service,没有开启 8080 端口。

所以这里我们需要手动创建一个 Nacos Servcie
apiVersion: v1
kind: Service
metadata:
labels:
app: nacos
component: nacos
middleware: nacos
name: nacos
namespace: nacos
spec:
ports:
- name: client
port: 8848
protocol: TCP
targetPort: 8848
- name: rpc
port: 7848
protocol: TCP
targetPort: 7848
- name: new-rpc
port: 9848
protocol: TCP
targetPort: 9848
- name: ui
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: nacos
component: nacos
middleware: nacos
type: ClusterIP

创建 Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nacos-dev.yunwdh.cn
namespace: nacos
spec:
ingressClassName: nginx
rules:
- host: nacos-dev.yunwdh.cn
http:
paths:
- backend:
service:
name: nacos
port:
number: 8080
path: /
pathType: Prefix

配置域名解析

浏览器访问 nacos-dev.yunwdh.cn,这里设置初始化密码为 nacos

登录账号 nacos/nacos


点击右上角可以切回旧版控制台页面

删除 CR 和 Nacos Operator
kubectl delete -f ./operator/config/samples/nacos_cluster_mysql.yaml
helm delete nacos-operator -n nacos-operator
注意:云原生系列,已经上线两个项目了(含金量很高),运维导航目前已经有 3 个企业级项目。现在加入有大额优惠券领取,领取路径和项目介绍见这篇文章:耗时两月,完成了两个云原生企业级项目教程,40723 字!!
运维导航官网:https://ywdh.qiuyl.com/
END
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.qiuyl.com/xueyw/635



Abutogel: <a href=" https://abutowin.icu/# ">S...