一、在 Helm3 中的执行顺序定义代码如下var InstallOrder KindSortOrder []string{Namespace,NetworkPolicy,ResourceQuota,LimitRange,PodSecurityPolicy,PodDisruptionBudget,Secret,ConfigMap,StorageClass,PersistentVolume,PersistentVolumeClaim,ServiceAccount,CustomResourceDefinition,ClusterRole,ClusterRoleList,ClusterRoleBinding,ClusterRoleBindingList,Role,RoleList,RoleBinding,RoleBindingList,Service,DaemonSet,Pod,ReplicationController,ReplicaSet,Deployment,HorizontalPodAutoscaler,StatefulSet,Job,CronJob,Ingress,APIService,}Helm 不是按照文件的某个顺序来执行的而是根据文件内容的 Kind按照定义的顺序执行的上面的执行顺序基本上和类型间的使用依赖顺序有一定关联。二、Helm使用使用命令helm create [charName] 创建一个chart: helm create mychart 目录结构如下mychart/├── charts├── Chart.yaml├── templates│ ├── deployment.yaml│ ├── _helpers.tpl│ ├── hpa.yaml│ ├── ingress.yaml│ ├── NOTES.txt│ ├── serviceaccount.yaml│ ├── service.yaml│ └── tests│ └── test-connection.yaml└── values.yamlChart.yaml 用于描述这个 Chart的相关信息包括名字、描述信息以及版本等。values.yaml 用于存储 templates 目录中模板文件中用到变量的值。NOTES.txt 用于介绍 Chart 部署后的一些信息例如如何使用这个 Chart、列出缺省的设置等。Templates 目录下是 你需要部署一个k8s应用所需要的YAML 文件模板该YAML模板文件遵循 Go template 语法。将需要部署的yaml文件放到templetes目录下使用命令helm lint --strict chart目录将需要打包的chart软件包按照严格模式检查一下检查yaml语法是否存在问题等有问题会提示具体的报错信息如helm lint --strict ./mychart/检查通过没有错误之后使用命令helm package chart目录如helm package ./mychart/会根据Chart.yaml的信息生成一个.tgz的压缩包得到.tgz的chart软件包之后就可以在k8s集群上进行安装了使用命令helm install xxx.tgz。chart软件包还可以上传到仓库等等。chart安装之后就可以在k8s集群上查看是否成功拉起相对应的pod了。三、Helm的多Chart依赖管理如果需要依赖多个chart,需要进行简单的依赖配置主要是编写父chart的Chart.yaml添加依赖管理dependencies:- name: dep1repository: file://xxxversion: 0.1.0- name: dep2repository: file://xxxversion: 0.1.01.在父chart.yaml中添加dependencies标签2.依赖的每个子chart都填写正确的基本信息oname--依赖chart中定义的名字保证两者相同。orepository--依赖chart的仓库地址可以是本地文件地址或远程仓库地址确保能找到对应的chart即可oversion--依赖chart的版本确保版本唯一。3.上面信息填写完之后下面编写父chart的values.yaml主要目的是希望所依赖的子chart也能共享使用父chart的模板常量这样只需要修改父chart的模板常量依赖的子chart也能得到更新:global:namespace: xxxbasic:name:xxx1dep1:replicas: x1images_name: x1images_version: 0.1.0dep2:replicas: x2images_name: x2images_version: 0.1.04.定义global--全局常量子父chart均可直接引用为共享常量子父的模板文件可以直接这样引用{{.Values.global.namespace}}5.定义basic--当前父chart拥有的常量只能在父chart的模板文件中使用,如{{.Values.basic.name}}6.定义dep1--为依赖子chart名称为dep1所使用的常量在子chart的模板文件中直接使用如{{.Values.dep1.replicas}}7.同理想要引入依赖子chart使用的常量可以继续定义dep2等。8.编写好values.yaml之后使用命令helm dependency update 父chart目录/ 将父chart的目录添加依赖管理会在父chart目录下的子目录charts生成所依赖的子chart的tgz包。9.可选使用命令helm dependenct list 父chart目录/查看所拥有的依赖包10.可选使用命令helm dependenct builid 父chart目录/,重新编译charts目录下的依赖包11.最后可是使用命令helm package 父chart目录/ 或者helm install 父chart目录/来完成最后的打包或安装部署。