k8s部署eureka集群

author author     2023-04-19     574

关键词:

参考技术A 对于一般的后端微服务来说,在k8s中同时起多个相同的服务来做负载均衡,只需要简单的修改deployment的replicas,增加pod数量,然后通过对外暴露一个service来代理这些pod。

而对于eureka来说,要实现eureka的高可用,那就不是修改replicas这么方便了。由于部署的多个eureka之间需要将自己注册到彼此,因此要做一些特殊改动。

主要是用到了StatefulSet和headless service这两个k8s对象

StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),其应用场景包括

稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现

稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现

有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现

有序收缩,有序删除(即从N-1到0)

StatefulSet中每个Pod的DNS格式为

Headless Service 和普通service的一个显著的区别是,Headless Service的对应的每一个Endpoints,即每一个Pod,都会有对应的DNS域名
例如:我们可以用过这种域名来访问某个具体的pod:

在实际使用中,将service的clusterIP设置成None,就表明这个service是一个Headless Service。

通过 StatefulSet,我们得到了一些列pod,每个pod的name为statefulSetName-0..N-1,
加入我们创建了一个名称叫eureka的StatefulSet,并且设置replicas =3,那么部署到k8s后,k8s会为我们生成三个名称依次为eureka-0,eureka-1,eureka-2的pod。
通过Headless Service,我们可以通过pod名称来访问某个pod,

例如,我们在namespace=test的命名空间下创建了一个名称为register-server的service,并且关联了之前StatefulSet创建的pod,那么我们可以在集群内任意地方
通过eureka-0.register-server.test.svc.cluster.local这个域名访问到eureka-0这个pod。

有了前面的基础,现在部署eureka集群的方式就逐渐清晰了。

首先明确部署eureka的关键点:需要让每个eureka注册到另外的eureka上。
也就是eureka.client.serviceUrl.defaultZone这个配置,是一组eureka的地址。
通过StatefulSet,我们可以明确知道生成的每个eureka的名称,
通过Headless Service,我们又可以访问到每个eureka,所以eureka.client.serviceUrl.defaultZone的值就是

有个这个配置,那么我们部署StatefulSet,和Headless Service
那么我们能基本能得到一个可用的eureka集群
除了会有以下问题:
红框中的可用副本(available-replicas)会出现在不可用unavailable-replicas中

原因是我们默认是通过ip的方式来注册eureka(eureka.instance.prefer-ip-address配置默认为true),但是eureka的注册地址又是域名的形式,两者不一致。
要解决这个问题,还需做一些额外的配置。

1.在application.yaml中,将eureka.instance.prefer-ip-address设置成false。

2.StatefulSet.yaml中,增加环境变量配置,将pod的名称绑定到环境变量

3.在application.yaml中指定eureka的 hostname,其中MY_POD_NAME取到了第二部中绑定的当前pod名称
eureka:
instance:
hostname: $MY_POD_NAME.register-server

如上配置后,便可以得到一个eureka集群。

后面是一些配置文件:
整体文件配置:

service.yaml

StatefulSet.yaml

application.yml

bootstrap.yml

将一般的微服务注册到eureka集群中,可以通过eureka的service来访问eureka,即:将eureka.client.serviceUrl.defaultZone设置成register-server.test.svc.cluster.local,使用了k8s的service负载均衡,将服务注册到任意一个活着的eureka上,然后eureka集群内部会做同步,最终注册到eureka集群内部所有eureka上

springcloud微服务电商系统在kubernetes集群中上线详细教程(代码片段)

Kubernetes集群部署Springcloud微服务商务系统文章目录Kubernetes集群部署Springcloud微服务商务系统1.微服务架构及理论概述1.1.单体架构与微服务架构的区别1.2.微服务组件架构图1.3.微服务注册中心1.4.不同的部署环境对于程序配置文件如... 查看详情

springcloud组件:eureka高可用集群部署

高可用集群部署Eureka服务注册中心。构建项目使用idea开发工具创建一个SpringBoot项目,添加EurekaServer依赖即可,pom.xml配置文件如下所示:......<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-p 查看详情

k8s部署微服务springcloud从0-1(eureka实现)

Eureka服务搭建1.pom配置文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.a 查看详情

部署k8s集群(k8s集群搭建详细实践版)

1、部署k8s的两种方式:目前生产部署Kubernetes集群主要有两种方式:kubeadmKubeadm是一个K8s部署工具,提供kubeadminit和kubeadmjoin,用于快速部署Kubernetes集群。二进制包从github下载发行版的二进制包,手动部署每个... 查看详情

部署k8s集群(k8s集群搭建详细实践版)

