天天看点

Helm快速入门

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快速入门

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的文件结构

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来创建一个简单的项目

继续阅读