k8s集群内部署nacos集群

2023-12-19

一、前言

在k8s集群中部署nacos集群需要用到以下服务setafulset、pv、pvc、service、configmap,setafulset用来管理nacos服务,因为nacos服务是有状态服务,所以需要使用setafulset,pv、pvc用来挂载存储nacos数据的路径,configmap用来管理nacos配置,service用来配置无头服务和对外访问,无头服务是为了固定nacos每个节点的地址,使用cluster ip会导致pod的地址发生变化,但是使用service的无头服务就可以固定nacos每个节点的地址,即给每个nacos节点分配以下地址:nacos-0.nacos.nacos.svc.cluster.local:8848该地址解析出来的意思就是 pod名称.service名称.命名空间名称.svc.cluster.local:service端口,这个地址就是不会变得,即每个nacos服务都有了固定的地址,就类似于deployment管理的无状态服务,需要访问这些无状态服务,在集群内部可以通过 service名称.命名空间:service端口访问,举个例子就是nacos.nacos:8848

二、部署

部署nacos前需要先部署mysql

参考: yum安装mysql 5.7_yum安装mysql5.7-CSDN博客

创建nacos数据存储库

mysql -u root -p

create database nacos

创建nacos配置数据库用户

grant all on nacos.* to 'nacos'@'%' identified by '12345678';

flush privileges;

往nacos库中导入nacos初始化脚本

在nacos官网中下载对应版本的安装包

参考: Releases · alibaba/nacos · GitHub

下载解压

tar -zxvf nacos-server-1.4.2.tar.gz

ls /root/nacos/conf/

找到nacos库初始化脚本,在nacos库中导入

mysql -u root -p

use nacos

source /root/nacos/conf/nacos-mysql.sql

创建命名空间

kubectl create namespace nacos

创建nacos的yaml文件存放目录

mkdir /opt/nacos && cd /opt/nacos

编辑pv配置文件

nacos集群有三个节点,所以需要创建三个不同的pv

vi pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nacos-pv0
spec:
  storageClassName: nacos-pv    #定义模板匹配名称,用于给pvc自动匹配
  capacity:
    storage: 40Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /share/k8s/nacos/nacos01
    server: 10.1.60.22
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nacos-pv1
spec:
  storageClassName: nacos-pv    #定义模板匹配名称,用于给pvc自动匹配
  capacity:
    storage: 40Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /share/k8s/nacos/nacos02
    server: 10.1.60.22
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nacos-pv2
spec:
  storageClassName: nacos-pv    #定义模板匹配名称,用于给pvc自动匹配
  capacity:
    storage: 40Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /share/k8s/nacos/nacos03
    server: 10.1.60.22

编辑configmap配置文件

vi configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: nacos-cm
  namespace: nacos
data:
  mysql.host: "10.1.60.8"     #数据库地址
  mysql.db.name: "nacos"      #nacos数据存储库名称
  mysql.port: "6033"          #数据库端口,这里使用了proxysql所以是6033
  mysql.user: "root"     #数据库用户名
  mysql.password: "12345678"  #数据库用密码

编辑service配置文件

这里需要两个service服务,一个给nacos提供无头服务,一个给nacos提供对外访问

vi service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nacos
  namespace: nacos
  labels:
    app: nacos
spec:
  publishNotReadyAddresses: true
  clusterIP: None     #无头服务中配置clusterip为none
  ports:
    - port: 8848
      name: server
      targetPort: 8848
    - port: 9848      #选举端口
      name: client-rpc
      targetPort: 9848
      ## 兼容1.4.x版本的选举端口
    - port: 7848
      name: old-raft-rpc
      targetPort: 7848
  selector:
    app: nacos

vi service-nodeport.yaml

kind: Service
apiVersion: v1
metadata:
  name: nacos-nodeport
  namespace: nacos
  labels:
    app: nacos
spec:
  type: NodePort
  ports:
    - name: http-8848
      protocol: TCP
      port: 8848
      nodePort: 30002
      targetPort: 8848
    - port: 9848        #对外提供服务的其实可以把这里删了,选举端口不用对外服务
      name: client-rpc
      targetPort: 9848
  selector:
    app: nacos

编辑setafulset配置文件

vi setafulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nacos
  namespace: nacos
