前言

服务发现原则:

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

    #基于Python2.7 #若是想Python做到和C++中while(scanf()!=EOF)一样的多组输入效果,可以如实例所示书写 #实例实现了多组输入,计算A+B+C并输出的任务 while ...

  2. Google 浏览器设置打开超链接到新窗口标签页

    一.windows  按住Ctrl + 鼠标点击,在新窗口打开,停留在当前页面: 按住Ctrl + Shift + 鼠标点击,在新窗口打开,停留在新窗口: 登录Google账号,管理Google账号, ...

  3. Excel数据处理

    合并计算: 数据面板下的合并计算 然后设置好合并计算的区域 以及勾选 首行跟最左列

  4. MindManager使用技巧

    任务窗格在右下角. 1.条件的设置与编辑 2.优先级视图 不是优先级图标  3.圆圈图 4.洋葱图的使用 右键选择背景再选择解锁所有背景就可以对所有圆形进行调整了 点图形边缘出现十字架可以进行移动 5 ...

  5. 一次面试题,将 字符串 保存在 Byte 数组中

    最近在面试,遇到一个面试题 字符串 String str = "AD428C93DE" 编程实现把 str 的内容放到 Byte[6] b 的数组中,存入后并能恢复原来的字符串. ...

  6. 0008 CSS初识(行内式、内部样式表、外部样式表)

    typora-copy-images-to: media 第01阶段.前端基础.CSS初识 CSS层叠样式表 学习目标 理解 css的目的作用 css的三种引入方式 应用 css三种引用方式的书写 通 ...

  7. 【退役记】CSP2019 退役记

    Day -1 机房自习,因为一些奇怪原因心不在焉 我可能太在意csp了 晚上有点扛不住去七楼阳台思考人生,得到了一些惊人的结论想下来由于某种原因继续跑到七楼思考人生 然后晚自习下课仰天大笑出门去,我辈 ...

  8. Django常用字段及参数、事务、数据库查询优化

    常用字段 注意: Django中没有设置对应char类型的字段,但可以支持自己定义. 自定义对应于数据库的char类型字段: from django.db.models import Field cl ...

  9. java8中的stream流遍历

    比较for循环.迭代器.java8Stream流遍历的不同 package cnom.test.testUtils; import java.io.Serializable; import java. ...

  10. 《图解机器学习-杉山将著》读书笔记---CH5

    CH5 稀疏学习 重点提炼 提出稀疏学习的缘故: 虽然带有约束条件的最小二乘学习法结合交叉验证法,在实际应用中是非常有效的回归方法,但是,当参数特别多时,计算参数以及预测值需要大量时间.此时,我们要解 ...