当前位置: 首页 > news >正文

k8s集群部署:建立第一个微服务-注册中心Eureka

1、建立eureka server微服务,打开启动类,添加@EnableEurekaServer

package cn.iysworld.eurekaservice;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication
@EnableEurekaServer
public class EurekaServiceApplication {public static void main(String[] args) {SpringApplication.run(EurekaServiceApplication.class, args);}}

2、为了后续更方便镜像包的构建,以及应用部署,在pom文件中添加jenkins、harbor等相关配置。同时为了更方便的部署eureka高可用,在pom文件中引入nacos做为配置中心。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>cn.iysworld</groupId><artifactId>ysworld</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>ys-eureka-service</artifactId><version>0.0.1-SNAPSHOT</version><name>ys-eureka-service</name><description>ys-eureka-service</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>1.8</java.version><!--换成你的harbor仓库地址--><docker.repostory>10.211.55.57:80</docker.repostory><!--换成你的仓库项目名称--><docker.registry.name>ys</docker.registry.name><docker.image.tag>1.0.0</docker.image.tag><docker.maven.plugin.version>1.4.10</docker.maven.plugin.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency></dependencies><build><finalName>ys-eureka-service</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>cn.iysworld.yseurekaservice.YsEurekaServiceApplication</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>${docker.maven.plugin.version}</version><executions><execution><id>default</id><goals><!--如果package时不想用docker打包,就注释掉这个goal--><goal>build</goal><goal>push</goal></goals></execution></executions><configuration><contextDirectory>${project.basedir}</contextDirectory><!-- harbor 仓库用户名及密码--><useMavenSettingsForAuth>true</useMavenSettingsForAuth><repository>${docker.repostory}/${docker.registry.name}/${project.artifactId}</repository><tag>${docker.image.tag}</tag><buildArgs><!-- 要修改成你的target目录--><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin></plugins><resources><!-- 指定 src/main/resources下所有文件及文件夹为资源文件 --><resource><directory>src/main/resources</directory><targetPath>${project.build.directory}/classes</targetPath><includes><include>**/*</include></includes><filtering>true</filtering></resource></resources></build></project>

这是父工程的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.iysworld</groupId><artifactId>ysworld</artifactId><version>0.0.1-SNAPSHOT</version><name>ysworld</name><description>ysworld</description><packaging>pom</packaging><modules><module>ys-eureka-service</module></modules><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version><spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version><spring-cloud.version>2021.0.5</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><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><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
</project>

3、建立Dokerfile文件,后续方便使用jenkins打包,直接与src目录同级别

# 使用一个基础镜像
FROM openjdk:8-jdk-alpine
# 指定镜像制作作者
MAINTAINER ys
# 安装必要的工具(curl、ping、telnet)
RUN apk update && apk add --no-cache curl busybox-extras
# 设置工作目录
VOLUME /app
# 将本地的文件拷贝到容器
ADD target/*jar app.jar
# 设置环境变量 主要为了记录内存溢出时的信息
ENV JAVA_OPTS="-Xmx64m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/logs/heapdump.hprof"
# 启动容器后自动执行的命令
CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]

4、配置文件

# Eureka 服务器端口号
server.port=8761
# Eureka 服务器应用名称
spring.application.name=${SPRING_APPLICATION_NAME:ys-eureka-service}
spring.profiles.active=${SPRING_PROFILES_ACTIVE:dev}# 配置中心
spring.config.import=nacos:${spring.application.name}
spring.cloud.nacos.config.server-addr=${SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR:10.211.55.56:8848}
spring.cloud.nacos.config.username=${SPRING_CLOUD_NACOS_CONFIG_USERNAME:nacos}
spring.cloud.nacos.config.password=${SPRING_CLOUD_NACOS_CONFIG_PASSWORD:nacos}
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.namespace=${SPRING_CLOUD_NACOS_CONFIG_NAMESPACE:ys-dev}
spring.cloud.nacos.config.file-extension=properties

nacos配置中心的配置:三个实例
ys-eureka-service

# Eureka 服务器应用名称
spring.application.name=${SPRING_APPLICATION_NAME:ys-eureka-service}
# Eureka 服务器端口号
server.port=8761
# 禁用 Eureka 服务器中的客户端行为(不注册自身,不获取注册信息)
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.instance.hostname=${spring.application.name}
eureka.client.service-url.defaultZone=http://ys-eureka-service-two:8761/eureka/,http://ys-eureka-service-three:8761/eureka/
# Eureka 仪表板和服务器配置
# 启用自我保护模式,防止过多服务同时下线
eureka.server.enable-self-preservation=true
# 服务剔除检查间隔时间,默认60秒
eureka.server.eviction-interval-timer-in-ms=60000# Eureka 实例租约配置
# 租约续约频率(秒),客户端每10秒发送一次心跳
eureka.instance.lease-renewal-interval-in-seconds=10
# 租约到期时间(秒),90秒后服务器认为实例不可用
eureka.instance.lease-expiration-duration-in-seconds=90# 显示 Eureka 仪表板 UI 在根路径下
# 公开所有管理端点
management.endpoints.web.exposure.include=*
# 始终显示健康检查详情
management.endpoint.health.show-details=alwayslogging.file.path=/app/logs
logging.file.name=/app/logs/${spring.application.name}.log

ys-eureka-service-two

# Eureka 服务器应用名称
spring.application.name=${SPRING_APPLICATION_NAME:ys-eureka-service-two}
# Eureka 服务器端口号
server.port=8761
# 禁用 Eureka 服务器中的客户端行为(不注册自身,不获取注册信息)
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.instance.hostname=${spring.application.name}
eureka.client.service-url.defaultZone=http://ys-eureka-service:8761/eureka/,http://ys-eureka-service-three:8761/eureka/
# Eureka 仪表板和服务器配置
# 启用自我保护模式,防止过多服务同时下线
eureka.server.enable-self-preservation=true
# 服务剔除检查间隔时间,默认60秒
eureka.server.eviction-interval-timer-in-ms=60000
# Eureka 实例租约配置
# 租约续约频率(秒),客户端每10秒发送一次心跳
eureka.instance.lease-renewal-interval-in-seconds=10
# 租约到期时间(秒),90秒后服务器认为实例不可用
eureka.instance.lease-expiration-duration-in-seconds=90
# 显示 Eureka 仪表板 UI 在根路径下
# 公开所有管理端点
management.endpoints.web.exposure.include=*
# 始终显示健康检查详情
management.endpoint.health.show-details=always
logging.file.path=/app/logs
logging.file.name=/app/logs/${spring.application.name}.log

3、ys-eureka-service-three

# Eureka 服务器应用名称
spring.application.name=${SPRING_APPLICATION_NAME:ys-eureka-service-three}
# Eureka 服务器端口号
server.port=8761
# 禁用 Eureka 服务器中的客户端行为(不注册自身,不获取注册信息)
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.instance.hostname=${spring.application.name}
eureka.client.service-url.defaultZone=http://ys-eureka-service:8761/eureka/,http://ys-eureka-service-two:8761/eureka/
# Eureka 仪表板和服务器配置
# 启用自我保护模式,防止过多服务同时下线
eureka.server.enable-self-preservation=true
# 服务剔除检查间隔时间,默认60秒
eureka.server.eviction-interval-timer-in-ms=60000# Eureka 实例租约配置
# 租约续约频率(秒),客户端每10秒发送一次心跳
eureka.instance.lease-renewal-interval-in-seconds=10
# 租约到期时间(秒),90秒后服务器认为实例不可用
eureka.instance.lease-expiration-duration-in-seconds=90# 显示 Eureka 仪表板 UI 在根路径下
# 公开所有管理端点
management.endpoints.web.exposure.include=*
# 始终显示健康检查详情
management.endpoint.health.show-details=always
logging.file.path=/app/logs
logging.file.name=/app/logs/${spring.application.name}.log

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • udp网络通信 socket
  • 简单说说关于shell中zsh和bash的选择
  • Linux之ansible的playbook剧本(yaml文件)
  • VMwareWorkstation安装UOS系统(1070版本)教程
  • 如何识别和防范跨站请求伪造(CSRF)?
  • YOLO改进模块后不出现Glops参数问题
  • 【408 数据结构】第2章 线性表
  • PHP-SER-libs靶场通关(1-9)
  • 数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值特殊矩阵的压缩存储
  • 国家新标准引领,油烟净化器为烟火气添清新活力
  • 网络安全(sql注入2,less3)
  • 苹果的“AI茅”之路只走了一半
  • TeamTalk数据库代理服务器
  • AI问答-数据库:理解头表和行表
  • ModuleNotFoundError: No module named ‘keras.layers.core‘怎么解决
  • Centos6.8 使用rpm安装mysql5.7
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • happypack两次报错的问题
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • node入门
  • ReactNative开发常用的三方模块
  • React的组件模式
  • React组件设计模式(一)
  • 番外篇1:在Windows环境下安装JDK
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 基于axios的vue插件,让http请求更简单
  • 前端存储 - localStorage
  • 前端性能优化——回流与重绘
  • 前端之React实战:创建跨平台的项目架构
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​用户画像从0到100的构建思路
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ​字​节​一​面​
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #QT(TCP网络编程-服务端)
  • #每天一道面试题# 什么是MySQL的回表查询
  • (2.2w字)前端单元测试之Jest详解篇
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (k8s)Kubernetes本地存储接入
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (WSI分类)WSI分类文献小综述 2024
  • (二)丶RabbitMQ的六大核心
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (回溯) LeetCode 40. 组合总和II
  • (汇总)os模块以及shutil模块对文件的操作
  • (剑指Offer)面试题34:丑数
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (三)uboot源码分析
  • (算法)大数的进制转换