> 文章列表 > 二进制部署nacos、docker部署nacos、k8s部署nacos、helm部署nacos

二进制部署nacos、docker部署nacos、k8s部署nacos、helm部署nacos

二进制部署nacos、docker部署nacos、k8s部署nacos、helm部署nacos

目录

    • 前言
    • Nacos支持三种部署模式
    • 官方文档
    • 二进制部署nacos(单机模式)
      • 安装jdk
      • 创建数据库及用户名
      • 下载安装包并解压
      • 导入nacos的表结构
      • 修改配置文件,启动nacos,登录nacos
    • 二进制部署nacos(cluster模式)
      • 安装jdk(3台都安装jdk)
      • 创建数据库及用户名,导入数据库
      • 下载安装包解压(3台都做一样的步骤)
      • 修改配置文件,启动nacos集群
      • 部署nginx做slb,登录nacos
    • docker部署nacos(单机模式)
      • 克隆项目源码
      • 查看、修改配置文件
      • 单机模式启动nacos
    • docker部署nacos(cluster模式)
      • 克隆项目源码
      • 查看、修改配置文件
      • cluster模式启动nacos
      • 部署nginx做slb,登录nacos
    • k8s部署nacos(单机模式)
      • 克隆项目
      • 创建数据库、用户名、导入表结构
      • 修改yaml文件
      • 启动nacos
      • 问题排查
      • 挂载配置文件到pod里面
    • k8s部署nacos(cluster模式)
      • 克隆项目
      • 创建数据库、用户名、导入表结构
      • 修改yaml文件
      • 启动nacos
    • k8s helm 部署nacos(单机模式)
      • 克隆项目
      • 创建数据库、用户名、导入表结构
      • 修改helm的values.yaml文件
      • helm启动nacos
    • k8s helm 部署nacos(cluster模式)
      • 克隆项目
      • 创建数据库、用户名、导入表结构
      • 修改helm的values.yaml文件
      • helm启动nacos

前言

环境:centos7.9、k8s 1.22.15 、docker 20.10.9、nacos-server-2.2.2.tar.gz
nacos是一个用于构建云原生应用的动态服务发现、配置管理和服务管理平台,简称服务配置注册管理中心。

Nacos支持三种部署模式

单机模式 - 用于测试和单机试用。
集群模式 - 用于生产环境,确保高可用。
多集群模式 - 用于多数据中心场景

本篇不讲多集群模式。本篇讲传统方式、docker方式、k8s方式部署nacos单机版和cluster版。

官方文档

官方部署文档:https://nacos.io/zh-cn/docs/deployment.html
nacos的github官网:https://github.com/alibaba/nacos/tree/master
nacos建议的使用k8s部署nacos文档:https://nacos.io/en-us/docs/use-nacos-with-kubernetes.html
nacos的k8s helm 项目:
git clone https://github.com/nacos-group/nacos-k8s.git
https://github.com/nacos-group/nacos-k8s/tree/master/helm

二进制部署nacos(单机模式)

nacos的github官网:https://github.com/alibaba/nacos/tree/master

安装jdk

nacos 依赖jdk,所以需要安装jdk:查看这篇https://blog.csdn.net/MssGuo/article/details/120097813

wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
tar  xf jdk-17_linux-x64_bin.tar.gz -C /usr/local/
mv /usr/local/jdk-17.0.6/ /usr/local/java
vim /etc/profile	#添加下面3行
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/binsource  /etc/profile
java -version

创建数据库及用户名

#我的数据库是8.0.32  
#去到mysql数据库服务器手动执行创建nacos-config数据库语句以及创建nacos用户
[root@mysql ~]# mysql -uroot -p'123456'
#只所以叫nacos_config,是因为官方压缩包里面的创建nacos表结构的sql文件中说数据库全名叫nacos_config
mysql> create database nacos_config character set utf8;			
mysql> create user 'nacos'@'%' identified by 'nacos';
mysql> grant all privileges ON nacos_config.* TO 'nacos'@'%';

下载安装包并解压

wget -c https://github.com/alibaba/nacos/releases/download/2.2.2/nacos-server-2.2.2.tar.gz
tar xvf nacos-server-2.2.2.tar.gz
cd nacos/conf
[root@master conf]# ll *.sql*
-rw-r--r-- 1 502 games  1224 313 11:54 1.4.0-ipv6_support-update.sql
-rw-r--r-- 1 502 games  8939 329 15:21 derby-schema.sql			#这个不用管,我们不使用derby数据库
-rw-r--r-- 1 502 games 10825 43 16:33 mysql-schema.sql

导入nacos的表结构

#将sql文件传输到mysql服务器
[root@master conf]# scp mysql-schema.sql  1.4.0-ipv6_support-update.sql  root@192.168.158.131:/root/
#开始导入数据
[root@cicd ~]# mysql -unacos -p'nacos'
mysql> use nacos_config;
Database changed
mysql> source /root/mysql-schema.sql;
mysql> source /root/1.4.0-ipv6_support-update.sql;
mysql> show tables;					#检查
+------------------------+
| Tables_in_nacos_config |
+------------------------+
| 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> select * from users;			#检查用户表,nacos浏览器页面登录的账号/密码就是nacos/nacos
+----------+--------------------------------------------------------------+---------+
| username | password                                                     | enabled |
+----------+--------------------------------------------------------------+---------+
| nacos    | $2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu |       1 |
+----------+--------------------------------------------------------------+---------+
1 row in set (0.00 sec)
mysql> 

修改配置文件,启动nacos,登录nacos

