kubernetes部署spring cloud注册中心 Eureka
系统环境
java JDK 1.8
Docker 18.09.6
kubernetes 1.16

创建Eureka Server
1.Maven引入相应的jar
引入 SpringBoot 做基础框架,引入 SprigCloud Eureka 依赖来实现 Eureka Server 功能。
2.spring cloud的配置文件
需要在application中设置两个参数
vim application.yml
server:
port:
3.启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer
@SpringBootApplication
public class Application { public static void main(String[] args) {
SpringApplication.run(Application.class, args);
} }
4.mvn编译
构建Eureka Docker镜像
1.准备dockerfile
创建构建 Docker 镜像需要的 Dockerfile 文件,将 Maven 编译的 JAR 复制到镜像内部,然后设置两个变量,分别是:
- JAVA_OPTS:Java JVM 启动参数变量,这里需要在这里加一个时区参数。
- APP_OPTS:Spring 容器启动参数变量,方便后续操作时能通过此变量配置 Spring 参数
Dockerfile内容如下:
FROM java:-jdk-alpine
LABEL maintainer lizhenliang/www.ctnrs.com
RUN apk add -U tzdata
COPY ./target/eureka-service.jar ./ ENV JAVA_OPTS="-Duser.timezone=Asia/Shanghai"
EXPOSE
ENV APP_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /eureka-service.jar $APP_OPTS" ]
2.构建docker镜像
docker build -t 10.255.20.6/kubernetes/eureka:latest
kubernetes部署Eureka Server
创建 Eureka 部署文件,用于在 Kubernetes 中部署 Eureka,这里选择用 StatefulSet (有状态集)方式来部署,这样能保证它 Eureka Pod 名是有序的,如果部署为 Deployment,那么得部署三个 Deployment 对象,比较繁琐。并且 StatefulSet 支持 Service Headless 方式创建 Service 来对内部服务访问,如果是 CluserIP 方式创建 Service 会分一个虚拟 IP 给该 Service,那么服务通过 Service 访问 Pod 每次都需要经过 Kube-proxy 代理流量,这样会增加与注册中心的通信造成一定性能损耗。Headless 方式部署的 Service 不会分配虚拟 IP,而是用轮询的访问,每次都直接与 Pod 的 IP 进行通信。
为什么使用headless:
因为给Pod分配一个域,让其他Pod可以通过dnsName访问到这组Eureka的Pod,不懂的话看看另一篇随笔:statefulSet的学习
1.创建eureka.yml
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: eureka
namespace: ms
spec:
rules:
- host: eureka.ctnrs.com
http:
paths:
- path: /
backend:
serviceName: eureka
servicePort:
---
apiVersion: v1
kind: Service
metadata:
name: eureka
namespace: ms
spec:
clusterIP: None
ports:
- name: eureka
port:
selector:
project: ms
app: eureka
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: eureka
namespace: ms
spec:
serviceName: eureka
replicas:
selector:
matchLabels:
project: ms
app: eureka
template:
metadata:
labels:
project: ms
app: eureka
spec:
terminationGracePeriodSeconds: #当删除Pod时,等待时间
imagePullSecrets:
- name: registry-pull-secret
containers:
- name: eureka
image: 10.255.20.6/kubernetes/eureka:latest
ports:
- protocol: TCP
containerPort:
env:
- name: APP_NAME
value: "eureka"
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: APP_OPTS
value: "
--eureka.instance.hostname=${POD_NAME}.${APP_NAME}
--registerWithEureka=true
--fetchRegistry=true
--eureka.instance.preferIpAddress=false
--eureka.client.serviceUrl.defaultZone=http://eureka-0.${APP_NAME}:8888/eureka/,http://eureka-1.${APP_NAME}:8888/eureka/,http://eureka-2.${APP_NAME}:8888/eureka/
"
resources:
limits:
cpu:
memory: 1024Mi
requests:
cpu: 0.5
memory: 125Mi
readinessProbe: #就绪探针
tcpSocket:
port:
initialDelaySeconds: #延迟加载时间
periodSeconds: #重试时间间隔
timeoutSeconds: #超时时间设置
failureThreshold: #探测失败的重试次数
livenessProbe: #存活探针
tcpSocket:
port:
initialDelaySeconds: #延迟加载时间
periodSeconds: #重试时间间隔
timeoutSeconds: #超时时间设置
failureThreshold: #探测失败的重试次数
env参数说明:
APP_NAME: 和服务名称一致,将服务名称传入容器环境中。
POD_NAME: Pod名称,将 Pod 名称传入容器环境中。
APP_OPTS: Dockerfile 中定义的变量,用于设置 Spring 启动参数,这里主要设置此值与 APP_NAME 和 POD_NAME 两值配合使用
其他参数说明:
- resources: 对 Pod 使用计算资源的限制,最好两个值设置成一致,Kubernetes 中会对 Pod 设置 QoS 等级,跟这两个值的设置挂钩,limits 与 request 值一致时 Qos 等级最高,当资源不足时候 QoS 等级低的最先被杀死,等级高的一般不会受太大影响。
- readinessProbe: 就绪探针,Pod 启动时只有就绪探针探测成功后才对外提供访问,用它可用避免 Pod 启动而内部程序没有启动的情况下就允许外部流量流入这种情况。
- livenessProbe: 存活探针,定期检测 Docker 内部程序是否存活。
- spec.podManagementPolicy: pod的启动顺序策略
- OrderedReady: 顺序启停 Pod,默认设置。
- Parallel: 并行启停 Pod,而不遵循一个 Pod 启动后再启动另一个这种规则
2.部署Eureka Server到kubernetes
kubectl apply -f eureka.yaml
#如果发现部署错了,可以执行kubectl delete -f erueka.yaml,删除这个yaml部署的所有资源
3.访问Eurek UI
由于ingress配置了域名,先配置hosts,把域名解析到ingress-controller的Pod所在的NodeIP

