k8s集群内部署nacos集群

一、前言

    在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: 40GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /share/k8s/nacos/nacos01server: 10.1.60.22
---
apiVersion: v1
kind: PersistentVolume
metadata:name: nacos-pv1
spec:storageClassName: nacos-pv    #定义模板匹配名称,用于给pvc自动匹配capacity:storage: 40GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /share/k8s/nacos/nacos02server: 10.1.60.22
---
apiVersion: v1
kind: PersistentVolume
metadata:name: nacos-pv2
spec:storageClassName: nacos-pv    #定义模板匹配名称,用于给pvc自动匹配capacity:storage: 40GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /share/k8s/nacos/nacos03server: 10.1.60.22

编辑configmap配置文件

vi configmap.yaml

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

编辑service配置文件

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

vi service.yaml

apiVersion: v1
kind: Service
metadata:name: nacosnamespace: nacoslabels:app: nacos
spec:publishNotReadyAddresses: trueclusterIP: None     #无头服务中配置clusterip为noneports:- port: 8848name: servertargetPort: 8848- port: 9848      #选举端口name: client-rpctargetPort: 9848## 兼容1.4.x版本的选举端口- port: 7848name: old-raft-rpctargetPort: 7848selector:app: nacos

vi service-nodeport.yaml

kind: Service
apiVersion: v1
metadata:name: nacos-nodeportnamespace: nacoslabels:app: nacos
spec:type: NodePortports:- name: http-8848protocol: TCPport: 8848nodePort: 30002targetPort: 8848- port: 9848        #对外提供服务的其实可以把这里删了,选举端口不用对外服务name: client-rpctargetPort: 9848selector:app: nacos

编辑setafulset配置文件

vi setafulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: nacosnamespace: nacos
spec:podManagementPolicy: Parallel   #对setafulset的pod进行并行操作,而不是像deployment一样处理完一个pod再到下一个podserviceName: nacosreplicas: 3template:metadata:labels:app: nacosannotations:pod.alpha.kubernetes.io/initialized: "true"spec:affinity:  #反亲和性,避免pod在同一个node上podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: "app"operator: Invalues:- nacostopologyKey: "kubernetes.io/hostname"initContainers:- name: peer-finder-plugin-installimage: nacos/nacos-peer-finder-plugin:1.1imagePullPolicy: IfNotPresentvolumeMounts:- mountPath: /home/nacos/plugins/peer-findername: datasubPath: peer-findercontainers:- name: nacosimagePullPolicy: IfNotPresentimage: nacos/nacos-server:1.4.2resources:requests:memory: "2Gi"cpu: "500m"ports:- containerPort: 8848name: client-port- containerPort: 9848name: client-rpc- containerPort: 9849name: raft-rpc- containerPort: 7848name: old-raft-rpcenv:- name: NACOS_REPLICASvalue: "3"           #定义集群节点数量- name: SERVICE_NAMEvalue: "nacos"- name: DOMAIN_NAMEvalue: "cluster.local"- name: POD_NAMESPACEvalueFrom:fieldRef:apiVersion: v1fieldPath: metadata.namespace- name: MYSQL_SERVICE_HOSTvalueFrom:configMapKeyRef:name: nacos-cm         #使用configmap中的配置key: mysql.host         - name: MYSQL_SERVICE_DB_NAMEvalueFrom:configMapKeyRef:name: nacos-cm        #使用configmap中的配置key: mysql.db.name- name: MYSQL_SERVICE_PORTvalueFrom:configMapKeyRef:name: nacos-cm      #使用configmap中的配置key: mysql.port- name: MYSQL_SERVICE_USERvalueFrom:configMapKeyRef:       #使用configmap中的配置name: nacos-cmkey: mysql.user- name: MYSQL_SERVICE_PASSWORDvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.password- name: SPRING_DATASOURCE_PLATFORMvalue: "mysql"          #配置nacos使用mysql数据库- name: NACOS_SERVER_PORTvalue: "8848"- name: NACOS_APPLICATION_PORTvalue: "8848"- name: PREFER_HOST_MODEvalue: "hostname"livenessProbe:httpGet:path: /nacos/actuator/healthport: 8848initialDelaySeconds: 10periodSeconds: 10readinessProbe:httpGet:path: /nacos/actuator/healthport: 8848initialDelaySeconds: 10periodSeconds: 10startupProbe:tcpSocket:port: 8848failureThreshold: 30periodSeconds: 10volumeMounts:- name: datamountPath: /home/nacos/plugins/peer-findersubPath: peer-finder   #该配置会在挂载的路径中单独创建一个该名称的目录- name: datamountPath: /home/nacos/datasubPath: data         #该配置会在挂载的路径中单独创建一个该名称的目录- name: datamountPath: /home/nacos/logssubPath: logs            #该配置会在挂载的路径中单独创建一个该名称的目录volumeClaimTemplates:   #使用pvc模板,使pvc自动创建,然后自动绑定pv- metadata:name: dataspec:accessModes: [ "ReadWriteMany" ]storageClassName: "nacos-pv"    #使用模板名称,去对应的模板名称中匹配pvresources:requests:storage: 40Giselector: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 

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

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

