K8S中部署 Nacos 集群

news2024/9/19 10:43:14

1. 准备

  • Git
  • K8S
  • kubectl
  • helm

咱也没想到 K8S 部署系列能搞这么多次,我一个开发天天干运维的活,前端后端运维测试工程师实至名归。
Snipaste_2024-07-05_09-06-05.png

2. 方案选择

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

我替你们看了一下,有好几种方式能部署,但我们选择其中一种。

image.png

主要是其他的部署方式我也不想验证啊,我只选了最简单的 nacos-operator。跟着我部署,包跑起来的。

3. 利用 nacos-operator 搭建 Nacos 集群

先看看文档:https://github.com/nacos-group/nacos-k8s/blob/master/operator/README-CN.md

3.1 先把仓库拉到本地

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

3.2 安装nacos-operator

cd nacos-k8s/operator

helm install nacos-operator ./chart/nacos-operator --namespace infrastructure

安装完成之后提示:

NAME: nacos-operator

LAST DEPLOYED: Fri Jun 28 09:10:41 2024

NAMESPACE: infrastructure

STATUS: deployed

REVISION: 1

3.3 修改配置文件并生效

# 配置文件示例目录
cd config/samples

# 这个表示集群并使用MySQL进行持久化
vim nacos_cluster_mysql.yaml

nacos_cluster_mysql.yaml:

apiVersion: nacos.io/v1alpha1
kind: Nacos
metadata:
  name: nacos-dev
  namespace: infrastructure
spec:
  type: cluster
  image: nacos/nacos-server:v2.2.3
  replicas: 1
  env:
    # 开启鉴权
    - name: NACOS_AUTH_ENABLE
      value: "true"
    - name: NACOS_AUTH_TOKEN
      value: "XXXXXXXXXX"
    - name: NACOS_AUTH_IDENTITY_KEY
      value: "XXXXXX"
    - name: NACOS_AUTH_IDENTITY_VALUE
      value: "XXXXXX"
  resources:
    requests:
      cpu: 100m
      memory: 512Mi
    limits:
      cpu: 500m
      memory: 1Gi
  mysqlInitImage: "registry.cn-hangzhou.aliyuncs.com/choerodon-tools/mysql-client:10.2.15-r0"
  database:
    type: mysql
    mysqlHost: <HOST>
    mysqlDb: <DB>
    mysqlUser: <USER>
    mysqlPort: <PORT>
    mysqlPassword: <PASSWROD>
  config: |
    management.endpoints.web.exposure.include=*

开启鉴权:Nacos 提供了一个管理后台,部署成功后通过 host:port/nacos 访问。如果我们将这个路径暴露到公网,那么任何人都能访问。可怕的是, Nacos API 接口的 path 也是 /nacos
那么一旦开启,配置中心API 将直接对外,配置中心里面的东西是什么就不用多说了。

也有同学说我保证它只能在内网访问就行了吧?这当然可以,Nacos 也是这样说的。

image.png

但我还是建议打开这个开关,因为一旦有人非常不小心暴露了出去,那你就得提桶。我们应该做的是把鉴权打开,然后把管理员权限给老板,如果他没改默认密码,我们还要提醒他修改默认。懂我意思了吧?

image.png

mysqlInitImage:这是 initContainer 的镜像,initContainer 是 k8s中的概念,表示服务启动之前先做一些操作。在这个场景中是连接上MySQL,然后创建库表这些操作。我实测没有生效,会报错 No Datasource set,所以需要我们自己先初始化好库表以及插入必要的记录。
执行这个MySQL初始化脚本

No Datasource set 有很多的原因,有可能是我刚刚的这种情况,也有可能MySQL用户没有权限等等。遇到问题可以在 issue 看看其他大佬的骚操作。
Issues · nacos-group/nacos-k8s (github.com)

3.4 验证集群是否可用

根据刚刚的配置文件,我们可以访问这个路径来查看Nacos的管理后台,当然,这是通过内网访问的。http://nacos-dev-headless.infrastructure:8848/nacos,访问能看见管理后台就大功告成了。可以使用默认的账户密码登录:nacos/nacos

image.png

3.5 在Springboot程序中集成Nacos

先在管理后台创建好命名空间和dataId 配置文件等

了解Springboot 的配置读取机制,想装x的(bushi)看这个:21. Externalized Configuration (spring.io)英语看不懂就看这个:Felo搜索 - 你的免费AI智能搜索引擎,不是把中文的内容给你了你都能挑出毛病?好吧!

image.png

太长不看就让我给你嚼一下,然后喂给你:

