转载自  Kubernetes Nacos

本项目包含一个可构建的Nacos Docker Image,旨在利用StatefulSets在Kubernetes上部署Nacos

快速开始

  • Clone 项目
git clone https://github.com/nacos-group/nacos-k8s.git
  • 简单例子

如果你使用简单方式快速启动,请注意这是没有使用持久化卷的,可能存在数据丢失风险:

cd nacos-k8s
chmod +x quick-startup.sh
./quick-startup.sh
  • 测试

    • 服务注册
    curl -X PUT 'http://cluster-ip:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
    
    • 服务发现
    curl -X GET 'http://cluster-ip:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
    
    • 发布配置
    curl -X POST "http://cluster-ip:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"
    
    • 获取配置
    curl -X GET "http://cluster-ip:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
    

高级使用

在高级使用中,Nacos在K8S拥有自动扩容缩容和数据持久特性,请注意如果需要使用这部分功能请使用PVC持久卷,Nacos的自动扩容缩容需要依赖持久卷,以及数据持久化也是一样,本例中使用的是NFS来使用PVC.

部署 NFS

  • 创建角色
kubectl create -f deploy/nfs/rbac.yaml

如果的K8S命名空间不是default,请在部署RBAC之前执行以下脚本:

# Set the subject of the RBAC objects to the current namespace where the provisioner is being deployed
$ NS=$(kubectl config get-contexts|grep -e "^\*" |awk '{print $5}')
$ NAMESPACE=${NS:-default}
$ sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/nfs/rbac.yaml
  • 创建 ServiceAccount 和部署 NFS-Client Provisioner
kubectl create -f deploy/nfs/deployment.yaml
  • 创建 NFS StorageClass
kubectl create -f deploy/nfs/class.yaml
  • 验证NFS部署成功
kubectl get pod -l app=nfs-client-provisioner

部署数据库

  • 部署主库

cd nacos-k8skubectl create -f deploy/mysql/mysql-master-nfs.yaml
  • 部署从库

cd nacos-k8s kubectl create -f deploy/mysql/mysql-slave-nfs.yaml
  • 验证数据库是否正常工作
# master
kubectl get pod
NAME                         READY   STATUS    RESTARTS   AGE
mysql-master-gf2vd                        1/1     Running   0          111m# slave
kubectl get pod
mysql-slave-kf9cb                         1/1     Running   0          110m

部署Nacos

  • 修改 deploy/nacos/nacos-pvc-nfs.yaml
data:mysql.master.db.name: "主库名称"mysql.master.port: "主库端口"mysql.slave.port: "从库端口"mysql.master.user: "主库用户名"mysql.master.password: "主库密码"
  • 创建 Nacos
kubectl create -f nacos-k8s/deploy/nacos/nacos-pvc-nfs.yaml
  • 验证Nacos节点启动成功
kubectl get pod -l app=nacosNAME      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

扩容测试

  • 在扩容前,使用 kubectl exec获取在pod中的Nacos集群配置文件信息
for i in 0 1; do echo nacos-$i; kubectl exec nacos-$i cat conf/cluster.conf; done

StatefulSet控制器根据其序数索引为每个Pod提供唯一的主机名。 主机名采用 - 的形式。 因为nacos StatefulSet的副本字段设置为2,所以当前集群文件中只有两个Nacos节点地址

  • 使用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 -X 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
名称 必要 描述
mysql.master.db.name Y 主库名称
mysql.master.port N 主库端口
mysql.slave.port N 从库端口
mysql.master.user Y 主库用户名
mysql.master.password Y 主库密码
NACOS_REPLICAS N 确定执行Nacos启动节点数量,如果不适用动态扩容插件,就必须配置这个属性,否则使用扩容插件后不会生效
NACOS_SERVER_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 数据库密码
MYSQL_REPLICATION_USER Y 数据库复制用户
MYSQL_REPLICATION_PASSWORD Y 数据库复制用户密码
Nfs:server N NFS 服务端地址,如果使用本地部署不需要配置
Nfs:path N NFS 共享目录,如果使用本地部署不需要配置

