前言

服务发现原则:

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

    访问对话框控件的七种方法 方法一. GetDlgItem()->GetWindowText(); GetDlgItem()->SetWindowText(); 方法二. GetDlgIte ...

  2. seajs源码学习(一)

    今天是2015年12月4日,天气较为阴冷.(习惯性记下日期和天气,总要留些回忆给以后) 学习的最佳捷径是模仿,所以如果想快速提高javascript技术,捷径就是去读大神们的优秀源码.就像我们学说话一 ...

  3. JSR-133内存模型手册

    1.介绍 JVM支持多种线程的执行,Threads代表的是线程类,位于java.lang.Thread包下,唯一的方式就是为用户在这个类下的对象创建线程,每一个线程关联着一个对象,一个线程将在star ...

  4. DOCKER学习_005:Flannel网络配置

    一 简介 Flannel是一种基于overlay网络的跨主机容器网络解决方案,也就是将TCP数据包封装在另一种网络包里面进行路由转发和通信, Flannel是CoreOS开发,专门用于docker多机 ...

  5. 看完这篇HTTP,跟面试官扯皮就没问题了

    我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟.醍醐灌顶的感觉. 最初在有 ...

  6. Java框架之Spring01-IOC-bean配置-文件引入-注解装配

    Spring 框架,即framework.是对特定应用领域中的应用系统的部分设计和实现的整体结构.就相当于让别人帮你完成一些基础工作,它可以处理系统很多细节问题,而且框架一般是成熟,稳健的. Spri ...

  7. Java 用链表实现栈和队列

    栈 是一种基于后进先出(LIFO)策略的集合类型.当邮件在桌上放成一叠时,就能用栈来表示.新邮件会放在最上面,当你要看邮件时,会一封一封从上到下阅读.栈的顶部称为栈顶,所有操作都在栈顶完成. 前面提到 ...

  8. RSA 的加密 解密

    RSA加密解密类: package me.hao0.trace.order; import java.io.BufferedReader; import java.io.BufferedWriter; ...

  9. Java故障定位方法总结

    多线程并发,程序执行速度较快,使用简单断点不能够定位到出错的线程: 通过打印日志,不断精确定位故障的位置和导致故障的原因. 在断点处设置condition为Thread.currentThread() ...

  10. MVEL2.0的使用实例(一)

    本文是对java整合mvel2.0的一点示例: 如果表达式中有变量,解析表达式时必须传一个map MVEL.eval(expression, vars); /** * 基本解析表达式 */@Testp ...