1、部署k8s的两种方式:目前生产部署Kubernetes集群主要有两种方式:kubeadmKubeadm是一个K8s部署工具,提供kubeadminit和kubeadmjoin,用于快速部署Kubernetes集群。二进制包从github下载发行版的二进制包,手动部署每个... 查看详情

eureka分区集群部署(代码片段)

...a;region:地域就是物理意义上的不同地域,在服务部署时会选择在用户需求大的区域建设多个机房并部署服务,这样可以减少网络不稳定带来的问题z 查看详情

第二篇:二进制部署k8s集群进阶使用

二进制部署K8s集群进阶使用之第1节关于K8s证书二进制部署K8s集群进阶使用之第2节kubectl-陈述式资源管理二进制部署K8s集群进阶使用之第3节kubectl-声明式资源管理二进制部署K8s集群进阶使用之第4节pod控制器 查看详情

在k8s集群部署elk(代码片段)

在k8s集群部署ELK目录1准备环境使用kubeadm或者其他方式部署一套k8s集群。在k8s集群创建一个namespace:halashowkubectlcreatenshalashow2ELK部署架构3部署elasticSearch这是一个单节点部署,高可用方案我在研究研究。。。es与mysql的概念对应关... 查看详情

k8s集群架构的二进制部署——k8s集群学习的基础(代码片段)

K8S集群架构的二进制部署一、部署etcd二、部署docker引擎三、flannel网络配置四、部署master组件五、node节点部署一、部署etcdMaster上操作[root@192etcd-cert]#cd/usr/local/bin/[root@192bin]#rz-E(cfsslcfssl-certinfocfssljson)[root 查看详情

rancher三节点k8s集群部署例子

rancher三节点k8s集群部署例子待办https://rorschachchan.github.io/2019/07/25/使用Rancher2-1部署k8s/ 查看详情

微服务-netflix套件-eureka

...27052085/article/details/87798222可以深入思考一下,如果用docker部署怎么玩,服务器端对外暴露的IP和端口,producer注册到服务器端的ip和端口怎样配置。image.pngimage.png对于Eureka服务器,聊聊几行代码就实现了,底层怎么实现的呢,看如... 查看详情

k8s部署zookeeper集群

参考技术A记录Kubernetes使用StatefulSet方式部署Zookeeper集群。使用动态PVC,PVC创建过程略过Yaml文件包含configmap、service、StatefulSet。vimzookeeper-test.yaml更新资源清单查看创建的资源清单查看zookeeper配置查看集群状态Zookeeper集群部署完成... 查看详情

高可用集群篇--k8s部署微服务(代码片段)

高可用集群篇(五)--K8S部署微服务一、K8S有状态服务1.1什么是有状态服务1.2k8s部署MySQL1.2.1创建MySQL主从服务1.2.2测试主从配置1.2.3k8s部署总结(*)1.3k8s部署Redis1.4k8s部署ElasticSearch&Kibana1.4.1部署ElasticSearch1.5部署k... 查看详情

企业运维实战-k8s学习笔记17.k8s集群+prometheus监控部署基于prometheus实现k8s集群的hpa动态伸缩虚拟机部署prometheus监控(代码片段)

企业运维实战-k8s学习笔记17.k8s集群+Prometheus监控部署、基于prometheus实现k8s集群的hpa动态伸缩一、Prometheus简介二、Prometheus+k8s部署1.k8s集群部署Prometheus2.设定Prometheus监控应用nginx3.基于prometheus实现k8s集群的hpa动态伸缩三、虚... 查看详情

springcloud之eureka集群

...服务提供者+2个服务注册中心 服务注册中心 打包部署2个服务注册中心项目 部署第1个服务注册中心application.yml为server:  port: 8761spring:  app 查看详情

k8s之集群部署(二进制部署)(代码片段)

...所示1. master节点2. node节点3. etcd存储  部署master.com节点根据上图所示,master节点分为三个组件(apiserver、controller-manager、scheduler)apiserver:k8s集群的总入口,基于hppts通讯。所以要部署证书。 第一步:准备k... 查看详情

k8s多master集群二进制部署(代码片段)

k8s多Master集群二进制部署一、k8s多Master集群高可用方案1、高可用实现方案2、多Master高可用的搭建过程二、多master节点集群搭建(master02节点部署)三、负载均衡部署四、k8s的网站管理系统(DashboardUI)1、Dashboard介... 查看详情

部署k8s集群

1.Kubernetes1.1.概念 kubernetes(通常称为k8s)用于自动部署、扩展和管理容器化应用程序的开源系统。它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。支持一系列容器工具 ,包括Docker等。1.2.特点... 查看详情