k8s 包管理器 Helm


农夫三全
农夫三全 2022-09-27 09:39:53 49083
分类专栏: 资讯

  • Helm 介绍
  • 官网:
    https://v3.helm.sh/zh/docs/
    https://helm.sh/
    helm 官方的 chart 站点:
    https://hub.kubeapps.com/
  • Helm 是 kubernetes 的包管理工具,相当于 linux 环境下的 yum/apg-get 命令。
  • Helm 的首要目标一直是让“从零到 Kubernetes”变得轻松。无论是运维、开发人员、经验丰富的DevOps 工程师,还是刚刚入门的学生,Helm 的目标是让大家在两分钟内就可以在 Kubernetes 上安装应用程序。
  • Helm 可以解决的问题:
    运维人员写好资源文件模板,交给开发人员填写参数即可
  • Helm 中的一些概念:
    (1)helm:命令行客户端工具,主要用于 Kubernetes 应用中的 chart 的创建、打包、发布和管理。
    (2)Chart:helm 程序包,一系列用于描述 k8s 资源相关文件的集合,比方说我们部署 nginx,需要 deployment 的 yaml,需要 service 的 yaml,这两个清单文件就是一个 helm 程序包,在 k8s 中把这些 yaml 清单文件叫做 chart 图表。
    vlues.yaml 文件为模板中的文件赋值,可以实现我们自定义安装,如果是 chart 开发者需要自定义模板,如果是 chart 使用者只需要修改 values.yaml 即可

    repository:存放 chart 图表的仓库,提供部署 k8s 应用程序需要的那些 yaml 清单文件chart--->通过 values.yaml 这个文件赋值-->生成 release 实例

    helm 是 go 语言开发
    (3)Release:基于 Chart 的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个release,将在 k8s 中创建出真实运行的资源对象。

    总结:
    helm 把 kubernetes 资源打包到一个 chart 中制作并完成各个 chart 和 chart 本身依赖关系并利用 chart 仓库实现对外分发,而 helm 还可通过 values.yaml 文件完成可配置的发布,如果 chart 版本更新了,helm 自动支持滚更更新机制,还可以一键回滚,但是不是适合在生产环境使用,除非具有定义自制 chart 的能力。
  • helm 属于 kubernetes 一个项目:
    下载地址:
    https://github.com/helm/helm/releases
  • Helm v3 版本变化
    2019 年 11 月 13 日,Helm 团队发布 Helmv3 的第一个稳定版本。

    该版本主要变化如下:
    架构变化:
    1、Helm 服务端 Tiller 被删除
    2、Release 名称可以在不同命名空间重用
    3、支持将 Chart 推送至 Docker 镜像仓库中
    4、使用 JSONSchema 验证 chartvalues
  • 安装 Helm v3
    K8s 版本支持的各个 helm 版本对照表:
    https://helm.sh/zh/docs/topics/version_skew/
  • tar xf helm-v3.7.2-linux-amd64.tar.gz
    mv linux-amd64/helm /usr/bin/

    配置国内存放 chart 仓库的地址
    阿里云仓库(https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts)
    官方仓库(https://hub.kubeapps.com/charts/incubator)官方 chart 仓库,国内可能无法访问。
    微软仓库(http://mirror.azure.cn/kubernetes/charts/)这个仓库推荐,基本上官网有的 chart这里都有,国内可能无法访问。
    添加阿里云的 chart 仓库
    helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
    "aliyun" has been added to your repositories

    添加 bitnami 的 chart 仓库
    helm repo add bitnami https://charts.bitnami.com/bitnami
    "bitnami" has been added to your repositories

    更新 chart 仓库
    helm repo update

    查看配置的 chart 仓库有哪些
    helm repo list

    删除 chart 仓库地址
    helm repo remove aliyun
    "aliyun" has been removed from your repositories 
  • Helm 基本使用

  • 搜索和下载 Chart
    查看阿里云 chart 仓库中的 memcached
    helm search repo aliyun |grep memcached

    查看 chart 信息
    helm show chart aliyun/memcached

    下载 chart 包到本地
    helm pull aliyun/memcached
    Chart.yaml: chart 的基本信息,包括版本名字之类
    templates: 存放 k8s 的部署资源模板,通过渲染变量得到部署文件
    values.yaml:存放全局变量,templates 下的文件可以调用

    _helpers.tpl 存放能够复用的模板
    NOTES.txt 为用户提供一个关于 chart 部署后使用说明的文件
  • 部署 chart

  • helm 部署 memcached 服务
    修改 statefulset.yaml 文件
    cd memcached
    vim templates/statefulset.yaml

  • helm install memcached ./

     
    测试 memecached 服务是否正常:
    yum install nc -y
    export POD_NAME=$(kubectl get pods --namespace default -l "app=memcached-memcached" -o jsonpath="{.items[0].metadata.name}")
     kubectl port-forward $POD_NAME 11211

    另外打开一个终端
    echo -e 'set mykey 0 60 5\r\nhello\r' | nc localhost 11211

  • release 相关操作

  • 查看 release 发布状态
    helm list

    删除 release
    helm delete memcached
    release "memcached" uninstalled
    删除 release 会把 release 下对应的资源也删除,memecached 的 pod 也会被删除 
  • 自定义 Chart 模板

  • 自定义一个 Chart
    安装好 helm 之后可以开始自定义 chart,那么需要先创建出一个模板如下:
    helm create myapp

    ./
    ├── charts 用于存放所依赖的子 chart
    ├── Chart.yaml 描述这个 Chart 的相关信息、包括名字、描述信息、版本等
    ├── templates 模板目录,保留创建 k8s 的资源清单文件
    │ ├── deployment.yaml deployment 资源的 go 模板文件
    │ ├── _helpers.tpl 模板助手文件,定义的值可在模板中使用
    │ ├── hpa.yaml 水平 pod 自动扩缩容 go 模板文件
    │ ├── ingress.yaml 七层代理 go 模板文件
    │ ├── NOTES.txt
    │ ├── serviceaccount.yaml
    │ ├── service.yaml service 的 go 模板文件
    │ └── tests
    │ └── test-connection.yaml
    └── values.yaml 模板的值文件,这些值会在安装时应用到 GO 模板生成部署文件
  • Chart.yaml 编写规则
    vim Chart.yaml


    解释说明:
    Chart.yaml 文件主要用来描述对应 chart 的相关属性信息,其中 apiVersion 字段用于描述对应 chart 使用的 api 版本,默认是 v2 版本;

    name 字段用于描述对应 chart 的名称;

    description 字段用于描述对应 chart 的说明简介;

    type 字段用户描述对应 chart 是应用程序还是库文件,应用程序类型的 chart,它可以运行为一个 release,但库类型的 chart 不能运行为 release,它只能作为依赖被 application 类型的 chart 所使用;

    version 字段用于描述对应 chart 版本;

    appVersion 字段用于描述对应 chart 内部程序的版本信息
  • go 模板文件渲染
    cat templates/deployment.yaml


    解释·:该部署清单模板文件,主要用 go 模板语言来写的,其中{{ include "myapp.fullname" . }}就表示取 myapp 的全名;

    {{ .Values.image.repository }}这段代码表示读取当前目录下的 values 文件中的 image.repository 字段的值;

    {{ .Values.image.tag | default .Chart.AppVersion }}表示对于values 文件中 image.tag 的值或者读取 default.chart 文件中的 AppVersion 字段的值;

    简单讲 go 模板就是应用对应 go 模板语法来定义关属性的的值;

    一般都是从 values.yaml 文件中加载对应字段的值作为模板文件相关属性的值。

    nindent 4:表示首行缩进 4 个字母
    TRUNC(NUMBER)表示截断数字
  • values.yaml 文件编写

  • cat values.yaml 


    解释:比如我们要引用 values.yaml 文件中的 image 字段下的 tag 字段的值,我们可以在模板文件中写成{{ .Values.image.tag }};

    如果在命令行使用--set 选项来应用我们可以写成 image.tag;

    修改对应的值可以直接编辑对应 values.yaml 文件中对应字段的值,也可以直接使用--set 指定对应字段的对应值即可;

    默认情况在命令行使用--set 选项给出的值,都会直接被替换,没有给定的值,默认还是使用 values.yaml 文件中给定的默认值;
  • 部署 release

  • helm install myapp .
  • Helm 常用命令演示

  • 检查 values 语法格式
    helm lint /root/myapp/

 

  • upgrade 升级 release
    kubectl get svc
    helm upgrade --set service.type="NodePort" myapp .
  • 回滚 release

  • 查看历史版本
    helm history myapp
    把 myapp 回滚到版本 1
    helm rollback myapp 1
  • 打包 Chart
    helm package /root/myapp/

文章知识点与官方知识档案匹配,可进一步学习相关知识

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=10496
赞同 0
评论 0 条
农夫三全L0
粉丝 0 发表 6 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2969
【软件正版化】软件正版化工作要点  2888
统信UOS试玩黑神话:悟空  2860
信刻光盘安全隔离与信息交换系统  2746
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1280
grub引导程序无法找到指定设备和分区  1249
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  169
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  168
点击报名 | 京东2025校招进校行程预告  165
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  161
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!