总结:helm

news2024/11/17 15:54:19

一、介绍

Helm是k8s的包管理工具,类似Linux系统常用的 apt、yum等包管理工具,基于go 语言开发。使用helm可以简化k8s应用部署

二、基本概念

Helm的基本概念

  • Chart:一个 Helm 包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等,还可能包含 Kubernetes 集群中的服务定义,类似 Homebrew 中的 formula、APT 的 dpkg 或者 Yum 的 rpm 文件。
  • Release:在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。例如一个 MySQL Chart,如果想在服务器上运行两个数据库,就可以把这个 Chart 安装两次。每次安装都会生成自己的 Release,会有自己的 Release 名称。
  • Repository:用于发布和存储 Chart 的存储库。

三、架构

 

Chart Install 过程:

  1. Helm从指定的目录或者tgz文件中解析出Chart结构信息
  2. Helm将指定的Chart结构和Values信息通过gRPC传递给Tiller
  3. Tiller根据Chart和Values生成一个Release
  4. Tiller将Release发送给Kubernetes运行。


Chart Update过程:

  1. Helm从指定的目录或者tgz文件中解析出Chart结构信息
  2. Helm将要更新的Release的名称和Chart结构,Values信息传递给Tiller
  3. Tiller生成Release并更新指定名称的Release的History
  4. Tiller将Release发送给Kubernetes运行

四、安装helm

helm主要包括helm客户端和Tiller服务端两部分,Tiller部署在k8s集群中。

ps: 如果使用阿里云容器服务kubernetes版,默认已经安装了helm的服务端(Tiller),只要安装helm客户端即可。

可以根据自己的环境从github地址下载对应的安装包:

下载地址:Releases · helm/helm · GitHub

  • windows 64位版: https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-windows-amd64.zip
  • linux 64位版:https://storage.googleapis.com/kubernetes-helm/helm-v2.13.1-linux-arm64.tar.gz

下载后解压到自己喜欢的目录,然后配置下对应的PATH环境变量。

默认情况helm操作k8s集群,需要借助kubectl命令的集群配置,可以参考这里配置kubectl命令-(k8s应用配置详解),当然也可以直接给helm命令指定--kubeconfig 参数指定k8s集群证书路径。

#这是通过--kubeconfig参数指定k8s证书的方式操作k8s集群
#下面命令是部署一个名字叫app-demo的应用,helm包在./chart目录中
/alidata/server/helm-v2.13.1/helm --kubeconfig ./config/k8s.conf install app-demo ./chart

安装服务端:

使用helm init 命令,可以一键安装。

ps: 关于chart仓库(Repository),通过helm命令:helm serve 就可以启动仓库服务,但是通常很多时候我们每个项目自己的chart包都跟着源码一起提交到git仓库,所以这里的chart仓库不是必须的。

五、基本用法

这里以制作一个简单的网站应用chart包为例子介绍helm的基本用法。

ps: 这里跳过docker镜像制作过程,镜像制作可以参考:Docker基础教程

5.1.创建chart包

例子:通过helm create命令创建一个新的chart包

helm create myapp:在当前目录创建一个myapp chart包

创建完成后,得到的目录结构如下:

myapp                                   - chart 包目录名
├── charts                              - 依赖的子包目录,里面可以包含多个依赖的chart包
├── Chart.yaml                          - chart定义,可以定义chart的名字,版本号信息。
├── templates                           - k8s配置模版目录, 我们编写的k8s配置都在这个目录, 除了NOTES.txt和下划线开头命名的文件,其他文件可以随意命名。
│   ├── deployment.yaml
│   ├── _helpers.tpl                    - 下划线开头的文件,helm视为公共库定义文件,主要用于定义通用的子模版、函数等,helm不会将这些公共库文件的渲染结果提交给k8s处理。
│   ├── ingress.yaml
│   ├── NOTES.txt                       - chart包的帮助信息文件,执行helm install命令安装成功后会输出这个文件的内容。
│   └── service.yaml
└── values.yaml                         - chart包的参数配置文件,模版可以引用这里参数。

