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

provider.tf

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

文章插圖
云原生之旅 - 5)Kubernetes時代的包管理工具 Helm

文章插圖
resource "helm_release" "my-nginx" {  name       = "my-nginx-release"  repository = "https://charts.bitnami.com/bitnami"  chart      = "nginx"  set {    name  = "service.type"    value = "ClusterIP"  }  set {    name  = "replicaCount"    value = "2"  }}nginx.tf
然后執行terraform 命令安裝Nginx helm chart
terraform initterraform planterraform applyReference: Terraform Helm Provider
自己制作 Helm Charthelm create mychartlist 能看到目錄結構如下
  • Chart.yaml
  • values.yaml
  • templates
  • charts
Chart.yaml 定義了這個chart的版本之類的信息 。最重要的是templates目錄,包含將部署到集群的應用程序的所有資源描述YAML文件charts 目錄可以放一些依賴的chart包,屬于高階用法,目前置空就行了 。values.yaml文件為模版變量默認值 。
現在 , 做一個最簡單的Helm Charts 創建 namespace
templates 目錄下僅需一個文件 namespace.yaml
---{{ range $i, $ns := .Values.namespaces -}}apiVersion: v1kind: Namespacemetadata:  name: {{ $ns.name }}  annotations:    helm.sh/resource-policy: keep    {{- if hasKey $ns "extraAnnotations" }}      {{- toYaml $ns.extraAnnotations | nindent 4 }}    {{- end }}---{{- end }}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

推薦閱讀