【实战】K8S集群部署nacos并接入Springcloud项目容器化运维

news/2024/4/13 10:42:48/文章来源:https://blog.csdn.net/weixin_39970883/article/details/136535636

文章目录

    • 前言
    • Nacos集群搭建
    • Spring cloud配置nacos
    • 将Springcloud项目部署在k8s
    • 写在最后

前言

相信很多同学都开发过以微服务为架构的系统,开发微服务必不可少要使用注册中心,比如nacos\consul等等。当然在自动化运维流行的今天,我们也会将注册中心部署在k8s集群中。今天我们就分享一期使用helm部署nacos到k8s集群并接入soringcloud项目,各位大大敬请鉴赏。值得注意的是使用helm在k8s部署中间件应用,真的比原始部署简单太多。

Nacos集群搭建

首先我们先从官网把nacos helm相关的代码down下来

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

然后进入到helm目录,修改values.yaml文件,下面是我的:

# Default values for nacos.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.global:#mode: standalonemode: cluster############################nacos###########################
namespace: nacos-cluster  ## 命名空间
nacos:image:repository: nacos/nacos-servertag: latestpullPolicy: IfNotPresentplugin:enable: trueimage:repository: nacos/nacos-peer-finder-plugintag: 1.1pullPolicy: IfNotPresentreplicaCount: 3 ## 节点数podManagementPolicy: ParalleldomainName: cluster.localpreferhostmode: hostnameserverPort: 8848health:enabled: truestorage:#type: embedded  type: mysql  ## 用mysql保存配置信息db:host: mysql-cluster-primary.mysql-cluster.svc.cluster.localname: nacosport: 3306username: rootpassword: 123456rootparam: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=trueservice:#type: ClusterIPtype: NodePortport: 8848nodePort: 30000############################nacos###########################

接着我们来安装nacos,如下所示:
#数据库增加nacos库
#创建命名空间

[root@master helm]# kubectl create ns nacos-cluster

namespace/nacos-cluster created
#安装nacos

[root@master helm]# helm install nacos-cluster -n nacos-cluster .

NAME: nacos-cluster
LAST DEPLOYED: Tue Sep 5 10:16:46 2023
NAMESPACE: nacos-cluster
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:

  1. Get the application URL by running these commands:
    export NODE_PORT= ( k u b e c t l g e t − − n a m e s p a c e n a c o s − c l u s t e r − o j s o n p a t h = " . s p e c . p o r t s [ 0 ] . n o d e P o r t " s e r v i c e s n a c o s − c s ) e x p o r t N O D E I P = (kubectl get --namespace nacos-cluster -o jsonpath="{.spec.ports[0].nodePort}" services nacos-cs) export NODE_IP= (kubectlgetnamespacenacosclusterojsonpath=".spec.ports[0].nodePort"servicesnacoscs)exportNODEIP=(kubectl get nodes --namespace nacos-cluster -o jsonpath=“{.items[0].status.addresses[0].address}”)
    echo http:// N O D E I P : NODE_IP: NODEIP:NODE_PORT/nacos
  2. MODE:
    standalone: you need to modify replicaCount in the values.yaml, .Values.replicaCount=1
    cluster: kubectl scale sts nacos-cluster-nacos --replicas=3

#重新部署 的命令是 helm upgrade nacos-cluster -n nacos-cluster .

安装好了之后,我们查看控制台显示是不是安装好了,如下所示:

[root@master helm]# kubectl get pods,svc -n nacos-cluster

NAME READY STATUS RESTARTS AGE
pod/nacos-cluster-0 0/1 Running 0 67s
pod/nacos-cluster-1 0/1 Running 0 67s
pod/nacos-cluster-2 0/1 Running 0 67s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nacos-cs NodePort 10.98.1.221 8848:30040/TCP,9848:31784/TCP,9849:30165/TCP,7848:30000/TCP 67s
service/nacos-hs ClusterIP None 8848/TCP,9848/TCP,9849/TCP,7848/TCP

