内容预知
目录
[使用 helm 安装 Chart](#使用 helm 安装 Chart)
如何对chart文件进行修改重新部署,回滚,上传harbor
helm相关知识
Helm的简介与了解
Helm本质就是让K8s的应用管理(Deployment、Service等)可配置,可以通过类似于传递环境变量的方式能动态生成。通过动态生成K8s资源清单文件(deployment.yaml、service.yaml)。 然后调用 Kubectl 自动执行 K8s 资源部署。
在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。 况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制, 很大程度上简化了 Kubernetes 应用的部署和管理。
Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。
Helm的官网地址:ht/tp:// https://helm.sh
helm的三个重要概念
在Helm中 有三个重要的概念,分别为:Chart 、Repository 和 Release
- chart:helm的软件包,部署包,service ingress,定义好的yaml资源。类似于yum的rpm包。
- release:版本,也可以理解为在安装过程中,给这个部署的应用起一个名字。
- repository:仓库,提供一个服务器,服务器中包含chart的资源。提供yaml资源的保存地址。
Helm在k8s集群运用中,总的来讲其作用过程:Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。
helm的安装和使用
将软件包拖入master01上
将软件包拖入/opt/helm
tar -xf helm-v3.12.0-linux-amd64.tar.gz
解压
cd linux-amd64/
mv helm /usr/local/bin/helm
helm version
查看版本
添加helm的自动补全功能,方便后续使用:
vim /etc/bashrc
source <(helm completion bash)
使用 helm 安装 Chart
###helm添加chat的语法格式:
helm repo add chart仓库名 chart仓库地址
###添加常用的chart仓库############
#一个开源项目的仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
#微软chart仓库,推荐使用,内容基本与官方仓库保持一致
helm repo add stable http://mirror.azure.cn/kubernetes/charts
#阿里chart仓库,应有尽有
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
#官方仓库,国内网络问题,不太推荐应用
helm repo add incubator https://charts.helm.sh/incubator
对chart的基本使用
更新和查看仓库列表
helm repo list
helm repo update
查看chart信息
查找指定仓库里面是否包含nginx的内容。
helm search repo bitnami | grep nginx
helm show all bitnaml/nginx
查看所有信息
安装chart
helm install my-nginx bitnami/nginx [-n default] #指定 release 的名字为 my-nginx,-n 指定部署到 k8s 的 namespace
helm install bitnami/nginx --generate-name #不指定 release 的名字时,需使用 --generate-name 随机生成一个名字
安装完之后会发现,service和pod都安装好了
这里面的nginx包含了deployment service pod
对chart的基本管理
查看所有release
helm ls
helm list
查看指定release的状态
helm status nginx
删除指定的release
helm uninstall nginx
helm自定义模板
根据自己的需求,定义chart。然后部署到集群中。
在镜像仓库中拉取chart,查看chart的包结构
#拉取chart 到本地目录(现在所在的目录中)
helm pull stable/mysql
#对该拉取的chart压缩包进行解压
tar xf mysql-1.6.9.tgz
由上图可以看出:一个 chart 包就是一个文件夹的集合,文件夹名称就是 chart 包的名称。
chart 是包含至少两项内容的helm软件包:
(1)软件包自描述文件 Chart.yaml,这个文件必须有 name 和 version(chart版本) 的定义
(2)一个或多个模板,其中包含 Kubernetes 清单文件:
- NOTES.txt:注意事项
- deployment.yaml:部署应用的模板文件
- service.yaml:为 deployment 创建 service 的资源清单文件
- ingress.yaml: 定义了外部流量如何转发到应用程序
- _helpers.tpl:帮助文档,告诉用户如何来定义模板的值。
- hpa.yaml:定义了应用程序副本数的扩缩容行为
- chart:用于存储依赖,如果这个chart依赖于其他的chart,依赖文件保存在这个目录。
- Chart.yaml:helm chart的元数据文件,包含了这个chart的名称,版本,维护者信息等等。
- templates:包含清单模板的目录。
- serviceaccount.yaml:应用程序的服务账号
- values.yaml:核心文件,自定义的值,都是通过
- values.yaml把我们的数据覆盖到安装的chart
进行模板文件的修改,生成自定义chart
helm create nginx
tree nginx
vim /opt/helm/nginx/values.yaml
-----line44-----
false----> true
-----line50-----
设置域名
-----line53-----
设置类型
-----line64-----
资源限制
vim nginx/Chart.yaml
apiVersion: v2
name: nginx #chart名字
description: A Helm chart for Kubernetes
type: application #chart类型,application或library
version: 0.1.0 #chart版本
appVersion: 1.16.0 #application部署版本
进行chart打包
//打包 chart
helm lint nginx #检查依赖和模版配置是否正确
helm package nginx #打包 chart,会在当前目录下生成压缩包 nginx-0.1.0.tgz
如何部署自定义的chart
helm install nginx-11 ./nginx --dry-run --debug
nginx-11:release版本号
./nginx:当前目录下nginx的chart
--dry-run --debug:这个chart不会被部署到集群当中,参数验证,测试chart的配置是否正确。
利用自定义chart包进行k8s资源部署
helm install nginx ./nginx --dry-run --debug #使用 --dry-run 参数验证 Chart 的配置,并不执行安装
helm install nginx ./nginx -n default #部署 chart,release 版本默认为 1
或者
helm install nginx ./nginx-0.1.0.tgz
#可根据不同的配置来 install,默认是 values.yaml
helm install nginx ./nginx -f ./nginx/values-prod.yaml
如何对chart文件进行修改重新部署,回滚,上传harbor
如何对chart文件进行修改并且重新发布
vim /opt/helm/nginx/values.yaml
-----line40-----
type: NodePort
nodePort: 31000
-----line44-----
enabled: false
helm upgrade nginx nginx
进行更新
kubectl get pod,svc
如何进行回滚
helm history nginx
查看回滚点
helm rollback nginx 1
回到指定的回滚点
如何上传到harbor
在harbor主机进行配置更新
-----line35-----
chart:
absolute_url: enabled
在chart中启用绝对url
在helm主机上安装好push插件
mkdir -p ~/.local/share/helmplugins/helm-push
tar -xf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helmplugins/helm-push
# docker login -u admin -p 123456 https://hub.zzr.com
helm package nginx
Successfully packaged chart and saved it to: /opt/helm/nginx-0.2.0.tgz
helm push nginx-0.2.0.tgz oci://hub.zzr.com/charts --insecure-skip-tls-verify
Pushed: hub.zzr.com/charts/nginx:0.2.0
Digest: sha256:e6f4c07783fbcf201e33b4ed70e221391191fcefb4de2d637743bc10971da2b4
在habor主机创建项目,在helm主机添加chart仓库
打开浏览器:访问http://20.0.0.64,新建项目
helm命令总结
helm常用命令
helm repo add 仓库名 url地址 添加仓库
helm repo update 不加仓库名,就是更新所有仓库
helm repo list 仓库列表
helm repo remove 仓库名称
helm show chart stabke/nginx 查看chart信息
helm show stable/nginx 查看详细信息
helm install nginx-11 stable/nginx -n lucky-zzr
安装官网的默认版本
helm uninstall nginx-11 删除安装好的chart
helm list 查看已经安装的chart
自定义模板
helm create nginx 创建一个自定义的chart模板
values.yaml:这里会传给templates里面的yaml文件
用helm拉取nginx的两种方式
helm install nginx-11 ./nginx
helm install nginx-11 ./nginx-0.1.0.tgz
如何打包创建好的chart:
helm package nginx
回滚:
helm history nginx-11 //查看回滚点
helm rollback nginx-11 1 //指定回滚点回滚