命令行配置文件部署
环境准备
确认要部署的k8s环境正常,git工具已安装
下载 nacos-k8s 项目
git clone https://github.com/nacos-group/nacos-k8s.git
cd nacos-k8s
快速启动
cd nacos-k8s
chmod +x quick-startup.sh
./quick-startup.sh
验证Nacos服务是否启动成功
通过kubectl logs -f $pod_name
命令,查看Nacos服务启动日志,如果看到如下日志,说明服务启动成功。
Nacos started successfully in xxxx mode. use xxxx storage
可以通过下列服务,快速检验Nacos的功能。
访问Nacos控制台页面
link:http://${cluster-ip}:8848/nacos/
Rancher表单界面部署
现在k8s服务为了方便管理和操作一般都配置有ui管理页面,所以我们下面用k8s的管理工具之一的rancher来配置一下nacos集群
创建mysql存储服务
这里创建的mysql是单节点的不是集群,如果你已经部署了相关的存储服务可以跳过这一步
创建数据卷

配置mysql的密码和配置文件
配置密码

配置mysql的配置文件

配置文件是我自己随便找的写上去的,其他人可以从网上找到更详细的配置文件进行替换
[mysqld]
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
datadir=/var/lib/mysql
lower_case_table_names=1
character-set-server=utf8mb4
[client]
port = 3306
default-character-set=utf8mb4
[mysqldump]
max_allowed_packet=512M
配置工作负载(容器)




以上就是mysql服务的创建过程。
创建nacos集群服务
在数据库中创建对应的库表
sql文件可以通过下载官方的代码,在压缩包中找到,官网地址:https://nacos.io/download/nacos-server/

也可以点击这里直接下载导入数据库中,数据库名称自定义
mysql-schema.sql
创建nacos-headless
headless 服务介绍
在 Kubernetes (K8S) 中,headless 服务(无头服务)是一种特殊类型的服务,它与普通的 K8S 服务有所不同。通常情况下,服务(Service)的作用是为一组后端 Pod 提供一个稳定的网络入口,使得这些 Pod 可以通过服务的名称或 IP 地址被访问到。
Headless 服务的主要特点如下:
1、不分配 ClusterIP:
普通的服务会自动分配一个集群内部的虚拟 IP(ClusterIP),这个 IP 在整个集群范围内是唯一的,并且可以通过这个 IP 访问到服务后端的 Pod。
相比之下,headless 服务不会被分配 ClusterIP,这意味着它没有一个中心化的入口地址。
2、直接暴露 Pod IP:
Headless 服务允许客户端直接访问其后端 Pod 的 IP 地址。每个 Pod 都有一个固定的 IP 地址,因此客户端可以直接通过这些 IP 地址来访问 Pod。
这种方式特别适用于需要知道后端 Pod 实际 IP 地址的情况,例如数据库复制场景。
3、DNS 解析:
当创建一个 headless 服务时,Kubernetes DNS 会为该服务创建特殊的 DNS 记录。这些记录包含所有匹配选择器(selector)的 Pod 的 IP 地址。
客户端可以通过查询服务的 DNS 名称获取到后端 Pod 的列表。这意味着客户端可以实现自己的负载均衡策略,而不是依赖于服务提供的内置负载均衡。
4、使用场景:
Headless 服务非常适合用于需要多播或者直接 Pod-to-Pod 通信的场景。
常见的例子包括数据库集群、分布式存储系统等,其中各个节点之间需要直接通信,而不需要通过一个中心化的服务代理。
5、与普通服务结合使用:
有时候,你可能需要同时拥有 headless 服务和普通的服务。例如,你可以创建一个 headless 服务来提供 Pod 的直接访问,同时创建另一个服务(比如 NodePort 或 LoadBalancer 类型)来为外部流量提供统一的入口。
综上所述,headless 服务主要用于那些不需要中心化负载均衡逻辑的应用场景,而是希望直接与后端 Pod 交互的情况。这种方式提供了更多的灵活性和控制能力,但同时也要求应用程序具备适当的发现机制和负载均衡策略。
以上引用于 黄嘉波 —— 在K8S中,headless服务是什么? https://www.cnblogs.com/huangjiabobk/p/18324872
创建headless



创建nacos-db配置的ConfigMap

创建nacos集群服务(StatefulSet)






注:配置端口时client-rpc、raft-rpc端口时,需要再client端口的基础上分别+1000
和+1001
例如client端口配置的是30110
则client-rpc的端口则必须配置为31110
,raft-rpc的端口必须配置为31111
。否则再客户端连接时会抛出 Client not connected, current status:STARTING
异常。
参数 | 值 |
---|
NACOS_REPLICAS | 3 |
MYSQL_SERVICE_HOST | mysql.host |
MYSQL_SERVICE_DB_NAME | mysql.db.name |
MYSQL_SERVICE_PORT | mysql.port |
MYSQL_SERVICE_USER | mysql.user |
MYSQL_SERVICE_PASSWORD | mysql.password |
SPRING_DATASOURCE_PLATFORM | mysql |
NACOS_SERVER_PORT | 8848 |
NACOS_APPLICATION_PORT | 8848 |
PREFER_HOST_MODE | hostname |
NACOS_SERVERS | nacos-0.nacos-headless.{部署的命名空间}.svc.cluster.local:8848 nacos-1.nacos-headless.{部署的命名空间}.svc.cluster.local:8848 nacos-2.nacos-headless.{部署的命名空间}.svc.cluster.local:8848 例: nacos-0.nacos-headless.default.svc.cluster.local:8848 nacos-1.nacos-headless.default.svc.cluster.local:8848 nacos-2.nacos-headless.default.svc.cluster.local:8848 |

