文章目录
- 前言
- 1、前置相关知识
- 2、Helm 是什么?
- 3、相关网站
- 官网
- 中文网站
- 4、安装&使用
- 4.1、Windows
- 安装
- 使用
- 5、文件及参数说明
- Template 中文件的作用
- Service
- spec.type (ClusterIP、NodePort、ExternalName)
- Deployment
- kind: StatefulSet
- 变量名
- Ingress
- 6、错误处理
- Deploy
- 总结
前言
本文主要介绍 Helm 的简单使用,及简单的配置说明。
并没有涉及到与 K8s 之间的通讯(有很多可以参考的,看其他的吧。例如:官网)。
提示:Helm 的 yaml 文件不要使用 IDEA 编辑。格式化要求不同,会导致异常。
1、前置相关知识
2、Helm 是什么?
Helm 是 Kubernetes 的包管理器,类似于 Python 的 pip , centos 的 yum ,主要用来管理 Charts 。
Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。对于应用发布者而言,可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
对于使用者而言,使用 Helm 后不用需要编写复杂的应用部署文件,可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序
3、相关网站
官网
中文网站
4、安装&使用
4.1、Windows
操作系统:Windows 11 21H2
Helm : 3.8.1
安装
文件名:helm-v3.8.1-windows-amd64.zip
将压缩文件进行解压
将解压的文件夹添加到环境变量 Path 中(Windows 11 此电脑 -》 鼠标右键 -》 高级系统设置 -》 环境变量 -》 Path -》编辑 -》新建 -》 文件夹路径)
检查是否配置正常: Windows 徽标 + R 打开运行窗口 -》 输入 cmd -》 显示命令行窗口
# 查看 helm 版本
C:\Users\xyz>helm version
version.BuildInfo{Version:"v3.8.1", GitCommit:"***", GitTreeState:"clean", GoVersion:"go1.17.5"}
使用
示例:
# 创建 myapp chart 包
helm create myapp
# lint 命令可检验语法错误
helm lint .\myapp
# 打包
helm package .\myapp
# 打包结果放到 K8s 集群即可使用
5、文件及参数说明
myapp chart 包结构如下:
Chart.yaml:当前 Charts 的描述信息,yaml 格式的文件。
values.yaml:当前 Charts 用到的默认配置值。
templates/:目录,存放当前 Charts 用到的模板文件,可应用于 Charts 生成有效的Kuber-netes 清单文件。
Template 中文件的作用
说明:Template 文件夹中的文件名不重要,重要的是文件内容中 kind 对应的内容。
- kind : Deployment 。 创建 Kubernetes Deployment 脚本以启动 Pod。
- kind : Service 。 创建 Kubernetes Service 脚本以定义容器与外界之间的通信接。
- kind : Ingress 。 编写 Kubernetes Ingress 脚本来定义与外界的通信。
Service
创建 Kubernetes Service 脚本以定义容器与外界之间的通信接
spec.type (ClusterIP、NodePort、ExternalName)
- ClusterIP : 默认模式,仅用于集群内通信。
- NodePort : 服务对外的端口,如果不指定固定端口,默认自动分配。
- ExternalName : 会被绑定在一个实际的域名上。
Deployment
kind: StatefulSet
statefulset 是为了解决有状态服务的问题,而产生的一种资源类型( deployment 和 replicaSets 是解决无状态服务而设计的)。
变量名
kind: Deploy 文件中,env 中的变量名
1、含有符号 . 配置环境变量的时候需要转换为 _
# 示例
security.users.admin
SECURITY_USERS_ADMIN
2、变量名中的 - 符号去掉
原因:代码中会把后面的首字母改为大写。
# 示例
security.oauth2-auth.enabled
SECURITY_OAUTH2AUTH_ENABLED
Ingress
Ingress 如果配置了域名,需要注意:
- 如没有域名服务器,则需要客户端,本地配置 host ,然后通过 host 访问配置中的域名地址;
- 只有通过 host 访问,Ingress 配置才能生效;
- 通过 IP 进行访问,Ingress 配置不生效。
6、错误处理
Deploy
错误信息
failed to install app test. Error: release test failed: StatefulSet in version "v1" cannot be handled as a StatefulSet: v1.StatefulSet.Spec: v1.StatefulSetSpec.Template: v1.PodTemplateSpec.Spec: v1.PodSpec.Containers: []v1.Container: v1.Container.Env: []v1.EnvVar: v1.EnvVar.Value: ReadString: expects " or n, but found t, error found in #10 byte of ...|,"value":true},{"nam|..., bigger context ...|name":"ENABLED","value":true}
错误中的重点
ReadString: expects " or n, but found t, error found in
原因
env label value只支持string
解决方法
yaml文件中 spec.template.spec.containers.env 里面的 value 加上双引号(“true”)
总结
主要内容为简单的使用以及参数说明。
使用过程中,发现部分内容比较难找,因此总结记录一下。