Kubernetes(k8s)上搭建nacos集群

Kubernetes上搭建nacos集群

  • 环境准备
    • Kubernetes准备
    • 数据库准备
  • 部署nacos集群
    • 官方镜像地址
    • 创建configmap
    • 创建部署文件
    • 根据yaml资源清单文件部署nacos

环境准备

Kubernetes准备

你需要准备一个Kubernetes集群,如图我的集群已经准备完毕:
在这里插入图片描述

数据库准备

nacos可以将配置文件存储到数据库当中,所以我们要先准备一个拥有nacos数据表结构的数据库,这样的数据库镜像我已经准备好了,当然你也可以自己制作这个镜像:

registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/nacos-mysql:2.0.4

我之前写过一篇Kubernetes上安装数据库的文章:https://blog.csdn.net/m0_51510236/article/details/132482351,这里我就直接上yaml文件了,注意镜像使用的是上面提到的带有nacos配置表结构的镜像:

apiVersion: v1
kind: Namespace
metadata:name: deploy-test
spec: {}
status: {}---apiVersion: v1
kind: PersistentVolume
metadata:name: deploy-mysql-nfs-pvnamespace: deploy-test
spec:capacity:storage: 1GiaccessModes:- ReadWriteManynfs:# 注意修改你的nfs服务器地址和目录server: 192.168.1.160path: /data/nfs/nacos-mysqlstorageClassName: "nfs"---apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: deploy-mysql-nfs-pvcnamespace: deploy-test
spec:accessModes:- ReadWriteManystorageClassName: "nfs"resources:requests:storage: 1GivolumeName: deploy-mysql-nfs-pv---apiVersion: v1
data:# 密码为root,具体密码设置可参考我上篇文章mysql_root_password: cm9vdA==
kind: Secret
metadata:name: mysql-passwordnamespace: deploy-test---apiVersion: v1
kind: Service
metadata:name: deploy-mysql-svcnamespace: deploy-testlabels:app: mysql
spec:ports:- port: 3306name: mysqltargetPort: 3306nodePort: 30306selector:app: mysqltype: NodePortsessionAffinity: ClientIP---apiVersion: apps/v1
kind: StatefulSet
metadata:name: deploy-mysqlnamespace: deploy-test
spec:selector:matchLabels:app: mysqlserviceName: "deploy-mysql-svc"replicas: 1template:metadata:labels:app: mysqlspec:terminationGracePeriodSeconds: 10containers:- args:- --character-set-server=utf8mb4- --collation-server=utf8mb4_unicode_ci- --lower_case_table_names=1- --default-time_zone=+8:00name: mysqlimage: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/nacos-mysql:2.0.4ports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-datamountPath: /var/lib/mysqlenv:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:key: mysql_root_passwordname: mysql-passwordvolumes:- name: mysql-datapersistentVolumeClaim:claimName: deploy-mysql-nfs-pvc

查看创建结果:

kubectl get all -o wide -n deploy-test

发现容器以及运行:
在这里插入图片描述

进入容器当中查看表结构:

kubectl exec -itn deploy-test pod/deploy-mysql-0 -- mysql -uroot -p

查看结果,目前已经拥有这样的表结构:
在这里插入图片描述

部署nacos集群

我们部署mysql的时候创建了一个 deploy-test 命名空间,部署nacos的时候将nacos部署到这个命名空间当中。

官方镜像地址

nacos官方提供的镜像地址:https://hub.docker.com/r/nacos/nacos-server,在当中我们可以看到有那么多环境变量配置:
在这里插入图片描述

创建configmap

上面那张图片中我们要用到这么几个参数:

参数名描述
MODEnacos启动模式,cluster为集群模式,standalone为单节点模式
NACOS_SERVERSnacos集群的服务器地址,格式为 ip1:port ip2:port 多个用空格隔开
SPRING_DATASOURCE_PLATFORMnacos使用的数据库,只支持mysql
MYSQL_SERVICE_HOSTmysql服务器地址
MYSQL_SERVICE_PORTmysql的端口,默认为3306
MYSQL_SERVICE_DB_NAMEnacos配置的数据库名,我们创建mysql时配置的数据库名为nacos_config
MYSQL_SERVICE_USERmysql的用户名
MYSQL_SERVICE_PASSWORDmysql的密码
MYSQL_DATABASE_NUMmysql数据库的数量,默认为1
MYSQL_SERVICE_DB_PARAMmysql连接字符串后面的参数,默认:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
JVM_XMSjvm永久区最小大小,默认:1g
JVM_XMXjvm永久区最大大小,默认:1g
JVM_XMNjvm新生区大小,默认:512m

