点击上方

蓝字

关注我们

服务注册和配置中心是运维工作中经常遇见的字眼,配置中心要实现的一个基本理念是配置修改的时效性、动态性、一致性;服务注册和发现是为了解耦服务之间的依赖关系和便于服务管理。

为什么需要配置中心

安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏。

时效性:修改配置,需要重启服务才能生效。

局限性:无法支持动态调整:例如日志开关、功能开关。

因此,分布式配置中心应运而生!

工作中常用的配置中心:

1. Spring Cloud Config:2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合。2. Apollo:2016年5月,携程开源的配置管理中心,具备规范的权限、流程治理等特性,很多知名公司在用。3. Nacos:2018年6月,阿里开源的配置中心,也可以做DNS和RPC的服务发现。

对于Spring Cloud Config,在此不再多说,运维工作中主流的配置中心还是apollo和nacos

我们为什么选择nacos

1. 在权限管理这块apollo有其独特优势,nacos在权限管理这块尚需优化中;2. Nacos部署简化,Nacos整合了注册中心、配置中心功能,且部署相比apollo简单,方便管理和监控;3. apollo容器化较困难,Nacos有官网的镜像可以直接部署,总体来说,Nacos比apollo更符合KISS原则;4. 性能方面,Nacos读写tps比apollo稍强一些

k8s集群信息

worker01   Ready    controlplane,etcd,master,worker   50d   v1.18.3worker02 Ready controlplane,etcd,worker 50d v1.18.3worker03 Ready controlplane,etcd,worker 50d v1.18.3worker04 Ready worker 50d v1.18.3worker05 Ready worker 50d v1.18.3worker06 Ready worker 50d v1.18.3worker07 Ready worker 37d v1.18.3worker08 Ready worker 37d v1.18.3worker09 Ready worker 37d v1.18.3# 其中worker07--09作为此次nacos集群的部署节点,设有label标签app=true

部署mysql数据库

代码克隆

git clone https://github.com/nacos-group/nacos-k8s.git

数据库pvc创建 (使用已有ceph)

[root@worker01 deploy]# kubectl get scNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGExsky-rbd (default) iscsi.csi.xsky.com Delete Immediate true 50d[root@worker01 deploy]# cat ceph/pvc.yaml---apiVersion: v1kind: PersistentVolumeClaimmetadata:name: mysql-nacos-pvcspec:accessModes:- ReadWriteOncestorageClassName: xsky-rbdresources:requests:storage: 10Gi[root@worker01 deploy]# kubectl create ns test1[root@worker01 deploy]# kubectl apply -f ceph/pvc.yaml -n test1

mysql副本(单节点)和服务创建,数据库部署目录nacos-k8s/deploy/mysql

[root@worker01 mysql]# cat mysql-ceph.yamlapiVersion: v1kind: ReplicationControllermetadata:name: nacos-mysqllabels:name: nacos-mysqlspec:replicas: 1selector:name: nacos-mysqltemplate:metadata:labels:name: nacos-mysqlspec:containers:- name: nacos-mysqlimage: nacos/nacos-mysql:5.7ports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: "root"- name: MYSQL_DATABASEvalue: "nacos"- name: MYSQL_USERvalue: "nacos"- name: MYSQL_PASSWORDvalue: "nacos"volumeMounts:- name: mysql-nacosmountPath: /var/lib/mysqlreadOnly: falsevolumes:- name: mysql-nacospersistentVolumeClaim:claimName: mysql-nacos-pvc---apiVersion: v1kind: Servicemetadata:name: mysql-nacoslabels:name: mysql-nacosspec:ports:- port: 3306targetPort: 3306selector:name: nacos-mysql

部署nacos

目录nacos-k8s/deploy/nacos,修改nacos-pvc-ceph.yaml,主要修改configmap和sts的NACOS_SERVERS和数据持久化(新增application.properties配置文件的持久化)

