发布时间: 2023-9-22 文章作者: myluzh 分类名称: Kubernetes 朗读文章
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部署
[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.yaml3、安装自定义应用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 25s4、升级自定义应用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: None0x06 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: 802、在具体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
发表评论