云原生之容器编排实践-SpringBoot应用以Deployment方式部署到minikube以及弹性伸缩

简介: 云原生之容器编排实践-SpringBoot应用以Deployment方式部署到minikube以及弹性伸缩

G50XKKJAH3S9E4SW@Q~4YPY.png

背景


在实际生产环境下,我们更多的是使用 yaml 描述文件来启动一个 Pod ,并设置 kind 属性值为 Deployment 类型。


Deployment


使用 Deployment 来部署应用,重点关注其可以实现应用服务的动态扩缩容。

需要注意的是:应用本身需要支持水平伸缩。 Kubernetes 并不会让你的应用变得可扩展,它只是让应用的扩缩容变得简单。


yaml


[root@k8s0 ~]# vi cloud-native-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  # 部署名字
  name: cloud-native
spec:
  replicas: 2
  # 用来查找关联的Pod,所有标签都匹配才可以
  selector:
    matchLabels:
      app: cloud-native
  # 定义 Pod 相关数据
  template:
    metadata:
      labels:
        app: cloud-native
    spec:
      # 定义容器,可以多个
      containers:
        - name: cloud-native # 容器名字
          image: registry.cn-hangzhou.aliyuncs.com/container-repo/docker-hub:0.0.1-SNAPSHOT
      imagePullSecrets:
        - name: aliyunregistry
# 通过yaml描述文件启动deployment
[root@k8s0 ~]# kubectl apply -f cloud-native-deployment.yaml 
deployment.apps/cloud-native created

查看Kubernetes资源


通过 yaml 描述文件启动 Deployment 之后,我们可以通过 kubectl get pods , kubectl get deployment 以及 kubectl get all 来观察所发生的变化:根据我们的 yaml 配置,会启动两个副本的服务实例。


[root@k8s0 ~]# kubectl get pods
NAME                              READY   STATUS    RESTARTS      AGE
cloud-native                      1/1     Running   0             48m
cloud-native-684d4d8485-c2zgz     1/1     Running   0             4s
cloud-native-684d4d8485-f7qzm     1/1     Running   0             4s
hello-minikube-58647b77b8-srpbq   1/1     Running   6 (74m ago)   30d
[root@k8s0 ~]# kubectl get deployment
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
cloud-native     2/2     2            2           18s
hello-minikube   1/1     1            1           30d
# 查看所有Kubernetes资源
[root@k8s0 ~]# kubectl get all

弹性伸缩


可通过 kubectl scale 命令的 --replicas 参数来实现 Pod 副本数的弹性伸缩。需要注意的是,伸缩过程并不是一蹴而就的。我们并不是告诉 Kubernetes 需要采取什么行动,也没有告诉 Kubernetes 增加3个 Pod ,只设置新的期望的实例数量并让 Kubernetes 决定需要采取哪些操作来实现期望的状态。这是 Kubernetes 基本的原则之一。不是告诉 Kubernetes 应该执行什么操作,而是声明性地改变系统的期望状态,并让 Kubernetes 检查当前的状态是否与期望的状态一致。在整个 Kubernetes 的世界中都是这样的。当指定副本数为5时,那么最终调整得到的结果便是5个副本,不多也不少。


[root@k8s0 ~]# kubectl scale deployment cloud-native --replicas=5
[root@k8s0 ~]# kubectl get pod
NAME                              READY   STATUS    RESTARTS      AGE
cloud-native                      1/1     Running   0             62m
cloud-native-684d4d8485-c2zgz     1/1     Running   0             14m
cloud-native-684d4d8485-f7qzm     1/1     Running   0             14m
cloud-native-684d4d8485-rsbg7     1/1     Running   0             5s
cloud-native-684d4d8485-s9lkj     1/1     Running   0             5s
cloud-native-684d4d8485-skmtk     1/1     Running   0             5s
hello-minikube-58647b77b8-srpbq   1/1     Running   6 (88m ago)   30d

由于一开始我们的副本数配置是2,当指定副本数为5时,我们看到现在的 Pod 列表中 cloud-native 有3个新增的副本:即Age为5s的那3个。


查看Deployment详情


可通过 kubectl describe 命令查看 Pod 的详细信息,不过其输出内容过长,这里省略了。此外,可通过 kubectl exec 类似于 Docker 的命令进入到 Pod 内部,进行一系列的操作。


[root@k8s0 ~]# kubectl describe pod cloud-native-684d4d8485-rsbg7
[root@k8s0 ~]# kubectl exec -it cloud-native-684d4d8485-rsbg7 -- sh

回滚历史版本


时空穿梭,救火专用。


[root@k8s0 ~]# kubectl rollout history deployment cloud-native
deployment.apps/cloud-native 
REVISION  CHANGE-CAUSE
1         <none>

删除Deployment


[root@k8s0 ~]# kubectl delete deployment cloud-native
deployment.apps "cloud-native" deleted
[root@k8s0 ~]# kubectl get pod
NAME                              READY   STATUS    RESTARTS      AGE
cloud-native                      1/1     Running   0             64m
hello-minikube-58647b77b8-srpbq   1/1     Running   6 (90m ago)   30d
可以看到名为 cloud-native 的 Deployment 已被删除,需要注意的是上面还剩下一个名为 cloud-native 的 Pod ,这是我们上一篇中以 kind: Pod 方式启动的,所以删除 Deployment 并不会删除这个 Pod 。


Dashboard


EFFZ9Z`)MQNS4U]%X7D(4Q0.png


其实,除了前面通过命令行查看已经运行的 Deployment 以及 Pod 信息,我们还可以通过 Kubernetes 为我们提供的 Dashboard 以可视化的方式观测我们运行的 Kubernetes 资源信息。访问 Dashboard 具体操作方式可参考:云原生之容器编排实践-在CentOS7上安装minikube


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

目录
相关文章
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
689 59
|
9月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
772 2
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
1327 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
795 1
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
1682 8
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
450 0
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
477 5
|
Kubernetes Cloud Native Docker
云原生之旅:从容器化到微服务
本文将带领读者踏上云原生的旅程,深入探讨容器化和微服务架构的概念、优势以及它们如何共同推动现代软件的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务应用,并解释相关的配置和操作。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供有价值的见解和实操指南。
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
678 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
11月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
898 15