赞
踩
Helm 为团队提供了在 Kubernetes 内部创建、安装和管理应用程序时需要协作的工具。
有了 Helm,开发者可以:
1.查找要安装和使用的预打包软件(Chart);
2.轻松创建和托管自己的软件包;
3.将软件包安装到任何 K8s 集群中;
4.查询集群以查看已安装和正在运行的程序包;
5.更新、删除、回滚或查看已安装软件包的历史记录;
一言以蔽之,通过 Helm,你可以轻松在 Kubernetes 中运行应用程序。
Helm 3 以 Helm 2 的核心功能为基础,对 Chart repo、发行版管理、安全性和 library Charts 进行了改进。
相比 Helm 2,Helm 3 最明显的变化是 Tiller 的删除,它新增丰富功能,某些功能已被弃用或重构,与 Helm 2 不再兼容。此外,Helm 3 还引入了一些新的实验功能,包括 OCI 支持。
Helm Go SDK 已重构为通用,目标是共享和重用 Go 社区开源代码。
Helm 3 的新变化
面对新版本,相信很多开发者都有这样的疑问:
Helm 3 的工作流程与 Helm 2 相比有什么变化?
如果我还是使用Helm 2 运行这些命令,是否可以看到相同的输出?
Helm 2 描述了用于创建、安装和管理 Chart 的工作流程。Helm 3 建立在该工作流程的基础上,更改了基础架构,以满足不断发展的生态系统的需求。
//可以直接从GitHub网站上获取helm项目。
[root@master helm]# wget https://get.helm.sh/helm-v3.2.0-linux-amd64.tar.gz
tar -zxf helm-v3.2.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/sbin/
chmod +x /usr/local/sbin/helm
helm version
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo update
helm repo list
指定对应的k8s集群
这一步非常关键,它是helm与k8s通讯的保证,这一步就是把k8s环境变量KUBECONFIG进行配置
export KUBECONFIG=/root/.kube/config
或者
vim /etc/profile
KUBECONFIG=/root/.kube/config
source /etc/profile
查询一个charts
helm search repo mysql
helm的 hub 网址:https://hub.helm.sh/
Helm基本概念
//在安装某个Charts包之前,可以先去查找,由于国内网络环境原因,通常我们直接在上述添加的阿里云的Charts仓库内查找,比如,要下载一个MySQL服务。
helm install test-mysql aliyun/mysql
PS: 注意,helm2版本,在部署的时候,如果不自定名称,会生产自定义的名称,但在helm3版本中,如果没有自定义名称会报错。
//可以去查看一下刚才安装过后的Charts包的信息,注意,一个Charts包在部署安装过后,我们称之为一个releases版本。
helm list
helm status new-mysql
//在我们部署安装一个releases之后,会在/root/.cache/helm/repository目录下生产一些文件,并且会有一个tar包。
[root@master repository]# pwd
/root/.cache/helm/repository
[root@master repository]# ls
aliyun-charts.txt aliyun-index.yaml mysql-0.3.5.tgz
[root@master repository]# tar -zxf mysql-0.3.5.tgz [root@master repository]# yum -y install tree [root@master repository]# tree -C mysql mysql ├── Chart.yaml ├── README.md ├── templates │ ├── configmap.yaml │ ├── deployment.yaml │ ├── _helpers.tpl │ ├── NOTES.txt │ ├── pvc.yaml │ ├── secrets.yaml │ └── svc.yaml └── values.yaml 1 directory, 10 files
分析Chart包解压过后的文件
1、Chart.yaml
这个是一个chart包的概要信息。其中name和version字段相对重要一些。
2、README.md
记录了关于这个Chart包的使用描述信息。
3、values.yaml
这个yaml文件,描述了整个Chart包的所有资源对象涉及到的默认的值。
//再按照某个Chart包之前,可以先将Chart包下载下来,然后解压对应的Chart包,查看详细信息。比如我们要部署一个redis的服务。
//在repo仓库中,先查找某个Chart包。
由于PVC没有PV支持,所以PVC现在一直处于Pending的状态,导致Pod绑定这个PVC之后,也会出现问题,所以,解决思路是给这PVC创建一个PV。
//这里做基于NFS服务的PV服务,先开启NFS服务。(k8s集群三个节点都下载nfs)
[root@master ~]# yum -y install nfs-utils [root@master ~]# mkdir /nfsdata [root@master ~]# vim /etc/exports /nfsdata *(rw,sync,no_root_squash) [root@master ~]# systemctl start rpcbind [root@master ~]# systemctl enable rpcbind [root@master ~]# systemctl start nfs-server.service [root@master ~]# systemctl enable nfs-server.service [root@master ~]# showmount -e Export list for master: /nfsdata * [root@node01 ~]# showmount -e 192.168.1.20 Export list for 192.168.1.20: /nfsdata * [root@node02 ~]# showmount -e 192.168.1.20 Export list for 192.168.1.20: /nfsdata *
//为PVC创建一个PV.
[root@master templates]# mkdir /nfsdata/new-pv [root@master ~]# vim new-pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: new-pv spec: capacity: storage: 8Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain nfs: path: /nfsdata/new-pv server: 192.168.1.20 [root@master ~]# kubectl apply -f new-pv.yaml
//查看对应的PV,PVC状态,已经成功绑定。
[root@master ~]# kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/new-pv 8Gi RWO Retain Bound default/new-mysql-mysql 101s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/new-mysql-mysql Bound new-pv 8Gi RWO 19m
//此时,查看Pod,已经正常运行了。
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
new-mysql-mysql-6cf95546fb-sj5j9 1/1 Running 0 20m 10.244.1.2 node01 <none> <none>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。