【Nacos】基于k8s容器化部署Nacos集群

这篇具有很好参考价值的文章主要介绍了【Nacos】基于k8s容器化部署Nacos集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

近期,在机器上部署了三个节点的nacos集群服务用于几个小型微服务的注册配置中心,并使用了Nginx简单代理了一下,随即简单研究了下集群部署分布式部署稍微提高可用性。部署完后能够正常使用,但是发现一个问题,刷新Nacos集群节点列表,总会有一个或者两个节点时不时处于DOWNh或者SUSPICIOUS状态,于是开始了漫长的查找问题过程。集群能够正常使用,就是各服务应用总会爆出来一堆链接nacos服务异常,估计是发现不行马上又重定向到别的节点去了。最终,发现是某个节点的服务器的hostname不对(另外一个情况是cluster.conf容器里面内容旧数据,ENV配置时候也加入里面原始内容),而在nacos集群配置的是对应服务器的IP地址NACOS_INETUTILS_IP_ADDRESS,由此导致了集群节点间心跳检测失败,三次之后,节点自动下线或被置于不信任状态…

前情纪要

记录思路操作相关笔记

  • 仅集群内访问
  • 内网k8s环境外网端口开放条件
  • nacos2.2.X版本常见问题

本地搭建集群环境轻轻松松,在服务器上面提供机器搭建也是正常,到了k8s环境内网的时候就有点偏差,没问题还好,一旦没有部署成功就会出现各种问题,部署成功后出现服务掉线等
遇到问题:

  • 问题1:集群使用内网研发云k8s部署成功之后,原本三个节点的冒出第四个节点
  • 问题2:集群部署根据自定义的环境变量进行传入参数,但是出现多余一个动态节点
  • 问题3:使用VIP地址把原本内部集群端口映射,服务注册出现大批量上线又掉线情况

不是经常性操作和部署,但是还是需要进行归纳总结梳理,后续查阅笔记记录,配置文件相关内容依据不同环境配置即可,不多加累赘,仅记录爬坑的问题

搭建架构

k8s部署 nacos,通用表单,kubernetes,java,dubbo,nacos

  • 3+以上Nacos节点才能构成集群;
  • Nacos Nginx Proxy用于代理转发;

准备排版

Nacos2.0版本相比1.X新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。来源:集群模式部署

端口 与主端口的偏移量 描述
8848 0 主端口,客户端、控制台及OpenAPI所使用的HTTP端口
9848 1000 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求
9849 1001 服务端gRPC请求服务端端口,用于服务间同步等
7848 -1000 Jraft请求服务端端口,用于处理服务端间的Raft相关请求

使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。9849和7848端口为服务端之间的通信端口,请勿暴露到外部网络环境和客户端测。
k8s部署 nacos,通用表单,kubernetes,java,dubbo,nacos

按照上述官方的端口分配要求,此处部署的使用三台服务器上面创建的Nacos集群端口分配如下:

节点 IP 端口(所需暴露) 备注 版本 当前线下环境部署文件路径
nacos-node1 192.168.xx.201 宿主机:8858,9858,9859,7858
容器:8858,9858,9859,7858
Nacos 节点一 nacos/nacos-server:2.2.4 /root/nacos-deploy/
nacos-node2 192.168.xx.202 宿主机:8858,9858,9859,7858
容器:8858,9858,9859,7858
Nacos 节点二 nacos/nacos-server:2.2.4 /root/nacos-deploy/
nacos-node3 192.168.xx.203 宿主机:8858,9858,9859,7858
容器:8858,9858,9859,7858
Nacos 节点三 nacos/nacos-server:2.2.4 /root/nacos-deploy/
Nacos DB Mysql 192.168.xx.206 宿主机:3306 容器:3306 Nacos数据库 mysql:5.7.34 /root/nacos-db-deploy
Nacos DB Postgres 192.168.xx.206 宿主机:5432 容器:5432 Nacos数据库 postgres:12-alpine /root/nacos-db-deploy
Nacos Nginx Proxy 192.168.xx.208 宿主机:80 容器:80 Nacos代理 nginx:1.23.2 /root/nacos-proxy-deploy
Nacos Cheak Health 192.168.xx.208 健康检查 /root/nacos-check-health

