学习Helm来提高K8S运维效率

这篇具有很好参考价值的文章主要介绍了学习Helm来提高K8S运维效率。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

阶段一:了解 Helm 的基础知识和概念

Helm 简介:

  • Helm 是 Kubernetes 的一个包管理工具,用于简化应用程序在 Kubernetes 上的部署和管理过程。
  • 它允许您使用预定义的模板(Charts)来描述应用程序的组件、依赖关系和配置。
  • Helm Charts 可以重复使用,提高了应用程序的可维护性和可扩展性。

Helm 架构

  • Helm 包含两个主要组件:Helm 客户端和 Tiller(在 Helm 3 中已移除)。
  • Helm 客户端用于与用户交互,管理 Charts 和发布 Releases。
  • Tiller 是 Helm 的服务端组件,负责在 Kubernetes 集群中创建和管理资源。

Helm Charts

  • Helm Chart 是一个预定义的应用程序模板,用于描述如何在 Kubernetes 上部署应用程序。
  • Chart 包含 Kubernetes 资源定义文件(YAML 格式),如 Deployment、Service、ConfigMap 等。
  • Chart 中使用模板引擎(Go 的 text/template 和 sprig 函数库)来生成可配置的 Kubernetes 资源。
  • Chart 还包含 values.yaml 文件,用于存储配置选项和参数化的值,使 Chart 可以根据不同的环境进行配置。

阶段二:安装和配置 Helm

安装 Helm

  • 按照 Helm 官方网站的安装指南进行安装。通常,您可以从 Helm GitHub 存储库下载适用于您的操作系统的最新版本。
  • 安装完成后,确保将 Helm 可执行文件添加到系统 PATH 中,以便在任何目录下都可以运行 Helm 命令。

初始化 Helm(对于 Helm 2)

  • 使用 helm init 命令在 Kubernetes 集群上初始化 Helm,并部署 Tiller。
  • 在 Helm 3 中,Tiller 已被移除,初始化过程变得更加简单,您不再需要执行 helm init。

添加 Helm 仓库

  • Helm 仓库是存储 Helm Charts 的地方。您可以从默认的公共仓库获取 Charts,也可以添加自定义的仓库。
  • 使用
helm repo add
  • 命令添加仓库,比如添加 stable 仓库:
helm repo add stable https://charts.helm.sh/stable

阶段三:使用 Helm 管理应用程序

搜索和查看 Charts

  • 使用 helm search repo 命令来搜索 Helm 仓库中的 Charts,并查看 Charts 的详细信息。
  • 例如,搜索 WordPress Chart:
helm search repo wordpress
  • 查看 Chart 的详细信息:
helm show chart stable/wordpress

安装应用程序

  • 使用 helm install 命令安装 Helm Chart 到 Kubernetes 集群。
  • 例如,安装 WordPress Chart:
helm install my-wordpress stable/wordpress
  • 上述命令会将 WordPress 安装为一个 Helm Release,Release 名称为 my-wordpress。

查看已安装的应用程序

  • 使用 helm list 命令查看已安装的 Helm Releases 及其状态。
  • 例如,查看已安装的 Releases:
helm list

卸载应用程序

  • 使用 helm uninstall 命令卸载已安装的 Helm Release。
  • 例如,卸载名为 my-wordpress 的 Release:
helm uninstall my-wordpress

更新应用程序

  • 使用 helm upgrade 命令更新已安装的 Helm Release。
  • 例如,更新 my-wordpress Release 的 Chart 版本:
helm upgrade my-wordpress stable/wordpress --version 9.0.0

回滚应用程序

  • 使用 helm rollback 命令回滚到之前的 Helm Release 版本。
  • 例如,回滚 my-wordpress Release 到第一个版本:
helm rollback my-wordpress 1

阶段四:编写自定义的 Helm Charts

Chart 结构

  • Helm Chart 的目录结构非常重要,它影响了 Chart 的可读性和维护性。
  • 典型的 Chart 目录结构如下:
├── Chart.yaml # Chart 的元信息,包括版本、名称、描述等
├── values.yaml # 默认的配置值
├── charts/ # 用于存放其他依赖的 Helm Charts
└── templates/ # 存放模板文件,生成 Kubernetes 资源

Chart 模板

  • Helm 使用 Go 的 text/template 和 sprig 函数库作为模板引擎,模板中包含注释和代码。
  • 模板中的重要变量有 .Values、.Release 和 .Template。
