当前位置: 首页 > news >正文

Helm-K8s包管理(三)新建、编辑一个Chart

在这里插入图片描述

新建一个Chart步骤

在这里插入图片描述

一、前提准备:环境准备

安装Helm

  • 在线安装方式
$ curl -fsSL -o get_helm.sh  https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
  • 离线安装
    • 需要提前下载helm安装包,离线下载

可正常连接K8s集群

kubectl cluster-info  # 查看k8s集群信息,可以查看即说明已经连接到k8s api server

二、创建Chart工作目录

  • 创建出Chart工作目录,一般有两种方式
    • 从0到1,自行创建
    • 拉取现有Chart,在已有Chart基础上做修改

自行创建

  • 使用helm提供的命令创建Chart工作目录
    helm create nginx-chart        # 生成目录 nginx-chart/
    cd nginx-chart
    

在现有Chart基础上做修改

  • 拉取目标chart
    # 添加helm chart仓库
    helm repo add bitnami "https://helm-charts.itboon.top/bitnami" --force-update 
    # 查询目标Chart
    helm search repo <chart-name>  
    # helm pull 的作用是把一个已经发布的 Helm Chart 从远程仓库(或本地仓库)拉取到本地文件系统,变成 可解压的 .tgz 包 或直接 解压后的目录,方便离线查看、修改、重新打包或调试。
    helm pull bitnami/nginx --version 15.2.0 --untar # --version指定版本;--untar自动解压
    

生成的工作目录示意

nginx-chart/
├── Chart.yaml          # Chart 元数据
├── values.yaml         # 默认变量值
├── charts/             # 子 Chart 目录(空)
├── templates/          # K8s YAML 模板
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   ├── _helpers.tpl
│   └── NOTES.txt
└── .helmignore         # 打包忽略规则

三、编辑Chart元数据-Chart.yml

  • 按照需求编辑Chart.yml,即Chart元数据信息,Chart元数据包含这个chart的名称、版本号

Chart.yml元数据-必填字段

字段类型说明
apiVersionstringChart API 版本(v2 为 Helm 3)
namestringChart 名称(只能小写字母、数字、-)
versionstringChart 自身的版本号(遵循 SemVer)
appVersionstring所封装“应用”的版本号,仅做展示

Chart.yml元数据-描述、维护字段

字段示例作用
description"Bitnami nginx chart"一句话描述
homehttps://bitnami.com项目主页
sources["https://github.com/bitnami/bitnami-docker-nginx"]源码仓库
maintainers[{name: "Bitnami", email: "containers@bitnami.com"}]维护者列表
keywords["nginx", "web server"]关键字,方便搜索
icon"https://example.com/icon.png"图标 URL

Chart.yml元数据-依赖和兼容性字段

字段示例作用
dependencies[{name: "mysql", version: "~9.0.0", repository: "oci://..."}]声明子 Chart
type"application""library"应用 Chart vs 库 Chart
kubeVersion">=1.22-0"兼容的 K8s 版本
annotations{"category": "Infrastructure"}额外元数据
deprecatedtrue标记弃用

Chart.yml-完整样例

apiVersion: v2
name: nginx
description: "Bitnami nginx chart"
type: application
version: 15.4.2          # Chart 版本
appVersion: "1.25.3"     # 应用版本
home: https://bitnami.com
sources:- https://github.com/bitnami/charts
maintainers:- name: Bitnamiemail: containers@bitnami.com
keywords:- nginx- web server
kubeVersion: ">=1.22-0"
dependencies:- name: commonversion: 2.x.xrepository: oci://registry-1.docker.io/bitnamicharts

四、编辑自定义变量values.yml

