前言

服务发现原则:

  • 各个微服务在启动时,会将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息
  • 服务消费者可以从服务发现组件中查询到服务提供者的网络地址,并使用该地址来远程调用服务提供者的接口
  • 各个微服务与服务发现组件使用一定的机制(如:心跳)通信。服务发现组件长时间无法与某微服务实例通信,就会注销该实例
  • 当某个微服务网络地址发生变更(例如实例增减或IP端口发生变化等)时,会重新注册到服务发现组件

所以,使用服务发现的好处是非常多的,那么Spring Cloud提供了多种服务发现组件的支持,例如:Eureka、Consul和Zookeeper等。本文章以Eureka为例

Eureka简介

Eureka是Netflix开开源的,一个基于REST服务的服务注册发现的组件,它包含ServerClient两部分,

Eureka两组件:

  • Eureka Client:一个Java客户端,用于简化与 Eureka Server 的交互(通常就是微服务中的客户端和服务端)
  • Eureka Server:提供服务注册和发现的能力(通常就是微服务中的注册中心)

默认情况下,Eureka Server同时也是Eureka Client,多个Eureka Server实例,互相之间通过复制的方式,来实现服务注册表中数据的同步

Eureka至构建镜像

1、Eureka的dockerfile

FROM java:8-jdk-alpine
LABEL maintainer
ENV JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8 -Duser.timezone=GMT+08"
RUN apk add -U tzdata && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/eureka-service.jar ./
EXPOSE 8888
CMD java -jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=ms-eureka $JAVA_OPTS -Deureka.instance.hostname=${MY_POD_NAME}.eureka.test /eureka-service.jar

Eureka暴露端口:8888

Eureka以容器方式启动后的主机名:${MY_POD_NAME}.eureka.test,test为namespace环境名

Eureka启动参数:${JAVA_OPTS}

构建镜像并上传至harbor仓库

$ docker build ./ -t harbor.od.com/infra/eureka
$ docker push harbor.od.com/infra/eureka:v1.0.0

Eureka交付至k8s

思考

在本文中Eureka是以三节点高可用的方式交付进k8s,这里选择用 StatefulSet (有状态集)方式来部署,这样能保证它 Eureka Pod名是有序的,并且这里选择用 StatefulSet (有状态集)方式来部署,这样能保证它的 Eureka Pod 名是有序的,并且 StatefulSet 支持 Service Headless 方式创建 Service 来对内部服务访问,如果选择使用ClusterIP方式创建Service会自动分配一个虚拟IP给予Service,那服务通过Service访问Pod每次都需要经过Kube-proxy代理流量,这样就会增加与注册中心通信造成一定的消耗,Headless 方式部署的 Service 不会分配虚拟 IP,而是用轮询的访问,每次都直接与 Pod 的 IP 进行通信。

1、准备yaml文件

  • StatefulSet
$ vim /data/k8s-yaml/spring-cloud/eureka/st.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: eureka
namespace: test
spec:
replicas: 3
selector:
matchLabels:
app: eureka
serviceName: "eureka"
template:
metadata:
labels:
app: eureka
spec:
imagePullSecrets:
- name: harbor
containers:
- name: eureka
image: harbor.od.com/infra/eureka:v1.0.0
ports:
- protocol: TCP
containerPort: 8888
env:
- name: JAVA_OPTS
value: "-Xmx1g"
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
resources:
requests:
cpu: 0.5
memory: 256Mi
limits:
cpu: 1
memory: 1Gi
readinessProbe:
tcpSocket:
port: 8888
initialDelaySeconds: 60
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 8888
initialDelaySeconds: 60
periodSeconds: 10
  • Service
$ vim /data/k8s-yaml/spring-cloud/eureka/svc.yaml
apiVersion: v1
kind: Service
metadata:
name: eureka
namespace: test
spec:
clusterIP: None
ports:
- port: 8888
targetPort: 8888
name: eureka
selector:
app: eureka
  • Ingress
$ vim /data/k8s-yaml/spring-cloud/eureka/ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: eureka
namespace: test
spec:
rules:
- host: eureka.od.com
http:
paths:
- path: /
backend:
serviceName: eureka
servicePort: 8888

2、应用yaml文件

$ cd /data/k8s-yaml/spring-cloud/eureka/
$ kubectl create -f ./

3、检查eureka状态

$ kubectl get statefulset -n test
NAME READY AGE
eureka 3/3 99s

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.test:8888/eureka,http://eureka-1.eureka.test:8888/eureka,http://eureka-2.eureka.test:8888/eureka

Pod的dns记录组成:...svc.cluster.local

Pod的Name组成:statefulSet控制器的Name + 序号

5、浏览器访问Eureka管理页面