.Values
  • 可用于访问 values.yaml 中定义的值,例如:
apiVersion: apps/v1
kind: Deployment
metadata:
 name: {{ .Values.appName }}

Values 文件

  • Values 文件用于存储配置选项和参数化 Chart 的部署,使 Chart 可以在不同环境中进行配置。
  • 在 values.yaml 文件中,您可以定义默认的配置值,并且在模板文件中使用这些值。
  • 例如,在 values.yaml 中定义:
appName: my-app
replicas: 3
image:
 repository: myregistry/my-app
 tag: latest

依赖管理

  • Helm 允许您在 Chart 中管理依赖关系,这样您可以更好地组织和复用 Charts。
  • 可以在 Chart.yaml 中使用 dependencies 字段指定依赖的 Charts。
  • 通过 helm dependency 命令下载和更新依赖的 Charts。
  • 了解如何在 Chart 中使用依赖的资源,例如,将其他 Chart 中的服务作为子 Chart 部署到您的应用程序中。

阶段五:高级主题

使用 Helm Hooks

Helm Hooks 允许您在特定阶段执行脚本,例如在安装、升级或删除 Helm Release 的不同生命周期中。这对于执行应用程序初始化、数据库迁移、配置更新等操作非常有用。

使用 Helm Hooks 的一般步骤:

  1. 在 Chart 中定义 Hooks:在 Chart 的 templates 目录中,创建一个或多个以 .yaml 结尾的文件,这些文件将包含 Hook 的定义。例如,templates/pre-install.yaml 文件定义了一个在安装 Release 前执行的 Hook。
  1. 使用 Hook 模板:在 Hook 模板中,您可以使用 Helm 的模板引擎来生成 Kubernetes 资源,就像您在其他模板中所做的那样。
  1. 在 Chart 的 Chart.yaml 文件中指定 Hook:在 Chart.yaml 文件的 hooks 部分,您可以为每个 Hook 文件定义一个条目,以指定何时执行该 Hook。

使用示例:

假设您有一个 pre-install.yaml 文件,其中包含以下内容:

 apiVersion: batch/v1
 kind: Job
 metadata:
   name: {{ .Release.Name }}-pre-install-job
 spec:
   template:
     spec:
       containers:
         - name: pre-install
           image: busybox
           command: ['sh', '-c', 'echo "Pre-install hook executed"']
       restartPolicy: Never

在 Chart.yaml 文件的 hooks 部分,添加以下内容:

 hooks:
   pre-install:
     - name: pre-install-job
       manifest: templates/pre-install.yaml

这样,在安装 Release 之前,Helm 将创建一个名为 pre-install-job 的 Job,并在其中执行定义的操作。

使用 Helm Secrets

Helm Secrets 是一个 Helm 插件,用于管理加密的敏感信息,如密码、证书等。它使用 PGP 密钥对敏感数据进行加密,确保在 Chart 中不明文存储敏感信息。

使用 Helm Secrets 的一般步骤:

  1. 安装 Helm Secrets:首先,您需要安装 Helm Secrets 插件。您可以通过在 Helm 客户端上执行以下命令来安装它:
 helm plugin install https://github.com/zendesk/helm-secrets
  1. 初始化 Helm Secrets:在 Helm Chart 中使用 Helm Secrets 插件之前,需要对 Chart 进行初始化,以确保密钥环境正确设置。
 helm secrets init <path/to/your/chart>
  1. 加密敏感信息:在 Chart 的 values.yaml 文件中,您可以使用 Helm Secrets 提供的 helm secrets enc 命令加密敏感信息。
 helm secrets enc values.yaml
  1. 解密敏感信息:在需要访问敏感信息的时候,您可以使用 Helm Secrets 提供的 helm secrets dec 命令解密它们。
 helm secrets dec values.yaml

使用示例:

假设您在 values.yaml 文件中有以下敏感信息:

  password: mysecretpassword

使用以下命令对其进行加密:

 helm secrets enc values.yaml

这将生成一个名为 values.yaml.dec 的加密文件。在使用 Chart 时,Helm Secrets 会自动解密这些敏感信息。

使用 Helm Plugins

Helm 插件是一种扩展 Helm 功能的方式,它允许您添加自定义命令或功能。可以使用 Helm 插件来扩展 Helm 的能力,实现特定的自动化或增强用户体验。

