云原生之容器编排实践-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!

目录
相关文章
|
6月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
1567 59
|
7月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
339 8
|
存储 Kubernetes 开发工具
使用ArgoCD管理Kubernetes部署指南
ArgoCD 是一款基于 Kubernetes 的声明式 GitOps 持续交付工具,通过自动同步 Git 存储库中的配置与 Kubernetes 集群状态,确保一致性与可靠性。它支持实时同步、声明式设置、自动修复和丰富的用户界面,极大简化了复杂应用的部署管理。结合 Helm Charts,ArgoCD 提供模块化、可重用的部署流程,显著减少人工开销和配置错误。对于云原生企业,ArgoCD 能优化部署策略,提升效率与安全性,是实现自动化与一致性的理想选择。
832 0
|
12月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
10月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
549 1
|
11月前
|
安全 Java API
Spring Boot 功能模块全解析:构建现代Java应用的技术图谱
Spring Boot不是一个单一的工具,而是一个由众多功能模块组成的生态系统。这些模块可以根据应用需求灵活组合,构建从简单的REST API到复杂的微服务系统,再到现代的AI驱动应用。
1396 8
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1101 33
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
693 19
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
613 12
|
存储 测试技术 对象存储
使用容器服务ACK快速部署QwQ-32B模型并实现推理智能路由
阿里云最新发布的QwQ-32B模型,通过强化学习大幅度提升了模型推理能力。QwQ-32B模型拥有320亿参数,其性能可以与DeepSeek-R1 671B媲美。

热门文章

最新文章

推荐镜像

更多