[root@master ~]# cd nacos/conf
[root@master conf]# vim application.properties			#编辑配置文件,主要是修改或取消注释下面这些参数
[root@master conf]# grep -Ev '$^|#' application.properties
server.servlet.contextPath=/nacos						#保持默认,这是URL的上下文,业务页面访问的时候需要加这个上下文
server.error.include-message=ALWAYS						#保持默认
server.port=8848										#保持默认,nacos端口
nacos.inetutils.ip-address=192.168.158.128				#nacos绑定的IP地址,不写默认监听全部地址
spring.sql.init.platform=mysql							#去掉注释,开启这个参数
db.num=1												#去掉注释,开启这个参数,数据库的数量
#填写数据库连接信息,192.168.158.131:3306是数据库的IP地址和端口,nacos_config是nacos数据库名称
db.url.0=jdbc:mysql://192.168.158.131:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos											#nacos数据库的用户名,前面我们设置的用户就是nacos
db.password.0=nacos										#nacos数据库的密码,前面我们设置的nacos用户密码就是nacos				
nacos.core.auth.system.type=nacos						#保持默认
nacos.core.auth.enabled=true							#取消注释,值改为true,参数含义为是否启用nacos账号密码登录# 这个地址https://nacos.io/zh-cn/docs/v2/guide/user/auth.html说明了认证相关的参数怎么配置
#下面这两个参数随便设置一个key/value值,官方说了在nacos-2.2.1版本之后为了安全考虑无默认值,需要自己填写
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos#下面这个参数官方也说了nacos-2.2.1版本之后为了安全考虑无默认值,需要自己填写
#同时,需要使用一个不少于32个字符的字符串进行base64进行加密,如 echo "bmFjb3MgaXMgdmVyeSBnb29kIHNvZnR3YXJlCg==" | base64
nacos.core.auth.plugin.nacos.token.secret.key=Ym1GamIzTWdhWE1nZG1WeWVTQm5iMjlrSUhOdlpuUjNZWEpsQ2c9PQo=
[root@master nacos]# vim bin/statrup.sh					#编辑启动脚本,修改一个参数
export MODE="standalone"								#原来是cluster,改为standalone,因为我们要使用单机模式启动nacos
#单机模式启动nacos
[root@master nacos]# cd bin/
[root@master bin]# bash startup.sh   					#单机模式启动nacos#如果你没有修改statrup.sh脚本里面的MODE变量值为"standalone",则这样直接在启动时指定模式也可以:
[root@master bin]# bash start.sh  -m standalone#查看日志,日志在logs命令
[root@master nacos]# tail -2222f  logs/start.out
在日志中如果nacos正常启动,其web登录页面为:http://192.168.158.128:8848/nacos/index.html
在浏览器登录,账号密码默认是nacos nacos,建议登录后立即修改密码;
接下来就是权限控制--权限管理-添加权限-为public命名空间添加ROLE_ADMIN角色;
添加命名空间--分配角色等基本操作,可以正常使用nacos了。问题记录:
1、如果需要账号密码登录web页面nacos,需要自己设置auth相关的参数,这是因为此nacos-2.2.1版本修改了认证的方式,和以前的nacos版本有所不
同了,详见https://nacos.io/zh-cn/docs/v2/guide/user/auth.html。
2、在浏览器登录nacos的使用,使用start.out日志官方给出了登录地址,http://192.168.158.128:8848/nacos/index.html登录,发现总是提示
一个"user not found!权限认证失败,没有命名空间的访问权限" 这个弹窗,即使登录进去给所有的命名空间绑定ROLE_ADMIN角色,还是一样。后来
发现使用http://192.168.158.128:8848/nacos/index.html时,URL会自动补全http://192.168.158.128:8848/nacos/index.html#/login?
namespace=&pageSize=&pageNo=,怀疑就是由于后面补全的这段URL造成的,后来直接使用http://192.168.158.128:8848/nacos/#/login就再也
没有弹窗提示了。

二进制部署nacos(cluster模式)

nacos的cluster模式采用:3台nacos+nginx

安装jdk(3台都安装jdk)

nacos 依赖jdk,所以需要安装jdk:查看这篇https://blog.csdn.net/MssGuo/article/details/120097813

wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
tar  xf jdk-17_linux-x64_bin.tar.gz -C /usr/local/
mv /usr/local/jdk-17.0.6/ /usr/local/java
vim /etc/profile	#添加下面3行
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/binsource  /etc/profile
java -version

创建数据库及用户名,导入数据库

#我的数据库是8.0.32  
#去到mysql数据库服务器手动执行创建nacos-config数据库语句以及创建nacos用户
[root@mysql ~]# mysql -uroot -p'123456'
#只所以叫nacos_config,是因为官方压缩包里面的创建nacos表结构的sql文件中说数据库全名叫nacos_config
mysql> create database nacos_config character set utf8;			
mysql> create user 'nacos'@'%' identified by 'nacos';
mysql> grant all privileges ON nacos_config.* TO 'nacos'@'%';#导入表结构,二选一
方法一、在浏览器输入这个地址:https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql
从官方的网站下面复制粘贴sql脚本到数据库导入即可
方法二、下面步骤中《下载安装包并解压》的压缩包里面有.sql文件,去数据库执行.sql文件即可

下载安装包解压(3台都做一样的步骤)

wget -c https://github.com/alibaba/nacos/releases/download/2.2.2/nacos-server-2.2.2.tar.gz
tar xvf nacos-server-2.2.2.tar.gz
cd nacos/conf
[root@master conf]# ll *.sql*
-rw-r--r-- 1 502 games  1224 313 11:54 1.4.0-ipv6_support-update.sql
-rw-r--r-- 1 502 games  8939 329 15:21 derby-schema.sql			#这个不用管,我们不使用derby数据库
-rw-r--r-- 1 502 games 10825 43 16:33 mysql-schema.sql

修改配置文件,启动nacos集群

[root@master ~]# cd nacos/conf
[root@master conf]# vim application.properties			#编辑配置文件,主要是修改或取消注释下面这些参数
[root@master conf]# grep -Ev '$^|#' application.properties
server.servlet.contextPath=/nacos						#保持默认,这是URL的上下文,业务页面访问的时候需要加这个上下文
server.error.include-message=ALWAYS						#保持默认
server.port=8848										#保持默认,nacos端口
nacos.inetutils.ip-address=192.168.158.128				#nacos绑定的IP地址,不写默认监听全部地址(根据各自节点配置IP)
spring.sql.init.platform=mysql							#去掉注释,开启这个参数
db.num=1												#去掉注释,开启这个参数,数据库的数量
#填写数据库连接信息,192.168.158.131:3306是数据库的IP地址和端口,nacos_config是nacos数据库名称
db.url.0=jdbc:mysql://192.168.158.131:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos											#nacos数据库的用户名,前面我们设置的用户就是nacos
db.password.0=nacos										#nacos数据库的密码,前面我们设置的nacos用户密码就是nacos				
nacos.core.auth.system.type=nacos						#保持默认
nacos.core.auth.enabled=true							#取消注释,值改为true,参数含义为是否启用nacos账号密码登录# 这个地址https://nacos.io/zh-cn/docs/v2/guide/user/auth.html说明了认证相关的参数怎么配置
#下面这两个参数随便设置一个key/value值,官方说了在nacos-2.2.1版本之后为了安全考虑无默认值,需要自己填写
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos#下面这个参数官方也说了nacos-2.2.1版本之后为了安全考虑无默认值,需要自己填写
#同时,需要使用一个不少于32个字符的字符串进行base64进行加密,如 echo "bmFjb3MgaXMgdmVyeSBnb29kIHNvZnR3YXJlCg==" | base64
nacos.core.auth.plugin.nacos.token.secret.key=Ym1GamIzTWdhWE1nZG1WeWVTQm5iMjlrSUhOdlpuUjNZWEpsQ2c9PQo=
[root@master ~]# cd nacos/conf
[root@master conf]# mv cluster.conf.example cluster.conf
[root@master conf]# vim cluster.conf		#集群配置文件,填写各个节点nacos服务的IP和端口
192.168.158.128:8848
192.168.158.129:8848
192.168.158.130:8848
#cluster模式启动nacos
[root@master nacos]# cd bin/
[root@master bin]# bash startup.sh   					#启动nacos,默认模式就是cluster模式
#查看日志
tail -222f ../logs/start.out
#查看端口
lsof  -i:8848
#单独登录各个节点,看到左侧集群管理-节点列表,3个节点都是UP状态即可
#现在其实nacos已经做成cluster模式了
http://192.168.158.128:8848/nacos/index.html
http://192.168.158.129:8848/nacos/index.html
http://192.168.158.130:8848/nacos/index.html

