Helm 是一个 Kubernetes 的包管理工具,类似 Linux 的包管理器,如RedHat系的yum、Debian的apt,可以很方便的将之前打包好的 yaml 文件部署到 Kubernetes 上。Helm主要解决以下问题:1、把yaml作为一个整体管理。2、实现yaml的高效复用。3、实现应用级别的版本管理。
当前 Helm 已经升级到V3版本,相比于V2版本主要变化如下:
1、 最明显的变化是删除了 Tiller 。
2、 Release 名称可以在不同命名空间重用。
3、 支持将 Chart 推送至 Docker 镜像仓库中。
4、 使用 JSONSchema 验证 chart values。
Helm 有3个重要概念:
1、helm: 一个命令行客户端工具,主要用于 Kubernetes 应用 chart 的创建、 打包、 发布和管理。
2、Chart:应用描述,一系列用于描述 k8s 资源相关文件的集合。
3、Release:基于 Chart 的部署实体,一个 chart 被 Helm 运行后将会生成对应的一个release;release是在 k8s 中创建出真实运行的资源对象。
下图是 Helm V2 与 Helm V3 的架构图对比:
V2版本的架构中,Tiller在Kubernetes集群中,Helm Client发请求给Tiller需要经过RBAC认证。而V3版本是Helm通过kubeconfig连接kube-apiserver,避免了使用者去配置RBAC权限。
安装Helm V3版本非常简单,只需要下载Helm的二进制文件,并复制到 Kubernetes 主节点的 /usr/bin 目录即可。
Helm下载地址 https://get.helm.sh/helm-v3.4.2-linux-amd64.tar.gz
解压Helm
tar zxvf helm-v3.4.2-linux-amd64.tar.gz
移动到主节点 /usr/bin 目录
mv linux-amd64/helm /usr/bin/
验证是否安装成功
helm version
如同yum、apt拥有仓库一样,Helm也有仓库,使用Helm默认仓库下载Chart比较慢,可以增加微软、阿里的仓库。
添加微软Chart仓库
helm repo add stable http://mirror.azure.cn/kubernetes/charts
添加阿里Chart仓库
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
更新Chart仓库
helm repo update
查看仓库列表
helm repo list
删除仓库
helm repo remove aliyun
Weave Scope 是一款 Docker 和 Kubernetes 可视化监控工具,可以监控 Kubernetes 集群中的一系列资源的状态、资源使用情况、应用拓扑、scale、还提供通过浏览器进入容器内部调试等功能。Helm 仓库提供了 Weave Scope 编写好的 Chart,使用 Helm 安装 Weave Scope 非常方便。
在chart仓库中查找weave
helm search repo weave
安装stable/weave-scope。注意 helm install 后面接的第一个参数叫做Release,名字可以随意取,我们起名为ui
helm install ui stable/weave-scope
查看所有Release
helm list
查看单个Release状态
helm status ui
weave-scope安装完之后,需要配置ingress才能在集群外部用浏览器打开weave-scope的可视化页面。如果你的k8s集群没有安装ingress-controller可以查看这篇博客 https://blog.csdn.net/u010606397/article/details/107815079
配置ingress规则
vim ingress-weave.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress-my
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: weave.k8s01.com
http:
paths:
- path: /
backend:
serviceName: ui-weave-scope
servicePort: 80
配置 /etc/hosts 将 weave.k8s01.com 映射到本机 127.0.0.1
vim /etc/hosts
加入如下内容
127.0.0.1 weave.k8s01.com
部署ingress
kubectl apply ingress-weave.yaml
修改宿主机 hosts 文件,添加 DNS 映射,window 系统的 hosts 文件在 C:\Windows\System32\drivers\etc 目录下。
Kubernetes主节点IP weave.k8s01.com
打开浏览器,访问 Weave Scope 可视化页面。注意,端口不一定是30080,这取决于你集群上ingress-controller的配置
http://weave.k8s01.com:30080/
如果每部署一个k8s应用都需要写一份deployment、service配置,应用多的时候会很难管理,并且每个应用的deployment、service配置大同小异,将deployment、service做成模板可大大减少配置文件数量。
创建自定义Chart
helm create template-chart
template-chart目录的文件结构如下:
├── charts
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ ├── _helpers.tpl
│ ├── ingress.yaml
│ ├── NOTES.txt
│ └── service.yaml
└── values.yaml
Chart.yaml:用于描述这个 Chart 的基本信息,包括名字、描述信息以及版本等。
values.yaml:用于存储 templates 目录中模板文件中用到变量的值。
Templates:目录里面存放所有 yaml 模板文件。
charts:目录里存放这个 chart 依赖的所有子 chart。
NOTES.txt :用于介绍 Chart 帮助信息,helm install 部署后展示给用户。例如:如何使用这个 Chart、 列出缺省的设置等。
_helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用。
为了简单,本博客仅保留部分配置文件,其他文件删除,保留文件如下:
values.yaml用于存放变量,values.yaml配置如下
replicas: 1
image: nginx
tag: 1.16
label: nginx
servicePort: 80
targetPort: 80
serviceType: NodePort
templates目录用于存放模板文件,模板文件通过 {{ .Values.xxxxxx }} 获取values.yaml中定义的值,例如:{{ .Values.replicas }} 、{{ .Values.image }}。
另外,部署自定义chart的命令是 helm install nginx-web template-chart 。 helm install 命令的第一个参数称为 Release,名字可以随意取,模板文件使用 {{ .Release.Name }} 可获取Release名称;第二个参数 template-chart 是自定义chart的目录名。
修改 deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: {{ .Values.label }}
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicas }}
selector:
matchLabels:
app: {{ .Values.label }}
template:
metadata:
labels:
app: {{ .Values.label }}
spec:
containers:
- image: {{ .Values.image }}:{{ .Values.tag }}
name: nginx
修改service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: {{ .Values.label }}
name: {{ .Release.Name }}
spec:
ports:
- port: {{ .Values.servicePort }}
protocol: TCP
targetPort: {{ .Values.targetPort }}
selector:
app: {{ .Values.label }}
type: {{ .Values.serviceType }}
NOTES.txt 随便写个欢迎信息即可
hello
.helmingore、Chart.yaml 不需要修改
安装自定义chart
helm install nginx-web template-chart
由于service是NodePort类型,对外暴露了端口。查看service对外暴露的端口
kubectl get svc
访问nginx
http://主节点IP:30076/
卸载 Helm 安装的 Release
helm uninstall nginx-web