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


terraform {  backend "gcs" {    bucket = "global-sre-dev-terraform"    prefix = "helm/state"  }}backend.tf

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

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

文章插图
terraform {  required_version = ">= 1.2.9"  required_providers {    helm = {      source = "hashicorp/helm"      version = "2.7.0"    }  }}data "google_project" "this" {  project_id = "global-sre-dev"}data "google_client_config" "this" {}data "google_container_cluster" "this" {  name     = "sre-mgmt"  location = "us-west1"  project  = data.google_project.this.project_id}provider "helm" {  kubernetes {    host                   = "https://${data.google_container_cluster.this.private_cluster_config[0].public_endpoint}"    token                  = data.google_client_config.this.access_token    cluster_ca_certificate = base64decode(data.google_container_cluster.this.master_auth[0].cluster_ca_certificate)  }  experiments {    manifest = true  }}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
【云原生之旅 - 5)Kubernetes时代的包管理工具 Helm】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 }}

经验总结扩展阅读