Kubernetes(k8s)-Helm内部逻辑

93 阅读4分钟

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。

我们上一小节通过Helm的命令完成了一个应用的生命周期管理,但是我们对于这个helm的逻辑是什么,如果我需要对这个helm做一些修改,如果是离线环境又怎么做部署应用。本小节就来讲解这些信息。

1.下载chart包

#这个命令可以把helm包下载本地
#有点类似yum只下载不安装
helm pull azure/redis --version 10.5.7

2.查看helm包内容

#下面是一个典型chart目录结构
mychart/
├── Chart.yaml          # 包含Chart信息的YAML文件
├── values.yaml         # 包含默认配置值的YAML文件
├── charts/             # 包含任何依赖chart的目录
├── templates/          # 包含Kubernetes manifest模板的目录
│   ├── deployment.yaml # Kubernetes部署对象的模板
│   ├── service.yaml    # Kubernetes服务对象的模板
│   ├── _helpers.tpl    # 用于模板化的辅助对象和函数
│   └── ...
└── templates/tests/    # 包含测试配置的目录

tar xvf redis-10.5.6.tgz
#不同的chart的内容可能略有不同,但是几个关键文件名字肯定是一样的。

3.解析helm详细信息

Chart.yaml:文件是 Helm Chart 的核心配置文件,它包含了关于 Chart 的元数据信息。这些元数据不仅用于描述 Chart 本身,还帮助 Helm 工具管理和部署应用程序到 Kubernetes 集群中。

apiVersion: v1
appVersion: 5.0.7
description: Open source, advanced key-value store. It is often referred to as a data
  structure server since keys can contain strings, hashes, lists, sets and sorted
  sets.
engine: gotpl
home: http://redis.io/
icon: https://bitnami.com/assets/stacks/redis/img/redis-stack-220x234.png
keywords:
- redis
- keyvalue
- database
maintainers:
- email: containers@bitnami.com
  name: Bitnami
- email: cedric@desaintmartin.fr
  name: desaintmartin
name: redis
sources:
- https://github.com/bitnami/bitnami-docker-redis
version: 10.5.6

apiVersion: Chart API 版本。这里使用的是 v1,这是最新的稳定版本之一。

appVersion: 表示这个 Chart 所打包的应用程序(Redis)的版本号。在这个例子中,应用程序的版本是 5.0.7。

keywords: 列出了与 Chart 相关的关键字,方便用户搜索。例如,用户可以通过关键词 redis 或 keyvalue 查找这个 Chart。

name: redisChart 的名称,这里是 redis,意味着这是一个专门用于部署Redis 应用程序的 Chart。

version: Chart 自身的版本号,不是应用程序的版本号。每次对 Chart 进行更改时,都应该更新这个版本号。当前版本为 10.5.6。

templates目录:它包含了定义 Kubernetes 资源的模板文件。这些模板使用 Go 模板语法编写,并且可以根据 values.yaml 文件中的配置动态生成最终的 Kubernetes YAML 文件,从名字来看,包含svc,cm,secret,sts等资源。

value*.yaml文件:文件是 Helm Chart 中的一个关键组件,它定义了 Chart 的默认配置值。当用户安装或升级一个 Chart 时,Helm 会使用 values.yaml 文件中的值来填充templates模板,生成最终的 Kubernetes 资源定义文件。主要包括我们讲过的镜像,副本,健康检查,request&limit,configmap等资源,当然也包部分我们未讲解的pv&pvc,亲和性,监控等信息。

如果我们需要对这个helm进行修改,其实主要就是针对这个value.yaml文件进行修改。比如因为docker仓库被墙的问题,我们需要调整镜像地址,就是修改下面的内容。

#修改前
image:
  registry: docker.io
  repository: bitnami/redis
  tag: 5.0.7-debian-10-r32
  pullPolicy: IfNotPresent
  
 #修改后
 
image:
  registry: registry.cn-hangzhou.aliyuncs.com
  repository: my-namespace/redis
  tag: 5.0.7-debian-10-r32
  pullPolicy: IfNotPresent

4.离线安装Helm

#离线安装
helm install my-redis ./redis -n my-namespace

5.总结

其实,这个Helm就是一堆资源模板,然后有被通过另一个文件把这些模板渲染成真实的Kubernetes的资源文件,就是哪些Deploymnet,Service,ConfigMap,Secret等资源。这样可以快速部署应用。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。