values.yml作用

  • values.yml作用是提供所有模板(templates/*.yaml)里的变量的默认值
  • 所有镜像、资源、副本、网络、存储、安全变量参数都可以在这里一键调节无需改模板

values.yml示例

  • 以下为一个values.yml示例
    # values.yaml
    replicaCount: 2image:repository: nginxtag: "1.25.3"pullPolicy: IfNotPresentservice:type: ClusterIPport: 80ingress:enabled: false            # 先关闭 ingressresources:limits:cpu: 200mmemory: 256Mirequests:cpu: 100mmemory: 128Mi
    

五、编辑template文件

template文件作用

  • templates/ 目录下的所有 .yaml 文件(以及 _*.yaml 辅助文件)统称为 template 文件
  • template本身代表了k8s资源的定义,比如deployment、service等
  • template可以设置占位符,和values.yml结合使用
    • 占位符比如{{ .Values.xxx }}

template示例

# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: {{ include "mychart.fullname" . }} #占位符
spec:replicas: {{ .Values.replicaCount }} #占位符template:spec:containers:- name: nginximage: "{{ .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}" #占位符,结合values.yml渲染后变成如 image: "registry.cn-hangzhou.aliyuncs.com/bitnami/nginx:1.25.3"resources:
{{ toYaml .Values.resources | indent 10 }} #占位符

六、本地验证

Lint语法检查

helm lint .                       # 语法/风格检查

Dry-Run

helm template myrel .             # 渲染出最终 YAML,不真正部署

七、打包发布到仓库

  • 多人协作场景下,本地的Chart工作目录,需要先打包成一个压缩包再上传到仓库后使用
  • 若只是单人使用,也可以直接在本地工作目录进行install安装
# 本地打包
helm package .
# 生成 nginx-chart-0.1.0.tgz# 发布到自建 chartmuseum 仓库(可选)
helm repo add myrepo https://charts.example.com
curl --data-binary "@nginx-chart-0.1.0.tgz" https://charts.example.com/api/charts

八、安装到集群

# 安装 release 名称为 web;./nginx-chart为本地chart工作目录地址
helm install web ./nginx-chart# 若nginx-chart 已经上传至仓库,且本地已经添加了该仓库,也可以指定仓库已提交的chart名称来install
helm install web-release nginx-chart # 查看realese状态
helm list
# 查看pod状态
kubectl get pods -l app.kubernetes.io/name=nginx-chart

九、升级(更新配置后)

helm upgrade web ./nginx-chart      # 热更新,./nginx-chart为本地chart工作目录地址,也可以指定仓库已提交的chart名称

十、卸载

helm uninstall web
http://www.dtcms.com/a/330992.html

相关文章:

  • k8s+isulad 重装
  • Seata学习(三):Seata AT模式练习
  • CMake语法与Bash语法的区别
  • 解剖HashMap的put <三> JDK1.8
  • 会议系统进程池管理:初始化、通信与状态同步详解
  • 从 Notion 的水土不服到 Codes 的本土突围:研发管理工具的适性之道​
  • Apache 虚拟主机配置冲突导致 404 错误的排查总结
  • [机器学习]08-基于逻辑回归模型的鸢尾花数据集分类
  • AXI GPIO 2——ZYNQ学习笔记
  • 力扣top100(day03-02)--图论
  • Java 技术栈中间件优雅停机方案设计与实现全景图
  • 【JavaEE】多线程 -- 线程状态
  • 数据结构之顺序表相关算法题
  • 【数据分享】351个地级市农业相关数据(2013-2022)-有缺失值
  • linux中date命令
  • SAP-ABAP:SAP消息系统深度解析:架构设计与企业级应用实践
  • Wireshark中捕获的大量UDP数据
  • 23.Linux : ftp服务及配置详解
  • (论文速读)DiffusionDet - 扩散模型在目标检测中的开创性应用
  • AI搜索重构下的GEO优化服务商格局观察
  • 李沐-第六章-LeNet训练中的pycharm jupyter-notebook Animator类的显示问题
  • 轻松同步 Outlook 联系人到 Android
  • 深入解析SAE自动驾驶分级标准(0-5级)及典型落地实例
  • Ubuntu 软件源版本不匹配导致的依赖冲突问题及解决方法
  • C++ 23种设计模式的分类总结
  • C++23输出革命:std::print的崛起与工业界标准滞后的现实困境
  • 18.12 BERT问答系统核心难题:3步攻克Tokenizer答案定位与动态填充实战
  • c/c++ UNIX 域Socket和共享内存实现本机通信
  • 2021睿抗决赛 猛犸不上 Ban
  • diffusers库学习--pipeline,模型,调度器的基础使用