【Kubernetes】【helm】使用

举报
huahua.Dr 发表于 2021/07/06 11:56:45 2021/07/06
【摘要】 一、在 Helm3 中的执行顺序定义代码如下:  var InstallOrder KindSortOrder = []string{"Namespace","NetworkPolicy","ResourceQuota","LimitRange","PodSecurityPolicy","PodDisruptionBudget","Secret","ConfigMap","StorageCl...

一、在 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.yaml
  • Chart.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: dep1

  repository: file://xxx

  version: 0.1.0

- name: dep2

  repository: file://xxx

  version: 0.1.0
  1. 在父chart.yaml中添加dependencies标签
  2. 依赖的每个子chart都填写正确的基本信息:
    • name-->依赖chart中定义的名字,保证两者相同。
    • repository-->依赖chart的仓库地址,可以是本地文件地址或远程仓库地址,确保能找到对应的chart即可
    • version-->依赖chart的版本,确保版本唯一。
  3. 上面信息填写完之后,下面编写父chart的values.yaml,主要目的是希望所依赖的子chart也能共享使用父chart的模板常量,这样只需要修改父chart的模板常量依赖的子chart也能得到更新:
    global:
      namespace: xxx
    
    basic:
      name:xxx1
    
    dep1:
      replicas: x1
      images_name: x1
      images_version: 0.1.0
    
    dep2:
      replicas: x2
      images_name: x2
      images_version: 0.1.0
  4. 定义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目录/,来完成最后的打包或安装部署。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。