在 Spring Boot 中使用 Spring Cloud Kubernetes 部署应用到 Kubernetes

news2025/1/11 7:00:12

在 Spring Boot 中使用 Spring Cloud Kubernetes 部署应用到 Kubernetes

Kubernetes 是目前最流行的容器编排平台之一,提供了一种灵活的方式来管理容器化应用程序。Spring Cloud Kubernetes 是一个基于 Spring Cloud 的项目,它提供了一种简单的方式来将 Spring Boot 应用程序部署到 Kubernetes 集群中。

本文将介绍如何在 Spring Boot 应用程序中使用 Spring Cloud Kubernetes 将应用程序部署到 Kubernetes 集群中。我们将会讨论如何在本地计算机上运行 Kubernetes 集群,如何使用 Docker 构建镜像,如何编写 Kubernetes 部署文件和服务文件,以及如何使用 Spring Cloud Kubernetes 来配置应用程序。

在这里插入图片描述

准备工作

在开始之前,我们需要确保已经安装了以下软件:

  • Docker:用于构建容器镜像。
  • Kubernetes:用于管理容器化应用程序。
  • Minikube:用于在本地计算机上运行 Kubernetes。
  • Spring Boot:用于构建 Spring Boot 应用程序。
  • Spring Cloud Kubernetes:用于将 Spring Boot 应用程序部署到 Kubernetes。

创建 Spring Boot 应用程序

首先,我们需要创建一个简单的 Spring Boot 应用程序。在本文中,我们将创建一个 RESTful Web 服务,该服务将返回当前日期和时间。

创建一个新的 Spring Boot 项目,可以使用 Spring Initializr 或者在 IntelliJ IDEA 中创建一个新的 Spring Boot 项目。在 pom.xml 文件中添加以下依赖:

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

这个依赖会自动将必要的依赖项添加到我们的项目中,包括 Spring Cloud Kubernetes 的所有核心组件。

接下来,创建一个简单的 RESTful Web 服务,返回当前日期和时间。在我们的项目中,我们将创建一个名为 DatetimeController 的类:

@RestController
public class DatetimeController {

    @GetMapping("/datetime")
    public String datetime() {
        return LocalDateTime.now().toString();
    }

}

这个控制器定义了一个名为 /datetime 的 GET 请求,返回当前的日期和时间。现在我们已经完成了 Spring Boot 应用程序的编写和构建,接下来我们将使用 Spring Cloud Kubernetes 将它部署到 Kubernetes 集群中。

部署 Spring Boot 应用程序到 Kubernetes

为了将 Spring Boot 应用程序部署到 Kubernetes,我们需要完成以下步骤:

步骤 1:创建 Docker 镜像

首先,我们需要将我们的 Spring Boot 应用程序打包成一个 Docker 镜像。在项目的根目录下创建一个名为 Dockerfile 的文件,内容如下:

FROM openjdk:11-jre-slim

WORKDIR /app