我们要在k8s中部署一个网站应用,需要编写deployment、service、ingress三个配置文件,刚才通过helm create命令已经创建好了。

5.2.编写k8s应用部署配置文件

为了演示chart包模版的用法,我们先把deployment、service、ingress三个配置文件的内容清空,重新编写k8s部署文件。

deployment.yaml 配置文件定义如下

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: myapp           #deployment应用名
  labels:
    app: myapp          #deployment应用标签定义
spec:
  replicas: 1           #pod副本数
  selector:
    matchLabels:
      app: myapp          #pod选择器标签
  template:
    metadata:
      labels:
        app: myapp          #pod标签定义
    spec:
      containers:
        - name: myapp           #容器名
          image: xxxxxx:1.7.9    #镜像地址
          ports:
            - name: http
              containerPort: 80
              protocol: TCP

service.yaml定义如下:

apiVersion: v1
kind: Service
metadata:
  name: myapp-svc #服务名
spec:
  selector: #pod选择器定义
    app: myapp
  ports:
  - protocol: TCP 
    port: 80
    targetPort: 80

ingress.yaml定义如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress #ingress应用名
spec:
  rules:
    - host: www.xxxxx.com  #域名
      http:
        paths: 
          - path: /  
            backend: 
              serviceName: myapp-svc #服务名
              servicePort: 80

5.3.提取k8s应用部署配置文件中的参数,作为chart包参数。

上面已经完成k8s应用部署配置文件的编写。

为什么要提取上面配置文件中的参数,作为chart包的参数?

思考下面的问题:

我们制作好一个chart包之后,如实现chart包更具有通用性,我们如何换域名?换镜像地址?改一下应用部署的名字?  部署多套环境(例如:dev环境、test环境分别以不同的应用名字部署一套)

5.2定义的k8s配置文件还不能称之为模版,都是固定的配置。(这里所说的模版就类似大家平时做前端开发的时候用的模版技术是一个概念)

我们通过提取配置中的参数注入模版变量,模版表达式将配置文件转化为模版文件,helm在运行的时候根据参数动态的将模版文件渲染成最终的配置文件。

下面将deployment、service、ingress三个配置文件转换成模版文件。

ps:  {{  }} 两个花括号包裹的内容为模版表达式,具体含义,后面会说明,这里不用理会。

deployment.yaml 配置模版如下

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: {{ .Release.Name }}  #deployment应用名
  labels:
    app: {{ .Release.Name }}          #deployment应用标签定义
spec:
  replicas: {{ .Values.replicas}}           #pod副本数
  selector:
    matchLabels:
      app: {{ .Release.Name }}          #pod选择器标签
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}          #pod标签定义
    spec:
      containers:
        - name: {{ .Release.Name }}           #容器名
          image: {{ .Values.image }}:{{ .Values.imageTag }}    #镜像地址
          ports:
            - name: http
              containerPort: 80
              protocol: TCP

service.yaml定义如下:

apiVersion: v1
kind: Service
metadata:
  name: {{ .Release.Name }}-svc #服务名
spec:
  selector: #pod选择器定义
    app: {{ .Release.Name }}
  ports:
  - protocol: TCP 
    port: 80
    targetPort: 80

ingress.yaml定义如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: {{ .Release.Name }}-ingress #ingress应用名
spec:
  rules:
    - host: {{ .Values.host }}  #域名
      http:
        paths: 
          - path: /  
            backend: 
              serviceName: {{ .Release.Name }}-svc #服务名
              servicePort: 80

values.yaml chart包参数定义:

#域名
host: www.XXX.com
 
#镜像参数
image: XXXXXXXXXXXXXXXXXX
imageTag: 1.7.9
 
#pod 副本数
replicas:1

5.4.通过helm命令安装/更新应用

安装应用:

#命令格式: helm install  chart包目录

$ helm install ./myapp

通过命令注入参数

#命令格式: helm install  --set key=value   chart包目录

