helm K8s打包介绍

Helm介绍

Helm 是 Kubernetes 的包管理器,诞生于2015年,2018年加入CNCF。

Helm安装

二进制版本安装

  • tar -zxvf helm-v3.0.0-linux-amd64.tar.gz(解压targz包)
  • mv linux-amd64/helm /usr/local/bin/helm(移动可执行文件)

备注:获取下载链接之后,使用wget命令下载。

包管理器下载

curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

备注:目前linux系统并不自带helm的源。

三大概念

chart:chart即helm包,包含了在k8s中运行应用程序或服务需要的所有资源定义。可以把它看成centos中的rpm。

repository:仓库,用来存放charts的地方。可以把它看成docker中的docker hub。

release:运行在k8s中的chart实例,一个chart包通常可以在同一集群安装多次。

Helm资源安装顺序

  • Namespace:命令空间
  • NetworkPolicy:网络ACL
  • ResourceQuota:资源配置,限制资源使用的策略
  • LimitRange:namespace范围内,限制pod或container资源使用量的策略
  • PodSecurityPolicy
  • PodDisruptionBudget
  • ServiceAccount
  • Secret
  • SecretList
  • ConfigMap
  • StorageClass
  • PersistentVolume
  • PersistentVolumeClaim
  • CustomResourceDefinition
  • ClusterRole
  • ClusterRoleList
  • ClusterRoleBinding
  • ClusterRoleBindingList
  • Role
  • RoleList
  • RoleBinding
  • RoleBindingList
  • Service
  • DaemonSet
  • Pod
  • ReplicationController
  • ReplicaSet
  • Deployment
  • HorizontalPodAutoscaler
  • StatefulSet
  • Job
  • CronJob
  • Ingress
  • APIService

创建charts

基础命令

# 初始化charts包
helm create chart-name
# 修改charts包中配置
# 打包charts
helm package chart-name
# 安装chart
helm install chart-name chart-name-{version}.tgz

文件结构

这里是helm2.16.9初始化的文件结构,与其它版本可能会有些差异,不过大同小异。

chart-name
	charts/								# 包含chart依赖的其他chart
	Chart.yaml							# 包含了chart信息的YAML文件
	templates/							# 模板目录
		deployment.yaml					# deployment声明文件
		ingress.yaml					# ingress声明文件
		serviceaccount.yaml				# serviceaccount声明文件
		tests/							# 测试文件夹
			test-connection.yaml
		_helpers.tpl
		NOTES.txt						# 包含简要使用说明的纯文本文件
		service.yaml					# service 声明文件
	values.yaml							# chart 默认的配置值

Chart.yaml文件是chart包的必需文件,初始时包含如下信息:

apiVersion: chart API 版本 (必需)
appVersion: 包含的应用版本(可选)。不需要是语义化,建议使用引号
description: 一句话对这个项目的描述(可选)
name: chart名称 (必需)
version: 语义化2 版本(必需)

其余可添加信息:

kubeVersion: 兼容Kubernetes版本的语义化版本(可选)
type: chart类型 (可选)
keywords:
  - 关于项目的一组关键字(可选)
home: 项目home页面的URL (可选)
sources:
  - 项目源码的URL列表(可选)
dependencies: # chart 必要条件列表 (可选)
  - name: chart名称 (nginx)
    version: chart版本 ("1.2.3")
    repository: (可选)仓库URL ("https://example.com/charts") 或别名 ("@repo-name")
    condition: (可选) 解析为布尔值的yaml路径,用于启用/禁用chart (e.g. subchart1.enabled )
    tags: # (可选)
      - 用于一次启用/禁用 一组chart的tag
    import-values: # (可选)
      - ImportValue 保存源值到导入父键的映射。每项可以是字符串或者一对子/父列表项
    alias: (可选) chart中使用的别名。当你要多次添加相同的chart时会很有用
maintainers: # (可选)
  - name: 维护者名字 (每个维护者都需要)
    email: 维护者邮箱 (每个维护者可选)
    url: 维护者URL (每个维护者可选)
icon: 用做icon的SVG或PNG图片URL (可选)
deprecated: 不被推荐的chart (可选,布尔值)
annotations:
  example: 按名称输入的批注列表 (可选).

注意:除此之外,不要添加其它信息,从helm3.3.2之后,不容许有其它额外字段。如果一定有需要,需要在annotation中添加自定义的元数据。

Helm官方中文教程:https://helm.sh/zh/docs/

posted @ 2022-05-09 13:24  红雨520  阅读(389)  评论(0编辑  收藏  举报