[root@worker01 nacos]# cat application.properties# springserver.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}server.contextPath=/nacosserver.port=${NACOS_APPLICATION_PORT:8848}spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:""}nacos.cmdb.dumpTaskInterval=3600nacos.cmdb.eventTaskInterval=10nacos.cmdb.labelTaskInterval=300nacos.cmdb.loadDataAtStart=falsedb.num=${MYSQL_DATABASE_NUM:1}db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=truedb.url.1=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=truedb.user=${MYSQL_SERVICE_USER}db.password=${MYSQL_SERVICE_PASSWORD}### The auth system to use, currently only 'nacos' is supported:nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}### The token expiration in seconds:nacos.core.auth.default.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}### The default token:nacos.core.auth.default.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D# default current work dirserver.tomcat.basedir=## spring security config### turn off securitynacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**# metrics for elastic searchmanagement.metrics.export.elastic.enabled=falsemanagement.metrics.export.influx.enabled=falsenacos.naming.distro.taskDispatchThreadCount=10nacos.naming.distro.taskDispatchPeriod=200nacos.naming.distro.batchSyncKeyCount=1000nacos.naming.distro.initDataRatio=0.9nacos.naming.distro.syncRetryDelay=5000nacos.naming.data.warmup=true

[root@worker01 nacos]# kubectl create -n test1 cm nacos-config --from-file=application.properties

[root@worker01 nacos]# cat nacos-pvc-ceph.yaml---apiVersion: v1kind: Servicemetadata:name: nacos-headlesslabels:app: nacosannotations:service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"spec:clusterIP: Noneports:- port: 8848name: servertargetPort: 8848protocol: TCPselector:app: nacos---apiVersion: v1kind: ConfigMapmetadata:name: nacos-cmdata:mysql.db.name: "nacos"mysql.port: "3306"mysql.user: "nacos"mysql.password: "nacos"mysql.service.host: "mysql-nacos.test1.svc.cluster.local" #test1为我的namespace---apiVersion: apps/v1kind: StatefulSetmetadata:name: nacosspec:serviceName: nacos-headlessreplicas: 3template:metadata:labels:app: nacosannotations:pod.alpha.kubernetes.io/initialized: "true"spec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: "app"operator: Invalues:- 'true'topologyKey: "kubernetes.io/hostname"# serviceAccountName: block-csi-provisionerinitContainers:- name: peer-finder-plugin-installimage: nacos/nacos-peer-finder-plugin:1.0imagePullPolicy: IfNotPresentvolumeMounts:- mountPath: /home/nacos/plugins/peer-findername: plugindircontainers:- name: nacosimagePullPolicy: IfNotPresentimage: nacos/nacos-server:1.3.2resources:requests:memory: "2Gi"cpu: "500m"ports:- containerPort: 8848name: client-portenv:- name: NACOS_REPLICASvalue: "2"- name: SERVICE_NAMEvalue: "nacos-headless"- name: DOMAIN_NAMEvalue: "cluster.local"- name: POD_NAMESPACEvalueFrom:fieldRef:apiVersion: v1fieldPath: metadata.namespace- name: MYSQL_SERVICE_HOSTvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.service.host- name: MYSQL_SERVICE_DB_NAMEvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.db.name- name: MYSQL_SERVICE_PORTvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.port- name: MYSQL_SERVICE_USERvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.user- name: MYSQL_SERVICE_PASSWORDvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.password- name: NACOS_SERVER_PORTvalue: "8848"- name: NACOS_APPLICATION_PORTvalue: "8848"- name: PREFER_HOST_MODEvalue: "hostname"- name: NACOS_SERVERSvalue: "nacos-0.nacos-headless.test1.svc.cluster.local:8848 nacos-1.nacos-headless.test1.svc.cluster.local:8848 nacos-2.nacos-headless.test1.svc.cluster.local:8848"volumeMounts:- name: plugindirmountPath: /home/nacos/plugins/peer-finder- name: datadirmountPath: /home/nacos/data- name: logdirmountPath: /home/nacos/logs- name: nacos-configmountPath: /home/nacos/conf/application.propertiessubPath: application.propertiesvolumes:- name: nacos-configconfigMap:name: nacos-configvolumeClaimTemplates:- metadata:name: plugindirspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "xsky-rbd"resources:requests:storage: 1Gi- metadata:name: datadirspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "xsky-rbd"resources:requests:storage: 6Gi- metadata:name: logdirspec:accessModes: [ "ReadWriteOnce" ]storageClassName: "xsky-rbd"resources:requests:storage: 5Giselector:matchLabels:app: nacos

[root@worker01 nacos]# kubectl apply -f nacos-pvc-ceph.yaml -n test1service/nacos-headless createdconfigmap/nacos-cm createdstatefulset.apps/nacos created

Ingress服务暴露

apiVersion: extensions/v1beta1kind: Ingressmetadata:name: nacos-ingressnamespace: test1spec:rules:- host: nacos.domain.testhttp:paths:- backend:serviceName: nacos-headlessservicePort: 8848path: /nacos

