关于 kubectl 和 helm

2025-02-22 23:00

1 What

1.1 kubectl

Kubernetes 使用 YAML 配置文件和kubectl进行部署。

对于频繁更新的复杂部署来说,跟踪这些文件的所有不同版本可能会很困难。

1.2 helm

helm 是一个便捷的工具,它维护一个包含版本信息的 YAML 部署文件。通过该文件,只需几条命令就能设置和管理一个复杂的 Kubernetes 集群。

2

1.3 helm charts

helm charts是一个包,其中包含将应用程序部署到 Kubernetes 集群所需的所有资源。该包包含用于部署、服务、机密和配置映射的 YAML 文件,可根据需要设置应用程序。

可以单独对每个 Helm charts进行版本控制(git)和管理,从而更轻松地维护具有不同配置的应用程序的多个版本。 Helm 从第 3 版不再使用 Tiller 服务器。现在它使用纯客户端架构的直接与 Kubernetes API 服务器交互。

2 When

2.1 不应该使用 helm 的情况

  • Helm 对于同时管理多个容器最有帮助。对于需要在服务器上部署单个容器的项目,Helm 的效果并不理想。在这种情况下,可能没有必要使用 Helm,而且还会增加过程的复杂性。
  • 只有几个 Kubernetes 应用程序,可以不使用软件包管理器,手动处理它们。使用 Helm 可能不会带来明显的好处。
  • 组织有严格的安全策略阻止使用第三方工具。如果是这样无法在的环境中使用 Helm。

2.2 应该使用 helm 的情况

  • 一个包含多个 Kubernetes 应用程序的项目,这些应用程序需要作为一个整体进行管理和部署。Helm 将这些应用打包成一个单一的helm chart,使管理和部署应用变得更加方便。
  • 经常更新和部署 Kubernetes 应用程序,Helm 工具可以帮助管理应用程序生命周期,包括回滚。
  • 项目有许多团队或人员共同开发 Kubernetes 应用程序,Helm 可以共享和跟踪不同版本的 chart,帮助团队协同工作,并在部署时保持一致。

3 关于 kubectl 和 helm 的关系

3

3.1 核心概念

核心概念kubectlhelm
核心定位Kubernetes 的命令行工具,直接操作集群资源(如 Pod、Deployment、Service 等)。Kubernetes 的包管理器,专注于应用级部署与管理。
功能创建、删除、更新资源,查看状态,调试集群。通过 Chart 打包复杂应用,支持模板化配置、版本控制、依赖管理。
适用场景细粒度的资源管理,适合临时操作或简单应用部署。标准化、可复用的应用分发,适合多组件、多环境部署。
抽象层次底层操作:直接处理 YAML 文件或命令,逐一生效资源。上层抽象:将多个资源(如 Deployment、Service、ConfigMap)打包为 Chart,通过模板和变量动态生成配置。
命令示例kubectl apply -f deployment.yamlhelm install my-app ./my-chart –values=prod-values.yaml

3.2 核心功能

核心功能kubectlhelm
配置管理手动编辑多个 YAML 文件模板化配置(Go Template),支持变量替换
版本控制需借助 Git 或外部工具内置版本历史,支持一键回滚(helm rollback)
依赖管理支持 Chart 依赖(如数据库、中间件)
应用分发需共享 YAML 文件通过 Chart 仓库(如 Helm Hub)标准化分发
多环境适配需手动复制/修改 YAML通过 values.yaml 区分环境(开发、生产)

3.3 典型工作流程

kubectl

  1. 编写 YAML 文件定义资源。
  2. 执行 kubectl apply -f 部署。
  3. 手动管理不同环境的配置(如复制文件并修改参数)。

Helm

  1. 创建或使用现有 Chart(包含 values.yaml 和模板)。
  2. 通过 helm install 或 helm upgrade 部署,动态注入配置。
  3. 利用 helm rollback 回滚到历史版本。

3.4 协作关系

Helm 依赖 kubectl,Helm 底层通过 Kubernetes API 与集群交互(类似 kubectl),但无需直接调用 kubectl 命令。

混合使用场景:

  • 用 Helm 部署应用(如 helm install)。
  • 用 kubectl 调试资源(如 kubectl logs 或 kubectl describe)。

4 总结

  1. kubectl 是 Kubernetes 的“瑞士军刀”,适合直接操作资源。
  2. Helm 是应用管理的“自动化工具”,解决复杂部署的标准化与复用问题。
  3. 组合使用:Helm 负责整体应用生命周期,kubectl 处理具体资源调试。