Myluzh Blog

K8s笔记-Helm

发布时间: 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部署
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   


标签: k8s helm chart

发表评论