IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Kubernetes(K8s)部署 SpringCloud 服务实战 -> 正文阅读

[系统运维]Kubernetes(K8s)部署 SpringCloud 服务实战

目录

1. 概述

2. 有状态应用和无状态应用?

3. 场景说明

4. 部署 SpringCloud 服务

5. 综述

6. 个人公众号


1. 概述

老话说的好:有可能性就不要放弃,要敢于尝试。

言归正传,之前我们聊了一下如何在 Kubernetes(K8s)中部署容器,今天我们来聊一下如何将 SpringCloud 的服务部署到 Kubernetes(K8s)中。

2. 有状态应用和无状态应用?

我们先来了解两个概念,有状态应用 和 无状态应用。

有状态应用:简单说就是不能简单的实现负载均衡的服务,例如:有数据产生的服务,Redis、MySql、RabbitMQ、ES等,这些服务必须通过一些较复杂的配置才能做到负载均衡。

无状态应用:就是没有数据的应用,可以简单的实现负载均衡,复制一个节点即可,例如:SpringCloud中的业务服务。

无状态的应用适合部署在?Kubernetes(K8s)中或者容器中。

有状态的应用,建议直接在物理机部署,方便管理、维护。

Eureka 服务,也属于有状态应用,因为 Eureka 服务集群需要每个节点去注册除自己之外的其他Eureka服务,配置文件有差异,因此每个节点是不一样的。

这里我们只部署一个Eureka节点,就也使用容器部署。

3. 场景说明

使用之前搭建的?Kubernetes(K8s)集群,搭建的过程可参见我之前的文章《使用国内的镜像源搭建 kubernetes(k8s)集群》(使用国内的镜像源搭建 kubernetes(k8s)集群_追风人的博客-CSDN博客)。

在 Kubernetes(K8s)集群中,搭建1个 Eureka 节点,搭建2个 Gateway 负载均衡节点,搭建2个 Eureka Client? 负载均衡节点,提供一个简单的接口。

搭建成功后,我们通过调用 Gateway 来访问 Eureka Client 的这个简单接口。

4. 部署 SpringCloud 服务

4.1 部署 Eureka 服务

4.1.1 Eureka 服务 application.yml 配置

spring:
  application:
    name: my-eureka
server:
  port: 35000
eureka:
  instance:
    hostname: my-eureka  
  client:
    register-with-eureka: false       # 是否发起服务注册
    fetch-registry: false             # 是否拉取服务注册表
  server:
    enable-self-preservation: false         # 是否开启自我保护,建议关闭,开启自我保护机制后,实例宕机也被不会剔除
    eviction-interval-timer-in-ms: 10000    # 每隔多久触发一次服务剔除,默认是60秒

4.1.2 生成 Eureka 服务的 Docker 镜像

简单起见,这里这里直接在?Kubernetes(K8s)的数据节点创建镜像,然后本地拉取,不上传到远程 Docker 仓库了。

# vi Dockerfile

FROM java:8
ADD my-eureka-0.0.1-SNAPSHOT.jar my-eureka-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","my-eureka-0.0.1-SNAPSHOT.jar"]

#?docker build -t myeureka:1.0 .

4.1.3 Eureka 服务 Deployment 部署

在?Kubernetes(K8s)Master 节点执行

#?vi eureka-deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-eureka
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-eureka
  template:
    metadata:
      labels:
        app: my-eureka
    spec:
      containers:
      - name: my-eureka
        image: myeureka:1.0

#?kubectl apply -f eureka-deployment.yml

4.1.4?Eureka 服务?Service 部署

由于需要在浏览器打开 Eureka 控制台,并且其他服务需要向 Eureka 注册,因此需要部署 Service 。

在?Kubernetes(K8s)Master 节点执行

#?vi eureka_service.yml

apiVersion: v1
kind: Service
metadata:
  name: my-eureka-svc
spec:
  type: NodePort
  selector:
    app: my-eureka
  ports:
  - protocol: TCP
    nodePort: 35000
    port: 35000
    targetPort: 35000

#?kubectl apply -f eureka_service.yml

4.2 部署 Eureka Client 服务

4.2.1 Eureka Client 服务的简单接口

@RestController
@RequestMapping("/eurekaClient")
public class EurekaClientController {

