基于Kubernetes部署Spark:spark on kubernetes

news2024/12/23 18:34:00

什么是spark?

spark是一种基于内存的快速、通用、可扩展的的数据分析计算引擎。

Hadoop、Hive、Spark是什么关系?

大数据技术生态中,Hadoop、Hive、Spark是什么关系?| 通俗易懂科普向_哔哩哔哩_bilibili

Hadoop 与 HDFS (Hadoop Distributed File System):

    • Hadoop 是一个用于处理大数据的开源框架,而HDFS是Hadoop的一个重要组成部分,它是一个分布式文件系统,用于存储大量的数据。
    • HDFS 负责将数据分布在集群中的多个节点上,并提供一个统一的接口,使得这些数据看起来像是存储在一个地方。

MapReduce 与 Hadoop:

    • MapReduce 是Hadoop的一个核心组件,它提供了一个编写并行处理应用的框架。
    • 开发者可以使用MapReduce API将任务分解成Map(映射)和Reduce(归约)两个阶段,从而实现并行处理。

Hive 与 SQL:

    • Hive 是一个构建在Hadoop之上的数据仓库工具,它允许用户使用SQL-like语言(HiveQL)来处理存储在Hadoop中的大规模数据集。
    • Hive 提供了更高的抽象层次,简化了数据分析工作,降低了编写复杂MapReduce程序的难度。

Spark 与 Hadoop:

    • Spark 是另一个用于大数据处理的框架,它可以独立运行或运行在Hadoop之上。
    • Spark 与 MapReduce 不同之处在于它提供了内存计算能力,这意味着Spark可以在内存中缓存数据,从而加快数据处理速度。
    • Spark 还提供了多种高级库,如Spark SQL、Spark Streaming、MLlib 和 GraphX,分别用于SQL查询、流式数据处理、机器学习和图计算。

Hadoop 主要用于分布式存储和计算,而Hive和Spark则是建立在其上的更高层次的工具,旨在提高开发者的生产力并优化数据处理性能。这些技术共同构成了大数据生态系统的重要部分,帮助管理和分析海量数据。选择哪种技术取决于具体的应用需求、数据规模以及对处理速度的要求。

Spark基于Kubernetes部署优势

Spark是新一代分布式内存计算框架,Apache开源的顶级项目。相比于Hadoop Map-Reduce计算框架,Spark将中间计算结果保留在内存中,速度提升10~100倍;同时它还提供更丰富的算子,采用弹性分布式数据集(RDD)实现迭代计算,更好地适用于数据挖掘、机器学习算法,极大提升开发效率。

相比于在物理机上部署,在Kubernetes集群上部署Spark集群,具有以下优势:

快速部署:安装1000台级别的Spark集群,在Kubernetes集群上只需设定worker副本数目replicas=1000,即可一键部署。

快速升级:升级Spark版本,只需替换Spark镜像,一键升级。

弹性伸缩:需要扩容、缩容时,自动修改worker副本数目replicas即可。

高一致性:各个Kubernetes节点上运行的Spark环境一致、版本一致。

高可用性:如果Spark所在的某些node或pod死掉,Kubernetes会自动将计算任务,转移到其他nod或创建新pod。

强隔离性:通过设定资源配额等方式,可与Web、大数据应用部署在同一集群,提升机器资源使用效率,从而降低服务器成本。

spark-standalone框架

Client:客户端进程,负责提交作业到Master。

Master:Standalone模式中主节点,负责接收Cient提交的作业管理Worker,并命令Worker启动Driver和Executor。

Worker:Standalone模式中slave节点上的守护进程,负责管理本节点的资源,定期向Master汇报心跳,接收Master的命令,启动Driver和Executor。

Driver:一个Spark作业运行时包括一个Driver进程,也是作业的主进程,负责作业的解析、生成Stage并调度Task到Executor上,包括DAGScheduler,TaskScheduler。