k8s互通域名

【nacos-node1】是指:负载名称
【pigcloud.svc.cluster.local】是指:固定服务名称

nacos-node1.pigcloud.svc.cluster.local:8858 
nacos-node2.pigcloud.svc.cluster.local:8858 
nacos-node3.pigcloud.svc.cluster.local:8858

域名nginx里面配置信息调整起到关键作用

创建Nacos数据库

使用的是容器化运行nacos,需要创建一个数据库,并从官方对应的版本中去导入基本数据库结构的数据文件

编译nacos2.2.4

Nacos 2.2.4支持pg数据库适配改造

创建mysql服务

  • docker-mysql.yml
  • 执行yml
docker-compose -f  /root/nacos-db-deploy/docker-mysql.yaml up -d
# 导入官方表数据
docker cp /root/nacos/conf/nacos-mysql.sql nacos-mysql:/tmp
docker exec -it nacos-mysql sh
mysql -uroot -p123456
create database nacos;
use nacos;
source /tmp/nacos-mysql.sql;

创建postgres服务

  • docker-postgres.yml

  • 执行yml

docker-compose -f  /root/nacos-db-deploy/postgres.yaml up -d

Nacos服务

创编yaml文件

mkdir /data/nacos2.2.4_1/logs -p
mkdir /data/nacos2.2.4_2/logs -p
mkdir /data/nacos2.2.4_2/logs -p

mkdir /root/nacos-deploy/

cat << EOF > /root/nacos-deploy/nacos1.yaml
对应内容写入
EOF

cat << EOF > /root/nacos-deploy/nacos2.yaml
对应内容写入
EOF

cat << EOF > /root/nacos-deploy/nacos3.yaml
对应内容写入
EOF

各配置中的端口非标准端口,需注意环境变量NACOS_APPLICATION_PORT如果不指定为非特定端口,那么缺省在配置中的环境变量则为8848在同一台机器上运行三个节点会出现问题

运行Nacos

各节点运行即可

docker-compose -f /root/nacos-deploy/nacos1.yaml up -d
docker-compose -f /root/nacos-deploy/nacos2.yaml up -d
docker-compose -f /root/nacos-deploy/nacos3.yaml up -d

三个节点单独访问页面正常;通过代理访问正常;

注意:Web页面并没有使用到客户端,服务端gRPC调用服务,但是在程序中需要请求对应的端口,所以务必需要暴露出来,因为使用了非标准端口,那么在nginx做代理时就直接(伪装)映射成标准端口即可。

Nginx代理配置

此处仍然使用容器化方式运行。
配置nginx代理

mkdir /root/nacos-proxy-deploy
cat <<EOF > /root/nacos-proxy-deploy/nginx.conf
对应内容写入
EOF
  • 代理容器yaml
cat > /root/nacos-proxy-deploy/nacos-nginx-proxy.yaml << EOF  
对应内容写入
EOF

cd /root/nacos-proxy-deploy
# 容器运行
docker-compose -f nacos-proxy.yaml up -d

搭建完毕检查容器运行是否正常,需要测试实例服务注册是否正常

环境检查

mkdir /root/nacos-check-healthy -p
cat > /root/nacos-check-healthy/nacos_check_status.py << EOF
对应内容写入
EOF

研发云配

  • 配置
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.error.include-message=ON_PARAM
server.port=${NACOS_APPLICATION_PORT:8848}
# k8s集群时候使用域名进行固定
nacos.inetutils.ip-address=${NACOS_INETUTILS_IP_ADDRESS:}

