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

前言上一篇文章 [基礎設施即代碼 使用 Terraform 創建 Kubernetes] 教會了你如何在Cloud上面建Kubernetes資源,那么本篇來講一下如何在Kubernetes上面部署應用 。大家都知道 Kubernetes上的應用對象,都是由特定的資源描述組成,然后保存至一個個YAML文件,通過 kubectl apply –f 部署 , 但是這種手動的方式面臨很多問題,容易出錯,代碼冗余,缺少版本控制等 。所以我們需要一些工具來幫助我們更快的達到部署以及管理應用的目的 。目前很流行的工具主要是 Helm 和 Kustomize(下一篇會介紹),本篇主要介紹 Helm 。

Helm是一個 Kubernetes 的包管理工具 , 就像Linux下的包管理器,如 yum/apt 等,可以很方便的將之前打包好的yaml文件部署到 kubernetes 上 。Helm有幾個重要概念:
  • helm:一個命令行客戶端工具,主要用于Kubernetes應用chart的創建、打包、發布和管理
  • Chart:應用描述,一系列用于描述 k8s 資源相關文件的集合
  • Release:基于Chart的部署實體,一個 Chart 被 Helm 運行后將會生成對應的一個 release;將在k8s中創建出真實運行的資源對象
  • Repository:主要就是用來存放和共享 Chart 使用,相當于是 GitHub,不過這里主要是供 Kubernetes 使用 。
關鍵詞: Helm入門,Helm實踐,使用Terraform 安裝Helm Charts,自制Helm Charts , 自定義Helm Chart,編寫自己的Helm Charts
安裝參考官方文檔,我這里是MacOS `brew install helm` 就行了 。
使用Helm命令安裝Chart我們以安裝bitnami 的Nginx為例子
helm repo add bitnami https://charts.bitnami.com/bitnamihelm repo listhelm search repo nginxhelm install mywebserver bitnami/nginx安裝到一個已存在的Namespace
helm install mywebserver bitnami/nginx -n demo安裝到一個新的Namespace
helm install mywebserver bitnami/nginx -n demo --create-namespace安裝某特定版本
helm install mywebserver bitnami/nginx --version 13.2.8查看
helm listhelm list -n demo修改參數安裝,如下是把service type 改為ClusterIP,默認為LB類型
helm install my-nginx bitnami/nginx --set service.type="ClusterIP"## 更多參數可參考文檔
也可通過values.yaml修改參數
helm inspect values bitnami/nginx > values.yamlvim values.yamlhelm install mywebserver bitnami/nginx -f values.yamlNAME: mywebserverLAST DEPLOYED: Tue Oct  4 10:23:16 2022NAMESPACE: defaultSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:CHART NAME: nginxCHART VERSION: 13.2.9APP VERSION: 1.23.1如果想把Chart從repository下載到本地安裝
pull到本地并解壓 然后install from local
helm pull bitnami/nginx --untarhelm install mywebserver2 ./nginxClean up
helm uninstall mywebserverhelm repo remove bitnami### 本文首發于博客園 https://www.cnblogs.com/wade-xu/p/16839834.html
使用 Terraform Helm Provider 安裝 Helm Chart還沒有Terraform入門的,請移步本人前面的文檔 。例 云原生之旅 - 3)基礎設施即代碼 Terraform 快速入門
Terraform 代碼示例如下
云原生之旅 - 5)Kubernetes時代的包管理工具 Helm

文章插圖
云原生之旅 - 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  }}

推薦閱讀