很显然安装成功了!然后我们获取一下ip和port

[root@node2 ~]#   export NODE_PORT=$(kubectl get --namespace nacos-cluster -o jsonpath="{.spec.ports[0].nodePort}" services  nacos-cs)export NODE_IP=$(kubectl get nodes --namespace nacos-cluster -o jsonpath="{.items[0].status.addresses[0].address}")echo http://$NODE_IP:$NODE_PORT/nacos[root@node2 ~]#   export NODE_IP=$(kubectl get nodes --namespace nacos-cluster -o jsonpath="{.items[0].status.addresses[0].address}")

http://10.10.22.91:31673/nacos

这里说明一下,因为nacos ui是通过http协议访问的,而且8848端口是提供web访问的,所以这里的8848对外的端口就是31673,然后我们在浏览器中输入:xxx.xxx.xxx.xxx:31673就可以访问了,如下所示:
在这里插入图片描述

Spring cloud配置nacos

nacos安装成功之后,我们可以在springcloud中配置并使用,下面是我的配置步骤:
1、引入依赖包

<modelVersion>4.0.0</modelVersion>
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.12.RELEASE</version><relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>k8s-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>k8s-demo</name>
<description>Demo project for Spring Boot</description>
<properties><java.version>8</java.version><spring-cloud.version>Hoxton.SR10</spring-cloud.version>
</properties><!-- nacos start -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.3.RELEASE</version>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.3.RELEASE</version>
</dependency>
<!-- nacos end --><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

2、配置启动类

/*** K8sDemoApplication* @return a* @author senfel* @date 2023/9/5 15:02*/
@SpringBootApplication
@EnableDiscoveryClient
public class K8sDemoApplication {public static void main(String[] args) {SpringApplication.run(K8sDemoApplication.class, args);}}

3、配置bootstrap.yaml
注意,nacos在springcloud中对应的端口是暴露外网端口30040

server:port: 9999
spring:application:name: test-demoprofiles:active: devredis:host: 10.10.22.91port: 30617password: 123456pwtimeout: 5000database: 0jedis:pool:max-active: 1000max-idle: 50min-idle: 4cloud:nacos:config:server-addr: 10.10.22.82:30040,10.10.22.91:30040,10.10.22.199:30040username: nacospassword: nacosfile-extension: yamldiscovery:server-addr: 10.10.22.82:30040,10.10.22.91:30040,10.10.22.199:30040username: nacospassword: nacos

设置完成启动正常。
在这里插入图片描述
在这里插入图片描述

注意:如果新增配置报参数异常
1.删掉config_info 和 his_config_info 表中的encrypted_data_key字段
2.config_info 和 his_config_info 表中非空encrypted_data_key字段设置为可以为空

将Springcloud项目部署在k8s

在上述配置的基础上
在k8s集群中用域名进行配置

server:port: 9999
spring:application:name: test-demoprofiles:active: devredis:host: 10.10.22.91port: 30617password: 123456pwtimeout: 5000database: 0jedis:pool:max-active: 1000max-idle: 50min-idle: 4cloud:nacos:config:server-addr: nacos-cs.nacos-cluster.svc.cluster.local:8848username: nacospassword: nacosfile-extension: yamldiscovery:server-addr: nacos-cs.nacos-cluster.svc.cluster.local:8848username: nacospassword: nacos

注意:headless 服务没有负载均衡,一般集群我们都访问普通svc

增加配置:
pom.xml

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

启动类开启feign client

 @EnableFeignClients

增加测试feign代码
DemoService

/*** test feign* @author senfel* @version 1.0* @date 2023/9/5 16:18*/
@Service
@FeignClient(value = "k8s-demo",fallback = FailDemoService.class)
public interface DemoService {/*** test feign*/@GetMapping("/feign")String feign(@RequestParam String str);
}

FailDemoService

/*** FailDemoService* @author senfel* @version 1.0* @date 2023/9/5 16:20*/
@Slf4j
@Service
public class FailDemoService  implements DemoService {@Overridepublic String feign(String str) {log.error("调用feign传入参数{},已降级。",str);return null;}
}