工作目录下的 config 目录中的配置文件先加载,配置文件 bootstrap 比 application 先加载。所以我们只要把配置文件挂载到工作目录下的config中就行了。

老规矩,先整理好配置 bootstrap.properties

spring.application.name=<app-name>
server.port=8080
spring.profiles.active=<profile>

spring.cloud.nacos.config.server-addr=nacos-dev-0.nacos-dev-headless.infrastructure.svc.cluster.local:8848
spring.cloud.nacos.config.enabled=true
spring.cloud.nacos.config.refresh-enabled=true
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.username=<username>
spring.cloud.nacos.password=<password>
spring.cloud.nacos.config.namespace=74a2a3bc-cded-4090-b326-993dba2871e6
spring.cloud.nacos.config.group=DEFAULT_GROUP

spring.cloud.nacos.config.shared-configs[0].data-id=redis-dev.properties
spring.cloud.nacos.config.shared-configs[1].data-id=kafka-dev.properties
spring.cloud.nacos.config.shared-configs[2].data-id=xxl-job-dev.properties
spring.cloud.nacos.config.shared-configs[3].data-id=druid-dev.properties

然后,在 k8s 配置文件中挂载配置文件:ConfigMaps | Kubernetes 或者这个 k8s deployment挂载配置文件-Felo搜索

最后当然是在应用中引入 Nacos 的依赖,因为我只使用配置中心,我只引入了

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.10-RC1</version>
</dependency>

启动服务,查看监听查询

image.png

elegant!

Ref

集群模式部署 | Nacos 官网

nacos-operator方式部署

Nacos API 接口

属性配置列表

MySQL初始化脚本

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

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

相关文章

极狐Gitlab安装部署

GitLab 是一个基于 Git 的开源 DevOps 平台&#xff0c;提供代码仓库管理、CI/CD&#xff08;持续集成和持续交付&#xff09;、项目管理、监控和安全等功能。它集成了多种工具&#xff0c;帮助开发团队在一个平台上进行代码开发、测试、部署和运维。以下是 GitLab 的主要功能和…

LLM - 绝对与相对位置编码 与 RoPE 旋转位置编码 源码

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/140281680 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 Transformer 是基于 MHSA (多头自注意力),然而,MHSA 对于位置是不敏感…

自定义类型:联合体

像结构体一样&#xff0c;联合体也是由一个或者多个成员组成&#xff0c;这些成员可以是不同的类型。 联合体类型的声明 编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫&#xff1a;共⽤体。 输出结果&#xff1a; 联合体…

AcWing 3381:手机键盘

【题目来源】https://www.acwing.com/problem/content/3384/【题目描述】 请你计算按照手机键盘&#xff08;9键输入法&#xff09;输入字母的方式&#xff0c;键入给定字符串&#xff08;由小写字母构成&#xff09;所花费的时间。 具体键入规则和花费时间如下描述&#xff1a…

科普文:Java对象在堆中的内存结构

概叙 今天来讲些抽象的东西 -- 对象头&#xff0c;因为我在学习的过程中发现很多地方都关联到了对象头的知识点&#xff0c;例如JDK中的 synchronized锁优化 和 JVM 中对象年龄升级等等。 对象内存构成# Java 中通过 new 关键字创建一个类的实例对象&#xff0c;对象存于内存的…

【人工智能】-- 反向传播

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a; 专业知识 文章目录 &#x1f349;引言 &#x1f349;反向传播 &#x1f348;定义 &#x1f348;反向传播的作用 &#x1f34d;参数优化 &#x1f34d;学…

软件测试学习之-ADB命令

ADB命令 adb工具即Android Debug Bridge&#xff08;安卓调试桥&#xff09; tools。它就是一个命令行窗口&#xff0c;用于通过电脑端与模拟器或者真实设备交互。在某些特殊的情况下进入不了系统&#xff0c;adb就派上用场啦&#xff01; Android程序的开发通常需要使用到一…

解决Anaconda下载pytorch常见问题

1.问题一 安装完Anaconda后&#xff0c;输入conda命令&#xff0c;出现 conda不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 分析原因&#xff1a;未配置环境到系统变量 解决方法&#xff1a;将Anaconda安装路径和Anaconda目录下的Scripts文件的路径配…

本地部署,GFPGAN: 实用的面部修复算法

目录 什么是 GFPGAN&#xff1f; 技术原理 主要功能 应用场景 本地安装 运行结果 结语 Tip&#xff1a; 在图像处理和计算机视觉领域&#xff0c;面部修复是一个重要且具有挑战性的研究方向。随着深度学习技术的不断进步&#xff0c;许多新的算法被提出&#xff0c;用于…

