Helm 部署 java 项目到 K8S

news2025/1/11 9:55:30

文章目录

  • 部署流程
  • 模板目录
  • 文件解析
    • Deployment
    • Service
    • Ingress
    • _helpers.tpl
    • Chart.yaml
    • values.yaml
  • 部署命令

部署流程

  1. 准备 jar 包
  2. 使用 Dockerfile 构建镜像
  3. 上传镜像到仓库(Harbor)
  4. 使用 Helm 模板部署 jar 到 K8S

本文着重讲解第四步,如何制作 Helm 模板

 

模板目录

如图所示,整个模板有两大部分组成

在这里插入图片描述

第一部分是外层:

  • Chart.yml:模板基础信息,例如名称、版本等
  • values.yaml:模板的默认传入值

第二部分是 templates:

  • _helpers.tpl:此文件中定义一些可重用的模板片断,可在任何资源定义模板中使用
  • deployment.yaml:部署 deployment
  • service.yaml:定义服务端口
  • ingress.yaml:定义访问域名

 

文件解析

Deployment

  • metadata.labels:添加标签,用于识别的唯一标识
  • replicas:需要构建多少个
  • spec.selector.matchLabels:和 metadata.labels 对应
  • spec.template.metadata:和 metadata.labels 对应
  • containers.image:镜像路径
  • containers.imagePullPolicy:镜像拉取策略,Always:总是拉取;IfNotPresent:默认值,本地有则使用本地镜像,否则拉取;Never:只用本地镜像,不拉取
  • containers.ports.containerPort:pod 暴露的端口号
  • testchart.env:定义运行环境
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.name }}
  labels:
    app: {{ .Values.name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Values.name }}
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: {{ .Values.name }}
    spec:
      containers:
        - name: {{ .Values.name }}
          image: "{{ .Values.image.name }}"
          imagePullPolicy: IfNotPresent
          ports:
          - name: tcp-{{ .Values.service.port }}
            containerPort: {{ .Values.service.port }}
            protocol: TCP
{{- if .Values.env.enabled -}}
{{ include "testchart.env" . | indent 10 }}
{{- end }}

 

Service

  • spec.ports.port:设置为80,引用服务时就不需填写端口号
  • spec.selector:匹配标签,和 Deployment 的 metadata.labels 对应
  • spec.type:Service 的类型,ClusterIP、NodePort、LoaderBalancer
apiVersion: v1
kind: Service
metadata:
  name: {{ .Values.name }}
spec:
  ports:
    - name: tcp-{{ .Values.service.port }}
      port: 80
      protocol: TCP
      targetPort: {{ .Values.service.port }}
  selector:
    app: {{ .Values.name }}
  type: {{ .Values.service.type }}

 

Ingress

  • spec.rules.host:配置域名
  • spec.rules.http.paths.backend.serviceName:对应 Service 名称
{{- $hostName := .Values.hostname -}}
{{- $env := .Values._env.name -}}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ .Values.name }}-ingress-http
spec:
  rules:
  - host: {{ $hostName }}.{{ $env }}.api.com
    http:
      paths:
      - backend:
          serviceName: {{ .Values.name }}
          servicePort: 80
  {{- if .Values.env.enabled -}}

 

_helpers.tpl

  • env:容器运行前需设置的环境变量列表
  • JAVA_OPTS:设置 JVM 相关运行参数的变量
{{- define "testchart.env" }}
env:
  - name: JAVA_OPTS
    value: -Dspring.profiles.active={{ .Values.env.active }}
{{- end }}

 

Chart.yaml

apiVersion: v1
name: helm-chart
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: 1.16.0

 

values.yaml

name: demo

replicaCount: 1

_env:
  name: dev
  
hostname: xxx

image:
  name: xxxxxx:v1
  pullPolicy: IfNotPresent

env:
  enabled: true
  active: "dev"

service:
  type: ClusterIP
  port: 8080

 

部署命令

登录 harbor

helm repo add --username admin --password Harbor12345 harbor http://192.168.140.01/chartrepo/xxx

配置集群访问的文件 kubeconfig

export KUBECONFIG=~/kubeconfig
chmod g-r ~/kubeconfig
chmod o-r ~/kubeconfig

部署

 helm  install -f values.yaml  xxxname harbor/helmname

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

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

相关文章

后分库分表时代的数据库新选择:二维火搭载OceanBase再出发

如今,在中国任意走进一家餐饮商户,不论其规模大小,扫码点餐、自助点餐机、商家点餐小程序等已经基本成为标配。随着餐饮行业数智化持续加速推进,餐饮 SaaS 已经逐渐成为商户们的“必选题”,二维火便是这“必选题”之一…

深度解析 Git 是如何工作的?

深度解析 Git 是如何工作的?前言Git 的特性Git 实际上是如何工作的Commits 对象Tree 对象Blobs 对象总结分支创建与合并代码合并与冲突代码合并算法(Myers)图搜索代码 diff结尾参考:《Pro Git》、《Advanced Git》 前言 Git 是一…

如何实现工具无关化?关于自动化测试脚本的设计

1.问题的提出 最近几年来,我的自动化测试工具之旅大致是这样的,最早用的是QTP,然后是RFT(IBM的功能测试自动化产品),之后也经历了Selenium, Watir等,再后还是一些商业工具主要是偏web自动化及移动自动化,如sahi, appnium, Keynot…