相关文章

数据结构:图文详解 队列 | 循环队列 的各种操作(出队,入队,获取队列元素,判断队列状态)

目录 队列的概念 队列的数据结构 队列的实现 入队 出队 获取队头元素 获取队列长度 循环队列的概念 循环队列的数据结构 循环队列的实现 判断队列是否为空 判断队列是否已满 入队 出队 得到队头元素 得到队尾元素 队列的概念 队列(Queue&#xff0…

音频世家索尼:醇音典范 一脉相承! 参展第九届中国(广州)国际耳机展,懂音乐懂生活更懂你

第九届中国(广州)国际耳机展于2023年12月16日至12月17日,在广州白云国际会议中心一楼举行。浸润于音频行业70余年的“音频世家——索尼,秉持“For The Music”(为音乐而生)的音频品牌理念,将惊喜…

2024年【北京市安全员-C3证】考试题及北京市安全员-C3证考试试卷

题库来源:安全生产模拟考试一点通公众号小程序 北京市安全员-C3证考试题是安全生产模拟考试一点通总题库中生成的一套北京市安全员-C3证考试试卷,安全生产模拟考试一点通上北京市安全员-C3证作业手机同步练习。2024年【北京市安全员-C3证】考试题及北京…

编写JAVA优雅代码,强烈建议你学会SOLID

优雅的代码让人赏心悦目,low 的代码被一批又一批后来人吐槽。 如何才能写出优雅的代码,今天我们就来聊一个特别有效的软件设计原则:SOLID。 本文大纲 一、SOLID SOLID 来自 “架构整洁之道” 这本经典的书籍,它实际上是五个设…

【Python基础】生成器

文章目录 [toc]什么是生成器生成器示例生成器工作流程生成器表达式send()方法和close方法send()方法close()方法 什么是生成器 在Python中,使用生成器可以很方便地支持迭代器协议生成器通过生成器函数产生,通过def定义,但不是通过return返回…

人、AI理解的时间、空间、事实、价值

人类具有对时间、空间、事实和价值的理解能力。人类的理解能力使得我们能够感知和解释世界,从而适应环境、做出判断和决策,并赋予生活以意义和目标。这些能力也是人类与其他生物和机器智能的重要区别之一。时间、空间、事实和价值是人类思维和社会存在的…

本章主要介绍Spring Framework中用来处理URI的多种方式

1.使用 UriComponentsBuilder 构建URi 话不多说 直接上代码 UriComponents uriComponents UriComponentsBuilder.fromUriString("https://example.com/hotels/{hotel}").queryParam("q", "{q}").encode().build();URI uri uriComponents.exp…

Pytorch神经网络的参数管理

目录 一、参数访问 1、目标参数 2、一次性访问所有参数 3、从嵌套块收集参数 二、参数初始化 1、内置初始化 2、自定义初始化 3、参数绑定 在选择了架构并设置了超参数后,我们就进入了训练阶段。此时,我们的目标是找到使损失函数最小化的模型参数…

GAMES101-Homework4

原理&#xff1a;就是上张图片 //该段代码表示四个点的情况&#xff0c;相当于举例子去计算上诉的公式 void naive_bezier(const std::vector<cv::Point2f> &points, cv::Mat &window) {auto &p_0 points[0];auto &p_1 points[1];auto &p_2 poi…

C++ 教程 - 03 函数篇

文章目录 函数定义函数案例作用域函数传参函数返回值函数返回数组 函数定义 函数是将一部分代码进行封装&#xff0c;便于重用、维护&#xff0c;使得代码更加的整洁。 定义函数格式 类型 函数名&#xff08;形参类型 形参名称&#xff0c;…&#xff09;{ 函数体&#xff1b;…

劲松中西医结合医院主任谭巍谈生殖感染对夫妻的四大影响

生殖感染对健康的影响很大&#xff0c;夫妻若有一方发生生殖感染问题&#xff0c;那么极有可能将这种健康问题感染给另一方。所以生殖感染对夫妻双方都可能产生不良影响。 提到生殖感染对夫妻关系的影响&#xff0c;劲松中西医结合医院主任谭巍认为生殖感染不仅会对患者的身体…

javaWebssh课堂点名管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh课堂点名管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7.…