1.什么是helm
(相当于linux中的yum,解决安装的相关依赖)就是安装的控制流程
在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes 应用的部署和管理。
Helm 本质就是让 K8s 的应用管理(Deployment,Service 等 ) 可配置,能动态生成。通过动态生成 K8s 资源清单文(deployment.yaml,service.yaml)。然后调用Kubectl 自动执行 K8s 资源部署
Helm 是官方提供的类似于 YUM 的包管理器,是部署环境的流程封装。Helm 有两个重要的概念:chart 和release
- chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包
- release 是 chart 的运行实例,代表了一个正在运行的应用。当 chart 被安装到 Kubernetes 集群,就生成一个 release。chart 能够多次安装到同一个集群,每次安装都是一个 release
Helm 包含两个组件:Helm 客户端和 Tiller 服务器(解释称指令给api),如下图所示
Helm 客户端负责 chart 和 release 的创建和管理以及和 Tiller 的交互。Tiller 服务器运行在 Kubernetes 集群中,它会处理 Helm 客户端的请求,与 Kubernetes API Server 交互
2.helm的快速安装
helm不断地更新,目前有helm3和helm2比较常见,区别是什么呢
2.1 helm3和helm2的区别
1.helm3优化掉了tiller
2.在 Helm 2 中,这个操作将比较 旧的配置与新的配置,然后生成一个更新补丁。
由于,误操作的人仅修改了应用的线上状态(旧的配置并未更新)。Helm 在回滚时,
什么事情也不会做。因为旧的配置与新的配置没有差别(都是 3 个副本)。然后,
Helm 不执行回滚,副本数继续保持为 0 。此时,你有些慌了…
另一方面,在 Helm 3 中,将对比 旧的配置、线上状态、新的配置 生成更新补丁。
Helm 发现旧的配置副本数是 3 ,线上状态是 0 ,判断出新的配置期望改回 3 ,因
此生成一个更新补丁回滚。此时,你不那么慌了…
使用 Helm 3 进行升级时,也会发生类似的过程。例如,某个基于控制器的应用(或类
似服务网格)注入任何内容到 Helm 部署的 Kubernetes 对象中。在 Helm 2 中进行
升级时,注入的内容将被移除。在 Helm 3 中,由于考虑到了在线状态,注入的内容将
会被保留。假设我们想要在集群上安装 Istio 。Istio 将 Sidecar 注入到每个部署中。使用 Helm 进行部署:
2.2 helm2的安装
需要包: helm-tiler
安装服务端 tiller,还需要在这台机器上配置好 kubectl 工具和 kubeconfig 文件,确保 kubectl 工具可以在这台机器上访问 apiserver 且正常使用。
另外要分配权限给tiller,如下:
cd /usr/local/bin/helm
vim rbac.yaml
apiVersion: v1
kind: ServiceAccount #准入控制
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding #进行角色赋予,role是创建角色
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
kubectl create -f rbac.yaml serviceaccount/tiller created clusterrolebinding.rbac.authorization.k8s.io/tiller created
helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 --stable-repo-url http://mirror.azure.cn/kubernetes/charts/ --service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's@apiVersion: extensions/v1beta1@apiVersion: apps/v1@' | kubectl apply -f -
kubectl get pods -n kube-system | grep tiller
kubectl get pod -n kube-system
helm version
2.3 helm3的安装
前提是已经安装了kubectl
安装包网址: https://github.com/helm/helm/releases
tar zxvf helm-v3.1.2-linux-amd64.tar.gz
cd linux-amd64
cp helm /usr/bin/helm
helm version
cp helm /usr/bin/helm
export KUBECONFIG=/root/.kube/config #可以写到/etc/profile里
helm repo add stable <http://mirror.azure.cn/kubernetes/charts>
helm repo add aliyun <https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts>
helm repo update
3.helm的简单操作和使用
3.1 helm的文件结构
3.2 helm的基本指令
安装:
helm install --name test -f values.yaml . --debug --dry-run //调试 ,在helm3中没有--name了,直接写名字就可以
helm install --name test -f values.yaml . //安装,在helm3中没有--name 直接写名字就可以
更新:
helm ls //查出有哪些helm,然后更改chart中的version
helm upgrade 名字 . #上条指令查出来的名字,这样就更新了
helm upgrade -f values.yaml 名字 . 更新
删除:
helm delete cautious-shrimp #这个是可以回滚的
helm delete --purge cautious-shrimp #一定要加purge这个参数后面加名字,才能彻底删除,但是这样也就不能回滚
回滚:
helm ls
helm rollback 名字 1 #名字是上面查出来的,1是版本号
查询:
helm history 名字 #查看更新历史
helm repo的使用:
helm repo add 名字 地址
helm repo remove
下一篇文章我们将通过实例操作helm来创建一个简单的项目