# 使用pg数据库配置
spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:postgresql}
db.num=${PG_DATABASE_NUM:1}
db.jdbcDriverName=${PG_SERVICE_DRIVER:org.postgresql.Driver}
db.url.0=jdbc:${SPRING_DATASOURCE_PLATFORM:postgresql}://${PG_SERVICE_HOST:localhost}:${PG_SERVICE_PORT:5432}/${PG_SERVICE_DB_NAME:strong_db}?currentSchema=${PG_CURRENT_SCHEMA:public}&tcpKeepAlive=true&reWriteBatchedInserts=true
db.user.0=${PG_SERVICE_USER:postgres}
db.password.0=${PG_SERVICE_PASSWORD:123456}

  • 环境配置

这里是根据不同研发云环境进行不同配置

KeyValue.JVM_XMS=1g
KeyValue.JVM_XMX=1g
KeyValue.JVM_XMN=512m
KeyValue.JVM_MS=128m
KeyValue.JVM_MMS=320m
KeyValue.PREFER_HOST_MODE=ip
# 这里是针对pg如果使用mysql可以自行添加调整${PARAM_NAME:PARAM_DEF_VALUE}
KeyValue.SPRING_DATASOURCE_PLATFORM=postgresql
KeyValue.PG_SERVICE_HOST=192.168.xx.208
KeyValue.PG_SERVICE_PORT=5432
KeyValue.PG_SERVICE_USER=postgres
KeyValue.PG_SERVICE_PASSWORD=123456
KeyValue.PG_SERVICE_DB_NAME=strong_db
KeyValue.PG_CURRENT_SCHEMA=public
# 如果想使用单击MODE=standalone
KeyValue.MODE=cluster
# 集群配置
KeyValue.NACOS_SERVERS=nacos-node1.pigcloud.svc.cluster.local:8858 nacos-node2.pigcloud.svc.cluster.local:8858 nacos-node3.pigcloud.svc.cluster.local:8858
# 多网卡IP选择
KeyValue.NACOS_INETUTILS_IP_ADDRESS=nacos-node1.pigcloud.svc.cluster.local

常见问题

  • 正常情况在某个节点注册了服务后会同步到其他节点。
  • 各节点无法选举一个leader时
    查看日志:/data/nacos2.2.4_1/logs/alipay-jraft.log
    实例服务相关日志: /data/nacos2.2.4_1/naming-raft.log
  • 设置了代理转发务必将其暴露
    通过日志发现,暴露8848端口是为了nacos客户端登陆获取Token,后续操作都会携带Token进行资源操作;然后暴露9848端口是客户端用于gRPC的请求,所以如果是设置了代理转发,务必将其暴露,否则连接失败掉线。

参考地址

  • Nacos部署环境

  • 集群模式部署

  • github.com/alibaba/nacos/releases

  • Nacos 2.2.4支持pg数据库适配改造

  • pig技术指南v3文章来源地址https://www.toymoban.com/news/detail-667321.html