完成以上步骤后,我们就可以访问控制台了
访问控制台验证
link:http://${cluster-ip}:${client-export-port}/nacos/
开启鉴权
经过以上步骤后我们已经成功创建了nacos集群,但此时的nacos集群是未开启鉴权的,也就是我们不用再登录页面输入账号密码就直接可以登录进去,但是这样肯定是不安全的,所以我们要开启鉴权。开启鉴权的方式很简单只需要再环境变量中增加下面几个参数即可
参数名 | 描述 | 默认值 |
---|
NACOS_AUTH_ENABLE | 是否开启鉴权功能 | false |
NACOS_AUTH_SYSTEM_TYPE | 鉴权类型 | nacos |
NACOS_AUTH_TOKEN | 默认鉴权插件用于生成用户登陆临时accessToken所使用的密钥,使用老版本默认值有安全风险 这个token有一些特殊限制,长度必须大于等于32位,且要经过base64加密 | 无默认值 |
NACOS_AUTH_TOKEN_EXPIRE_SECONDS | 用户登陆临时accessToken的过期时间 | 18000 |
NACOS_AUTH_IDENTITY_KEY | 用于服务端之间请求的身份识别key,使用老版本默认值有安全风险 | 无默认值 |
NACOS_AUTH_IDENTITY_VALUE | 用于服务端之间请求的身份识别value,使用老版本默认值有安全风险 | 无默认值 |
NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE | 是否使用useragent白名单,主要用于适配老版本升级,置为true时有安全风险 | false |
NACOS_AUTH_CACHE_ENABLE | 是否开启Token缓存,默认关闭,开启后accessToken会缓存到内存中,但权限更新时可能存在15s左右的延迟。 | false |
镜像环境变量
属性名称 | 描述 | 选项 |
---|
MODE | 系统启动方式: 集群/单机,对应nacos.standalone | cluster/standalone 默认 cluster |
NACOS_SERVERS | 集群地址,对应nacos.member.list | ip1 空格ip2 空格ip3 |
PREFER_HOST_MODE | 支持IP还是域名模式,对应nacos.inetutils.prefer-hostname-over-ip | hostname/ip 默认IP |
NACOS_SERVER_PORT | Nacos 运行端口,对应server.port | 默认8848 |
NACOS_SERVER_IP | 多网卡模式下可以指定IP,对应nacos.server.ip | |
SPRING_DATASOURCE_PLATFORM | 单机模式下支持MYSQL数据库,对应spring.sql.init.platform | mysql / 空 默认:空 |
MYSQL_SERVICE_HOST | 数据库 连接地址 | |
MYSQL_SERVICE_PORT | 数据库端口 | 默认 : 3306 |
MYSQL_SERVICE_DB_NAME | 数据库库名 | |
MYSQL_SERVICE_USER | 数据库用户名 | |
MYSQL_SERVICE_PASSWORD | 数据库用户密码 | |
MYSQL_SERVICE_DB_PARAM | 数据库连接参数 | 默认: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false |
MYSQL_DATABASE_NUM | 数据库个数 | 默认:1 |
JVM_XMS | -Xms | 默认 :1g |
JVM_XMX | -Xmx | 默认 :1g |
JVM_XMN | -Xmn | 512m |
JVM_MS | - XX | 默认 :128m |
JVM_MMS | -XX | 默认 :320m |
NACOS_DEBUG | 是否开启远程DEBUG | y/n 默认 |
TOMCAT_ACCESSLOG_ENABLED | server.tomcat.accesslog.enabled
| 默认 |
NACOS_AUTH_SYSTEM_TYPE | 权限系统类型选择,目前只支持nacos类型 | 默认 |
NACOS_AUTH_ENABLE | 是否开启权限系统,对应nacos.core.auth.enabled | 默认 |
NACOS_AUTH_TOKEN_EXPIRE_SECONDS | token 失效时间 | 默认 :18000 |
NACOS_AUTH_TOKEN | token | 注意:该环境变量的默认值在Nacos 2.2.1版本中已移除,开启鉴权时需要指定
|
NACOS_AUTH_CACHE_ENABLE | 权限缓存开关 ,开启后权限缓存的更新默认有15秒的延迟 | 默认 : false |
MEMBER_LIST | 通过环境变量的方式设置集群地址 | 例子:192.168.16.101:8847?raft_port=8807,192.168.16.101?raft_port=8808,192.168.16.101:8849?raft_port=8809 |
EMBEDDED_STORAGE | 是否开启集群嵌入式存储模式 | embedded 默认 : none
|
NACOS_AUTH_CACHE_ENABLE | nacos.core.auth.caching.enabled | default : false |
NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE | nacos.core.auth.enable.userAgentAuthWhite | default : false |
NACOS_AUTH_IDENTITY_KEY | nacos.core.auth.server.identity.key | 注意:该环境变量的默认值在Nacos 2.2.1版本中已移除,开启鉴权时需要指定
|
NACOS_AUTH_IDENTITY_VALUE | nacos.core.auth.server.identity.value | 注意:该环境变量的默认值在Nacos 2.2.1版本中已移除,开启鉴权时需要指定
|
NACOS_SECURITY_IGNORE_URLS | nacos.security.ignore.urls | default : /,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/** |
DB_POOL_CONNECTION_TIMEOUT | 数据库连接池超时时间,单位为毫秒 | 默认 : 30000 |
NACOS_CONSOLE_UI_ENABLED | nacos.console.ui.enabled | default : true |
NACOS_CORE_PARAM_CHECK_ENABLED | nacos.core.param.check.enabled | default : true |