浏览器访问http://nacos.domain.test/nacos

出其东门

出其东门,有女如云。

虽则如云。匪我思存。

缟衣綦巾,聊乐我员。

出其闉阇,有女如荼。

虽则如荼,匪我思且。

缟衣茹藘,聊可与娱。

求关注

求转发

nacosk8s部署_在K8S中部署Nacos配置中心相关推荐

  1. Linux启动nacos成功日志_微服务系列之Nacos配置中心

    Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Service ...

  2. nacos linux启动_微服务系列之Nacos配置中心之一:Nacos介绍与安装

    一.Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Servi ...

  3. Nacos配置中心用法详细介绍

    上篇文章介绍了 Nacos 作为注册中心的用法,除此之外,Nacos 还能作为配置中心使用,那这篇文章就介绍下 Nacos 作为配置中心的基本用法,首先我们先了解下为什么需要使用配置中心. 一.为什么 ...

  4. k8s中部署traefik并开启https支持

    k8s中部署traefik并开启https支持 k8s现在已经是容器编排领域的事实标准了,而在我们部署k8s集群时,ingress组件是必不可少的,在k8s领域,做的比较好的ingress组件就是tr ...

  5. 在 k8s 中部署 Prometheus 和 Grafana

    部署 Prometheus 和 Grafana 到 k8s Intro 上次我们主要分享了 asp.net core 集成 prometheus,以及简单的 prometheus 使用,在实际在 k8 ...

  6. 运维实操——kubernetes(十九)k8s中部署Prometheus、监控nginx、HPA自动伸缩

    k8s中部署Prometheus.监控nginx.HPA自动伸缩 1.什么是Prometheus? 2.k8s中部署Prometheus监控 3.prometheus监控nginx 4.基于prome ...

  7. kubernetesV1.13.1一键部署脚本(k8s自动部署脚本)

    kubernetesV1.13.1一键部署脚本(k8s自动部署脚本)  devops的那些事 https://www.jianshu.com/p/c26af5647865 请关注公众号,技术获得k8s ...

  8. easyconnect获取服务端配置信息失败_图文解析 Nacos 配置中心的实现

    本文不会贴太多源码,基本靠图片和文字叙述 全文共 2582 字,预计阅读时间 12 分钟 什么是 Nacos 配置中心的架构 Nacos 使用示例 官方代码示例 Properties 解读 配置项的层 ...

  9. 【K8S实战系列-nignx-2】k8s中configmap挂载配置nginx.conf

    [K8S实战系统-nignx-2]k8s中configmap挂载配置nginx.conf 1. ConfigMap是什么 ConfigMap作用是存储不加密的数据到etcd中,让Pod以变量或数据卷V ...

最新文章

  1. Java 编程下使用 Class.forName() 加载类
  2. PropertySet 学习一
  3. CLR 完全介绍-反射之反思
  4. 2021年下半年网络规划设计师下午真题及答案解析
  5. emacs扩展功能_3个用于组织的Emacs扩展
  6. python file tell_Python3 File tell() 方法
  7. QueryRunner类
  8. Linux下运行JAVA程序——JRE安装和配置
  9. 孙正义再造“阿里巴巴”
  10. 【KAFKA】使用星环大数据平台客户端操作kafka的topic
  11. 神经元模型 Hodgkin Huxley model
  12. R语言实现结构方程模型
  13. .net RPC框架选型(一)
  14. twig  之基本语法
  15. 利用Java8新特性stream流给集合中的某个属性赋值
  16. ORACLE存储过程使用数组
  17. 【Python首记】OA自动打卡
  18. Yaml编程语言学习
  19. 自由开发者的收入来源(程序员)
  20. 微信小程序快速入门【一】

热门文章

  1. c# 从一组数中随机抽取一定个数_C#随机一组不重复的数字
  2. SpringCloud 实战笔记
  3. 流式布局FlowLayout支持行数控制,单选,多选,点击等操作
  4. 程序员自我修养阅读笔记——动态链接
  5. Excel 2010 SQL应用041 根据二代身份证号返回出生年份
  6. pyecharts终于更新啦!| pyecharts-Map3D画3D立体地图
  7. uthash官方使用说明文档
  8. 医学影像数据集和其他数据集们
  9. Sawyer智能协作机器人助力注塑公司提升产量
  10. Apache Ranger and AWS EMR Automated Installation Series (3): Windows AD + EMR-Native Ranger