Spark提交任务的两种模式

  1. 客户端模式 (Client Mode):
  • 在客户端模式下,提交 Spark 应用程序时,驱动程序会在提交任务的客户端机器上运行。
  • 驱动程序不会作为集群的一部分运行,而是从客户端接收指令,并且客户端需要保持活动状态直到整个 Spark 应用程序执行完毕。
  1. 集群模式 (Cluster Mode):
  • 在集群模式下,驱动程序将被部署到集群中的一个工作节点上运行。
  • 驱动程序成为集群的一部分,并且不再依赖于提交任务的客户端机器。集群模式下,客户端提交完任务后就可以退出,而无需保持连接。

当使用 spark-submit 命令提交 Spark 应用程序时,可以通过添加 --deploy-mode 参数来指定提交模式。例如:

  • 使用客户端模式:spark-submit --deploy-mode client
  • 使用集群模式:spark-submit --deploy-mode cluster

spark on k8s 的两种方式

1.Standalone on Kubernetes部署

spark以pod的形式运行在k8s里。

2.Spark 的原生 Kubernetes 调度

k8s只作为调度器和容器运行时,spark-submit命令执行后k8s调度pod执行计算,执行完pod自动释放

在 Kubernetes 上运行 Spark - Spark 3.5.1 文档 - Spark 中文 (apache.ac.cn)

Standalone on Kubernetes部署

Spark Standalone 集群中有Master和Worker两种角色,基于Kubernetes进行部署,即将两种对象以pod的方式部署到Kubernetes集群中,Master和Worker所需要的资源由Kubernetes集群提供。

构建镜像

Spark官方没有提供Spark的容器镜像,需要自己构建,构建Spark镜像的步骤如下:

1.下载Spark安装包

mkdir -p /root/spark && cd spark
wget https://mirrors.huaweicloud.com/apache/spark/spark-3.3.1/spark-3.3.1-bin-hadoop3.tgz
wget https://mirrors.huaweicloud.com/apache/hadoop/core/hadoop-3.1.4/hadoop-3.1.4.tar.gz
[root@master spark]# ls
hadoop-3.1.4.tar.gz  spark-3.3.1-bin-hadoop3.tgz

2.编写DockerFile

vim Dockerfile

FROM openjdk:8u151

ENV hadoop_version 3.1.4
ENV spark_version 3.3.1

ADD hadoop-3.1.4.tar.gz /opt
ADD spark-3.3.1-bin-hadoop3.tgz /opt

RUN mv /opt/hadoop-3.1.4 /opt/hadoop && mv /opt/spark-3.3.1-bin-hadoop3 /opt/spark && \
    echo HADOOP ${hadoop_version} installed in /opt/hadoop && \
    echo Spark ${spark_version} installed in /opt/spark

ENV SPARK_HOME=/opt/spark
ENV PATH=$PATH:$SPARK_HOME/bin
ENV HADOOP_HOME=/opt/hadoop
ENV PATH=$PATH:$HADOOP_HOME/bin
ENV LD_LIBRARY_PATH=$HADOOP_HOME/lib/native

ADD start-common.sh start-worker start-master /
ADD spark-defaults.conf /opt/spark/conf/spark-defaults.conf

ENV PATH $PATH:/opt/spark/bin
ENV SPARK_WORKER_MEMORY=1024m
ENV SPARK_WORKER_CORES=2

3.上传Dockerfile构建需要的文件

vim start-common.sh

#!/bin/sh
unset SPARK_MASTER_PORT
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/hadoop/lib/native

vim start-master

#!/bin/sh
. /start-common.sh
echo "$(hostname -i) spark-master" >> /etc/hosts
/opt/spark/bin/spark-class org.apache.spark.deploy.master.Master --ip spark-master --port 7077 --webui-port 8080

vim start-worker

#!/bin/sh
. /start-common.sh

if ! getent hosts spark-master; then
  echo "=== Cannot resolve the DNS entry for spark-master. Has the service been created yet, and is SkyDNS functional?"
  echo "=== See http://kubernetes.io/v1.1/docs/admin/dns.html for more details on DNS integration."
  echo "=== Sleeping 10s before pod exit."
  sleep 10
  exit 0
