Kubernetes 包管理

2022/06/15 k8s

Helm is the package manager for Kubernetes。

Helm is a tool for managing Charts. Charts are packages of pre-configured Kubernetes resources.

Use Helm to:

  • Find and use popular software packaged as Helm Charts to run in Kubernetes
  • Share your own applications as Helm Charts
  • Create reproducible builds of your Kubernetes applications
  • Intelligently manage your Kubernetes manifest files
  • Manage releases of Helm packages

  • Helm到底解决了什么问题?为什么Kubernetes需要Helm?

Kubernetes能够很好地组织和编排容器,但它缺少一个更高层次的应用打包工具,而Helm就是来干这件事的

(1)很难管理、编辑和维护如此多的服务。每个服务都有若干配置,缺乏一个更高层次的工具将这些配置组织起来。

(2)不容易将这些服务作为一个整体统一发布。部署人员需要首先理解应用都包含哪些服务,然后按照逻辑顺序依次执行kubectl apply,即缺少一种工具来定义应用与服务,以及服务与服务之间的依赖关系。 (3)不能高效地共享和重用服务。比如两个应用都要用到MySQL服务,但配置的参数不一样,这两个应用只能分别复制一套标准的MySQL配置文件,修改后通过kubectl apply部署。也就是说,不支持参数化配置和多环境部署。 (4)不支持应用级别的版本管理。虽然可以通过kubectl rollout undo进行回滚,但这只能针对单个Deployment,不支持整个应用的回滚。 (5)不支持对部署的应用状态进行验证。比如是否能通过预定义的账号访问MySQL。虽然Kubernetes有健康检查,但那是针对单个容器,我们需要应用(服务)级别的健康检查。

chart

chart是Helm的应用打包格式。chart由一系列文件组成,这些文件描述了Kubernetes部署应用时所需要的资源,比如Service、Deployment、PersistentVolumeClaim、Secret、ConfigMap等。

chart将这些文件放置在预定义的目录结构中,通常整个chart被打成tar包,而且标注上版本信息,便于Helm部署。

初始化helm chart模版

$ helm create gateway

格式:

gateway          #目录名就是chart的名字(不带版本信息)
 |--- chat.yaml  # 描述chart的概要信息
 |--- value.yaml # chart支持在安装时根据参数进行定制化配置,而values.yaml则提供了这些配置参数的默认值
 |--- README.md # Markdown格式的README文件,相当于chart的使用文档,此文件为可选
 |--- templates # templates目录各类Kubernetes资源的配置模板都放置在这里。Helm会将values.yaml中的参数值注入模板中,生成标准的YAML配置文件。模板增加了应用部署的灵活性,能够适用不同的环境
   |--- deployment.yaml # YAML格式的资源配置文件,使用values.yaml中的参数值注入模板
   |--- hpa.yaml
   |--- service.yaml
   |--- NOTES.txt # chart的简易使用文档,chart安装成功后会显示此文档内容

查看chart的使用方法:

helm inspect values [CHART] [flags]

安装升级

https://helm.sh/docs/helm/helm_upgrade/#helm

helm upgrade --set env.deployTime=$(DEPLOY_TIME),env.version=$(APP_VERSION),app.image=$(IMAGE_VPC_ADDR) --install $(RELEASE_NAME) deployments/$(APP_NAME) -f ${HELM_VALUES} -n rec-$(APP_MODE)
  • 怎么区分环境

参考: https://helm.sh/ https://helm.sh/docs/intro/quickstart/ https://github.com/helm/helm

Search

    Table of Contents