可以随时刷新,看页面最下面的IP 是rr方式轮训到各个IP提供服务的
4.spring cloud服务注册进eureka
cat application.yaml eureka:
instance:
prefer-ip-address: true #以IP注册进eureka,不以ID注册
client:
register-with-eureka: true #注册到eureka为true
fetch-registry: true
service-url:
defaultZone: http://eureka-0.eureka.ms.svc.cluster.local:8888/eureka,http://eureka-1.eureka.ms.svc.cluster.local:8888/eureka,http://eureka-0.eureka.ms.svc.cluster.local:8888/eureka
Pod的dns记录怎么组成的
<Pod Name>.<service name>.<namespace name>.svc.cluster.local
Pod的Name怎么组成的
statefulSet控制器的Name + 序号
https://blog.csdn.net/qq_32641153/article/details/99700281 #参考的这个文档
kubernetes部署spring cloud注册中心 Eureka的更多相关文章
- spring cloud 注册中心--eureka注册与发现
本文详细介绍spring cloud微服务的默认注册中心--eureka注册与发现.开发环境需要Windows系统.jdk和intellij idea.与zookeeper注册中心相比,eureka不 ...
- Spring Cloud 注册中心Eureka
一.简介 最近在看Spring Cloud微服务,接下来的时间和大家一起分享我所看到的,公司现在用的是dubbo ,之后有时间也去了解了解dubbo的源码.与dubbo相比较,Spring Cloud ...
- JAVA Spring Cloud 注册中心 Eureka 相关配置
转载至 https://www.cnblogs.com/fangfuhai/p/7070325.html Eureka客户端配置 1.RegistryFetchIntervalSecon ...
- Spring Cloud注册中心Eureka设置访问权限并自定义鉴权页面
原文:https://blog.csdn.net/a823007573/article/details/88971496 使用Spring Security实现鉴权 1. 导入Spring Secur ...
- Spring Cloud注册中心高可用搭建
Spring Cloud的注册中心可以由Eureka.Consul.Zookeeper.ETCD等来实现,这里推荐使用Spring Cloud Eureka来实现注册中心,它基于Netfilix的Eu ...
- Spring Cloud注册中心之Consul
Consul简介 Consul是HashiCorp公司使用Golang语言开发的一中多服务解决方案工具,相比于其他服务注册中心来说,Consul的功能更为强大,丰富,其中最基本的功能包含下面几点(翻译 ...
- spring cloud - 注册中心
服务注册与发现 这里我们会用到Spring Cloud Netflix,该项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用 ...
- Spring Cloud注册中心之Zookeeper
zookeeper可以作为分布式服务的注册中心 在服务端安装zookeeper 参考:https://www.cnblogs.com/conly/p/12267506.html 创建spring bo ...
- spring cloud 服务注册中心eureka高可用集群搭建
spring cloud 服务注册中心eureka高可用集群搭建 一,准备工作 eureka可以类比zookeeper,本文用三台机器搭建集群,也就是说要启动三个eureka注册中心 1 本文三台eu ...
随机推荐
- Github实战测试情况
测试情况 很久没有熬夜测试程序了,经过测试,没有复现功能的有echo.葫芦娃.火鸡堂.那周余嘉熊掌将得队.为了交项目而干杯.修!咻咻!.云打印和追光的人.据汪老师反应在现场实践课程中大都能实现的,公平 ...
- Django简介(MVC、MTV)
Django简介 MVC Model(模型)- 应用程序中处理数据逻辑部分且与数据库交互,用于存取数据的部分 View(视图)- 用于处理后的数据界面展示,且视图通常是由模型数据创建的,是用户看到并与 ...
- Leetcode148-Sort_List
Sort_List 在LeetCode 里面,因为只有归并排序的时间复杂度为O(1),所以快速排序用不了,前面两个都没用直接看最后一个归并排序. 冒泡排序(超时了) public ListNode s ...
- .net使用IIdentity和IPrincipal实现自定义身份及权限认证【转】
1,通过继承BasePage页实现角色权限控制 context.User中保存的信息就是相关的角色与权限信息.Context.User类型为System.Security.Principal.IPri ...
- Thread笔记
Thread笔记 Thread——fork:https://www.cnblogs.com/noonjuan/diary/2019/08/03/11296217.html Thread——multip ...
- 关于gcd
内容: \(gcd(a,b)=gcd(b,a\% b)\) 用途: 这不废话嘛,当然是用来求最大公约数啊 证明:(这还是四月份的时候cdx巨佬给我讲的qwq) 设\(d=gcd(a.b)\) 则有\( ...
- X509证书 指定了无效的提供程序类型 System.Security.Cryptography.CryptographicException 错误解决方法
第一种解决办法: IIS 应用程序池--选中你网站的所配置的应用程序池--右键 选择 “高级配置” --将“加载用户配置文件” 设置为True 第二种解决办法: 在加载证书方法时使用以下方法,请注意第 ...
- 可以获取随机图片的API收集 必应 等
食用方法可以是img标签嵌入在网页中, 也可以在iwall.app里面设置你的桌面背景.还有其他好用的API吗? 请在下放留下您的评论. 非常感谢! 速度: ★★★★★ 功能: 返回Bing的随机图片 ...
- 用Java编程能给物联网(IoT)带来什么优势与不同?
用Java编程能给物联网(IoT)带来什么优势与不同? 这是一个不太容易回答的问题,也是一个适合拿出来与大家讨论的一个话题~首先需要聊聊物联网硬件与嵌入式设备有什么不同.嵌入式设备通常是一个软件一体的 ...
- ROS向节点传递参数
ROS的节点有很多中调用方式,包括rosrun,launch,直接运行等,向节点内传递参数的方式也有很多. 1. rosrun + 参数服务器传递 ros::init(argc, argv, &quo ...