fi

/opt/spark/bin/spark-class org.apache.spark.deploy.worker.Worker spark://spark-master:7077 --webui-port 8081

vim spark-defaults.conf

spark.master                            spark://spark-master:7077
spark.driver.extraLibraryPath           /opt/hadoop/lib/native
#spark.driver.extraClassPath             /opt/spark/jars/hadoop-aws-2.8.2.jar:/opt/spark/jars/aws-java-sdk-1.11.712.jar
#spark.hadoop.fs.s3a.impl                org.apache.hadoop.fs.s3a.S3AFileSystem
#spark.fs.s3a.connection.ssl.enabled     false
#spark.executor.extraJavaOptions         -Dcom.amazonaws.sdk.disableCertChecking=1
spark.app.id                            KubernetesSpark
spark.executor.memory 512m
spark.executor.cores 1

添加权限

chmod +x ./start-common.sh  ./start-master ./start-worker

4.构建Spark容器镜像

执行如下命令,构建Spark容器镜像:

#构建spark 容器镜像
[root@master spark]# docker build -t myspark:v1 .


#查看spark 容器镜像
[root@master spark]# docker images
[root@master spark-standalone-deployment]# docker images
REPOSITORY                                           TAG       IMAGE ID       CREATED         SIZE
myspark                                              v1        fabd9ffaef9f   3 hours ago     3.12GB

5.将镜像上传到 harbor

后续基于Kubernetes部署Spark standalone集群时需要使用该spark容器镜像,需要从harbor私有镜像仓库进行拉取,这里我们将myspark:v1镜像上传至Harbor私有镜像仓库,步骤如下:

#给当前镜像打标签
[root@master spark]# docker tag myspark:v1 192.168.86.218:8080/library/spark:v1

#上传到harbor
[root@master spark]# docker push 192.168.86.218:8080/library/spark:v1

登录harbor观察对应的镜像是否上传成功,通过webui观察,上传已经成功。

配置containerd源(每个节点都要):