Spring Cloud服务注册中心交付至kubernetes的更多相关文章

  1. spring cloud 服务注册中心eureka高可用集群搭建

    spring cloud 服务注册中心eureka高可用集群搭建 一,准备工作 eureka可以类比zookeeper,本文用三台机器搭建集群,也就是说要启动三个eureka注册中心 1 本文三台eu ...

  2. spring Cloud服务注册中心Eureka集群

    spring Cloud服务注册中心Eureka集群配置: 在application.yml文件加以下配置: server: port: 8761 tomcat: uri-encoding: UTF- ...

  3. 孰能巧用 Spring Cloud 服务注册中心Eureka

    Eureka介绍 在Spring Cloud Netflix 整合技术栈中,Eureka既可以作为服务注册中心也可以用于服务发现对整个微服务架构起着最核心的整合作用. Eureka是基于REST(Re ...

  4. spring Cloud服务注册中心eureka

    Eureka是什么? 1.Eureka是SpringCloud Netflix的核心子模块. 2.Eureka包含Eureka Server和Eureka Client. 3.Server提供注册服务 ...

  5. Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!

    Spring Cloud 的注册中心可以由 Eureka.Consul.Zookeeper.ETCD 等来实现,这里推荐使用 Spring Cloud Eureka 来实现注册中心,它基于 Netfl ...

  6. IDEA 创建Spring cloud Eureka 注册中心

    IDEA 创建Spring cloud Eureka 注册中心 一. 首先创建一个maven project Next之后填好groupId与artifactId,Next之后填好项目名与路径,点击F ...

  7. Spring Cloud之注册中心搭建

    一.注册中心服务端搭建 1)引入相关Maven坐标 <dependency> <groupId>org.springframework.cloud</groupId> ...

  8. Spring Cloud ---- 服务注册与发现(Eureka 找到了!找到了! 嘻嘻)

    记录一下吧,为什么接触分布式.因为裸辞之后没有找到工作,好的公司都要求有分布式经验,但是我完全没有.在一次面试的时候,面试官说如果你会分布式架构的话,我可以把工资给你开高2.5,我就考虑着给我点时间, ...

  9. Spring Cloud Eureka注册中心(快速搭建)

    Spring Cloud 详解Eureka注册中心@(微服务)[java|spring-cloud|eureka] Eureka 注册中心是入门Spring Cloud微服务架构的必学组件,是学习所有 ...

随机推荐

  1. 优化器,SGD+Momentum;Adagrad;RMSProp;Adam

    Optimization 随机梯度下降(SGD): 当损失函数在一个方向很敏感在另一个方向不敏感时,会产生上面的问题,红色的点以“Z”字形梯度下降,而不是以最短距离下降:这种情况在高维空间更加普遍. ...

  2. resin部署安装

    Resin是CAUCHO公司的产品,是一个非常流行的application server,对servlet和JSP提供了良好的支持,性能也比较优良,resin自身也是采用JAVA语法开发,功能近似于t ...

  3. 2019 沈阳网络赛 Fish eating fruit

    这题看了三个月,终于过了,第一次看的时候没学树形DP,想用点分治但是不会 后来学了二次扫描,就有点想法了.... 这东西也真就玄学了吧... #include<iostream> #inc ...

  4. System类StringBuilder小结

  5. 关于 5G,我们应该了解的

    2020年元旦,我看了高通之前发布的一篇关于5G的文章,标题为“Everything You Need to Know About 5G”,主要包括5G是什么.有什么优势以及未来的前景等内容.我斗胆翻 ...

  6. 关于SAM和广义SAM

    关于SAM和广义SAM 不是教程 某些思考先记下来 SAM 终于学会了这个东西诶...... 一部分重要性质 确定一个重要事情,S构造出的SAM的一个重要性质是当且仅当对于S的任意一个后缀,可以从1号 ...

  7. 通用高效的数据修复方法:Row level repair

    导读:随着大数据的进一步发展,NoSQL 数据库系统迅速发展并得到了广泛的应用.其中,Apache Cassandra 是最广泛使用的数据库之一.对于 Cassandra 的优化是大家研究的热点,而 ...

  8. python之字符串的简单应用

    1.实现5+7加法运算 value = input(">>>") v1, v2 = value.split('+') c1 = int(v1) c2 = int( ...

  9. vim的常用指令(脑图)

    将正在编辑的文件另存新文件名   :w newfilename 在正在编辑的文件中,读取一个filename    :r filename 做了很多编辑工作,想还原成原来的文件内容   :e! 我在v ...

  10. C# 使用nuget.exe发布类库及更新类库

    前景:在开发学习阶段希望一些重复使用代码或者算法代码积累.能够在VS中下载安装方便使用. 准备工作: 1.Nuget登录账号(可 Microsoft 账号).Nuget官网 2.Nuget.exe程序 ...