你知道ArcGIS电子地图也有大字体地图吗(附下载方法)

概述 如果你经常使用水经微图,应该知道在水经微图内,百度电子地图和高德电子地图有大字体地图,最近我偶然发现ArcGIS电子地图也有大字体地图,这里给大家介绍一下下载方法。 加载地图 在ArcGIS中打开目录窗格,点击添…

五、卷积神经网络CNN8(不同卷积后图像大小计算)

类型划分 2 维卷积的计算分为了 3 类:1.full 2.same 3. valid 1、full蓝色为原图像,白色为对应卷积所增加的 padding,通常全部为 0,绿色是卷积后图片。图中的卷积的滑动是从卷积核右下角与图片左上角重叠开始进行卷积&#xff…

为什么企业需要实时跟踪进度的项目管理工具?

市场上的大多数 项目管理工具,都是垃圾进-垃圾出,这意味着如果你的团队没有输入正确甚至漏了输入他们活动的状态信息,就无法准确跟踪项目进展。 当选择了一个不能跟踪实时进度状态的项目管理工具,它不能给你提供准确报告进度所需…

大型复杂项目管理之风险预防

最近一个项目让项目经理小王焦头烂额,一问才知是第一次主导大型项目,各个维度的风险问题频发不断,项目感觉推动不下去了。例如,子项目进度延误、项目资源不足、项目交付物质量不过关等因素造成项目的整体延误等等。 项目案例信息&…

GoogLeNet 与 Inception

本篇主要介绍GoogLeNet,其被改进并应用在了YOLOV1目标检测算法中。 GoogLeNet是google推出的基于Inception模块的深度神经网络模型,在2014年的ImageNet竞赛中夺得了冠军,在随后的两年中一直在改进,形成了Inception V2、Inception V3、Incepti…

Java 将PDF转为Word

众所周知,PDF文档除了具有较强稳定性和兼容性外, 还具有较强的安全性,在工作中可以有效避免别人无意中对文档内容进行修改。但与此同时,也妨碍了对文档的正常修改。这时我们可以将PDF转为Word文档进行修改或再编辑。使用软件将 PDF 文档转换为…

Spring事务,浅谈!

目录 一、EnableTransactionManagement工作原理 二、Spring事务基本执行原理 三、Spring事务详细执行流程 四、Spring事务传播机制 五、Spring事务传播机制分类 六、Spring事务强制回滚 七、TransactionSynchronization 一、EnableTransactionManagement工作原理 开启Spr…

在C++中,为什么部分程序员喜欢在循环中写‘++i’而不是‘i++’?

自入行以来,无论是查阅资料、技术博客亦或是同事间的技术交流,都有一个共识:在循环的时候,务必使用前置操作符,因为其性能优于后置操作符,久而久之,这个就像一个不成文的规定,大家都在遵循&…

C++异常介绍

目录 一.异常 1.1C异常概念 1.2异常的使用 1.3异常和栈帧,重新抛出 二.异常体系 2.1自定义异常体系 2.2C标准库的异常体系 2.3异常规范 3.异常的优缺点 3.1优点 3.2缺点 一.异常 1.1C异常概念 语言传统的处理错误的方式: 1. 终止程序,如assert…

浮点类型的比较

浮点类型的比较一.浮点数精度的损失二.浮点数的比较1.方法一2.方法二3.方法三:系统方案一.浮点数精度的损失 关于浮点数的比较就不得不提到浮点数在内存中的存储,但这里篇幅太大,故我将其放在另一篇博客里,(如果不了解…

laravel对于百万级别数据导出的一些经验

业务上的需求,我们开发的供应链系统某些业务表也陆续突破了百万级别。 原先使用 \Maatwebsite\Excel 插件导出的效率越来越慢,5w条数据导出基本要达到20min,甚至于30w数据导出基本上都超时。 为了解决这个问题,多种尝试&#xf…

AI 让观众成为 3D 版《老友记》的导演了?

《老友记》上线 3D 版了? 允许用户旋转镜头,且从近景切换到全景观看故事? 今年出炉的 3D 方向 AI 项目 SitCom3D,能够自动补齐《老友记》原剧中的三维拍摄空间,用户可以选择主视图、侧视图等不同角度欣赏剧集。镜头的…

[ vulhub漏洞复现篇 ] solr 远程命令执行 (CVE-2019-17558)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

优秀的内部知识库对企业的重要性

我们都知道在客户服务方面,选择正确的知识库软件的重要性。但我们经常忘记的是,我们的员工也是我们的客户。根据盖洛普公司最近的研究,世界正在经历一场员工参与危机。只有大约三分之一的美国员工在工作中具有参与感,而在全球范围…

一文读懂Docker、K8s

目标: docker原理以及在运维工作的地位和作用,运维工作进化论,docker、微服务、k8s的联系、devops和docker的关系,docker的前世今生容器、镜像和仓库、容器和虚拟化,优势和劣势,底层的核心容器除了docker还…

什么是项目管理软件,能带来哪些作用?

在这个信息化时代,企业的项目管理除了需要一位出色的项目管理者外,还需要借助项目管理软件来对项目进行全面管理。因为如今的项目需求多样化,内容也愈加丰富,传统的项目管理方式已经难以满足,所以很多项目管理软件也应…

[附源码]JAVA毕业设计小型医院药品及门诊管理(系统+LW)

[附源码]JAVA毕业设计小型医院药品及门诊管理(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项…