#–set 参数可以指定多个参数,他的值会覆盖values.yaml定义的值,对象类型数据可以用 . (点)分割属性名,例子:  --set apiAppResources.requests.cpu=1
$ helm install --set replicas=2 --set host=www.xxxx.com ./myapp

更新应用:

命令格式: helm upgrade release名字  chart包目录

$ helm upgrade myapp ./myapp

也可以指定–set参数

$ helm upgrade --set replicas=2 --set host=www.xxxx.com myapp ./myapp

默认情况下,如果release名字不存在,upgrade会失败,可以加上-i 参数当release不存在的时候则安装,存在则更新,将install和uprade命令合并。

$ helm upgrade  -i --set replicas=2 --set host=www.xxxx.com myapp ./myapp


来源:

https://www.cnblogs.com/lyc94620/p/10945430.html

helm介绍及使用_helm开发工具_王小栋857的博客-CSDN博客

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

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

相关文章

flask实际开发:flask和nginx如何配置支持websocket

使用pycharm启动flask项目有坑,先修改pycharm设置 1、点击Edit Confiturations 2、配置启动方式 1 新增启动配置 2 选择使用python命令执行 3 给配置设置一个名字 4 设置要启动的模块的位置,flask基本都是app.py 模块 最后别忘记:点击右侧的…

Linux网络-传输层UDP/TCP详解

目录 计算机网络的层状结构 UDP协议 UDP报文格式 理解UDP/TCP报文的本质 UDP的特点 UDP的缓冲区 sendto/recvfrom/send/recv/write/read IO类接口 UDP是全双工的 UDP注意事项 UDP协议,实现简单聊天室(服务端客户端) TCP协议 TCP协…

SpringBoot集成 ElasticSearch

Spring Boot 集成 ElasticSearch 对于ElasticSearch比较陌生的小伙伴可以先看看ElasticSearch的概述ElasticSearch安装、启动、操作及概念简介 好的开始啦~ 1、基础操作 1.1、导入依赖 <dependency><groupId>org.springframework.boot</groupId><arti…

【是C++,不是C艹】 第一个C++程序 | 命名空间 | 输入输出

&#x1f49e;&#x1f49e; 欢迎来到 Claffic 的博客 &#x1f49e;&#x1f49e; &#x1f449;专栏&#xff1a;《是C&#xff0c;不是C艹》&#x1f448; 前言&#xff1a; 在认识了C的来历之后&#xff0c;我们就要开始正式学习C了&#xff0c;系好安全带&#xff0c;准备…

阿里云安全ACP认证考试实验之云盾之云安全中心与态势感知入门体验

“更多玩转云产品” 1、实验概述 通过本实验可对云安全中心&#xff0c;态势感知的一些基本操作有深入了解以及如何来对实例进行安全监控 2、实验目标 完成此实验可以掌握的能力有&#xff1a; 在安骑士中添加白名单、登录安全设置 通过态势感知查看实例的相关告警威胁 3…

数值区间的模糊匹配,二分查找的应用

先看图: 需求很明确,要根据左边的值,显示右边的值。 比如,现在拿到的值是 17.12,那么应该显示成 15;拿到 17.599 ,那么应该显示成 20. 先找规律: 为了便于说明,暂且将左边的值设为 x, 右边的值设为 y. 第一行和最后一行可以写死成 0 与 1500;余下的每行,x 的区间是…

Vue CLI 创建一个项目

vue create 运行以下命令来创建一个新项目&#xff1a; vue create hello-world警告 如果你在 Windows 上通过 minTTY 使用 Git Bash&#xff0c;交互提示符并不工作。你必须通过 winpty vue.cmd create hello-world 启动这个命令。不过&#xff0c;如果你仍想使用 vue crea…

发布会前准备新闻通稿的重要性,为什么媒体不会原稿发布报道?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体 胡老师。 最近有宣传的小伙伴问胡老师&#xff0c;为什么我们精心准备的新闻通稿&#xff0c;媒体没有按照稿子发布呢&#xff1f;今天就与大家交流下这方面的经验。 一&#xff0c;发布会前准备新…

中断嵌套实验