我们根据上面参数创建一个configmap,执行下面代码获取创建configmap的k8s资源清单文件yaml:

kubectl create configmap nacos-deploy-config -n deploy-test \
--from-literal=mode=cluster \
--from-literal=nacos-servers='deploy-nacos-0.deploy-nacos-svc.deploy-test.svc.cluster.local:8848 deploy-nacos-1.deploy-nacos-svc.deploy-test.svc.cluster.local:8848' \
--from-literal=spring-datasource-platform=mysql \
--from-literal=mysql-service-host='deploy-mysql-0.deploy-mysql-svc.deploy-test.svc.cluster.local' \
--from-literal=mysql-service-port=3306 \
--from-literal=mysql-service-db-name=nacos_config \
--from-literal=mysql-service-user=root \
--from-literal=mysql-database-num=1 \
--from-literal=mysql-service-db-param='characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false' \
--from-literal=jvm-xms=256m \
--from-literal=jvm-xmx=256m \
--from-literal=jvm-xmn=128m \
--dry-run=client -o yaml

注意下面这一行:

--from-literal=nacos-servers='deploy-nacos-0.deploy-nacos-svc.deploy-test.svc.cluster.local:8848 deploy-nacos-1.deploy-nacos-svc.deploy-test.svc.cluster.local:8848'

因为我们这次只部署两个节点的集群,如果你打算部署多个节点,那么你往后面加即可。同时这行命令我们也没设置数据库的密码,这是因为我们创建mysql的时候就创建了一个密码的secret,待会直接使用即可。我们看这行命令的执行结果:
在这里插入图片描述

发现成功创建了一个k8s的configmap资源清单文件,文件内容:

apiVersion: v1
data:jvm-xmn: 128mjvm-xms: 256mjvm-xmx: 256mmode: clustermysql-database-num: "1"mysql-service-db-name: nacos_configmysql-service-db-param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=falsemysql-service-host: deploy-mysql-0.deploy-mysql-svc.deploy-test.svc.cluster.localmysql-service-port: "3306"mysql-service-user: rootnacos-servers: deploy-nacos-0.deploy-nacos-svc.deploy-test.svc.cluster.local:8848deploy-nacos-1.deploy-nacos-svc.deploy-test.svc.cluster.local:8848spring-datasource-platform: mysql
kind: ConfigMap
metadata:name: nacos-deploy-confignamespace: deploy-test

先将这个yaml保存下来以供接下来使用:
在这里插入图片描述

创建部署文件

部署文件内容:

apiVersion: v1
kind: Service
metadata:name: deploy-nacos-svcnamespace: deploy-testlabels:app: nacos
spec:ports:- port: 8848name: nacostargetPort: 8848nodePort: 30848selector:app: nacostype: NodePortsessionAffinity: ClientIP---apiVersion: apps/v1
kind: StatefulSet
metadata:name: deploy-nacosnamespace: deploy-test
spec:selector:matchLabels:app: nacosserviceName: "deploy-nacos-svc"replicas: 2template:metadata:labels:app: nacosspec:terminationGracePeriodSeconds: 10containers:- name: nacos# 如果能拉取到dockerhub上的镜像就用这个# image: docker.io/nacos/nacos-server:v2.0.4# 拉取不到dockerhub上的镜像就用我推送到阿里云上的nacos官方镜像image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/nacos-server:v2.0.4ports:- containerPort: 8848name: nacosenv: # 引用各类环境变量为nacos做配置,注意大部分引用configmap,只有数据库密码引用的创建mysql时候的secret- name: JVM_XMNvalueFrom:configMapKeyRef:key: jvm-xmnname: nacos-deploy-config- name: JVM_XMSvalueFrom:configMapKeyRef:key: jvm-xmsname: nacos-deploy-config- name: JVM_XMXvalueFrom:configMapKeyRef:key: jvm-xmxname: nacos-deploy-config- name: MODEvalueFrom:configMapKeyRef:key: modename: nacos-deploy-config- name: MYSQL_DATABASE_NUMvalueFrom:configMapKeyRef:key: mysql-database-numname: nacos-deploy-config- name: MYSQL_SERVICE_DB_NAMEvalueFrom:configMapKeyRef:key: mysql-service-db-namename: nacos-deploy-config- name: MYSQL_SERVICE_DB_PARAMvalueFrom:configMapKeyRef:key: mysql-service-db-paramname: nacos-deploy-config- name: MYSQL_SERVICE_HOSTvalueFrom:configMapKeyRef:key: mysql-service-hostname: nacos-deploy-config- name: MYSQL_SERVICE_PASSWORDvalueFrom:secretKeyRef:key: mysql_root_passwordname: mysql-password- name: MYSQL_SERVICE_PORTvalueFrom:configMapKeyRef:key: mysql-service-portname: nacos-deploy-config- name: MYSQL_SERVICE_USERvalueFrom:configMapKeyRef:key: mysql-service-username: nacos-deploy-config- name: NACOS_SERVERSvalueFrom:configMapKeyRef:key: nacos-serversname: nacos-deploy-config- name: SPRING_DATASOURCE_PLATFORMvalueFrom:configMapKeyRef:key: spring-datasource-platformname: nacos-deploy-config