spec:
  podManagementPolicy: Parallel   #对setafulset的pod进行并行操作,而不是像deployment一样处理完一个pod再到下一个pod
  serviceName: nacos
  replicas: 3
  template:
    metadata:
      labels:
        app: nacos
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
    spec:
      affinity:  #反亲和性,避免pod在同一个node上
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                      - nacos
              topologyKey: "kubernetes.io/hostname"
      initContainers:
        - name: peer-finder-plugin-install
          image: nacos/nacos-peer-finder-plugin:1.1
          imagePullPolicy: IfNotPresent
          volumeMounts:
            - mountPath: /home/nacos/plugins/peer-finder
              name: data
              subPath: peer-finder
      containers:
        - name: nacos
          imagePullPolicy: IfNotPresent
          image: nacos/nacos-server:1.4.2
          resources:
            requests:
              memory: "2Gi"
              cpu: "500m"
          ports:
            - containerPort: 8848
              name: client-port
            - containerPort: 9848
              name: client-rpc
            - containerPort: 9849
              name: raft-rpc
            - containerPort: 7848
              name: old-raft-rpc
          env:
            - name: NACOS_REPLICAS
              value: "3"           #定义集群节点数量
            - name: SERVICE_NAME
              value: "nacos"
            - name: DOMAIN_NAME
              value: "cluster.local"
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
            - name: MYSQL_SERVICE_HOST
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm         #使用configmap中的配置
                  key: mysql.host         
            - name: MYSQL_SERVICE_DB_NAME
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm        #使用configmap中的配置
                  key: mysql.db.name
            - name: MYSQL_SERVICE_PORT
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm      #使用configmap中的配置
                  key: mysql.port
            - name: MYSQL_SERVICE_USER
              valueFrom:
                configMapKeyRef:       #使用configmap中的配置
                  name: nacos-cm
                  key: mysql.user
            - name: MYSQL_SERVICE_PASSWORD
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.password
            - name: SPRING_DATASOURCE_PLATFORM
              value: "mysql"          #配置nacos使用mysql数据库
            - name: NACOS_SERVER_PORT
              value: "8848"
            - name: NACOS_APPLICATION_PORT
              value: "8848"
            - name: PREFER_HOST_MODE
              value: "hostname"
          livenessProbe:
            httpGet:
              path: /nacos/actuator/health
              port: 8848
            initialDelaySeconds: 10
            periodSeconds: 10
          readinessProbe:
            httpGet:
              path: /nacos/actuator/health
              port: 8848
            initialDelaySeconds: 10
            periodSeconds: 10
          startupProbe:
            tcpSocket:
              port: 8848
            failureThreshold: 30
            periodSeconds: 10
          volumeMounts:
            - name: data
              mountPath: /home/nacos/plugins/peer-finder
              subPath: peer-finder   #该配置会在挂载的路径中单独创建一个该名称的目录
            - name: data
              mountPath: /home/nacos/data
              subPath: data         #该配置会在挂载的路径中单独创建一个该名称的目录
            - name: data
              mountPath: /home/nacos/logs
              subPath: logs            #该配置会在挂载的路径中单独创建一个该名称的目录
  volumeClaimTemplates:   #使用pvc模板,使pvc自动创建,然后自动绑定pv
    - metadata:
        name: data
      spec:
        accessModes: [ "ReadWriteMany" ]
        storageClassName: "nacos-pv"    #使用模板名称,去对应的模板名称中匹配pv
        resources:
          requests:
            storage: 40Gi
  selector:
    matchLabels:
      app: nacos

创建各项yaml文件对应的服务

kubectl apply -f pv.yaml

kubectl apply -f service.yaml

kubectl apply -f service-nodeport.yaml

kubectl apply -f configmap.yaml

kubectl apply -f setafulset.yaml

查看服务是否正常

kubectl get pv

kubectl get pvc -n nacos

kubectl get configmap -n nacos

kubectl get all -n nacos

访问nacos web

http://10.1.60.14:30002/

初始用户名nacos  密码nacos

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s集群内部署nacos集群 的相关文章

