作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们上一章介绍了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等资源。这样可以快速部署应用。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。