根据yaml资源清单文件部署nacos

根据上面步骤我们得到了完整的 deploy-nacos.yaml 文件内容:

apiVersion: v1
data:jvm-xmn: 128mjvm-xms: 256mjvm-xmx: 256mmode: clustermysql-database-num: "1"mysql-service-db-name: nacos_configmysql-service-db-param: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=falsemysql-service-host: deploy-mysql-0.deploy-mysql-svc.deploy-test.svc.cluster.localmysql-service-port: "3306"mysql-service-user: rootnacos-servers: deploy-nacos-0.deploy-nacos-svc.deploy-test.svc.cluster.local:8848deploy-nacos-1.deploy-nacos-svc.deploy-test.svc.cluster.local:8848spring-datasource-platform: mysql
kind: ConfigMap
metadata:name: nacos-deploy-confignamespace: deploy-test---apiVersion: v1
kind: Service
metadata:name: deploy-nacos-svcnamespace: deploy-testlabels:app: nacos
spec:ports:- port: 8848name: nacostargetPort: 8848nodePort: 30848selector:app: nacostype: NodePortsessionAffinity: ClientIP---apiVersion: apps/v1
kind: StatefulSet
metadata:name: deploy-nacosnamespace: deploy-test
spec:selector:matchLabels:app: nacosserviceName: "deploy-nacos-svc"replicas: 2template:metadata:labels:app: nacosspec:terminationGracePeriodSeconds: 10containers:- name: nacosimage: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/nacos-server:v2.0.4ports:- containerPort: 8848name: nacosenv:- name: JVM_XMNvalueFrom:configMapKeyRef:key: jvm-xmnname: nacos-deploy-config- name: JVM_XMSvalueFrom:configMapKeyRef:key: jvm-xmsname: nacos-deploy-config- name: JVM_XMXvalueFrom:configMapKeyRef:key: jvm-xmxname: nacos-deploy-config- name: MODEvalueFrom:configMapKeyRef:key: modename: nacos-deploy-config- name: MYSQL_DATABASE_NUMvalueFrom:configMapKeyRef:key: mysql-database-numname: nacos-deploy-config- name: MYSQL_SERVICE_DB_NAMEvalueFrom:configMapKeyRef:key: mysql-service-db-namename: nacos-deploy-config- name: MYSQL_SERVICE_DB_PARAMvalueFrom:configMapKeyRef:key: mysql-service-db-paramname: nacos-deploy-config- name: MYSQL_SERVICE_HOSTvalueFrom:configMapKeyRef:key: mysql-service-hostname: nacos-deploy-config- name: MYSQL_SERVICE_PASSWORDvalueFrom:secretKeyRef:key: mysql_root_passwordname: mysql-password- name: MYSQL_SERVICE_PORTvalueFrom:configMapKeyRef:key: mysql-service-portname: nacos-deploy-config- name: MYSQL_SERVICE_USERvalueFrom:configMapKeyRef:key: mysql-service-username: nacos-deploy-config- name: NACOS_SERVERSvalueFrom:configMapKeyRef:key: nacos-serversname: nacos-deploy-config- name: SPRING_DATASOURCE_PLATFORMvalueFrom:configMapKeyRef:key: spring-datasource-platformname: nacos-deploy-config

接下来执行这行命令开始部署:

kubectl apply -f deploy-nacos.yaml