使用汇编语言&#xff0c;要求&#xff1a; 外部中断1可以嵌套外部中断0 没有中断时&#xff0c;8个LED发光二极管以0.1s的速度闪烁。 有外部中断0时&#xff0c;8个LED发光二极管以0.1s的速度流水点亮。&#xff08;中断子程序0&#xff09; 有外部中断1时&#xff0c;会打断外…

还在为招生发愁?一文get中外合办院校招生技巧

生源&#xff0c;是任何一所高校的生存之本和生命线。因此&#xff0c;正确的招生策略&#xff0c;对于院校来说显得格外重要。 近几年&#xff0c;越来越多的家长和学生开始关注中外合办大学&#xff0c;随之而来的中外合办大学的生源竞争也越来越激烈。那么&#xff0c;有哪…

学好虚拟化,首先要学Linux

上次讲到了虚拟化的基础知识&#xff0c;比如虚拟化的应用、各个厂商都是通过何种技术路径来实现的等等&#xff0c;本篇想记录一下我学习到的CPU内存虚拟化和网络虚拟化相关知识&#xff0c;通过记录来制造反馈&#xff0c;让自己更有效地学习。需要注意的是&#xff0c;学习虚…

这 7个 AI 写作助手,太实用了

想象一下&#xff1a;你正在办公桌前为你的广告输入标题&#xff0c;但你突然思维阻塞并卡住了&#xff0c;可惜这时还没有神奇的软件可以帮助你想出点子。或许是有的&#xff1f; 2023 年&#xff0c;AI 写作工具似乎不可避免地会很快融入我们的工作流程中。现代知识工作者已…

政府大数据中心数据资源平台建设方案WORD2022

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除 1.1 项目建设内容 对于本次区级大数据资源平台的建设&#xff0c;将按照“总体规划一步到位&#xff0c;平台建设分步实施&#xff0c;数据赋能逐步升级”的原则&#xff0c;落…

理解什么是DTO?什么是AutoMapper?

什么是DTO? .Net DTO是一个对象&#xff0c;它定义了数据如何在网络上发送。它只用于发送和接收数据&#xff0c;不包含任何业务逻辑。使用DTO的原因有以下几个&#xff1a; 将服务层与数据库层分离隐藏客户端不需要查看的特定属性省略一些属性以减少有效负载大小处理嵌套对象…

【LeetCode: 233. 数字 1 的个数 | 暴力递归=>记忆化搜索=>动态规划 | 数位dp】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Term Suggester 中 suggest_mode 的三种模式missing、popular、always 的区别

1、Term Suggester term suggester 正如其名&#xff0c;只基于 tokenizer 之后的单个 term 去匹配建议词&#xff0c;并不会考虑多个term之间的关系 POST <index>/_search { "suggest": {"<suggest_name>": {"text": "<s…

VM——VMware装Centos

一、创建虚拟机配置 打开VMware&#xff0c;创建新虚拟机 选择自定义&#xff0c;下一步 选择16.x&#xff0c;然后下一步 选择稍后安装&#xff0c;然后下一步 选择Linux、镜像版本&#xff0c;然后下一步 输入虚拟机名称&#xff0c;选择存放位置&#xff0c;然后下一步 选择…

串口UART介绍

【记录所学】 1. 串口的硬件介绍 UART的全称是Universal Asynchronous Receiver and Transmitter&#xff0c;即异步发送和接收。串口在嵌入式中用途非常的广泛&#xff0c;主要的用途有&#xff1a; 打印调试信息&#xff1b;外接各种模块&#xff1a;GPS、蓝牙&#xff1b…

【java web篇】MyBatis实现增删改查

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…

Git使用教程:从入门到精通(以Gitee为例)

一、前言 Git是一款分布式版本控制系统&#xff0c;可以帮助开发者更好地管理代码。在众多的Git平台中&#xff0c;Gitee是国内最受欢迎的Git平台之一。本篇文章将介绍如何使用Git进行代码管理&#xff0c;并以Gitee为例&#xff0c;详细讲解Git的基本操作和常用命令。 二、深入…