K8s笔记-Helm
作者:myluzh 分类: Kubernetes 长度:4914 阅读:481
0x01 Helm 引入
如果使用之前的方式通过yaml部署单一应用,少数服务的应用比较合适。但是如果部署微服务项目,可能有十几个服务,每个服务都有一套yaml文件,需要维护大量yaml文件,版本管理特别不方便。
使用heml可以吧这些yaml作为一个整体管理,实现yaml高效复用,使用heml应用级别的版本管理。
0x02 Helm 介绍
Helm 是一个 Kubernetes 的包管理工具,很方便的将之前打包好的 vaml 文件部署到 kubernetes 。
Helm 有 3 个重要概念:
(1)Helm:一个命令行客户端工具,主要用于 Kubernetes 应用 chart 的创建、打包、发布跟管理。
(2)Chart:应用描述,一系列用于描述k8s资源相关文件的集合
(3)Release:基于 Chart 的部署实体一个 chart 被 Helm 运行后将会生成对应的一个release;将在 k8s 中创建出真实运行的资源对象。
0x03 Helm安装与配置仓库
1、Helm安装
官网安装手册:https://helm.sh/zh/docs/intro/install/
下载 需要的版本:https://github.com/helm/helm/releases
解压(tar -zxvf helm-v3.0.0-linux-amd64.tar.gz)
在解压目录中找到helm程序,移动到需要的目录中(mv linux-amd64/helm /usr/local/bin/helm)
2、配置Helm仓库
配置命令格式:
# helm repo add xxxx xxxx
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
更新仓库地址:
helm repo update
0x04 Helm快速部署应用
# 搜索应用
# 格式 helm search repo 名称
[root@master ~]# helm search repo weave
NAME CHART VERSION APP VERSION DESCRIPTION
aliyun/weave-cloud 0.1.2 Kubernetes which pro...
aliyun/weave-scope 0.9.2 1.6.5 A Helm chart for...
# 安装应用
# 格式 helm install 安装后的名称 repo搜索到的名称
[root@master ~]# helm install myui aliyun/weave-scope
# 安装后看下svc 可以修改成nodeport
[root@master ~]# kubectl edit svc ui-weave-scope
# 查看安装后的状态
[root@master ~]# helm list
[root@master ~]# helm status 安装后的名称
0x05 自定义Chart部署
1、使用命令创建一个chart模版
[root@k8s-master01 heml]# helm create mychart
Creating mychart
[root@k8s-master01 mychart]# tree
├── charts
├── Chart.yaml # 当前chart属性配置信息
├── templates # 编写yaml文件放到这个目录
└── values.yaml # yaml文件可以使用全局变量
2、把templates里面文件清空掉,创建两个yaml文件
[root@k8s-master01 templates]# kubectl create deployment web1 --image=nginx --dry-run -o yaml > deployment.yaml
[root@k8s-master01 templates]# kubectl apply -f deployment.yaml
[root@k8s-master01 templates]# kubectl expose deployment web1 --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > service.yaml
[root@k8s-master01 templates]# kubectl delete deployment web1
[root@k8s-master01 templates]# ls
deployment.yaml service.yaml
3、安装自定义应用mychart
[root@k8s-master01 heml]# helm install web1 ./mychart
NAME: web1
LAST DEPLOYED: Fri Nov 10 14:40:31 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
# 可以看到已经通过helm部署起来了
[root@k8s-master01 heml]# kubectl get all
NAME READY STATUS RESTARTS AGE
pod/web1-8c7889f4d-8kns8 1/1 Running 0 25s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/web1 NodePort 10.43.51.190 <none> 80:32096/TCP 25s
4、升级自定义应用mychart
# 尝试把templates里面的deployment.yaml副本数量改成2
[root@k8s-master01 heml]# vi ./mychart/templates/deployment.yaml
# 使用helm upgrade命令进行升级
[root@k8s-master01 heml]# helm upgrade web1 ./mychart
Release "web1" has been upgraded. Happy Helming!
NAME: web1
LAST DEPLOYED: Fri Nov 10 14:42:59 2023
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
0x06 chart模板使用(实现yaml高效复用)
yaml文件大体有几个地方不同的比如:image、tag、label,port,replicas。在chart有values.yaml文件,定义yaml文件全局变量
1、在values.yaml定义变量跟值
[root@k8s-master01 mychart]# vim values.yaml
replicas: 1
tag: 1.16
label: nginx
port: 80
2、在具体yaml文件,获取定义变量值
[root@k8s-master01 templates]# vim deployment.yaml
# 通过表达式使用values里面的全局变量
# {{.values.变量名称}}
# 下面这个值是动态生成,每次都不一样
# {{.Release.Name}}
# 注意大小写
replicas: {{.Values.replicas}}
...
3、部署自定义的helm
# 使用--dry-run模拟部署,有错误的话可以发现。
helm install --dry-run web2 mychart/
# 部署helm为web2
[root@k8s-master01 heml]# helm install web2 mychart/
NAME: web2
LAST DEPLOYED: Wed Nov 22 09:02:12 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
# 卸载掉web1
[root@k8s-master01 heml]# helm uninstall web1
release "web1" uninstalled
# 查看Helm所有安装程序(如果想要查看更详细的信息,可以添加-a)
[root@k8s-master01 heml]# helm ls -a
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
web2 default 1 2023-11-22 09:02:12.25363699 +0800 CST deployed mychart-0.1.0 1.16.0