随机推荐

  • Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

    功能描述 1 门户管理 所有用户可在门户页面查看所有的公告信息及相关的通知信息 主要板块包含 招标公告 非招标公告 系统通知 政策法规 2 立项管理 企业用户可对需要采购的项目进行立项申请 并提交审批 查看所有的立项信息 主要功能包含 招标
  • 网络攻击3——拒绝服务攻击与缓冲区溢出攻击

    目录 拒绝服务攻击 拒绝服务攻击介绍 分布式拒绝服务攻击介绍 CDN 软件缺陷漏洞 缓冲区溢出 其它高级攻击 拒绝服务攻击 拒绝服务攻击不会破坏信息的机密性和完整性 而是破坏服务的可用性 拒绝服务攻击分为两大类 DoS 拒绝服务攻击 DDo
  • Java设计模式:模板方法模式

    作者主页 欢迎来到我的技术博客 个人介绍 大家好 本人热衷于 Java后端开发 欢迎来交流学习哦 如果文章对您有帮助 记得 关注 点赞 收藏 评论 您的支持将是我创作的动力 让我们一起加油进步吧 文章目录 一 模板方法模式的定义 二 模板方
  • 【计算机毕业设计】基于微信小程序的二手闲置交易市场系统

    随着计算机技术的成熟 互联网的建立 如今 PC平台上有许多关于二手闲置交易方面的应用程序 但由于使用时间和地点上的限制 用户在使用上存在着种种不方便 而开发一款基于微信小程序的二手闲置交易市场系统 能够有效地解决这个问题 本基于微信小程序的
  • 【计算机毕业设计】网络小说微信小程序

    社会的发展和科学技术的进步 互联网技术越来越受欢迎 网络小说也逐渐受到广大人民群众的喜爱 也逐渐进入了每个用户的使用 网络小说具有便利性 速度快 效率高 成本低等优点 因此 构建符合自己要求的操作系统是非常有意义的 本文从管理员 用户的功能
  • 如何看待名企的内推策略?

    内推肯定是可行的 现在 多数名企大厂都会有内推 不管是社招 还是校招 实习 有些公司通过内推获取的 简历数量甚至占到了总简历量的1 3 质量一般也不错 成本相对更低一些 内推想要做好 有效果 需要做到以下几点 做好内部宣贯工作 充分调动内部
  • pytest自动化框架运行全局配置文件pytest.ini

    还记得在之前的篇章中有讲到Pytest是目前主要流行的自动化框架之一 他有基础的脚本编码规则以及两种运行方式 pytest的基础编码规则是可以进行修改 这就是今日文章重点 看到这大家心中是否提出了两个问题 pytest的基础编码规则在哪可以
  • 钡铼无线R10A工业级路由器在工业机器人领域的创新应用

    随着工业机器人的普及 对于高可靠性和高稳定性的网络接入设备的需求也越来越大 传统的有线网络虽然稳定 但在现场布置和维护上面临很多困难 而无线网络虽然方便 但受到信号干扰和传输距离限制等问题的影响 如何解决这些问题 提高工业机器人在生产过程中
  • shell中的sort和uniq命令

    参考链接sort https www runoob com linux linux comm sort html 参考链接uniq https www runoob com linux linux comm uniq html 一 sort
  • 如何提高云服务器的安全性

    近年来 随着人们对云技术不断研发 可以说依托云技术出现的产物是十分的炙手可热 云服务器目前已用作企业和个人的常 用服务器产品 与传统服务器架构不同 云服务器为用户带来了非常有效和便捷的用户体验 值得站长们注意的是 在云服务 器的实际使用中
  • OpenCV4工业缺陷检测的六种方法

    文末送书 今天推荐一本机器视觉领域优质书籍 机器视觉 机器视觉是使用各种工业相机 结合传感器跟电气信号实现替代传统人工 完成对象识别 计数 测量 缺陷检测 引导定位与抓取等任务 其中工业品的缺陷检测极大的依赖人工完成 特别是传统的3C制造环
  • 黑马React:基础拓展

    黑马React D10 基础拓展 Date December 18 2023 useReducer 基础使用 作用 让 React 管理多个 相对关联 的状态数据 补充 和useState的作用类似 用来管理相对复杂的状态数据 特点 use
  • serialui.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个serialu
  • 软件测试/测试开发/人工智能丨如何通过分组 AUC 从不同的维度验证模型的能力

    通过分组 AUC Area Under the Curve 从不同维度验证模型的能力是一种有效的方法 特别适用于面对多个子群体或子问题的场景 以下是一些步骤 以及在不同维度验证模型性能时可能的一些策略 步骤 定义分组维度 确定模型性能需要在
  • AI科幻电影推荐《盗梦空间2》

    AI科幻电影鉴赏 盗梦空间2 盗梦空间2 是一部富有深度且创新力十足的电影作品 故事延续了前部数年后 多米尼克 科布及其团队虽已解散 但梦境技术仍然备受全球关注 此项技术能引导人们进入梦境实现深沉欲望 同时亦潜藏巨大风险 在这充满诱惑与危险
  • 黑马程序员《PHP基础案例教程》第2版课后练习—第11章

    第11章课后练习 答案均参考教材官方发布的PPT 以下是下载PPT的页面 人民邮电出版社教育社区 PHP基础案例教程 第2版 图书 人邮教育社区 一 填空题 1 在PHP程序中可以使用 new 关键字来创建一个对象 2 在PHP中可以通过
  • shwebsvc.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个shwebsv
  • 为什么大学生找工作热衷内推?

    内推已经是非常普遍的求职方式之一 了 不管是实习 校招还是社招 作为企业都非常鼓励内部员工进行内推 甚至为此设立内推奖励 作为求职的大学生 热衷于内推 也就很正常了 毕竟都已经成为主流操作了 对求职的大学生来讲 内推还是具有一定的意义的 比
  • 以低成本实现高转化:搭建年入百万的知识付费网站的技巧与方法

    明理信息科技知识付费平台 一 引言 随着知识经济的崛起 越来越多的知识提供者希望搭建自己的知识付费平台 然而 对于新手来说 如何以低成本 高效率地实现这一目标 同时满足自身需求并提高客户转化率 是一大挑战 本文将为你提供一份全面的新手搭建知
  • k8s集群内部署nacos集群

    一 前言 在k8s集群中部署nacos集群需要用到以下服务setafulset pv pvc service configmap setafulset用来管理nacos服务 因为nacos服务是有状态服务 所以需要使用setafulset