部署nginx做slb,登录nacos

二进制部署nacos、docker部署nacos、k8s部署nacos、helm部署nacos
官网建议做SLB,这里使用nginx做slb:

#添加nginx的yum源
[root@nginx ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[root@cicd cluster]# 
#安装nginx
[root@nginx ~]# yum-config-manager --enable nginx-mainline
[root@nginx ~]# yum install yum-utils
[root@nginx ~]# yum-config-manager --enable nginx-mainline
[root@nginx ~]# yum install nginx#编写server虚拟主机文件
[root@nginx ~]# vim  /etc/nginx/conf.d/nacos.conf
upstream nacos_pools{					#下面写3个nacos服务的IP和端口server 192.168.158.128:8848;server 192.168.158.129:8848;server 192.168.158.130:8848;
}
server {listen       8848;server_name  nacos;location /nacos/{proxy_pass http://nacos_pools;		#做反向代理proxy_set_header Host $host;proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}[root@nginx ~]#启动nginx服务
[root@nginx ~]#systemctl  start  nginx#现在浏览器登录nacos,使用nginx服务器的IP+8848端口登录,验证成功
http://192.168.158.131:8848/nacos/#/login

docker部署nacos(单机模式)

克隆项目源码

git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
vim README.md			#查看说明
vim README_ZH.md		#查看说明
#官方文档说要启动单机模式,可以使用下面的命令进行启动(先不启动)
#单机模式 MySQL
#如果希望使用MySQL5.7(会生成两个容器,一个nacos容器,一个是mysql容器)
docker-compose -f example/standalone-mysql-5.7.yaml up
#如果希望使用MySQL8(会生成两个容器,一个nacos容器,一个是mysql容器)
docker-compose -f example/standalone-mysql-8.yaml up

查看、修改配置文件

#这里我们要使用mysql8数据库,所以我们先不启动,先看看官方的yaml文件时怎么写的
[root@master nacos-docker]# cat  example/standalone-mysql-8.yaml
version: "3.8"
services:nacos:image: nacos/nacos-server:${NACOS_VERSION}		#这个环境变量是从example/.env文件中定义的,所以有需要可以修改nacos版本container_name: nacos-standalone-mysqlenv_file:- ../env/nacos-standlone-mysql.env			#引入这个环境变量文件volumes:- ./standalone-logs/:/home/nacos/logs			#持久化数据ports:- "8848:8848"- "9848:9848"depends_on:mysql:condition: service_healthyrestart: alwaysmysql:container_name: mysqlbuild:context: .dockerfile: ./image/mysql/8/Dockerfileimage: example/mysql:8.0.30env_file:- ../env/mysql.env					#引入这个环境变量volumes:- ./mysql:/var/lib/mysqlports:- "3306:3306"healthcheck:test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]interval: 5stimeout: 10sretries: 10
#查看env/nacos-standlone-mysql.env
[root@master nacos-docker]# cat env/nacos-standlone-mysql.env 	#这个nacos的环境变量
PREFER_HOST_MODE=hostname				#保持默认
MODE=standalone							#保持默认,因为我们就是要部署单机默认
SPRING_DATASOURCE_PLATFORM=mysql		#保持默认,保持默认,因为我们就是要使用mysql
MYSQL_SERVICE_HOST=mysql				#保持默认
MYSQL_SERVICE_DB_NAME=nacos_devtest		#保持默认,这是nacos的数据库名称
MYSQL_SERVICE_PORT=3306					#数据库端口,保持默认
MYSQL_SERVICE_USER=nacos				#nacos用户名称
MYSQL_SERVICE_PASSWORD=nacos			#nacos用户密码
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
NACOS_AUTH_IDENTITY_KEY=nacos			#随便修改一个值,因为README_ZH.md文件说要改
NACOS_AUTH_IDENTITY_VALUE=nacos			#随便修改一个值,因为README_ZH.md文件说要改
NACOS_AUTH_TOKEN=Ym1GamIzTWdhWE1nZG1WeWVTQm5iMjlrSUhOdlpuUjNZWEpsQ2c9PQo=	#这是一个不少于32位字符串使用base64加密的秘文
SPRING_DATASOURCE_PLATFORM=mysql		#保持默认
[root@master nacos-docker]# 
#查看env/mysql.env环境变量文件内容
[root@master nacos-docker]# cat env/mysql.env 
MYSQL_ROOT_PASSWORD=root				#mysql的root账号密码
MYSQL_DATABASE=nacos_devtest			#nacos数据库的名称,跟上面文件的保持一致
MYSQL_USER=nacos						#nacos用户名称,跟上面文件的保持一致
MYSQL_PASSWORD=nacos					#nacos用户密码,跟上面文件的保持一致
LANG=C.UTF-8
[root@master nacos-docker]# 

单机模式启动nacos

#现在,直接启动即可,我们使用mysql8版本启动
docker-compose -f example/standalone-mysql-8.yaml up#检查命令
docker ps
docker exec -it mysql  bash
#浏览器页面访问正常,登录账号密码是nacos nacos
#在页面上左侧集群管理-节点列表就能看到有一个nacos服务处于UP状态了
http://192.168.158.128:8848/nacos/

docker部署nacos(cluster模式)

克隆项目源码

git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
vim README.md			#查看说明
vim README_ZH.md		#查看说明

查看、修改配置文件

#可以看到,官方给出的docker部署nacos cluster模式下其实就是在一台主机上启动了3个nacos容器来实现的
[root@master nacos-docker]# cat example/cluster-hostname.yaml 
version: "3.8"
services:nacos1:hostname: nacos1container_name: nacos1image: nacos/nacos-server:${NACOS_VERSION}		#这个环境变量是从example/.env文件中定义的,所以有需要可以修改nacos版本volumes:- ./cluster-logs/nacos1:/home/nacos/logs		#持久化日志ports:- "7848:7848"- "8848:8848"- "9868:9848"- "9850:9849"env_file:- ../env/nacos-hostname.env					#环境变量文件restart: alwaysdepends_on:mysql:condition: service_healthynacos2:hostname: nacos2image: nacos/nacos-server:${NACOS_VERSION}container_name: nacos2volumes:- ./cluster-logs/nacos2:/home/nacos/logsports:- "7849:7848"- "8849:8848"- "9869:9848"- "9851:9849"env_file:- ../env/nacos-hostname.envrestart: alwaysdepends_on:mysql:condition: service_healthynacos3:hostname: nacos3image: nacos/nacos-server:${NACOS_VERSION}container_name: nacos3volumes:- ./cluster-logs/nacos3:/home/nacos/logsports:- "7850:7848"- "8850:8848"- "9870:9848"- "9852:9849"env_file:- ../env/nacos-hostname.envrestart: alwaysdepends_on:mysql:condition: service_healthymysql:container_name: mysqlbuild:context: .										#可以看到官网默认使用5.7版本的Dockerfile文件构建mysql5.7数据库dockerfile: ./image/mysql/5.7/Dockerfile			#有需要使用8.0版本的照着文件路径改下即可image: example/mysql:5.7							#构建的镜像名称env_file:- ../env/mysql.envvolumes:- ./mysql:/var/lib/mysql							#mysql的数据持久化ports:- "3306:3306"healthcheck:test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]interval: 5stimeout: 10sretries: 10[root@master nacos-docker]# 
#查看环境变量nacos-hostname.env文件
[root@master nacos-docker]# cat env/nacos-hostname.env
PREFER_HOST_MODE=hostname								#保持默认
NACOS_SERVERS=nacos1:8848 nacos2:8849 nacos3:8850		#保持默认,这是3个nacos服务名称和端口
SPRING_DATASOURCE_PLATFORM=mysql						#保持默认
MYSQL_SERVICE_HOST=mysql								#保持默认
MYSQL_SERVICE_DB_NAME=nacos_devtest						#保持默认,这是nacos数据库名
MYSQL_SERVICE_PORT=3306									#保持默认,mysql端口
MYSQL_SERVICE_USER=nacos								#保持默认,nacos用户名
MYSQL_SERVICE_PASSWORD=nacos							#保持默认,nacos密码
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
NACOS_AUTH_IDENTITY_KEY=nacos							#随便该一个值,这是认证相关的参数,README_ZH.md文件中说要改
NACOS_AUTH_IDENTITY_VALUE=nacos							#随便该一个值,这是认证相关的参数,README_ZH.md文件中说要改
NACOS_AUTH_TOKEN=Ym1GamIzTWdhWE1nZG1WeWVTQm5iMjlrSUhOdlpuUjNZWEpsQ2c9PQo=	#这是一个不少于32位字符串使用base64加密的秘文
SPRING_DATASOURCE_PLATFORM=mysql						#保持默认
[root@master nacos-docker]# 
#查看环境变量mysql.env文件
[root@master nacos-docker]# cat env/mysql.env 
MYSQL_ROOT_PASSWORD=root								#mysqlroot账号的密码
MYSQL_DATABASE=nacos_devtest							#nacos的数据库名称,与上面文件的保持一致即可
MYSQL_USER=nacos										#nacos的用户名称,与上面文件的保持一致即可
MYSQL_PASSWORD=nacos									#nacos用户密码,与上面文件的保持一致即可
LANG=C.UTF-8
[root@master nacos-docker]# 

cluster模式启动nacos

#现在,直接启动即可,我们使用cluster模式启动nacos
docker-compose -f example/cluster-hostname.yaml up #检查命令
docker ps
docker exec -it mysql  bash
#浏览器页面访问正常,登录账号密码是nacos nacos
#在页面上左侧集群管理-节点列表就能看到有3个nacos服务处于UP状态了
http://192.168.158.128:8848/nacos/
http://192.168.158.128:8849/nacos/
http://192.168.158.128:8850/nacos/

部署nginx做slb,登录nacos

二进制部署nacos、docker部署nacos、k8s部署nacos、helm部署nacos
官网建议做SLB,这里使用nginx做slb:

#添加nginx的yum源
[root@nginx ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[root@cicd cluster]# 
#安装nginx
[root@nginx ~]# yum-config-manager --enable nginx-mainline
[root@nginx ~]# yum install yum-utils
[root@nginx ~]# yum-config-manager --enable nginx-mainline
[root@nginx ~]# yum install nginx#编写server虚拟主机文件
[root@nginx ~]# vim  /etc/nginx/conf.d/nacos.conf
upstream nacos_pools{					#下面写3个nacos服务的IP和端口server 192.168.158.128:8848;server 192.168.158.128:8849;server 192.168.158.128:8850;
}
server {listen       8848;server_name  nacos;location /nacos/{proxy_pass http://nacos_pools;		#做反向代理proxy_set_header Host $host;proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}[root@nginx ~]#启动nginx服务
[root@nginx ~]#systemctl  start  nginx#现在浏览器登录nacos,使用nginx服务器的IP+8848端口登录,账号密码默认是nacos nacos,验证成功
http://192.168.158.131:8848/nacos/#/login

k8s部署nacos(单机模式)

官方提供的k8s部署nacos是属于集群模式,使用sts部署的3个pod,这里我们先使用官方的yaml改改部署单个nacos。
官方文档:https://nacos.io/zh-cn/docs/use-nacos-with-kubernetes.html

克隆项目

[root@master ~]# git clone https://github.com/nacos-group/nacos-k8s.git
[root@master ~]# cd nacos-k8s
[root@master ~]# vim README-CN.md 	#可以安装官方文档的步骤做
#
#这里由于之前已经在k8s集群里安装好了nfs存储和mysql,所以这里直接修改官方给的yaml文件进行部署nacos,不在按照官方提供的安装顺序安装。
#nfs部署参考:https://mp.csdn.net/mp_blog/creation/success/123611986
#mysql主从参考:https://blog.csdn.net/MssGuo/article/details/130261331

创建数据库、用户名、导入表结构

#我的k8s集群里面的数据库是8.0.32  
#去到mysql数据库服务器手动执行创建nacos-config数据库语句以及创建nacos用户
[root@master ~]# kubectl  exec -it mysql-primary-0 -- bash		#登录mysql的主库pod
I have no name!@mysql-primary-0:/$ mysql -uroot -p123456		#登录mysql
mysql> create database nacos_config character set utf8;			#nacos名称叫	nacos_config
mysql> create user 'nacos'@'%' identified by 'nacos';
mysql> grant all privileges ON nacos_config.* TO 'nacos'@'%';
mysql>use nacos_config;											#切换到nacos数据库
mysql> #去官网复制粘贴建表语句到这里执行即可,https://github.com/alibaba/nacos/blob/develop/distribution/conf/mysql-schema.sql

修改yaml文件

[root@master ~]#  cd nacos-k8s/deploy/nacos
[root@master nacos]# cp nacos-pvc-nfs.yaml  nacos-single.yaml			#从官方的yaml复制一份,修改为自己的yaml
[root@master nacos]# vim nacos-single.yaml
---
apiVersion: v1						#定义一个NodePort类型的svc,用于外部访问
kind: Service
metadata:name: nacos-svclabels:app: nacos
spec:ports:- port: 8848name: servertargetPort: 8848nodePort: 8848type: NodePortselector:app: nacos
---
apiVersion: v1
kind: Service						#定义一个无头svc,供sts使用
metadata:name: nacos-headlesslabels:app: nacos
spec:publishNotReadyAddresses: true ports:- port: 8848name: servertargetPort: 8848clusterIP: Noneselector:app: nacos
---
apiVersion: v1
kind: ConfigMap
metadata:name: nacos-cm
data:mysql.host: "mysql-primary-headless.default.svc.cluster.local"	#这里填写mysql的主机名,mysql的svc域名mysql.db.name: "nacos_config"			#nacos的数据库,这个数据库要提前在mysql里面创建mysql.port: "3306"					#数据库端口,mysql的svc的端口mysql.user: "nacos"					#nacos用户名mysql.password: "nacos"				#nacos用户密码
---
apiVersion: apps/v1						#定义sts
kind: StatefulSet
metadata:name: nacos
spec:serviceName: nacos-headlessreplicas: 1							#副本数1 template:metadata:labels:app: nacosannotations:pod.alpha.kubernetes.io/initialized: "true"spec:affinity:podAntiAffinity:											#pod反亲和性requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: "app"operator: Invalues:- nacostopologyKey: "kubernetes.io/hostname"		#拓扑域containers:- name: nacosimagePullPolicy: Alwaysimage: nacos/nacos-server:latest		#nacos镜像resources:requests:memory: "1Gi"						#资源请求,最少1G,改小了pod启动不了,因为镜像里面jvm设置启动参数就是1Gcpu: "800m"ports:- containerPort: 8848name: client-portenv:	- name: NACOS_AUTH_TOKEN		value: "Ym1GamIzTWdhWE1nZG1WeWVTQm5iMjlrSUhOdlpuUjNZWEpsQ2c9PQo="	#这是一个不少于32位字符串使用base64加密秘文- name: NACOS_AUTH_IDENTITY_KEY		value: "nacos"- name: NACOS_AUTH_IDENTITY_VALUEvalue: "nacos" - name: MODE						#指定nacos以单机模式启动,默认是以cluster模式启动的value: "standalone"											- name: NACOS_REPLICASvalue: "1"- name: SERVICE_NAMEvalue: "nacos-headless"- name: DOMAIN_NAMEvalue: "cluster.local"- name: POD_NAMESPACEvalueFrom:fieldRef:apiVersion: v1fieldPath: metadata.namespace- name: MYSQL_SERVICE_HOSTvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.host- name: MYSQL_SERVICE_DB_NAMEvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.db.name- name: MYSQL_SERVICE_PORTvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.port- name: MYSQL_SERVICE_USERvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.user- name: MYSQL_SERVICE_PASSWORDvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.password- name: SPRING_DATASOURCE_PLATFORMvalue: "mysql"- name: NACOS_SERVER_PORTvalue: "8848"- name: NACOS_APPLICATION_PORTvalue: "8848"volumeMounts:- name: datamountPath: /home/nacos/datasubPath: data- name: datamountPath: /home/nacos/logssubPath: logsvolumeClaimTemplates:- metadata:name: dataannotations:volume.beta.kubernetes.io/storage-class: "nfs-storageclass"	#定义存储类spec:accessModes: [ "ReadWriteMany" ]resources:requests:storage: 1Gi												#pv大小selector:	matchLabels:app: nacos
[root@master nacos]# 

启动nacos

[root@master nacos]#  kubectl apply -f nacos-single.yaml
#nacos里面的配置文件application.properties,该配置文件里面启动定义了很多环境变量的参数,如果你想要修改某些环境变量的参数,可以在
#StatefulSet定义环境变量,由环境变量注入到pod里面成为pod的环境变量,然后application.properties文件就能使用这些环境变量了,
# application.properties文件里面官方写的配置都是正确的。
[root@master nacos]# kubectl  exec -it nacos-0 -- ls conf/
1.4.0-ipv6_support-update.sql  nacos-logback.xml
application.properties	       schema.sql
[root@master nacos]# 
页面登录:默认账号密码是nacos/nacos
http://192.168.158.128:8848/nacos/#/login
左侧集群管理-节点列表显示1个节点状态正常

问题排查

#如果nacos在启动时报错,比如No DataSource set,这时必须确保数据库的地址、数据库名称、端口是正确的,就是核对定义nacos-cm这个
#configmap的key的值是正确的,千万要核对一遍。因为笔者没有好好核对数据库名称,导致去nacos pod里面查看配置文件application.properties
#时,看到官方写的:
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
#一直觉得人家写的有问题,因为尝试echo ${MYSQL_SERVICE_PORT:3306} 得到的是空值,即使echo ${db.url.0}得到的url也是存在问题,所以就
#一直觉得人家官方写的有问题,其实不是的,最终发现是我的configmap里面的mysql.db.name这个可以定义的值和mysql数据库里面的nacos库名对不
#上。靠,最后改了nacos pod就可以正常启动了,页面访问也正常。	

挂载配置文件到pod里面

使用下面这种方式,自定义配置文件,部署nacos单机模式也是可以:

[root@master nacos-k8s-single]# cat nacos-single-custom-configmap.yaml 
# 请阅读Wiki文章
# https://github.com/nacos-group/nacos-k8s/wiki/%E4%BD%BF%E7%94%A8peerfinder%E6%89%A9%E5%AE%B9%E6%8F%92%E4%BB%B6
---
apiVersion: v1
kind: Service
metadata:name: nacos-svclabels:app: nacos
spec:ports:- port: 8848name: servertargetPort: 8848nodePort: 8848type: NodePortselector:app: nacos
---
apiVersion: v1
kind: Service
metadata:name: nacos-headlesslabels:app: nacos
spec:publishNotReadyAddresses: trueports:- port: 8848name: servertargetPort: 8848clusterIP: Noneselector:app: nacos
---
apiVersion: v1
kind: ConfigMap
metadata:name: nacos-cm
data:mysql.host: "mysql-primary-headless.default.svc.cluster.local"mysql.db.name: "nacos_config"mysql.port: "3306"mysql.user: "nacos"mysql.password: "nacos"application.properties: |					#加多了这个key# springserver.servlet.contextPath=/nacosserver.contextPath=/nacosserver.port=8848spring.datasource.platform=mysqlnacos.cmdb.dumpTaskInterval=3600nacos.cmdb.eventTaskInterval=10nacos.cmdb.labelTaskInterval=300nacos.cmdb.loadDataAtStart=falsedb.num=1db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT}/${MYSQL_SERVICE_DB_NAME}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&&serverTimezone=UTCdb.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT}/${MYSQL_SERVICE_DB_NAME}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTCdb.user=${MYSQL_SERVICE_USER}db.password=${MYSQL_SERVICE_PASSWORD}# ### The auth system to use, currently only 'nacos' is supported:nacos.core.auth.system.type=nacos### ### The token expiration in seconds:nacos.core.auth.default.token.expire.seconds=18000## ### The default token:nacos.core.auth.default.token.secret.key=Ym1GamIzTWdhWE1nZG1WeWVTQm5iMjlrSUhOdlpuUjNZWEpsQ2c9PQo=## ### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.nacos.core.auth.caching.enabled=falsenacos.core.auth.enable.userAgentAuthWhite=falsenacos.core.auth.server.identity.key=nacosnacos.core.auth.server.identity.value=nacosserver.tomcat.accesslog.enabled=falseserver.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D# # default current work dirserver.tomcat.basedir=# ## spring security config# ### turn off securitynacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**# # metrics for elastic searchmanagement.metrics.export.elastic.enabled=falsemanagement.metrics.export.influx.enabled=falsenacos.naming.distro.taskDispatchThreadCount=10nacos.naming.distro.taskDispatchPeriod=200nacos.naming.distro.batchSyncKeyCount=1000nacos.naming.distro.initDataRatio=0.9nacos.naming.distro.syncRetryDelay=5000nacos.naming.data.warmup=true
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: nacos
spec:serviceName: nacos-headlessreplicas: 1template:metadata:labels:app: nacosannotations:pod.alpha.kubernetes.io/initialized: "true"spec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: "app"operator: Invalues:- nacostopologyKey: "kubernetes.io/hostname"volumes:- name: nacos-cmconfigMap:name: nacos-cmitems:- key: application.propertiespath: application.propertiescontainers:- name: nacosimagePullPolicy: Alwaysimage: nacos/nacos-server:latestresources:requests:memory: "1Gi"cpu: "800m"ports:- containerPort: 8848name: client-portenv:- name: MODEvalue: "standalone"- name: NACOS_REPLICASvalue: "1"- name: SERVICE_NAMEvalue: "nacos-headless"- name: DOMAIN_NAMEvalue: "cluster.local"- name: POD_NAMESPACEvalueFrom:fieldRef:apiVersion: v1fieldPath: metadata.namespace- name: MYSQL_SERVICE_HOSTvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.host- name: MYSQL_SERVICE_DB_NAMEvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.db.name- name: MYSQL_SERVICE_PORTvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.port- name: MYSQL_SERVICE_USERvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.user- name: MYSQL_SERVICE_PASSWORDvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.passwordvolumeMounts:- name: datamountPath: /home/nacos/datasubPath: data- name: datamountPath: /home/nacos/logssubPath: logs- name: nacos-cmmountPath: /home/nacos/conf/application.propertiessubPath: application.propertiesvolumeClaimTemplates:- metadata:name: dataannotations:volume.beta.kubernetes.io/storage-class: "nfs-storageclass"spec:accessModes: [ "ReadWriteMany" ]resources:requests:storage: 1Giselector:matchLabels:app: nacos
[root@master nacos-k8s-single]# 

k8s部署nacos(cluster模式)

官方提供的k8s部署nacos是属于集群模式,使用sts部署的3个pod。
官方文档:https://nacos.io/zh-cn/docs/use-nacos-with-kubernetes.html

克隆项目

[root@master ~]# git clone https://github.com/nacos-group/nacos-k8s.git
[root@master ~]# cd nacos-k8s
[root@master ~]# vim README-CN.md 	#可以安装官方文档的步骤做
#
#这里由于之前已经在k8s集群里安装好了nfs存储和mysql,所以这里直接修改官方给的yaml文件进行部署cluster 模式的nacos,不在按照官方提供的安装顺序安装。
#nfs部署参考:https://mp.csdn.net/mp_blog/creation/success/123611986
#mysql主从参考:https://blog.csdn.net/MssGuo/article/details/130261331

创建数据库、用户名、导入表结构

#我的k8s集群里面的数据库是8.0.32  
#去到mysql数据库服务器手动执行创建nacos-config数据库语句以及创建nacos用户
[root@master ~]# kubectl  exec -it mysql-primary-0 -- bash		#登录mysql的主库pod
I have no name!@mysql-primary-0:/$ mysql -uroot -p123456		#登录mysql
mysql> create database nacos_config character set utf8;			#nacos名称叫	nacos_config
mysql> create user 'nacos'@'%' identified by 'nacos';
mysql> grant all privileges ON nacos_config.* TO 'nacos'@'%';
mysql>use nacos_config;											#切换到nacos数据库
mysql> #去官网复制粘贴建表语句到这里执行即可,https://github.com/alibaba/nacos/blob/develop/distribution/conf/mysql-schema.sql

修改yaml文件

#这里由于之前已经在k8s集群里安装好了nfs存储和mysql,所以这里直接修改官方给的yaml文件进行部署cluster 模式的nacos,不在按照官方提供的安装顺序安装。
[root@master ~]# cd nacos-k8s/deploy/nacos
[root@master nacos]# vim nacos-pvc-nfs.yaml 
# 请阅读Wiki文章
# https://github.com/nacos-group/nacos-k8s/wiki/%E4%BD%BF%E7%94%A8peerfinder%E6%89%A9%E5%AE%B9%E6%8F%92%E4%BB%B6
---
#自己添加的nodePort类型的service,原来官方文档只有无头svc
apiVersion: v1
kind: Service
metadata:name: nacos-svclabels:app: nacos
spec:ports:- port: 8848name: servertargetPort: 8848nodePort: 8848type: NodePortselector:app: nacos
---
apiVersion: v1
kind: Service
metadata:name: nacos-headlesslabels:app: nacos
spec:publishNotReadyAddresses: true ports:- port: 8848name: servertargetPort: 8848- port: 9848name: client-rpctargetPort: 9848- port: 9849name: raft-rpctargetPort: 9849## 兼容1.4.x版本的选举端口- port: 7848name: old-raft-rpctargetPort: 7848clusterIP: Noneselector:app: nacos
---
apiVersion: v1
kind: ConfigMap
metadata:name: nacos-cm
data:mysql.host: "mysql-primary-headless.default.svc.cluster.local"       #修改为k8s集群内mysql主库的svc地址mysql.db.name: "nacos_config"                                        #nacos的数据库名,这个数据库需要提前创建好,并导入数据mysql.port: "3306"                                                   #数据库端口mysql.user: "nacos"                                                  #mysql的nacos用户mysql.password: "nacos"                                              #mysql的nacos用户密码
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: nacos
spec:podManagementPolicy: ParallelserviceName: nacos-headlessreplicas: 3template:metadata:labels:app: nacosannotations:pod.alpha.kubernetes.io/initialized: "true"spec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: "app"operator: Invalues:- nacostopologyKey: "kubernetes.io/hostname"serviceAccountName: nfs-client-provisionerinitContainers:- name: peer-finder-plugin-installimage: nacos/nacos-peer-finder-plugin:1.1imagePullPolicy: AlwaysvolumeMounts:- mountPath: /home/nacos/plugins/peer-findername: datasubPath: peer-findercontainers:- name: nacosimagePullPolicy: Alwaysimage: nacos/nacos-server:latestresources:requests:memory: "1Gi"       #内存申请,官方建议2Gi,最少1Gi,因为镜像里面定义的jvm参数就是1g,否则pod启动失败cpu: "500m"ports:- containerPort: 8848name: client-port- containerPort: 9848name: client-rpc- containerPort: 9849name: raft-rpc- containerPort: 7848name: old-raft-rpcenv:- name: NACOS_REPLICASvalue: "3"- name: SERVICE_NAMEvalue: "nacos-headless"- name: DOMAIN_NAMEvalue: "cluster.local"- name: POD_NAMESPACEvalueFrom:fieldRef:apiVersion: v1fieldPath: metadata.namespace- name: MYSQL_SERVICE_HOSTvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.host- name: MYSQL_SERVICE_DB_NAMEvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.db.name- name: MYSQL_SERVICE_PORTvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.port- name: MYSQL_SERVICE_USERvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.user- name: MYSQL_SERVICE_PASSWORDvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.password- name: SPRING_DATASOURCE_PLATFORMvalue: "mysql"- name: NACOS_SERVER_PORTvalue: "8848"- name: NACOS_APPLICATION_PORTvalue: "8848"- name: PREFER_HOST_MODEvalue: "hostname"volumeMounts:- name: datamountPath: /home/nacos/plugins/peer-findersubPath: peer-finder- name: datamountPath: /home/nacos/datasubPath: data- name: datamountPath: /home/nacos/logssubPath: logsvolumeClaimTemplates:- metadata:name: dataannotations:volume.beta.kubernetes.io/storage-class: "nfs-storageclass"   #存储类spec:accessModes: [ "ReadWriteMany" ]resources:requests:storage: 1Gi                                                #pv大小,官方建议20Giselector:matchLabels:app: nacos
[root@master nacos]# 
#从上面可以看的出来,官方其实是使用一个叫peer-finder的插件初始化容器做到nacos节点组成集群的

启动nacos

[root@master nacos]# kubectl  apply  -f nacos-pvc-nfs.yaml
[root@master nacos]# kubectl  get pod -l app=nacos
NAME      READY   STATUS    RESTARTS   AGE
nacos-0   1/1     Running   0          14m
nacos-1   1/1     Running   0          14m
nacos-2   1/1     Running   0          14m
[root@master nacos]# 
页面登录:默认账号密码是nacos/nacos
http://192.168.158.128:8848/nacos/#/login
左侧集群管理-节点列表显示3个节点状态正常

k8s helm 部署nacos(单机模式)

克隆项目

[root@master ~]# git clone https://github.com/nacos-group/nacos-k8s.git
[root@master ~]# cd nacos-k8s
[root@master ~]# vim README-CN.md 	#可以安装官方文档的步骤做
#
#这里由于之前已经在k8s集群里安装好了nfs存储和mysql,所以这里直接修改官方给的yaml文件进行部署nacos,不在按照官方提供的安装顺序安装。
#nfs部署参考:https://mp.csdn.net/mp_blog/creation/success/123611986
#mysql主从参考:https://blog.csdn.net/MssGuo/article/details/130261331

创建数据库、用户名、导入表结构

#我的k8s集群里面的数据库是8.0.32  
#去到mysql数据库服务器手动执行创建nacos-config数据库语句以及创建nacos用户
[root@master ~]# kubectl  exec -it mysql-primary-0 -- bash		#登录mysql的主库pod
I have no name!@mysql-primary-0:/$ mysql -uroot -p123456		#登录mysql
mysql> create database nacos_config character set utf8;			#nacos名称叫	nacos_config
mysql> create user 'nacos'@'%' identified by 'nacos';
mysql> grant all privileges ON nacos_config.* TO 'nacos'@'%';
mysql>use nacos_config;											#切换到nacos数据库
mysql> #去官网复制粘贴建表语句到这里执行即可,https://github.com/alibaba/nacos/blob/develop/distribution/conf/mysql-schema.sql

修改helm的values.yaml文件

官方给的helm文件。默认就是部署单机版本的nacos。

[root@master helm]# cd nacos-k8s/helm/
[root@master helm]# vim values.yaml 		#编辑values.yaml文件
# Default values for nacos.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.global:mode: standalone							#默认就是部署单机版本的nacos
#  mode: cluster############################nacos###########################
namespace: default
nacos:image:repository: nacos/nacos-servertag: latestpullPolicy: IfNotPresentplugin:enable: trueimage:repository: nacos/nacos-peer-finder-plugintag: 1.1pullPolicy: IfNotPresentreplicaCount: 1podManagementPolicy: ParalleldomainName: cluster.localpreferhostmode: hostnameserverPort: 8848health:enabled: falsestorage:
#    type: embedded						#注释掉这行,启用下面的mysql参数type: mysqldb:host: mysql-primary-headless.default.svc.cluster.local		#k8s集群内的mysql svc地址name: nacos_config				#nacos的数据库,就是上面我们创建的数据库port: 3306						#mysql端口username: nacos					#mysql数据库里面nacos用户名password: nacos					#mysql数据库里面nacos用户密码param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=falsepersistence:enabled: true							#开启持久化data:accessModes:- ReadWriteOncestorageClassName: nfs-storageclass	#指定存储类resources:requests:storage: 1Gi					#pv大小service:								#svc的类型,官方默认就是NodePort,因为就单机版nacos,所以就保持默认吧#type: ClusterIPtype: NodePortport: 8848nodePort: 30000ingress:enabled: false# apiVersion: extensions/v1beta1apiVersion: networking.k8s.io/v1annotations: { }# kubernetes.io/ingress.class: nginx# kubernetes.io/tls-acme: "true"# For Kubernetes >= 1.18 you should specify the ingress-controller via the field ingressClassName# See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#specifying-the-class-of-an-ingress# ingressClassName: nginxingressClassName: "nginx"hosts:- host: nacos.example.com#paths: [ ]tls: [ ]#  - secretName: chart-example-tls#    hosts:#      - chart-example.localresources:# We usually recommend not to specify default resources and to leave this as a conscious# choice for the user. This also increases chances charts run on environments with little# resources, such as Minikube. If you do want to specify resources, uncomment the following# lines, adjust them as necessary, and remove the curly braces after 'resources:'.# limits:#   cpu: 100m#   memory: 128Mirequests:cpu: 500m	memory: 1Gi				#资源请求,最少1G,官方默认2G,镜像里面的jvm参数定义了1G,所以设为1G才能正常启动pod
annotations: { }nodeSelector: { }tolerations: [ ]affinity: { }[root@master helm]# 

helm启动nacos

[root@master helm]# cd ../
[root@master nacos-k8s]# helm  install  nacos nacos-k8s/
[root@master nacos-k8s]# kubectl get pod -l app=nacos
[root@master nacos-k8s]# kubectl get svc		
#查看svc的nodePort的端口,页面访问,账号密码是nacos/nacos
访问地址:http://192.168.158.128:30254/nacos/#/login

k8s helm 部署nacos(cluster模式)

克隆项目

[root@master ~]# git clone https://github.com/nacos-group/nacos-k8s.git
[root@master ~]# cd nacos-k8s
[root@master ~]# vim README-CN.md 	#可以安装官方文档的步骤做
#
#这里由于之前已经在k8s集群里安装好了nfs存储和mysql,所以这里直接修改官方给的yaml文件进行部署nacos,不在按照官方提供的安装顺序安装。
#nfs部署参考:https://mp.csdn.net/mp_blog/creation/success/123611986
#mysql主从参考:https://blog.csdn.net/MssGuo/article/details/130261331

创建数据库、用户名、导入表结构

#我的k8s集群里面的数据库是8.0.32  
#去到mysql数据库服务器手动执行创建nacos-config数据库语句以及创建nacos用户
[root@master ~]# kubectl  exec -it mysql-primary-0 -- bash		#登录mysql的主库pod
I have no name!@mysql-primary-0:/$ mysql -uroot -p123456		#登录mysql
mysql> create database nacos_config character set utf8;			#nacos名称叫	nacos_config
mysql> create user 'nacos'@'%' identified by 'nacos';
mysql> grant all privileges ON nacos_config.* TO 'nacos'@'%';
mysql>use nacos_config;											#切换到nacos数据库
mysql> #去官网复制粘贴建表语句到这里执行即可,https://github.com/alibaba/nacos/blob/develop/distribution/conf/mysql-schema.sql

修改helm的values.yaml文件

[root@master ~ ]# cd nacos-k8s/helm
[root@master helm ]# vim values.yaml
# Default values for nacos.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.global:
#  mode: standalonemode: cluster############################nacos###########################
namespace: default
nacos:image:repository: nacos/nacos-servertag: latestpullPolicy: IfNotPresentplugin:enable: trueimage:repository: nacos/nacos-peer-finder-plugintag: 1.1pullPolicy: IfNotPresentreplicaCount: 3podManagementPolicy: ParalleldomainName: cluster.localpreferhostmode: hostnameserverPort: 8848health:enabled: falsestorage:
#    type: embeddedtype: mysqldb:host: mysql-primary-headless.default.svc.cluster.local	#k8s集权内部mysql的svc地址name: nacos_config										#nacos的数据库名port: 3306												#数据库端口username: nacos											#数据库nacos用户名password: nacos											#数据库nacos用户密码param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=falsepersistence:enabled: true								#开启持久化data:accessModes:- ReadWriteOncestorageClassName: nfs-storageclass		#存储类resources:requests:storage: 1Gi		#pv大小,自己改service:
#  type: ClusterIPtype: NodePort			#这个改为NodePort类型,暴露nacos外部访问port: 8848nodePort: 8848			#这个指定的端口并不是外部访问nacos的端口,看template/service.yaml就指定了ingress:enabled: false# apiVersion: extensions/v1beta1apiVersion: networking.k8s.io/v1annotations: { }# kubernetes.io/ingress.class: nginx# kubernetes.io/tls-acme: "true"# For Kubernetes >= 1.18 you should specify the ingress-controller via the field ingressClassName# See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#specifying-the-class-of-an-ingress# ingressClassName: nginxingressClassName: "nginx"hosts:- host: nacos.example.com#paths: [ ]tls: [ ]#  - secretName: chart-example-tls#    hosts:#      - chart-example.localresources:# We usually recommend not to specify default resources and to leave this as a conscious# choice for the user. This also increases chances charts run on environments with little# resources, such as Minikube. If you do want to specify resources, uncomment the following# lines, adjust them as necessary, and remove the curly braces after 'resources:'.# limits:#   cpu: 100m#   memory: 128Mirequests:cpu: 500mmemory: 1Gi
annotations: { }nodeSelector: { }tolerations: [ ]affinity: { }
[root@master helm]# 

helm启动nacos

[root@master helm]# cd ../
[root@master nacos-k8s]# helm  install  nacos nacos-k8s/
[root@master nacos-k8s]# kubectl get pod | grep nacos
[root@master nacos-k8s]# kubectl get svc		
#查看svc的nodePort的端口,页面访问,账号密码是nacos/nacos
访问地址:http://192.168.158.128:30254/nacos/#/login

以上讲解了多种方式安装nacos,根据自己的需求任选一种部署即可。