AppController

/*** AppController {* @author senfel* @version 1.0* @date 2023/9/5 16:25*/
@Slf4j
@RestController
public class AppController {@Value("${app.name}")private String appName;@Resourceprivate DemoService demoService;/*** getRedisValueByKey* @param key* @author senfel* @date 2023/8/31 16:22* @return java.lang.String*/@GetMapping("/getRedisValueByKey")public String getRedisValueByKey(String key){try{if(null == key){return null;}String str = RedisUtil.getString(key);log.error("获取redis中key:{}的数据为:{}",key,str);log.error("测试nacos配置,app.name:{}",appName);str = "redis-"+key+":"+str+",nacos-appName:"+appName;//调用feignString feign = demoService.feign(str);return feign;}catch (Exception e){e.printStackTrace();return e.getMessage();}}/*** feign* @param str* @author senfel* @date 2023/9/5 16:26* @return java.lang.String*/@GetMapping("feign")public String feign(@RequestParam String str){try{InetAddress address = InetAddress.getLocalHost();System.out.println(address.getHostName());//主机名System.out.println(address.getCanonicalHostName());//主机别名System.out.println(address.getHostAddress());//获取IP地址}catch (Exception e){e.printStackTrace();}return str+"-feign-success";}
}

制作app镜像
Dockerfile

# version 1.0
# 基础镜像
FROM openjdk:8-jre
# 维护人
MAINTAINER senfel<187@sina.cn>
# 创建目录
RUN mkdir -p /home/app
# 拷贝项目jar
COPY ./target/k8s-demo-0.0.1-SNAPSHOT.jar /home/app/app.jar
# 执行命令启动jar
ENTRYPOINT ["java","-jar","/home/app/app.jar"]
# 暴露端口
EXPOSE 9999

将本地jar打包成镜像并提交到云仓库

docker build -t k8s-demo-nacos:v1.0.0 .

编写kube执行文件
kube-k8s-demo-nacos.yaml

apiVersion: apps/v1
kind: Deployment # 声明一个Deployment资源对象
metadata:name: deployment-myapp
spec:replicas: 3 # 通过replicas声明pod个数是3selector:   # 通过标签选择被控制的podmatchLabels:app: myapptemplate:   # 在template中定义podmetadata:labels: # 给pod打上标签app=myappapp: myappspec:containers:- name: myapp  # 声明容器名称,注意不是pod名称,pod名称应该定义在metadata中image: registry.cn-hangzhou.aliyuncs.com/senfel/k8s-demo-nacos:v1.0.0ports:- name: httpcontainerPort: 9999
--- # 在一个yaml文件中通过---分割多个资源对象
apiVersion: v1
kind: Service # 声明一个Service资源对象
metadata:name: service-myapp
spec:type: NodePortselector: # service-myapp将选择标签包含app=myapp的podapp: myappports:- name: httpport: 9999  # Service监听端口targetPort: 9999 # 转发到后端Pod的端口号protocol: TCP # tcp协议nodePort: 30999 # 外网访问端口,范围:30000-32767

执行kube

kubectl apply -f kube-k8s-demo-nacos.yaml

查看执行结果

[root@master k8s]# kubectl get pods,svc | grep app

pod/deployment-myapp-9c6fb8dd9-jvmwl 1/1 Running 0 14m
pod/deployment-myapp-9c6fb8dd9-z64zj 1/1 Running 0 14m
pod/deployment-myapp-9c6fb8dd9-zklpc 1/1 Running 0 14m
service/service-myapp NodePort 10.102.62.181 9999:30999/TCP 14m
#删除pod svc

kubectl delete -f kube-k8s-demo-nacos.yaml

查看nacos情况
配置列表:
在这里插入图片描述

服务集群:
在这里插入图片描述

测试app集群是否正常服务
posman测试
在这里插入图片描述

写在最后

在k8s中部署nacos还是使用helm比较简单,直接下载安装包修改配置文件安装即可。我们在Springcloud、Springboot项目中集成nacos需要注意需要使用集群内部地址,当我们将项目部署在k8s集群中可以直接使用nacos配置和查询服务集群。

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

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

相关文章

windows部署ruoyi-vue-pro

前提 安装java 安装maven 安装redis mysql 源代码下载 后端 ruoyi-vue-pro 前端 yudao-ui-admin-vue3 后端项目 配置maven 导入数据 CREATE DATABASE ruoyi_vue_pro;修改mysql连接配置 修改redis 打包项目 mvn clean install package -Dmaven.test.skiptrue启动YudaoSe…

QEMU调试——通过获取设备树(dtb文件)查询开发板的外设地址信息

1、适用场景 使用qemu时&#xff0c;想快速知道开发板的地址空间映射情况&#xff0c;特别是某些外设控制器的寄存器基地址 2、查询QEMU支持的开发板 qemu-system-riscv32.exe -M ? 3、获取开发板对应的dtb文件 1、qemu-system-riscv32.exe -M nuclei_evalsoc 2、dumpdtb nucl…

C#,无监督的K-Medoid聚类算法(K-Medoid Algorithm)与源代码

1 K-Medoid算法 K-Medoid&#xff08;也称为围绕Medoid的划分&#xff09;算法是由Kaufman和Rousseeuw于1987年提出的。中间点可以定义为簇中的点&#xff0c;其与簇中所有其他点的相似度最小。 K-medoids聚类是一种无监督的聚类算法&#xff0c;它对未标记数据中的对象进行聚…

@ResponseStatus

目录 概述&#xff1a; 用途&#xff1a; 参数&#xff1a; 注意事项&#xff1a; 自定义异常类&#xff1a; 底层原理&#xff1a; 概述&#xff1a; 在 Spring MVC 中&#xff0c;我们有很多方法来设置 HTTP 响应的状态码其中最直接的方法&#xff1a;使用 ResponseSt…

基于Java的校园失物招领管理系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系统公告模块2.4 感谢留言模块 三、界面展示3.1 登录注册3.2 招领模块3.3 寻物模块3.4 公告模块3.5 感谢留言模块3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 校园失物招领…

Bililive-go 实现直播自动监控录制

前言 最近有直播录制的需求&#xff0c;但是自己手动录制太麻烦繁琐&#xff0c;于是用了开源项目Bililive-go进行全自动监控录制&#xff0c;目前这个项目已经有3K stars了 部署 为了方便我使用了docker compose 部署 version: 3.8 services:bililive:image: chigusa/bilil…

通过修改host文件来访问GitHub

前言&#xff1a; 由于国内环境的原因&#xff0c;导致我们无法流畅的访问GitHub&#xff0c;。 但是我们可以采取修改host文件来实现流畅访问。 缺点&#xff1a;需要不定时的刷新修改。 操作流程 一、查询IP地址 以下地址可以查询ip地址 http://ip.tool.chinaz.com/ htt…

曾桂华:车载座舱音频体验探究与思考| 演讲嘉宾公布

智能车载音频 I 分论坛将于3月27日同期举办&#xff01; 我们正站在一个前所未有的科技革新的交汇点上&#xff0c;重塑我们出行体验的变革正在悄然发生。当人工智能的磅礴力量与车载音频相交融&#xff0c;智慧、便捷与未来的探索之旅正式扬帆起航。 在驾驶的旅途中&#xff0…

个推与华为深度合作,成为首批支持兼容HarmonyOS NEXT的服务商

自华为官方宣布HarmonyOS NEXT鸿蒙星河版开放申请以来&#xff0c;越来越多的头部APP宣布启动鸿蒙原生开发&#xff0c;鸿蒙生态也随之进入全新发展的第二阶段。 作为华为鸿蒙生态的重要合作伙伴&#xff0c;个推一直积极参与鸿蒙生态建设。为帮助用户在HarmonyOS NEXT上持续享…

数据分析与挖掘(一):数据预处理环节的数据降维方法以及应用

数据分析与挖掘&#xff08;一&#xff09;&#xff1a;数据预处理环节的数据降维方法以及应用 一、 实验目的&#xff1a; 数据预处理环节的数据降维方法以及应用 二、实验设备&#xff08;环境&#xff09;及要求 Jupyter notebook、百度 AI studio 三、实验内容 1.降维…

2024最新外贸建站:WordPress搭建外贸独立站零基础教程

想与外国人做生意有多种方式&#xff0c;一些朋友选择在跨境电商平台上开店如&#xff08;亚马逊&#xff09;&#xff0c;而另一些朋友则决定建立自己的外贸独立站点。本篇教程主要说的是第二种方式如何快速建立自己的外贸独立站&#xff01;通过学习这篇外贸建站教程&#xf…

【通信协议解析】ZigBee通信协议解析

ZigBee通信协议解析 ZigBee是一种低成本、低功耗的无线网状网络标准。以下是一些关于ZigBee的详细介绍&#xff1a; 定义和设计&#xff1a;ZigBee是基于IEEE 802.15.4标准的高级通信协议。它是为了解决不需要高数据率的应用而设计的&#xff0c;例如自动控制和远程控制等。 …

产品展示型wordpress外贸网站模板

孕婴产品wordpress外贸网站模板 吸奶器、待产包、孕妇枕头、护理垫、纸尿裤、孕妇装、孕婴产品wordpress外贸网站模板。 https://www.jianzhanpress.com/?p4112 床品毛巾wordpress独立站模板 床单、被套、毛巾、抱枕、靠垫、围巾、布艺、枕头、乳胶枕、四件套、浴巾wordpre…

一周学会Django5 Python Web开发-Django5删除视图DeleteView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计31条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

Java 面试题及答案整理,最新面试题

Java中的内存模型是如何设计的&#xff1f; Java的内存模型主要包括堆、栈、方法区和本地方法栈几个关键部分&#xff1a; 1、堆&#xff08;Heap&#xff09;&#xff1a; 这是Java内存管理中最大的一块&#xff0c;被所有线程共享。在堆中主要存放对象实例和数组。 2、栈&…

基于springboot+vue实现学校田径运动会系统项目【项目源码+论文说明】计算机毕业设计

基于springbootvue实现学校田径运动会系统演示 摘要 随着互联网普及率的提高&#xff0c;互联网与人们日常生活的关系越来越密切&#xff0c;越来越多学校也正在着力建设自己的信息化管理系统&#xff0c;学校根据自身的发展及社会发展的需要&#xff0c;开始将传统的运动会成…

寒假作业Day 07

寒假作业Day 07 一、选择题 函数rewind的作用是使文件位置指针重新返回文件的开始位置。这是C语言程序中的库函数&#xff0c;它针对的是文件内部的位置指针&#xff0c;而不是文件指针。文件内部的位置指针会随着对文件的读写操作而向后移动&#xff0c;而文件指针则是指向整…

java八股文复习-----2024/03/04----基础

相关资源 大彬八股文 2024八股文 2024秋招八股文 1.了解Java的包装类型吗&#xff1f;为什么需要包装类&#xff1f; Java 是一种面向对象语言&#xff0c;很多地方都需要使用对象而不是基本数据类型。比如&#xff0c;在集合类中&#xff0c;我们是无法将 int 、double 等类型…

Linux系统——Keepalive群集部署及认识

目录 一、Keepalive的认识 1.Keepalive基础——VRRP 2.Keepalived工具介绍 2.1Keepalived介绍 2.2Keepalived架构 2.2.1用户空间核心组件 2.2.2WatchDog&#xff1a;监控进程&#xff08;整个架构是否有问题&#xff09; 二、安装Keepalived及相关配置文件详解 1.安装…

数据结构:顺序表的奥秘

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生&#x1f43b;‍❄个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE&#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&a…