vim /etc/containerd/config.toml
  [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.86.218:8080".tls]
          insecure_skip_verify = true
  [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.86.218:8080".auth]
          username = "admin"
          password = "xxxxxxx"
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.86.218:8080"]
          endpoint = ["http://192.168.86.218:8080"]
yaml资源清单文件

创建/root/spark-standalone-deployment目录:

[root@master ~]# mkdir -p /root/spark-standalone-deployment
[root@master ~]# cd /root/spark-standalone-deployment/

在该目录中创建如下yaml资源清单文件:

spark-master-controller.yaml:

kind: ReplicationController
apiVersion: v1
metadata:
  name: spark-master-controller
spec:
  replicas: 1
  selector:
    component: spark-master
  template:
    metadata:
      labels:
        component: spark-master
    spec:
      hostname: spark-master-hostname
      subdomain: spark-master-nodeport
      containers:
        - name: spark-master
          image: 192.168.86.218:8080/library/spark:v1
          imagePullPolicy: Always
          command: ["/start-master"]
          ports:
            - containerPort: 7077
            - containerPort: 8080
          resources:
            requests:
              cpu: 100m

spark-master-service.yaml:

kind: Service
apiVersion: v1
metadata:
  name: spark-master-nodeport
spec:
  ports:
  - name: rest
    port: 8080
    targetPort: 8080
    nodePort: 30080
  - name: submit
    port: 7077
    targetPort: 7077
    nodePort: 30077
  type: NodePort
  selector:
    component: spark-master
---
kind: Service
apiVersion: v1
metadata:
  name: spark-master
spec:
  ports:
    - port: 7077
      name: spark
    - port: 8080
      name: http
  selector:
    component: spark-master

spark-worker-controller.yaml:

kind: ReplicationController
apiVersion: v1
metadata:
  name: spark-worker-controller
spec:
  replicas: 2
  selector:
    component: spark-worker
  template:
    metadata:
      labels:
        component: spark-worker
    spec:
      containers:
        - name: spark-worker
          image: 192.168.86.218:8080/library/spark:v1
          imagePullPolicy: Always
          command: ["/start-worker"]
          ports:
            - containerPort: 8081
          resources:
            requests:
              cpu: 100m
部署yaml资源清单文件

通过以下命令进行部署以上yaml资源清单文件:

#部署yaml资源清单文件
[root@master spark-standalone-deployment]# kubectl create -f .
[root@master spark-standalone-deployment]# kubectl get pod
NAME                            READY   STATUS             RESTARTS      AGE
spark-master-controller-rv4bw   1/1     Running            0             23m
spark-worker-controller-n82r8   1/1     Running            0             12m
spark-worker-controller-wmlxw   1/1     Running            0             23m
[root@master spark-standalone-deployment]# kubectl get svc
NAME                    TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                         AGE
kubernetes              ClusterIP   10.68.0.1      <none>        443/TCP                         28h
spark-master            ClusterIP   10.68.33.230   <none>        7077/TCP,8080/TCP               24m
spark-master-nodeport   NodePort    10.68.84.103   <none>        8080:30080/TCP,7077:30077/TCP   24m

访问spark:IP:30080

验证spark是否正常运行:

#进入容器,执行spark shell
[root@master ~]# kubectl exec -it spark-master-controller-rv4bw -- bash
root@spark-master-hostname:/#  /opt/spark/bin/spark-shell
... 
#编程scala代码进行测试
scala> val rdd = sc.makeRDD(List("hello k8s","hello k8s","hello spark"))
rdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[0] at makeRDD at <console>:23

scala> rdd.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect()
res0: Array[(String, Int)] = Array((spark,1), (k8s,2), (hello,3))
 ...

Spark 的原生 Kubernetes 调度部署

参考文档:在 Kubernetes 上运行 Spark - Spark 3.5.1 文档 - Spark 中文 (apache.ac.cn)

spark-submit 可以直接用于将 Spark 应用程序提交到 Kubernetes 集群。提交机制的工作原理如下

  • Spark 创建一个在 Kubernetes Pod 中运行的 Spark 驱动程序。
  • 驱动程序创建执行器,它们也运行在 Kubernetes Pod 中,并连接到它们,并执行应用程序代码。
  • 当应用程序完成时,执行器 Pod 会终止并被清理,但驱动程序 Pod 会保留日志并保持在 Kubernetes API 中的“已完成”状态,直到它最终被垃圾回收或手动清理。

使用spark官方的脚本构建镜像并上传镜像到harbor

mkdir -p /opt/software
tar -xzvf spark-3.3.1-bin-hadoop3.tgz -C /opt/software
cd /opt/software/spark-3.3.1-bin-hadoop3/bin/
./docker-image-tool.sh -r 192.168.86.218:8080/library -t v2 build
docker login 192.168.86.218:8080 -uadmin -pAbc@1234
docker push 192.168.86.218:8080/library/spark:v2

后续基于Kubernetes提交Spark任务时需要指定用户,Kubernetes是基于角色进行授权,所以这里创建对应的serviceaccount,然后给serviceaccount进行角色赋权。

#创建命名空间
[root@master ~]# kubectl create ns spark
namespace/spark created

#创建serviceaccount
[root@master ~]# kubectl create serviceaccount spark -n spark
serviceaccount/spark created

#给serviceaccount进行角色赋权
[root@master ~]# kubectl create clusterrolebinding spark-role --clusterrole=edit --serviceaccount=spark:spark
clusterrolebinding.rbac.authorization.k8s.io/spark-role created

提交任务需要在节点上有Spark安装包,使用spark-submit命令进行任务提交。

cd /opt/software/spark-3.3.1-bin-hadoop3/bin/
[root@master ~]# cd /software/spark-3.3.1-bin-hadoop3/bin/
./spark-submit \
 --master k8s://https://192.168.86.206:6443 \
 --deploy-mode client \
 --name spark-pi \
 --class org.apache.spark.examples.SparkPi \
 --conf spark.kubernetes.namespace=spark \
 --conf spark.executor.instances=2 \
 --conf spark.kubernetes.container.image=192.168.86.218:8080/library/spark:v2 \
 --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
 --conf spark.driver.host=192.168.86.206 \
 /opt/software/spark-3.3.1-bin-hadoop3/examples/jars/spark-examples_2.12-3.3.1.jar

开启另外一个终端,可以查看到启动了两个pod,任务执行完后pod自动消失。

kubectl get all -n spark
spark         spark-pi-cf4e8c91e429aa9a-exec-1             1/1     Running   0             30s
spark         spark-pi-cf4e8c91e429aa9a-exec-2             1/1     Running   0             29s

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

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

相关文章

【腾讯云】AI驱动TDSQL-C Serveress 数据库技术实战营-如何是从0到1体验电商可视化分析小助手得统计功能,一句话就能输出目标统计图

欢迎来到《小5讲堂》 这是《腾讯云》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景效果图流程图创建数据库基本信息数据库配置设置密码控制台开启…

腾讯联合多所高校出品!AI游戏生成模型 GameGen-O 轻松生成高质量游戏元素

最近&#xff0c;香港和中国的几所大学与腾讯联合研发了一个名为 GameGen-O 的 AI 模型&#xff0c;专门用于创建开放世界视频游戏的模拟。 GameGen-O 的功能不仅仅限于生成高质量的游戏内容&#xff0c;它还模拟了多种游戏引擎的特性&#xff0c;能够创造出丰富多样的游戏元素…

字符分类函数和字符串函数

Hello~,欢迎大家来到我的博客进行学习&#xff01; 目录 1.字符分类函数&#x1f618;1.1解释以及使用&#x1f92f;1.2将字符分类函数组合使用&#x1f47b;2 .字符转换函数&#x1f9d0; 1.字符分类函数&#x1f618; 1.1解释以及使用&#x1f92f; 在键盘上敲的字符有许多…

揭秘高效日志管理:解锁数据宝藏,驱动业务精准决策

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

duckdb 连接postgres 和 jdbc 的使用

why&#xff1f; 主要是特别快 嵌入式&#xff0c;不需要服务器&#xff0c;使用超级方便 扩展机制灵活&#xff0c;可以直接读取CSV、JSON、Parquet等文件 Parquet文件格式详解&#xff08;含行、列式存储区别&#xff09;_parquet格式-CSDN博客 采用列式存储&#xff08;用…

边缘计算网关:连接中心计算与边缘设备的重要桥梁-天拓四方

一、边缘计算网关&#xff1a;重新定义信息高速公路的“路标” 边缘计算网关&#xff0c;作为边缘计算生态系统中的核心组件&#xff0c;不仅承载着数据传输的功能&#xff0c;更是智能信息处理的关键节点。它通过分布式计算架构&#xff0c;将数据处理任务前置到网络边缘&…

JDK 收费了,怎么应对?难道 JDK 8 一直用下去吗?

最近遇到一个问题&#xff1a;Oracle JDK 8 在 ARM 机器上性能特别差&#xff01; 我的第一直觉就是是不是 JDK 8 在 ARM 不兼容&#xff1f; 为了研究这个问题&#xff0c;我探究了一圈&#xff0c;主要是找找有没有同行遇到这个问题&#xff0c;在找的过程中呢&#xff0c;发…

基于vue框架的宠物领养系统l3a76(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,宠物信息,宠物领养,宠物品种,团队信息,入团申请,团队活动 开题报告内容 基于Vue框架的宠物领养系统开题报告 一、引言 随着宠物文化的普及和人们对宠物情感的日益加深&#xff0c;宠物领养已成为社会关注的热点之一。然而&#…

# 大模型的第一个杀手级应用场景出来了

大家终于都意识到大模型首先改变的是软件行业自己&#xff0c;而软件的根基是代码生成。代码生成第一波就是AI辅助开发&#xff0c;这个会是大模型第一个杀手级应用。大家苦苦逼问自己的大模型杀手级应用&#xff0c;为什么会是辅助编程&#xff0c;这里说下什么&#xff1a; 必…

利用shuji还原webpack打包源码

0 前言 前段时间做一个银行的项目&#xff0c;是在别人已经打过好多次的基础上继续打&#xff0c;而且时间很短&#xff0c;也是没办法要有产出&#xff0c;这个银行很多站点都是webpack打包&#xff0c;就新学了一个点&#xff1a;利用shuji获取webpack打包站源码&#xff08…

2025届京东校招薪酬全面上调,加薪20%!

就在近日京东官方发布声明&#xff0c;今年 2025 届校招岗位的薪资将全面上调&#xff0c;再次加薪&#xff01;其中&#xff0c;采销、技术、产品等核心岗位薪酬上调不低于20%&#xff0c;产研类岗位更狠&#xff0c;算法岗平均起薪涨幅超75%&#xff0c;硬件和设计等岗位起薪…

2024年06月中国电子学会青少年软件编程(图形化)等级考试试卷(一级)答案 + 解析

青少年软件编程&#xff08;图形化&#xff09;等级考试试卷&#xff08;一级&#xff09; 分数&#xff1a;100 题数&#xff1a;37 一、单选题 音乐Video Game1的时长将近8秒&#xff0c;点击一次角色&#xff0c;下列哪个程序不能完整地播放音乐两次&#xff1f;&#xff0…

java实现根据延迟法定退休政策计算退休年龄

一、计算规则 从2025年1月1日起&#xff0c;男职工和原法定退休年龄为五十五周岁的女职工&#xff0c;法定退休年龄每四个月延迟一个月&#xff0c;分别逐步延迟至六十三周岁和五十八周岁&#xff1b;原法定退休年龄为五十周岁的女职工&#xff0c;法定退休年龄每二个月延迟一…

应急响应实战---是谁修改了我的密码?

前言&#xff1a;此次应急响应为真实案例&#xff0c;客户反馈无法通过密码登录服务器&#xff0c;疑似服务器被入侵 0x01 如何找回密码&#xff1f; 客户服务器为windows server2019&#xff0c;运维平台为PVE平台&#xff1b;实际上无论是windows系统或者是linux系统&#…

从简单分析到智能问数,Smartbi AIChat让数据回归业务

大数据产业创新服务媒体 ——聚焦数据 改变商业 在某科技公司&#xff0c;资深数据分析师李晨&#xff08;化名&#xff09;正忙于分析新产品的市场表现。面对传统自助式BI工具&#xff0c;李晨在功能界面中手动设置各种查询条件&#xff0c;进行了一番复杂的拖拉拽操作&#…

spring模块(六)spring监听器(3)广播与异步问题

发布事件和监听器之间默认是同步的&#xff1b;监听器则是广播形式。demo&#xff1a; event&#xff1a; package com.listener.demo.event;import com.listener.demo.dto.UserLogDTO; import org.springframework.context.ApplicationEvent;public class MyLogEvent extends…

界面控件DevExpress中文教程:如何PDF图形对象的可见性?

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 近期重要版本v24.1已正式发布&#xff0c;该版本拥有众多新产…

数据资产盘点

数据资产盘点包含调研诊断、数据盘点、数据对标校正、分类分级、权责划分、数据资产目录建立六大环节。调研诊断&#xff1a;通常采用访谈或案头梳理的方式&#xff0c;对 IT 整体建设情况、业务系统数据情况进行调研&#xff0c;框定数据资产管理范围、聚焦目标。 数据盘点&a…

spring整合mabatis框架(druid连接池)

spring整合mabatis框架&#xff0c;duird连接池&#xff0c;Junit5测试框架 1&#xff09;创建Maven工程 2&#xff09;导入相关的依赖 <!--springContext依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-contex…

helm一键化部署pod

目录 概念 安装helm helm的命令 自定义模版 回滚 概念 helm提供了一个模版&#xff0c;可以一键化的部署微服务。它通过打包的方式&#xff0c;把所有需要的yaml文件集合一起&#xff0c;然后一键部署&#xff0c;还可以支持回滚。 helm的本质&#xff1a;就是可以把k8s…