一、helm简介
我们可以将Helm看作Kubernetes下的Maven/NPM. Python下的pip,Linux上的yum, Helm是Deis(https://deis.com/) 开发的一个用于kubernetes的包管理器,每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成name version.tgz格式的单一文件,方便传输和存储) 对于应用发布者而言,可以通过Helm打包应用, 管理应用依赖关系,管理应用版本并发布应用到软件仓库。 对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用, 除此以外,Helm还提供了kubernetes上的软件部署,删除,升级, 回滚应用的强大功能**
Kubernetes Helm 是一个管理预先配置 Kubernetes 资源包的工具,这里的资源在 Helm 中也被称作 Kubernetes charts。
使用 Helm:
查找并使用已经打包为 Kubernetes charts 的流行软件 分享您自己的应用作为 Kubernetes charts 为 Kubernetes 应用创建可重复执行的构建 为您的 Kubernetes 清单文件提供更智能化的管理 管理 Helm 软件包的发布
helm v2 版本 包含两个组件,分别是 helm 客户端 和 Tiller 服务器, helm 是一个命令行工具,用于本地开发及管理chart,chart仓库管理等 Tiller 负责接收 Helm 的请求,与 k8s 的 apiserver 交互
helm v3 版本 移除了Tiller helm直接和K8s交互 SA通过 kuberconfig 配置认证
设计原理
它是一个线程的方式运行
Helm-cotroller 运行在master节点并list/walch HelmChart CRD对象
CRD onChange时执行Job更新
Job Container使用rancherklilpper-helm为entrypoint
Killper-helm内 thelm cli,可以安装/升级/删除对应的chart
环境前提: 已经安装k8s 熟练使用kubectl及yaml配置文件
二、安装Helm3
# 去Git下载 Helm 二进制文件(Git地址)
设置环境变量KUBECONFIG来指定存有ApiServre的地址与token的配置文件地址,默认为~/.kube/config
export KUBECONFIG=/root/.kube/config
# wget https://get.helm.sh/helm-v3.2.0-linux-amd64.tar.gz
解压缩,并将可执行文件helm移动到/usr/local/bin/目录下
第一种:
tar - zxvf helm-v3.2.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/
第二种安装方法:
#curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
#chmod 700 get_helm.sh
#./get_helm.sh
查看helm
[root@k8s-master bin]# helm --help
[root@k8s-master tomcat]# helm version
version.BuildInfo{Version:"v3.2.0", GitCommit:"e11b7ce3b12db2941e90399e874513fbd24bcb71", GitTreeState:"clean", GoVersion:"go1.13.10"}
Helm3配置
# 配置helm3仓库 helm repo add repo_name1 https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/ # 配置helm3仓库(忽略:此处就想试试能否加多个仓库) helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts # 更新 helm repo update helm repo list
[root@k8s-master tomcat]# helm repo list
NAME URL
aliyuncs https://apphub.aliyuncs.com
repo_name1 https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[root@k8s-master tomcat]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "repo_name1" chart repository
...Successfully got an update from the "stable" chart repository
...Successfully got an update from the "aliyuncs" chart repository
Update Complete. ⎈ Happy Helming!⎈
Helm3 使用
# 生成chart文件 此处会生成一个 nginx的目录 如下: helm create nginx tree nginx/ . nginx/ ├── charts #依赖其他包的charts文件 ├── Chart.yaml # 该chart的描述文件,包括ico地址,版本信息等 ├── templates #存放k8s模板文件目录 │ ├── deployment.yaml #创建k8s资源的yaml 模板 │ ├── _helpers.tpl #下划线开头的文件,可以被其他模板引用. │ ├── hpa.yaml # 配置服务资源CPU 内存 │ ├── ingress.yaml # ingress 配合service域名访问的配置 │ ├── NOTES.txt #说明文件,helm install之后展示给用户看的内容 │ ├── service.yaml #kubernetes Serivce yaml 模板 └── values.yaml #给模板文件使用的变量
# 修改values.yam 里的service的type为 NodePort # 安装chart任务 (注意后面有个点) helm install -f values.yaml nginx1 .
# 查询release helm ls helm list # 删除release helm delete nginx1
#helm install -f values.yaml nginx1 .
[root@k8s-master tomcat]# helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION tomcat1 default 1 2020-05-04 14:29:04.274694143 +0800 CST deployed tomcat-0.1.0 1.16.0
验证服务
通过K8S命令查看下 服务是否成功启动 [root@k8s-master tomcat]# kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx-deployment-7789b77975-m85sx 1/1 Running 0 24h pod/nginx-deployment-7789b77975-n5zpc 1/1 Running 0 24h pod/tomcat1-6b6765ffc-pb9ld 1/1 Running 0 11m pod/tomcat1-6b6765ffc-wcc69 1/1 Running 0 11m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 42h service/nginx-deployment LoadBalancer 10.102.49.213 <pending> 80:32682/TCP 24h service/tomcat1 NodePort 10.100.13.128 <none> 80:31959/TCP 11m
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx-deployment 2/2 2 2 24h deployment.apps/tomcat1 2/2 2 2 11m
NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-deployment-7789b77975 2 2 2 24h replicaset.apps/tomcat1-6b6765ffc 2 2 2 11m