到了这里,关于【Nacos】基于k8s容器化部署Nacos集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(k8s)上搭建nacos集群

    你需要准备一个Kubernetes集群,如图我的集群已经准备完毕: nacos可以将配置文件存储到数据库当中,所以我们要先准备一个拥有nacos数据表结构的数据库,这样的数据库镜像我已经准备好了,当然你也可以自己制作这个镜像: 我之前写过一篇Kubernetes上安装数据库的文章:h

    2024年02月03日
    浏览(67)
  • 基于k8s集群容器化部署etcd集群和apisix服务

    创建StorageClass,支持动态pvc创建,StorageClass使用nfs-client,同时使用华为云sfs作为数据持久化存储目录 角色认证(rabc.yaml) 创建nfs-provisioner(nfs-provisioner.yaml) 设置nfs-client(nfs-client.yaml) 创建svc,后续apisix中会使用到(svc.yaml) 挨个执行以上yaml文件,kubectl apply -f ***.yaml 创建etcd有状态服务(e

    2024年01月19日
    浏览(40)
  • K8S搭建NACOS集群踩坑问题

    现象描述:通过K8S的statefulset启动,通过NodePort暴露不能在外网访问,只能在MASTER主节点访问。 yaml配置: 原因分析: 因为我们要将POD固定运行在NODE52这台节点上,所以加上了 nodeName: host-52,但是同时也加上了hostNetwork: true,导致POD已经启动,但是只能在主节点通过28855端口访

    2024年02月09日
    浏览(43)
  • K8S--部署Nacos

    原文网址:K8S--部署Nacos-CSDN博客 本文介绍K8S部署Nacos的方法。Nacos版本是:2.2.3。 部署方案 本文为了简单,使用此部署方式:使用本地pv+configmap,以embedded模式部署单机nacos。以nodePort方式暴露端口。 正式环境可以这样部署:使用nfs,以mysql方式部署集群nacos,以ingress方式暴露

    2024年01月20日
    浏览(32)
  • 二进制部署nacos、docker部署nacos、k8s部署nacos、helm部署nacos

    环境: centos7.9、k8s 1.22.15 、docker 20.10.9、nacos-server-2.2.2.tar.gz nacos是一个用于构建云原生应用的动态服务发现、配置管理和服务管理平台,简称服务配置注册管理中心。 本篇不讲多集群模式。本篇讲传统方式、docker方式、k8s方式部署nacos单机版和cluster版。 nacos的github官网:

    2024年02月04日
    浏览(73)
  • k8s部署单节点nacos

    单节点         由于nacos server需要mysql数据库,我们可以先把官方提供的mysql 脚本准备好,如果直接使用官方提供的镜像nacos/nacos-server:latest, 那么在启动时会自动帮你在mysql数据库里初始化好nacos需要的数据库,不需要再执行如下SQL脚本。         注:以下SQL为nacos官方提供运

    2024年02月05日
    浏览(53)
  • 基于containerd容器运行时,kubeadmin部署k8s 1.28集群

    centos7u9 序号 主机名 ip地址 CPU 内存 硬盘 1 k8s-master1 192.168.1.200 2C 2G 100G 2 k8s-worker1 192.168.1.201 2C 2G 100G 3 k8s-worker2 192.168.1.202 2C 2G 100G 1.3.1主机名配置 vi /etc/sysconfig/network-scripts/ifcfg-ens33 1.3.3主机名与IP地址解析(hosts) vi /etc/hosts 1.3.4防火墙配置 关闭防火墙firewalld 1.3.5SELINUX配置 修改

    2024年02月01日
    浏览(63)
  • 【云原生 | Kubernetes 系列】— 部署K8S 1.28版本集群部署(基于Containerd容器运行)

    主机名 IP地址 备注 k8s-master01 192.168.0.109 master k8s-node1 192.168.0.108 node1 k8s-node2 192.168.0.107 node1 k8s-node3 192.168.0.105 node1 1、主机配置 2、升级内核 3、配置内核转发以及过滤 4、安装ipset ipvsadm,IPVS(IP Virtual Server)是一个用于负载均衡的 Linux 内核模块,它可以用来替代 kube-proxy 默认的

    2024年02月20日
    浏览(76)
  • 通过k8s搭建部署服务(nacos为例)

    前言:写这篇文章也算是自己对k8s的一种学习,加深一下k8s对服务部署的印象。 环境:使用的本地windows系统下的docker desktop工具,高版本的docker desktop自带了k8s服务所以就不需要特地去linux系统上装k8s了。docker desktop相当于在windows系统下配置了docker环境和k8s环境,可以直接在

    2024年02月14日
    浏览(42)
  • K8s基础2——部署单Master节点K8s集群、切换containerd容器运行时、基本命令

    两种部署方式: kubeadm工具部署 。Kubeadm 是一个K8s 部署工具,提供 kubeadm init 和kubeadm join,用于快速部署 Kubernetes集群。 kubeadm 工具功能: kubeadm init:初始化一个 Master 节点。 kubeadm join:将工作节点加入集群。 kubeadm upgrade:升级 K8s 版本。 kubeadm token:管理 kubeadm join 使用的令

    2024年02月12日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包