编写 Helm 插件

首先,您需要编写自己的 Helm 插件,这通常是一个独立的可执行文件。

编写 Helm 插件需要以下步骤:

  1. 创建一个新的目录,并命名为您的插件名称,例如 helm-plugin-example。
  1. 在该目录下创建一个名为 helm-plugin-example.go 的 Go 语言源代码文件。
  1. 在 helm-plugin-example.go 文件中编写插件的代码。一个简单的 Helm 插件需要实现以下接口:
 go
 package main
 
 import (
     "fmt"
     "os"
 
     "github.com/mitchellh/cli"
 )
 
 type Plugin struct{}
 
 func (p *Plugin) Help() string {
     return "This is a Helm plugin example"
 }
 
 func (p *Plugin) Synopsis() string {
     return "A brief description of the plugin"
 }
 
 func (p *Plugin) Run(args []string) int {
     fmt.Println("Running the Helm plugin example")
     return 0
 }
 
 func main() {
     plugin := &Plugin{}
     cli := &cli.CLI{
         Args:     os.Args[1:],
         Commands: map[string]cli.CommandFactory{},
         HelpFunc: cli.BasicHelpFunc("helm-plugin-example"),
         Synopsis: "A brief description of the plugin",
     }
     exitCode, err := cli.Run()
     if err != nil {
         fmt.Fprintf(os.Stderr, "Error: %s\n", err)
     }
     os.Exit(exitCode)
 }

这是一个非常简单的例子,实际的 Helm 插件可能包含更多复杂的逻辑和功能。

构建 Helm 插件

编写完 Helm 插件的代码后,您需要构建它,生成一个可执行的二进制文件。

  • 在插件目录中执行以下命令,使用 Go 语言的编译器构建插件:
 go build -o helm-plugin-example
  • 这将在插件目录中生成一个名为 helm-plugin-example 的可执行文件。

安装 Helm 插件

将编写的插件二进制文件放置在 Helm 客户端可以访问的位置,例如将其添加到系统 PATH 或放在 Helm 客户端所在目录。

在构建好插件后,您需要将它安装到 Helm 客户端,以便 Helm 可以识别并调用您的插件。

  • 将插件二进制文件复制到 Helm 客户端可以访问的位置,例如将其放在 Helm 客户端所在目录,或将其添加到系统 PATH。
  • 确保插件可执行权限,以便 Helm 可以执行它。

使用 Helm 插件

现在您的 Helm 插件已经安装,您可以在 Helm 命令前加上插件名称,调用您编写的自定义 Helm 命令。

使用示例:

假设您编写了一个名为 helm-plugin-example 的 Helm 插件,并将其安装到系统 PATH。然后,您可以执行以下命令运行插件:

 helm plugin-example

插件将输出 "Running the Helm plugin example"。

更复杂的 Helm 插件功能:

您可以通过编写更复杂的 Helm 插件来实现更多功能,例如:文章来源地址https://www.toymoban.com/news/detail-634205.html

  • 调用 Kubernetes API:您的插件可以与 Kubernetes API 交互,获取资源信息、执行操作等。
  • 增强 Helm 命令:您可以扩展 Helm 命令,添加自定义的参数、选项或子命令。
  • 与外部系统集成:您的插件可以与其他系统进行集成,例如配置管理工具、CI/CD 系统等。
  • 读取和操作 Helm Charts:您的插件可以读取和操作 Helm Charts 的内容,例如解析 Chart 文件、获取资源信息等。