查看执行结果:
在这里插入图片描述

执行这行命令查看部署结果:

kubectl get pod -o wide -n deploy-test

执行后的结果可以看到两个nacos节点部署成功:
在这里插入图片描述

执行这行命令查看nacos暴露的nodeport端口:

kubectl get svc -o wide -n deploy-test

可以看到端口为 30848
在这里插入图片描述

我们可以通过任何一个Kubernetes节点的IP地址加上这个端口访问nacos:
在这里插入图片描述

输入默认的用户名和密码 nacos/nacos 即可登陆到首页:
在这里插入图片描述

我们来到 集群管理->节点管理 可以看到两个节点都为up状态:
在这里插入图片描述

接下来我们来到 配置管理->配置列表 点击 + 新增一个配置:
在这里插入图片描述

我们先随便新增一个yaml配置文件:
在这里插入图片描述

点击下面的发布之后查看数据库:
在这里插入图片描述

数据库里面已经新增了这个配置的数据。Kubernetes集群里面安装nacos集群就已经安装好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【蓝桥杯选拔赛真题60】Scratch旋转风车 少儿编程scratch图形化编程 蓝桥杯选拔赛真题解析

目录 scratch旋转风车 一、题目要求 编程实现 二、案例分析 1、角色分析

【脑机接口论文与代码】 基于自适应FBCCA的脑机接口控制机械臂

Brain-Controlled Robotic Arm Based on Adaptive FBCCA 基于自适应FBCCA的脑机接口控制机械臂论文下载:算法程序下载:摘要1 项目介绍2 方法2.1CCA算法2.2FBCCA 算法2.3自适应FBCCA算法 3数据获取4结果4.1脑地形图4.2频谱图4.3准确率 5结论 基于自适应FB…

Spring底层的核心原理解析

这篇文章大致讲解一下spring的整个执行流程,也就是在我们脑子里面建立一个笼统的概念 spring如何创建一个容器呢 容器里面是对象 上面就是利用AnnotationConfigApplicationContext这个对象,然后传入了一个配置类的字节码对象给我们创建一个Spring容器&am…

Hyper-V 安装 CentOS (二)

总目录 https://preparedata.blog.csdn.net/article/details/132877836 文章目录 总目录一、Hyper-V 创建centos的虚拟机实例二、虚拟机安装Centos ISO镜像三、重启后,进入系统 一、Hyper-V 创建centos的虚拟机实例 网络连接先不选择,后面文章专门配置网…

【软考】系统架构设计师 - 知识扩展 - “区块链技术“

目录 一 简介👑 1 比特币❤️ 2 区块链的特点❤️ 3 共识算法❤️ 二 练习题👑 三 扩展👑 1 哈希算法❤️ 2 哈希指针❤️ 3 UTXO❤️ 4 参考资料❤️ 一 简介👑 1 比特币❤️ 比特币底层采用了区块链技术。 比特币交易…

03目标检测-传统方法与深度学习算法对比

目录 一、目标学习的检测方法变迁及对比 二、深度学习目标检测算法基本流程 三、传统目标检测算法VS深度学习目标检测算法 一、目标学习的检测方法变迁及对比 “目标检测“是当前计算机视觉和机器学习领域的研究热点。从Viola-Jones Detector、DPM等冷兵器时代的智…

【数据结构】二叉树的链式结构

【数据结构】二叉树的链式存储结构 二叉树的存储结构 typedef int BTDataType; // 二叉树的结构 typedef struct BinaryTreeNode {BTDataType data; // 树的值struct BinaryTreeNode *left; // 左孩子struct BinaryTreeNode *right;// 右孩子 } BinaryTreeNode;二…

EXCEL如何把一个单元格内的文本和数字分开?例如:龚龚15565 = 龚龚 15565

使用工具:WPS 举例: EXCEL如何把一个单元格内的文本和数字批量分开?不使用数据分列。 第一步、将第二行数据冻结 第二步、在B1、C1单元格输入需要分开的示例 第三步、点击选中B1单元格,输入快捷键【CTRLE】进行填充。B2单元格也是…

【AIGC】图片生成的原理与应用

前言 近两年 AI 发展非常迅速,其中的 AI 绘画也越来越火爆,AI 绘画在很多应用领域有巨大的潜力,AI 甚至能模仿各种著名艺术家的风格进行绘画。 目前比较有名商业化的 AI 绘画软件有 Midjourney、DALLE2、以及百度出品的文心一格:…

