前言
最近几天完成了 Nacos 在Kubernetes 部署,顺便写篇文章记录下部署过程,项目地址Nacos-K8s,有兴趣的可以去了解下,后续会提交到Nacos-Group 里面。
Kubernetes Nacos
本项目包含一个可构建的Nacos Docker Image,旨在利用StatefulSets在Kubernetes上部署Nacos
已知限制
- 暂时不支持动态增量扩容
- 必须使用持久卷,本项目实现NFS持久卷的例子,如果使用emptyDirs可能会导致数据丢失
Docker 镜像
在build目录中包含了已经打好包的Nacos(基于develop分支,已提PR,目前的release版本都不支持k8s集群)项目包,以及镜像制作文件,镜像基础环境Ubuntu 16.04、Open JDK 1.8(JDK 8u111).目前镜像已经提交到Docker Hub。
项目目录
目录 | 描述 |
---|---|
build | 构建Nacos镜像的项目包以及Dockerfile |
deploy | k8s部署yaml文件 |
Initdb | Nacos 集群数据库初始化SQL脚本 |
使用指南
前提要求
- 本项目的使用,是基于你已经对Kubernetes有一定的认知,所以对如何搭建K8S集群,请自行google或者百度
- NFS安装方面也不是本文的重点,请自行google或者百度
环境准备
- 机器配置(作者演示使用阿里云ECS)
机器内网IP | 主机名 | 机器配置 |
---|---|---|
172.17.79.3 | k8s-master | CentOS Linux release 7.4.1708 (Core) 单核 内存4G 普通云盘40G |
172.17.79.4 | node01 | CentOS Linux release 7.4.1708 (Core) 单核 内存4G 普通云盘40G |
172.17.79.5 | node02 | CentOS Linux release 7.4.1708 (Core) 单核 内存4G 普通云盘40G |
- Kubernetes 版本:1.12.2 (如果你和我一样只使用了三台机器,那么记得开启master节点的部署功能)
- NFS 版本:4.1 在k8s-master进行安装Server端,并且指定共享目录,本项目指定的/data/nfs-share
- Git
搭建步骤
Clone项目
在每台机器上都Clone本工程,演示工程就是导入根目录,所以部署路径都是root/nacos-k8s
1 | git clone https://github.com/paderlol/nacos-k8s.git |
部署数据库
数据库是以指定节点的方式部署,主库部署在node01节点,从库部署在node02节点.
- 部署主库
1 | 进入clone下来的工程根目录 |
- 部署备库
1 | 进入clone下来的工程根目录 |
注意:如果工程不是导入机器的根目录,那么同样需要修改mysql.yaml和mysql-bak.yaml中挂载路径,因为数据库PVC使用的是本地卷,请注意更改配置中的path路径如下所示
1 | apiVersion: v1 |
- 部署后查看数据库是否已经正常运行
1 | 查看主库是否正常运行 |
部署NFS
- 创建角色 K8S在1.6以后默认开启了RBAC
1 | kubectl create -f deploy/nfs/rbac.yaml |
提示:如果你的K8S命名空间不是默认”default”,那么在创建RBAC之前先执行以下脚本
1 | Set the subject of the RBAC objects to the current namespace where the provisioner is being deployed |
- 创建ServiceAccount 以及部署NFS-Client Provisioner
1 | kubectl create -f deploy/nfs/deployment.yaml |
- 创建NFS StorageClass
1 | kubectl create -f deploy/nfs/class.yaml |
- 查看NFS是否运行正常
1 | kubectl get pod -l app=nfs-client-provisioner |
部署Nacos
- 获取主库从库在K8S的地址
1 | 查看主库和从库的cluster ip |
- 修改配置文件depoly/nacos/nacos-pvc-nfs.yaml,找到如下配置,填入上一步查到的主库和从库地址
1 | db.host.zero: "主库地址" |
- 创建并运行Nacos集群
1 | kubectl create -f nacos-k8s/deploy/nacos/nacos-pvc-nfs.yaml |
- 查看是否运行正常
1 | kubectl get pod -l app=nacos |
测试
服务注册
1 | curl -X PUT 'http://集群地址:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080' |
服务发现
1 | curl -X GET 'http://集群地址:8848/nacos/v1/ns/instances?serviceName=nacos.naming.serviceName' |
配置推送
1 | curl -X POST "http://集群地址:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld" |
配置获取
1 | curl -X GET "http://集群地址:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test" |
常见问题
Q:如果不想搭建NFS,并且想体验nacos-k8s?
A:可以跳过部署nfs的步骤,最后创建运行nfs时,使用一下以下方式创建
1 | kubectl create -f nacos-k8s/deploy/nacos/nacos-quick-start.yaml |