    @GetMapping("/hello")
    public String hello() {
        return "eurekaClient hello";
    }

4.2.2 Eureka Client?服务 application.yml 配置

spring:
  application:
    name: my-eureka-client
server:
  port: 36000
eureka:
  client:
    service-url:     
      defaultZone: http://my-eureka-svc:35000/eureka/
    healthcheck:
      enabled: true    # 开启健康检查, 依赖于 spring-boot-starter-actuator
  instance:
    lease-renewal-interval-in-seconds: 5      # 发出续约指令的间隔,默认30秒
    lease-expiration-duration-in-seconds: 30  # 租期到期时间,默认90秒
    instance-id: ${spring.cloud.client.ip-address}.${server.port}
    prefer-ip-address: true

注:在?Kubernetes(K8s)中,容器间可以使用 Service 中的 metadata.name + “:” + spec.ports.port 访问服务,因此 Eureka Client 服务可以使用?my-eureka-svc:35000 访问 Eureka 服务

4.2.3 生成 Eureka Client 服务的 Docker 镜像

# vi Dockerfile

FROM java:8
ADD my-eureka-client-0.0.1-SNAPSHOT.jar my-eureka-client-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","my-eureka-client-0.0.1-SNAPSHOT.jar"]

#?docker build -t myeurekaclient:1.0 .

4.2.4 Eureka Client 服务 Deployment 部署

#?vi eurekaclient-deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-eureka-client
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-eureka-client
  template:
    metadata:
      labels:
        app: my-eureka-client
    spec:
      containers:
      - name: my-eureka-client
        image: myeurekaclient:1.0

#?kubectl apply -f eurekaclient-deployment.yml

4.3 部署 Gateway 服务

4.3.1 Gateway?服务 application.yml 配置

这里用简单的路由规则,按照服务的 string.application.name 小写的形式路由

server:
  port: 44000

spring:
  application:
    name: my-gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
          lower-case-service-id: true   # service-id 是否用小写
eureka:
  client:
    service-url:
      defaultZone: http://my-eureka-svc:35000/eureka/
      healthcheck:
        enabled: true    # 开启健康检查, 依赖于 spring-boot-starter-actuator
  instance:
    lease-renewal-interval-in-seconds: 5      # 发出续约指令的间隔,默认30秒
    lease-expiration-duration-in-seconds: 30  # 租期到期时间,默认90秒
    instance-id: ${spring.cloud.client.ip-address}.${server.port}
    prefer-ip-address: true

4.3.2?生成?Gateway 服务的 Docker 镜像

#?vi Dockerfile

FROM java:8
ADD my-gateway-0.0.1-SNAPSHOT.jar my-gateway-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","my-gateway-0.0.1-SNAPSHOT.jar"]

#?docker build -t mygateway:1.0 .

4.3.3?Gateway?服务 Deployment 部署

#?vi gateway-deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-gateway
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-gateway
  template:
    metadata:
      labels:
        app: my-gateway
    spec:
      containers:
      - name: my-gateway
        image: mygateway:1.0

#?kubectl apply -f gateway-deployment.yml

4.3.4?Gateway?服务?Service 部署

#?vi gateway_service.yml

apiVersion: v1
kind: Service
metadata:
  name: my-gateway-svc
spec:
  type: NodePort
  selector:
    app: my-gateway
  ports:
  - protocol: TCP
    nodePort: 44000
    port: 44000
    targetPort: 44000

#?kubectl apply -f gateway_service.yml

??

4.4 验证

4.4.1 浏览器访问 Eureka

http://192.168.1.12:35000/

可以看到有2个 my-eureka-client 服务 和 2个 my-gateway 服务 注册到了 Eureka。

192.168.1.12 是 kubernetes(k8s)Master 节点的IP地址。

4.4.2 浏览器访问接口

http://192.168.1.12:44000/my-eureka-client/eurekaClient/hello

接口可以正常访问,代表验证成功。

5. 综述

今天聊了一下 kubernetes(k8s)集群上是如何部署SpringCloud服务的,希望可以对大家的工作有所帮助。

欢迎帮忙点赞、评论、转发、加关注 :)

关注追风人聊Java,每天更新Java干货。

6. 个人公众号

追风人聊Java,欢迎大家关注

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 17:10:50  更:2021-12-02 17:11:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:21:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码