K8S+Rancher2 部署springcloud

方案一:spring-cloud-starter-kubernetes

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-kubernetes</artifactId>
</dependency>

使用此依赖后可以弃用eureka、nacos等原有的服务注册中心,使用K8S原生的服务发现(etcd)

方案一:

k8s服务

注册中心:eureka

配置中心:

网关:zuul

其他业务微服务:

注册中心固定主机ip+端口:其他微服务要配置注册中心的IP+端口,所以需要注册中心有固定主机ip+端口,不能经常变化。各节点配置文件不同:eureka各个节点也需要相互注册,所以每个节点的spring配置文件各不相同。

1、注册中心需要固定的IP和端口,供其他服务注册。可以使用k8s的HostPort网络模式,内外部都可使用<pod宿主机ip>:hostport直接访问。

2、需要固定的IP相当于需要固定的宿主机,所以在rancher创建eureka服务(s)时要配置主机调度策略,这样即使eureka服务的pod重新部署时也不会随机分派到集群里的其他主机上,导致注册中心变更ip,所有业务服务都要修改eureka地址。

3、注册中心最好分配到不同服务器上运行,形成高可用。所以推荐为每一个eureka节点在rancher单独创建一个服务,例如:eureka1、eureka2。

eureka1-rancher配置:主机调度:主机1;环境变量 spring.cloud.profile=eureka1;

eureka2-rancher配置:主机调度:主机2;环境变量 spring.cloud.profile=eureka2;

rancher启动两个eureka服务,每个服务中配置只有一个pod运行。这两个eureka会在分别固定在主机1、主机2启动,分别读取不同的spring配置文件,可以实现相互注册达到高可用。

网关服务:要配置在nginx中做负载均衡,所以也需要固定主机IP端口。

1、HostPort网络模式:与上边的注册中心rancher配置同理,通过配置主机调度规则,k8s服务与主机一对一绑定,每个k8s网关服务中只有一个Pod。

或者只创建一个k8s服务,通过主机调度lable限制部署的服务器,有几台服务器就配置几个pod,这样pod会在每个服务器上启动一个。

2、NodePort网络模式:网关只创建一个k8s服务,为此服务增加pod进行网关集群扩容。Nginx内可配置任意一个或多个网关宿主机的 NodeIp:NodePort。由K8S自己实现负载均衡。使用此模式部署网关时,最好在node上加lable标签,在k8s网关服务配置时加入主机调度 lable=的限制,限制网关部署服务器node的范围。

在这里插入图片描述

其他业务微服务:一般业务服务特点:不需要固定IP端口(服务发现由eureka负责),各节点配置文件相同、环境变量相同。K8S-Service 使用Deployment类型管理POD。

注意:确认微服务注册到注册中心中暴露的 ip:port,各个微服务之间是否可以在K8S环境中的各Node上调用通。HostPort、NodePort模式映射的主机Node端口不同。

推荐Rancher将k8s服务配置为NodePort网络模式,方便pod扩容缩容(HostPort网络模式扩容时一个宿主机只能部署一个pod,NodePort模式不存在此问题)。可以通过配置主机调度+lable,控制当前k8s服务部署服务器node的范围。

注意:

1.springCloud 注册中心客户端配置必须按照以下方式写,否则会因为容器注册的ip是一个随机字符串而无法访问。k8s容器内部应用向eruaka注册ip问题

    spring.application.name=xxxx  注意项目配置应用名以方便网关中以serviceID转发

    eureka.instance.prefer-ip-address=true

    eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${spring.application.name}:${server.port}:@project.version@

    spring.cloud.client.ipAddress为IP

    @project.version@为jar包版本

    例如 10.42.213.34:spring-boot-service-b:7008:0.0.1-SNAPSHOT

  2.注册中心eureka必须固定IP地址/域名,固定端口配置,不可使用docker随机内部IP

  3.网关zuul作为唯一入口必须以域名或者固定IP,不可使用docker内部随机IP

  4.在rancher上创建服务时刻选择调度规则,指定主机或者让rancher自动为我们选择合适的主机(创建eureka和zuul时要指定主机,其余业务服务选择让系统自动选择合适的主机)

  5.使用docker官方register不安全访问(http)方式时要在所有节点docker仓库中添加仓库并重启docker,否则

    在/etc/docker/daemon.json中加入 "insecure-registries" : ["192.168.10.17:5000"]"
    {
      "registry-mirrors": ["http://hub-mirror.c.163.com"],
      "insecure-registries" : ["192.168.10.17:5000"]
    }

  6.使用docker-registry-ui查看registry需要在registry中配置跨域访问,详见上面registry安装

  7.最好将rancher的数据挂载到主机上,防止删除rancher中pod数据丢失

       8.时差问题 springboot启动后时间与真实时间差8小时。时区​时区需要更改为CST。

          解决方法1:设置环境变量,键位Timezone/TZ 值为Asia/Shanghai

在这里插入图片描述

         解决方法2:dockerFile环境变量设置时区,

                             dockerFile中 java -jar启动命令增加-Duser.timezone=GMT+08。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值