到了这里,关于学习Helm来提高K8S运维效率的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云原生Kubernetes:简化K8S应用部署工具Helm

    目录 一、理论 1.HELM ​编辑 2.部署HELM2 3.部署HELM3(2to3方式) 4.部署HELM3(单独安装) 二、实验 1.部署 HELM2 2.部署HELM3(2to3方式) 3.部署HELM3(单独安装) 三、问题 1.api版本过期 2.helm初始化报错 3.pod状态为ImagePullBackOff 4.helm 命令显示 no repositories to show 的错误 5.Helm安装报错

    2024年02月07日
    浏览(65)
  • [Kubernetes]8. K8s使用Helm部署mysql集群(主从数据库集群)

    上一节讲解了K8s包管理工具Helm、使用Helm部署mongodb集群(主从数据库集群),这里来看看 K8s使用Helm部署mysql集群(主从数据库集群) 无本地存储: 当重启的时候,数据库消失 (1).打开官网的应用中心 打开应用中心,搜索mysql (2).安装  1).添加repo仓库 2).安装 具体命令如下:  3).自动生成

    2024年01月21日
    浏览(81)
  • 一小时完成Rancher高可用搭建丨基于kubernetes(K8s)完成丨Docker helm

    一句话介绍:Rancher可用于对K8S集群进行部署及实现对业务部署进行管理等。 对于规模化较小的管理团队或初始使用Rancher管理K8S集群部署,建议使用此种方式。 对于具体一定规模且有一定K8S管理经验的团队,我们建议可以通过在Kubernetes部署Rancher,以达到Rancher高可用目的。

    2024年02月04日
    浏览(57)
  • k8s学习-第4部分Helm(Helm安装MySQL集群)

    Helm简介 Helm 是一个 Kubernetes 应用的包管理工具,类似于 Ubuntu 的 APT 和 CentOS 中的 YUM。 Helm使用chart 来封装kubernetes应用的 YAML 文件,我们只需要设置自己的参数,就可以实现自动化的快速部署应用。 三大概念 Chart 代表着 Helm 包。 它包含运行应用程序需要的所有资源定义和依

    2024年02月08日
    浏览(83)
  • 【Kubernetes运维篇】RBAC之创建集群用户管理K8S

    需求:公司新入职两位运维同事,分别是zhangsan、lisi,刚入职肯定不能给K8S管理员权限,所以需要创建两个系统账号,分别对应不同的权限: zhangsan用户 :对uat名称空间拥有管理员权限 lisi用户 :对所有命名空间拥有查看Pod的权限 第一步:生成一个私钥 第二步:生成一个证

    2024年02月16日
    浏览(51)
  • Kubernetes(K8S)学习(三):K8S实战案例

    附:查看命名空间命令 kubectl get namespace kubectl get ns 创建wordpress-db.yaml文件,这里以mysql作为wordpress的db: yaml内容: 根据wordpress-db.yaml配置,创建资源mysql数据库: yaml中MySQL配置说明: 用户:root       密码:rootPassW0rd 数据库名称:wordpress 用户:wordpress       密码:wo

    2024年04月09日
    浏览(86)
  • K8s(Kubernetes)学习(二):k8s集群搭建

    minikube 只是一个 K8S 集群模拟器,只有一个节点的集群,只为测试用,master 和 worker 都在一起。 裸机安装 至少需要两台机器(主节点、工作节点个一台),需要自己安装 Kubernetes 组件,配置会稍微麻烦点。 缺点:配置麻烦,缺少生态支持,例如负载均衡器、云存储。 直接用

    2024年02月09日
    浏览(62)
  • 【Kubernetes 企业项目实战】06、基于 Jenkins+K8s 构建 DevOps 自动化运维管理平台(中)

    目录 一、基于 Jenkins+k8s+Git+Docker Hub 等技术链构建企业级 DevOps 容器云平台 1.1 安装 Jenkins 1.1.1 安装 nfs 服务 1.1.2 在 kubernetes 中部署 jenkins 1.2 配置 Jenkins ​1.2.1 获取管理员密码 1.2.2 安装插件 1.2.3 创建第一个管理员用户 1.3 测试 jenkins 的 CI/CD 1.3.1 在 Jenkins 中安装 kubernetes 插件

    2024年01月16日
    浏览(78)
  • K8s(Kubernetes)学习(一):k8s概念及组件

    Kubernetes中文文档:https://kubernetes.io/zh-cn/docs/home/ Kubernetes源码地址:https://github.com/kubernetes/kubernetes 首先要了解应用程序部署经历了以下几个时代: 传统部署时代:在物理服务器上运行应用程序。 虚拟化部署时代:虚拟化技术允许你在单个物理服务器的 CPU 上运行多台虚拟机

    2024年02月05日
    浏览(55)
  • Kubernetes(K8S)学习(四):K8S之Storage

    kubernetes使用NFS共享存储有两种方式: (1)手动方式静态创建所需要的PV和PVC(见本文1.3.2小节)。 (2)通过创建PVC动态地申请PV(见本文1.4.2小节)。 Volume地址 :https://kubernetes.io/docs/concepts/storage/ 1.1.1、Volume简介 volume(/ˈvɒljuːm/,IT词汇–百度百科): 在电脑中, volume(

    2024年04月15日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包