Linux笔记之使用系统调用sendfile高速拷贝文件

Linux笔记之使用系统调用sendfile高速拷贝文件 code review! 文章目录 Linux笔记之使用系统调用sendfile高速拷贝文件sendfile 性能优势sendfile 系统调用优点&#xff1a;缺点&#xff1a; cp 命令优点&#xff1a;缺点&#xff1a; 实际测试&#xff1a;拷贝5.8个G的文件&a…

《Windows API每日一练》9.1.5 自定义资源

自定义资源&#xff08;Custom Resources&#xff09;是在 Windows 程序中使用的一种资源类型&#xff0c;用于存储应用程序特定的数据、图像、音频、二进制文件等。通过自定义资源&#xff0c;开发者可以将应用程序所需的各种资源文件集中管理和存储&#xff0c;便于在程序中访…

开源可视化Flutter图表库:Graphic

Graphic&#xff1a;用Graphic绘制数据的无限可能- 精选真开源&#xff0c;释放新价值。 概览 Graphic&#xff0c;这个基于Flutter的图表库&#xff0c;以其源自《The Grammar of Graphics》的灵感&#xff0c;为数据可视化提供了一种全新的方法。它不仅仅是一个工具&#xf…

安全策略与用户认证综合实验

一、实验拓扑 二、实验需求 1,DMZ区内的服务器,办公区仅能在办公时间内(9:00-18:00)可以访问,生产区的设备全天可以访问. 2,生产区不允许访问互联网,办公区和游客区允许访问互联网 3,办公区设备10.0.2.10不允许访问DMz区的FTP服务器和HTTP服务器,仅能ping通10.0.3.10 4,办公区…

【运维】docker批量删除临时镜像(两种方式)

docker批量删除Tag<none>的临时镜像 在开发的时候&#xff0c;需要经常发布开发包&#xff0c;在使用docker build构建镜像的时候&#xff0c;同一个版本经常会使用相同tag&#xff0c;频繁打包一段时间后&#xff0c;本地会出现很多Tag<none>的临时镜像&#xff…

WordPress知识付费系统+自动采集插件

采集功能&#xff1a; 1.支持分类替换 将主站同步过来的文章分类进行替换 2.支持自定义文章作者&#xff08;选择多个作者则同步到的文章作者将会随机分配&#xff09; 3.支持添加黑名单分类 添加后 如果同步过来的文章包含黑名单分类将不会发布文章 4.自动检测同步&#xf…

禁止使用存储过程

优质博文&#xff1a;IT-BLOG-CN 灵感来源 什么是存储过程 存储过程Stored Procedure是指为了完成特定功能的SQL语句集&#xff0c;经编译后存储在数据库中&#xff0c;用户可通过指定存储过程的名字并给定参数&#xff08;如果该存储过程带有参数&#xff09;来调用执行。 …

wifi ping ip地址可以但是域名失败

需求&#xff1a; 当连接上wifi之后获取&#xff0c;能正常获取IP并且能ping ip地址&#xff0c;但是不能ping域名&#xff0c;比如ping www.baidu.com 会显示坏地址 解决&#xff1a; 在/etc/resolv.conf中添加域名即可

NLP入门——词袋语言模型的搭建、训练与预测

卷积语言模型实际上是取了句子最后ctx_len个词作为上下文输入模型来预测之后的分词。但更好的选择是我们做一个词袋&#xff0c;将所有分词装在词袋中作为上下文&#xff0c;这样预测的分词不只根据最后ctx_len个分词&#xff0c;而是整个词袋中的所有分词。 例如我们的序列是&…

以太网的演变之路:技术进步与应用拓展

最初的以太网是由美国施乐&#xff08;Xerox&#xff09;公司的Palo Alto研究中心&#xff08;简称为PARC&#xff09;于1975年研制成功的。以太网从标准以太网&#xff08;10Mbit/s&#xff0c;也称为传统以太网&#xff09;开始逐步在有线局域网市场中占据了统治地位&#xf…

禁用windows的语音识别快捷键win+ctrl+s

win11组合键winctrls会弹出语音识别提示&#xff0c;即使到设置里禁用了语音识别也没用 解决办法&#xff1a;安装PowerToys&#xff0c;通过“键盘管理器”-“重新映射快捷键”禁用 PowerToys是微软自己的工具&#xff0c;不用担心安全问题&#xff0c;下载地址&#xff1a;h…