云原生之旅 - 5)Kubernetes时代的包管理工具 Helm( 三 )

Chart.yaml
apiVersion: v2description: Helm chart for maintaining user namespacesname: user-namespacesversion: 1.1.0values.yaml 放一个默认值来测试下
namespaces:- name: wade-test  owner: "wade@demo.com"  extraAnnotations:    abc: def测试
helm template user-namespaces

云原生之旅 - 5)Kubernetes时代的包管理工具 Helm

文章插图
现在就可以local直接安装了,命令上面已经介绍过 。
我们现在选择打包并且publish 到一个bucket 作为repository来共享给别人使用 。也可以通过github作为repository,有类似solution,不再赘述 。
我这里的例子是gcs bucket 作为私有 helm repository
helm package user-namespaces此命令会生成一个tgz 包: `user-namespaces-1.1.0.tgz`
然后借助一款工具 helm-gcs which is a helm plugin that allows you to manage private helm repositories on Google Cloud Storage aka buckets.
helm gcs init gs://package/charts/infra/helm repo add my-repo gs://package/charts/infra/helm gcs push user-namespaces-1.1.0.tgz my-repo你会看到此bucket下面会有两个文件
% gsutil ls gs://package/charts/infra/gs://package/charts/infra/index.yamlgs://package/charts/infra/user-namespaces-1.1.0.tgz使用 Terraform Helm Provider 安装此Chart 代码示例:
locals {    my_namespace = "demo-system"     namespace_yaml = <<-EOT    namespaces:    - name: ${local.my_namespace}      owner: wadexu  EOT}resource "helm_release" "my_namespace" {name       = "my-first-chart"repository = "gs://package/charts/infra"chart      = "user-namespaces"version    = "1.1.0"values = [local.namespace_yaml]} 
after terraform init and apply the resource
云原生之旅 - 5)Kubernetes时代的包管理工具 Helm

文章插图
你的第一个自定义 Helm Chart 通过Terraform 安装成功了 。
Helm list result:
云原生之旅 - 5)Kubernetes时代的包管理工具 Helm

文章插图
`kubectl gs ns` you will see this new namespace just created
% kubectl get nsNAME              STATUS   AGEwade-demo         Active   75s总结通过此文章的学习,您将了解到Helm的基本命令,以及Terrraform 安装 Helm 的方式,以便于后续自动化整个安装应用来Provisioning Kubernetes Clusters的流程 。另外还了解到如何制作自己的第一个Helm Chart 。

经验总结扩展阅读