MinGW-W64 下载、安装与配置(支持最新版的GCC,目前 GCC 13.2.0)VSCode配置c/c++环境 彻底删除vscode(包括插件及配置!)

目录 一、简介 二、下载 1 旧版安装(8.1.0) 从 sourceforge.net 下载 2 新版安装(本次采用较新版本~~~) 从 github 下载 从 镜像站点 下载 自己编译 三、安装与配置 1. 在线安装(这里仅作参考了解) 2. 离线安装&…

异步FIFO设计的仿真与综合技术(3)

概述 本文主体翻译自C. E. Cummings and S. Design, “Simulation and Synthesis Techniques for Asynchronous FIFO Design 一文,添加了笔者的个人理解与注释,文中蓝色部分为笔者注或意译。前文链接: 异步FIFO设计的仿真与综合技术&#xf…

自动化测试(五):自动化测试框架的搭建和基于yaml热加载的测试用例的设计

该部分是对自动化测试专栏前四篇的一个补充,本次参考以下文章实现一个完整的谷歌翻译接口自动化测试:   [1]【python小脚本】Yaml配置文件动态加载   [2]【python做接口测试的学习记录day8——pytest自动化测试框架之热加载和断言封装】 目标:框架封…

新增动态排序图、桑基图、AntV组合图,DataEase开源数据可视化分析平台v1.18.10发布

2023年9月14日,DataEase开源数据可视化分析平台正式发布v1.18.10版本。 这一版本的功能升级包括:数据集方面,对字段管理的后台保存做了相关优化,降低了资源消耗;仪表板方面,对联动、查询结果以及过滤组件等…

系统架构:软件工程速成

文章目录 参考概述软件工程概述软件过程 可行性分析可行性分析概述数据流图数据字典 需求分析需求分析概述ER图状态转换图 参考 软件工程速成(期末考研复试软考)均适用. 支持4K 概述 软件工程概述 定义:采用工程的概念、原理、技术和方法来开发与维护软件。 三…

GET,POST,DELETE,PUT参数传递的形式

一.get请求参数在地址后面进行拼接 1.代码&#xff1a; <template><div class""><button click"fn">点击</button></div> </template><script> import axios from "axios"; //安装完之后&#xff0…

MFC中嵌入显示opencv窗口

在MFC窗体中建立一个Picture Control控件,用于显示opencv窗口 在属性中设置图片控件的资源ID为IDC_PIC1 主要的思路: 使用GetWindowRect可以获取图片控件的区域 使用cv::resizeWindow可以设置opencv窗口的大小,适合图片控件的大小 使用cvGetWindowHandle函数可以获取到ope…

OpenCV(四十二):Harris角点检测

1.Harris角点介绍 什么是角点&#xff1f; 角点指的是两条边的交点&#xff0c;图中红色圈起来的点就是角点。 Harris角点检测原理&#xff1a;首先定义一个矩形区域&#xff0c;然后将这个矩形区域放置在我的图像中&#xff0c;求取这个区域内所有的像素值之和&#xff0c;之…

麒麟v10安装mysql(ARM架构)

下载MYSQL安装包 华为开源镜像站_软件开发服务_华为云 上面的选择一个下载 或者用命令下载 wget https://repo.huaweicloud.com/kunpeng/yum/el/7/aarch64/Packages/database/mysql-5.7.27-1.el7.aarch64.rpm 检查是否已经安装MySQL rpm -qa | grep mysql将包卸载掉 rpm -…

图论第三天|130. 被围绕的区域、417. 太平洋大西洋水流问题、827. 最大人工岛

130. 被围绕的区域 文档讲解 &#xff1a;代码随想录 - 130. 被围绕的区域 状态&#xff1a;开始学习。 思路&#xff1a; 步骤一&#xff1a; 深搜或者广搜将地图周边的 ‘O’ 全部改成 ’A’&#xff0c;如图所示&#xff1a; 步骤二&#xff1a; 再遍历地图&#xff0c;将 …

JWT 安全及案例实战

文章目录 一、JWT (json web token)安全1. Cookie&#xff08;放在浏览器&#xff09;2. Session&#xff08;放在服务器&#xff09;3. Token4. JWT (json web token)4.1 头部4.1.1 alg4.1.2 typ 4.2 payload4.3 签名4.4 通信流程 5. 防御措施 二、漏洞实例&#xff08;webgoa…