0
点赞
收藏
分享

微信扫一扫

k8s实验-helm v3的配置和使用

helm通过将各种kubernets资源打包,类似于linux的apt-get或者yum工具,来完成复杂的软件安装和部署,并且支持部署实例的版本管理等,大大简化了在k8s上部署和管理的应用的复杂程度。

架构和组件

k8s实验-helm v3的配置和使用_维护者

  • chart:

chart就是helm package,包含了一个k8s app应用运行起来的所有要素,比如service, deployment, configmap, serviceaccount, rbac, 等,这些要素都是以template文件的形式存在,再结合values文件,最终渲染出能够被k8s执行的yaml文件,通常是以.tgz压缩包的形式提供,也可以是文件夹形式.

  • repository:

仓库是charts的集合,方便进行分享和分发。下面是官网仓库和阿里云仓库的地址,

  • ​​https://artifacthub.io/​​
  • ​​https://developer.aliyun.com/hu​​


  • release

release是helm chart在kubernetes的一个运行实例,你可以用不同的release name多次安装同一个chart,比如:当集群中需要多个redis实例,你可以使用不同的配置文件安装redis chart。



helm与linux软件包对比


helm

apt

安装包

chart

deb

仓库

helm repository

apt repository/mirror

操作系统

kubernetes

linux

包依赖

helm dependency

deb dependency

包管理工具

helm client

apt

运行流程

k8s实验-helm v3的配置和使用_redis_02

  • 从chart仓库中获取chart;
  • 使用者配置自己的values文件,根据自己的运行环境对values进行修改;
  • 默认values文件和使用者values文件会进行一个merge,形成最终的values文件;
  • 使用最终的values文件,渲染chart的template,形成可以被kubernetes执行的yaml;
  • 调用kube apply提交yaml到kubernetes

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

chart仓库使用

#删除默认源
helm repo remove stable
#添加国内源,使用阿里云
helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
#查看helm源添加情况
helm repo list
#搜索可部署的chart列表
helm search repo stable
#

k8s实验-helm v3的配置和使用_维护者_03

相关仓库搜索命令

  • 查看已经添加的仓库:helm repo list
  • 搜索仓库有哪些chart:helm search repo stable
  • 更新仓库列表到本地:helm repo update
  • 搜索redis:helm search repo redis
  • 查看redis chart详情:helm show chart stable/redis
  • 查看redis values(values:相当于chart的配置文件):helm show values stable/redis

chart结构说明

helm使用的包格式被称为chart,它是描述所有k8s资源的文件集合.一个完整的chart用于部署一个完整的应用.

chart的目录结构

wordpress/
Chart.yaml # 包含了chart信息的YAML文件
LICENSE # 可选:包含了char许可证的文本文件
README.md # 可选:README文件
values.yaml # chart的默认配置
values.schema.json # 可选:JSON结构values.yaml
charts/ # 包含了chart依赖的其他chart
crds/ # 自定义资源的定义
templates/ # 模板目录,与values.yaml组合完整的资源对象配置文件
#
templates/NOTES.txt # 可选:包含了简要使用说明的文本文件
-----------------------------------

chart的yaml文件说明

apiVersion: chart的API版本号,必须
name: chart名称,必须
version: 应用的版本号,必须
kubeVersion: 兼容的kubernetes版本号范围,可选
description: 应用描述,可选
type: chart类型,可选
keywords:
- 关于应用的一组关关键字,可选
home: 关于应用的一组关键字,可选
sources:
- 应用源码的URL地址列表,可选
dependencies: # 依赖的一组其他chart信息,可选
- name: chart的名称,如nginx
version: chart的版本,如1.2.3
repository: 仓库URL(https://example.com/charts)或者别名("@repo-name")
condition: YAML格式,可选,用于启用或者禁用chart,例如subchart1.enabled)
tags: # 可选
- 用于启用或者禁用一组chart的tag
enabled: 可选,启用的bool值,确定是否加载chart
import-values: # 可选
- ImportValue : 将在子chart中设置的变量和值导入父chart中
alias: 可选,在chart中使用别名,需要多次添加相同的chart时会很有用
maintainers: # 可选
- name: 维护者的名称,每个维护者都需要
email: 维护者的邮箱,每个维护者都需要
url: 维护则的URL,每个维护者都需要
icon: 用作icon的svg或者png图片的url地址,可选
appVersion: 包含的应用版本,可选
deprecated: 设置该chart是否已被启用,可选,bool值
annotations:
example: annotation列表,可选

其他字段忽略.对其中的每个字段的详细说明参考官方说明.

操作实验

从远程仓库部署mariadb

举例,从远程仓库部署一个maraidb应用

自定义创建chart

1 生成空的charts

mkdir -p /root/.helm/cache/archive
cd /root/.helm/cache/archive
helm create mychart

k8s实验-helm v3的配置和使用_redis_04

注意,该命令能够在当前目录中创建一个名为mychart的图表,建议进入chart下载默认路径创建,默认路径为/root/.helm/cache/archive

k8s实验-helm v3的配置和使用_维护者_05

确认charts文件目录结构

k8s实验-helm v3的配置和使用_维护者_06

确认charts元数据文件:

cat Chart.yaml

k8s实验-helm v3的配置和使用_版本号_07

查看values.yaml为文件,可以看到定义了一个可以直接安装容器化Nginx应用的Charts

k8s实验-helm v3的配置和使用_redis_08

2 修改charts以部署自定义服务

vim values.yaml

k8s实验-helm v3的配置和使用_redis_09

k8s实验-helm v3的配置和使用_维护者_10

3 检查chart是否有语法错误,注意在chart所在的目录运行

helm lint mychart

k8s实验-helm v3的配置和使用_维护者_11

没有报错

4 使用--dry-run和--debug参数调试chart包

helm install --set name=myapp  mychart  --dry-run --debug ./mychart

k8s实验-helm v3的配置和使用_维护者_12


5 确认无误后,再次执行命令

helm install --set name=myapp  mychart  ./mychart/

k8s实验-helm v3的配置和使用_redis_13

6 查看helm状态

helm status mychar

k8s实验-helm v3的配置和使用_维护者_14

7 通过status输出的notes提示运行相关验证服务

export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=mychart,app.kubernetes.io/instance=mychart" -o jsnotallow="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsnotallow="{.spec.containers[0].ports[0].containerPort}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT

k8s实验-helm v3的配置和使用_版本号_15

8 通过helm package打包

helm package mychart

k8s实验-helm v3的配置和使用_维护者_16

打包完成后,可以使用本地.tgz文件进行helm install命令部署了

helm install mychart mychart-0.1.0.tgz

k8s实验-helm v3的配置和使用_redis_17

同时,可以将打包好的chart上传到chart仓库进行保存,供后续分发和部署使用.

升级或者回退一个应用

1 打包自定义应用,修改Chart.yaml文件,将版本号从0.1.0修改为0.2.0,然后使用helm package打包

cd /roo/.helm/cache/archive
vi mychart/Chart.yaml

k8s实验-helm v3的配置和使用_版本号_18

helm package mychart

k8s实验-helm v3的配置和使用_redis_19

2 使用 helm upgrade已经部署的release,可以通过--version来指定版本号,如果没有版本号,则自动升级到最新版本.

helm list   #查询

k8s实验-helm v3的配置和使用_redis_20

3 升级和回退

helm upgrade mychart local/mychart
helm rollback mychart
# 查看release历史
helm history myapp

k8s实验-helm v3的配置和使用_redis_21

 

举报

相关推荐

0 条评论