COPY target/*.jar ./app.jar

CMD ["java", "-jar", "app.jar"]

这个 Dockerfile 使用 OpenJDK 11 作为基础镜像,将应用程序的 JAR 文件复制到容器中,并定义了启动应用程序的命令。

接下来,使用以下命令构建 Docker 镜像:

docker build -t myapp:1.0.0 .

这个命令将构建一个名为 myapp 的 Docker 镜像,版本为 1.0.0

步骤 2:创建 Kubernetes 部署文件

接下来,我们需要创建一个 Kubernetes 部署文件,在 Kubernetes 中定义如何部署我们的应用程序。在项目的根目录下创建一个名为 deployment.yaml 的文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:1.0.0
        ports:
        - containerPort: 8080
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: kubernetes
        - name: SPRING_CLOUD_KUBERNETES_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        - name: SPRING_CLOUD_KUBERNETES_CONFIG_NAME
          value: myapp
        - name: SPRING_CLOUD_KUBERNETES_CONFIG_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace

这个部署文件定义了一个名为 myapp 的部署,使用上一步创建的 Docker 镜像,并将容器的端口设置为 8080。它还定义了一些环境变量,这些变量将在 Spring Cloud Kubernetes 中使用。

步骤 3:创建 Kubernetes 服务文件

最后,我们需要创建一个 Kubernetes 服务文件,用于将流量路由到我们的应用程序。在项目的根目录下创建一个名为 service.yaml 的文件,内容如下:

apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  selector:
    app: myapp
  ports:
  - name: http
    port: 80
    targetPort: 8080
  type: LoadBalancer

这个服务文件定义了一个名为 myapp 的服务,它使用应用程序的部署文件中定义的标签来选择正确的 Pod。它还将流量路由到容器的端口 8080,并将其公开为 Kubernetes 集群中的端口 80。最后,它将这个服务公开为负载均衡器类型,这意味着 Kubernetes 将自动为我们的应用程序创建一个外部 IP 地址。

步骤 4:部署应用程序

现在,我们已经准备好了所有必要的文件,可以将应用程序部署到 Kubernetes 集群中了。首先,我们需要启动 Minikube:

minikube start

这个命令将在本地计算机上启动一个 Kubernetes 集群。接下来,使用以下命令将部署文件和服务文件部署到 Kubernetes:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

这个命令将创建一个名为 myapp 的部署和服务,将我们的应用程序部署到 Kubernetes 集群中。

步骤 5:测试应用程序

现在,我们的应用程序已经部署到 Kubernetes 集群中,我们可以使用以下命令测试它:

minikube service myapp

这个命令将打开我们的应用程序在浏览器中的 URL,我们可以在其中看到应用程序返回的日期和时间。

使用 Spring Cloud Kubernetes 配置应用程序

我们已经成功地将应用程序部署到 Kubernetes 集群中,现在我们可以使用 Spring Cloud Kubernetes 来配置应用程序。SpringCloud Kubernetes 提供了一种简单的方式来读取 Kubernetes ConfigMap 和 Secret 中的配置,并将其注入到我们的 Spring Boot 应用程序中。

步骤 1:创建 ConfigMap 和 Secret

首先,我们需要创建一个 ConfigMap 和一个 Secret,用于存储应用程序的配置。在项目的根目录下创建一个名为 config.yaml 的文件,内容如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: myapp-config
data:
  application.properties: |
    server.port=8080
    message=Hello, World!

这个 ConfigMap 定义了一个名为 myapp-config 的 ConfigMap,它包含一个名为 application.properties 的键值对。这个键值对定义了一些应用程序的配置,例如服务器端口和消息。

接下来,创建一个名为 secret.yaml 的文件,内容如下:

apiVersion: v1
kind: Secret
metadata:
  name: myapp-secret
type: Opaque
data:
  username: YWRtaW4=
  password: MWYyZDFlMmU2N2Rm

这个 Secret 定义了一个名为 myapp-secret 的 Secret,它包含一个名为 username 和一个名为 password 的加密字符串。这些字符串将在应用程序中用作敏感数据,例如数据库密码。

步骤 2:使用 ConfigMap 和 Secret 配置应用程序

接下来,我们需要使用 Spring Cloud Kubernetes 将 ConfigMap 和 Secret 中的配置注入到我们的应用程序中。在我们的项目中,我们将创建一个名为 MyConfiguration 的类:

@Configuration
@ConfigurationProperties(prefix = "myapp")
public class MyConfiguration {

    private String message;

    // Getters and setters

}

这个类使用 @ConfigurationProperties 注解来将 ConfigMap 中的 myapp.message 属性注入到 message 字段中。

现在,我们需要在 application.properties 文件中添加以下配置:

spring.cloud.kubernetes.enabled=true
spring.cloud.kubernetes.config.enabled=true
spring.cloud.kubernetes.secrets.enabled=true
spring.cloud.kubernetes.config.name=myapp-config
spring.cloud.kubernetes.config.namespace=default
spring.cloud.kubernetes.secrets.name=myapp-secret
spring.cloud.kubernetes.secrets.namespace=default

这个配置告诉 Spring Cloud Kubernetes 启用 ConfigMap 和 Secret 的支持,并将应用程序的配置文件设置为 myapp-config。它还指定了我们的 Secret 的名称和命名空间。

现在,我们可以在我们的应用程序中使用 MyConfiguration 类来读取配置,例如:

@RestController
public class DatetimeController {

    private final MyConfiguration configuration;

    public DatetimeController(MyConfiguration configuration) {
        this.configuration = configuration;
    }

    @GetMapping("/datetime")
    public String datetime() {
        return configuration.getMessage() + " " + LocalDateTime.now().toString();
    }

}

这个控制器使用 MyConfiguration 类来读取 ConfigMap 中的 myapp.message 属性,并将其与当前日期和时间一起返回。

结论

在本文中,我们介绍了如何在 Spring Boot 应用程序中使用 Spring Cloud Kubernetes 将应用程序部署到 Kubernetes 集群中。我们讨论了如何在本地计算机上运行 Kubernetes 集群,如何使用 Docker 构建镜像,如何编写 Kubernetes 部署文件和服务文件,以及如何使用 Spring Cloud Kubernetes 来配置应用程序。使用这些步骤,我们可以在较短的时间内将应用程序部署到 Kubernetes 中,并使用 Spring Cloud Kubernetes 通过 ConfigMap 和 Secret 来配置应用程序。

当然,还有许多其他方面可以进一步探索,例如使用 Kubernetes 的自动扩展功能来自动扩展应用程序。但是,本文提供了一个良好的起点,帮助您开始使用 Spring Cloud Kubernetes 将应用程序部署到 Kubernetes 集群中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索可视化大屏:引领信息时代的视觉革命

可视化大屏是一种利用先进的数据可视化技术和交互技术&#xff0c;将大量的数据和信息以直观、易于理解的方式展示在大屏幕上的解决方案。可视化大屏通常由高分辨率的显示屏、强大的计算和处理设备以及专业的可视化软件组成&#xff0c;它通过图表、图形、动画等可视化元素&…

day08 Spring MVC

spring MVC相当于Servlet mvc解释:模型,视图,控制器 **使用该思想的作用:**减少耦合性,提高可维护性 Spring MVC前端控制器 方式1 1.在web.xml中配置前端控制器方式2 ​ 要是用前端控制器,必须在web.xml中配置DidpatcherServlet类 <!--前端控制器--> <servlet&g…

面试经验小结

1、为什么C有重载而C语言没有&#xff1f; C的编译过程中&#xff0c;将函数名后面的数据类型也加入到了编译阶段。 2、用异或完成两个数的数值交换。 x^y&#xff1b; y^x&#xff1b; x^y&#xff1b; 3、数组指针与指针数组&#xff1b;函数指针与指针函数 4、segment …

jdk15至17——sealed密封关键字

sealed关键字是从jdk15开始预览&#xff0c;直到jdk17成为正式版&#xff0c;可以对继承父类和实现接口进行更加细粒度的限制&#xff0c;之前的限制也只有final用于禁止继承&#xff0c;默认包权限限制在同一个包内&#xff0c;sealed密封类/接口可以明确指定哪些类可以进行继…

C# 调用Matlab打包的 DLL文件(傻瓜式操作)

1、准备Matlab代码 2. 打包 在matlab命令行窗口输入deploytool,打开MATLAB Complier,选择Library Compiler 在TYPE中选择.NET Assembly;在EXPORTED FUNCTIONS中选择要打包的文件&#xff1b;可以选择为自己打包的文件自定义NameSpace名称&#xff0c;本例中将NameSpace定义为…

Google Earth Engine(GEE):大数据林业应用

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

AcrelCloud-9500电瓶车充电桩收费平台 在苏州市某拆迁小区的应用

摘 要&#xff1a;全国各地电瓶车充电引发火灾的事故时有发生&#xff0c;对人民群众的生命财产安全造成了很大的威胁&#xff0c;本文介绍的苏州市某拆迁小区&#xff0c;是海虞镇为创建市级消防安全“331”示范社区选定的社区&#xff0c;该社区采用4G通信方式与服务器进行通…

一篇文章带你看懂5G网络(接入网+承载网+核心网)

通过这张网络简图帮助大家认识一下全网的网络架构&#xff0c;通过对全网架构的了解&#xff0c;将方便您对后面每一块网络细节的理解。 这张图分为左右两部分&#xff0c;右边为无线侧网络架构&#xff0c;左边为固定侧网络架构。 无线侧&#xff1a;手机或者集团客户通过基站…

mysql安装8.**版本

1. 下载MySQL 8.0.22 源码包: wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22.tar.gz https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22.tar.gz 2. 解压源码包: tar -zxvf mysql-8.0.22.tar.gz -C /usr/local 3. 创建用于编译的构建目录: …

LDO基本知识

本文引用TI文档 压降 压降电压 VDO 是指为实现正常稳压&#xff0c;输入电压 VIN 必须高出 所需输出电压 VOUT(nom) 的最小压差。 如果 VIN 低于此值&#xff0c;线性稳压器将以压降状态工作&#xff0c;不再调 节所需的输出电压。在这种情况下&#xff0c;输出电压 VOUT(drop…

【Docker】进入docker容器

进入已经在运行的docker容器 1、查看所有在运行的docker容器 docker ps2、进入指定的docker容器 docker attach 容器CONTAINERID docker attach 8ad850b602ff查看log docker logs -f 8ad850b602ff

普通本科机械设计毕业生,如何零基础转行数据分析?

作为本科生转行数据分析还是比较容易的&#xff0c;我们数据分析班里本科生占了一大半&#xff0c;专业也都是非计算机相关的&#xff0c;有机械、机电、会计、金融等专业的应届生&#xff0c;基本对于计算机方面接触都不算多&#xff0c;专业方面肯定都是零基础&#xff0c;会…

【案例教程】R语言在生态环境领域中的实践技术应用

R语言作为新兴的统计软件&#xff0c;以开源、自由、免费等特点风靡全球。生态环境领域研究内容广泛&#xff0c;数据常多样而复杂。利用R语言进行多元统计分析&#xff0c;从复杂的现象中发现规律、探索机制正是R的优势。为此&#xff0c;本课程以鱼类、昆虫、水文、地形等多样…

Scrapy CrawlSpider介绍和使用

一、介绍CrawlSpider CrawlSpider其实是Spider的一个子类&#xff0c;除了继承到Spider的特性和功能外&#xff0c;还派生除了其自己独有的更加强大的特性和功能。其中最显著的功能就是”LinkExtractors链接提取器“。Spider是所有爬虫的基类&#xff0c;其设计原则只是为了爬取…

【Nodejs】Node-js概述

Node.js 文章目录 Node.js一、Node.js概述1.1、介绍1.2、官网1.3、Node.js应用场景1.4、安装Node.js1.5、npm包管理器1.5.1、介绍1.5.2、切换npm源1.5.3、生成JSON配置文件1.5.4、查看当前安装的树形模块1.5.5、安装模块1.5.6、自定义脚本命令1.5.7 、自动重启应用 1.6、模块化…

机房管理技能,医疗行业必备!

机房是一个很复杂的地方&#xff0c;存放设备数量大且杂&#xff0c;再加上大量使用电&#xff0c;机房存在各种各样的隐患&#xff0c;给机房管理带来极大的难度。 因此&#xff0c;想要很好的管理机房、避免机房出现各种危险&#xff0c;就需要应用机房动环监控系统&#xff…

MT8395(Genio 1200)处理器性能参数介绍

MT8395(Genio 1200)是一款专为AI与高性能物联网应用而设计的通用型SoC&#xff0c;采用6nm制程工艺&#xff0c;已集成四核A78和四核A55的八核CPU。Genio 1200还集成Mali-G57图形处理器&#xff0c;内置独立的双核AI处理器&#xff0c;可应用于智能家电、中控设备、商业显示、工…

如何在Windows 11更新后解决C盘已满的问题?

Windows 11比Windows 10需要占用C盘更多的空间&#xff0c;在升级到Windows 11后&#xff0c;如果升级后出现问题&#xff0c;安装程序可以帮你退回到Windows 10。无论怎样&#xff0c;在升级到Windows 11后&#xff0c;系统会自动制作以前的数据的副本&#xff0c;这会占用大量…

chatgpt赋能python:Pythonshowinfo:了解Python中弹出消息框的方法以及使用场景

Python showinfo: 了解Python中弹出消息框的方法以及使用场景 Python是一种著名的编程语言&#xff0c;用来编写各种应用程序和脚本。在Python中&#xff0c;弹出消息框是一种帮助开发人员和用户更好地交互的常见方法之一。showinfo是Python中的一个函数&#xff0c;它可以用来…

chatgpt赋能python:Python与SICP:重塑编程的未来

Python与SICP&#xff1a;重塑编程的未来 介绍 随着现代生活的发展&#xff0c;计算机在我们的生活中扮演越来越重要的角色。而Python语言则成为了众多开发者使用的首选语言。作为一门高级编程语言&#xff0c;Python在开发业界广受欢迎&#xff0c;并且得到了MIT计算机科学家…