一、Clone项目
git clone https://github.com/nacos-group/nacos-k8s.git
二、自定义部署
- 在高级使用中,Nacos在K8S拥有自动扩容缩容和数据持久特性
- 请注意如果需要使用这部分功能请使用PVC持久卷,Nacos的自动扩容缩容需要依赖持久卷,以及数据持久化也是一样
- 本例中使用的是NFS来使用PVC
2.1、创建角色
[root@master01 ~]# cd nacos-k8s/
[root@master01 nacos-k8s]# kubectl create -f deploy/nfs/rbac.yaml
2.2、如果的K8S命名空间不是default,请在部署RBAC之前执行以下脚本:
# 将RBAC对象的主题设置为部署provisioner的当前命名空间
[root@master01 nacos-k8s]# NS=$(kubectl config get-contexts|grep -e "^\*" |awk ‘{print $5}‘)
[root@master01 nacos-k8s]# NAMESPACE=${NS:-default} ## default 改成你要部署的ns的name
[root@master01 nacos-k8s]# sed -i "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/nfs/rbac.yaml
# 然后再创建角色
[root@master01 nacos-k8s]# kubectl create -f deploy/nfs/rbac.yaml
2.3、创建 ServiceAccount
和部署 NFS-Client Provisioner
- 更改deployment.yaml的NFS的IP
- 提前部署好NFS环境
- yum install nfs-utils rpcbind -y
https://www.cnblogs.com/hsyw/p/13610960.html
[root@master01 nacos-k8s]# kubectl create -f deploy/nfs/deployment.yaml
2.4、创建 NFS StorageClass
[root@master01 nacos-k8s]# kubectl create -f deploy/nfs/class.yaml
2.5、验证NFS部署成功
[root@master01 nacos-k8s]# kubectl get pod -l app=nfs-client-provisioner
三、部署数据库
3.1、部署MySQL
- 同样要改NFS
- mysql -u nacos -pnacos
[root@master01 ~]# cd nacos-k8s
[root@master01 nacos-k8s]# kubectl create -f deploy/mysql/mysql-nfs.yaml
3.2、初始化数据库
数据库初始化语句位置 https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.sql
四、部署Nacos
4.1、修改 deploy/nacos/nacos-pvc-nfs.yaml
data:
mysql.db.name: "数据库名称"
mysql.port: "端口"
mysql.user: "用户名"
mysql.password: "密码"
4.2、创建 Nacos
kubectl create -f deploy/nacos/nacos-pvc-nfs.yaml
4.3、验证Nacos节点启动成功
[root@master01 nacos-k8s]# kubectl get pod -l app=nacos
NAME READY STATUS RESTARTS AGE
nacos-0 1/1 Running 0 19h
nacos-1 1/1 Running 0 19h
nacos-2 1/1 Running 0 19h
访问后台管理ui 界面
nacos 部署方式中支持部署ingress,浏览器访问 http://nacos-web.nacos-demo.com/nacos/index.html ,默认用户名密码nacos\nacos进行管理后台的访问
注:访问ingress 需要对 nacos-web.nacos-demo.com 进行dns解析,解析ip 为 slave 节点ip,您的集群需要提前安装ingress controller
扩容测试
- 在扩容前,使用
kubectl exec
获取在pod中的Nacos集群配置文件信息
for i in 0 1; do echo nacos-$i; kubectl exec nacos-$i cat conf/cluster.conf; done
StatefulSet控制器根据其序数索引为每个Pod提供唯一的主机名。 主机名采用
- 使用kubectl scale 对Nacos动态扩容
kubectl scale sts nacos --replicas=3
- 在扩容后,使用
kubectl exec
获取在pod中的Nacos集群配置文件信息
for i in 0 1 2; do echo nacos-$i; kubectl exec nacos-$i cat conf/cluster.conf; done
- 使用
kubectl exec
执行Nacos API 在每台节点上获取当前Leader是否一致
for i in 0 1 2; do echo nacos-$i; kubectl exec nacos-$i curl GET "http://localhost:8848/nacos/v1/ns/raft/state"; done
到这里你可以发现新节点已经正常加入Nacos集群当中
例子部署环境
- 机器配置
内网IP | 主机名 | 配置 |
---|---|---|
172.17.79.3 | k8s-master | CentOS Linux release 7.4.1708 (Core) Single-core processor Mem 4G Cloud disk 40G |
172.17.79.4 | node01 | CentOS Linux release 7.4.1708 (Core) Single-core processor Mem 4G Cloud disk 40G |
172.17.79.5 | node02 | CentOS Linux release 7.4.1708 (Core) Single-core processor Mem 4G Cloud disk 40G |
- Kubernetes 版本:1.12.2 (如果你和我一样只使用了三台机器,那么记得开启master节点的部署功能)
- NFS 版本:4.1 在k8s-master进行安装Server端,并且指定共享目录,本项目指定的/data/nfs-share
- Git
限制
- 必须要使用持久卷,否则会出现数据丢失的情况
项目目录
目录 | 描述 |
---|---|
plugin | 帮助Nacos集群进行动态扩容的插件Docker镜像源码 |
deploy | K8s 部署文件 |
配置属性
- nacos-pvc-nfs.yaml or nacos-quick-start.yaml or nacos-no-pvc.yaml
名称 | 必要 | 描述 |
---|---|---|
mysql.host | N | 自建数据库地址 issue #124 |
mysql.db.name | Y | 数据库名称 |
mysql.port | N | 端口 |
mysql.user | Y | 用户名 |
mysql.password | Y | 密码 |
NACOS_REPLICAS | N | 确定执行Nacos启动节点数量,如果不适用动态扩容插件,就必须配置这个属性,否则使用扩容插件后不会生效 |
NACOS_SERVER_PORT | N | Nacos 端口 为peer_finder插件提供端口 |
NACOS_APPLICATION_PORT | N | Nacos 端口 |
PREFER_HOST_MODE | Y | 启动Nacos集群按域名解析 |
- nfs deployment.yaml
名称 | 必要 | 描述 |
---|---|---|
NFS_SERVER | Y | NFS 服务端地址 |
NFS_PATH | Y | NFS 共享目录 |
server | Y | NFS 服务端地址 |
path | Y | NFS 共享目录 |
- mysql
名称 | 必要 | 描述 |
---|---|---|
MYSQL_ROOT_PASSWORD | N | ROOT 密码 |
MYSQL_DATABASE | Y | 数据库名称 |
MYSQL_USER | Y | 数据库用户名 |
MYSQL_PASSWORD | Y | 数据库密码 |
Nfs:server | N | NFS 服务端地址,如果使用本地部署不需要配置 |
Nfs:path | N | NFS 共享目录,如果使用本地部署不需要配置 |
官网:https://github.com/nacos-group/nacos-k8s/blob/master/README-CN.md