Nacos(十)之Kubernetes Nacos相关推荐

  1. Nacos系列:基于Nacos的注册中心

    前言 所谓注册中心,其实是分布式架构演进过程中的产物,在系统中充当一个协调者的角色.但是,为什么需要这样一个协调者的角色呢?我们先来看一个例子,以便理解为什么分布式架构中需要有注册中心. 案例 小明和 ...

  2. nacos使用_使用Nacos的CMDB实现微服务的就近访问!

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 juejin.cn/post/6892343440705585159 推荐:ht ...

  3. nacos 启动_【Nacos源码之配置管理 一】阅读源码第一步,本地启动Nacos

    前言 在我们去阅读Nacos源码之前,我们得先了解Nacos是干嘛的,以及怎么用,这样有利于我们更容易去理解源码; 查看Nacos的官方文档,我们知道Naocs主要有以下特性: 配置中心 服务注册与发 ...

  4. Nacos学习之初识Nacos

    Nacos学习之初识Nacos 在分布式项目中既然存在Eureka这个注册中心,那么Nacos有充当什么角色?Nacos到底是个啥?他又是咋么下载安装的?本文我会将从什么是Nacos.Nacos与其他 ...

  5. Nacos学习二(nacos安装)

    Nacos 安装 上篇文章Nacos学习(一)介绍了nacos,本章一起来安装. 预备环境准备 Nacos 依赖 Java 环境来运行.如果您是从代码开始构建并运行Nacos,还需要为此配置 Mave ...

  6. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  7. nacos 配置_阿里巴巴 Nacos 分布式配置中心原理

    动态配置管理是 Nacos 的三大功能之一,通过动态配置服务,我们可以在所有环境中以集中和动态的方式管理所有应用程序或服务的配置信息. 动态配置中心可以实现配置更新时无需重新部署应用程序和服务即可使相 ...

  8. nacos 公共_Springboot,Nacos并向使用研究

    nacos 测试样例 : 1.nacos 管理的配置文件中,配置了一个key,再到项目中bootstrap.yml中配置相同的key,不起作用! nacos 配置: info: redis: host ...

  9. 【nacos】com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception

    项目场景: springboot+nacos 微服务架构,我们使用的是nacos nacos配置,先添加依赖 <dependency><groupId>com.alibaba. ...

最新文章

  1. Android中使用running services查看service进程内存
  2. 从什么地方获取大数据_从哪收集大数据
  3. 使用web3.js进行开发
  4. 解决微信小程序新建项目没有样式问题,以及官方demo
  5. 高能同步辐射光源科学数据管理策略研究与应用
  6. openlayers 初步认识(转)
  7. 实例:供应商管理报表需求调研报告
  8. oracle数据泵导入 锁,Oracle数据泵expdp导出,impdp导入
  9. bind服务器响应,DNS和Bind服务器
  10. 女暴徒BeHype:MINT和Raffle抽奖规则及答疑
  11. Jmeter创建大批量测试用户数据技巧
  12. python函数之enumerate()快速打印出列表中的元素以及对应的下标
  13. 【暑假集训】F1方程式冠军
  14. 2、面向对象的思维(与结构化思维比较)
  15. php的外文参考文献_php英文文献翻译及参考文献
  16. 用新开放的 notion api 结合 python 爬虫搞个羊毛线报页面
  17. Facemark:使用OpenCV进行面部特征点检测
  18. 日本語 紜本「えほん」中国語 3-4
  19. 面试题6:从尾到头打印链表
  20. 概率函数(密度函数)

热门文章

  1. java nature_Java Nature.nsf方法代码示例
  2. java实用教程——组件及事件处理——对话框(消息对话框,输入对话框,确认对话框)
  3. 通讯故障_掌握PLC必备知识,人机界面和 PLC 出现通讯故障如何分析解决
  4. 计算机公共基础知识实验报告,20140902413 李雪瑞 计算机工程系实验报告345.docx...
  5. hdu 6153 A Secret kmp + dp
  6. 牛客练习赛74 D CCA的图
  7. CF1067E Random Forest Rank(树形dp,概率与期望,线性代数)
  8. Codeforces Round #737 (Div. 2)
  9. P2167 [SDOI2009]Bill的挑战
  10. Inverse Pair