helm原理

Helm:
  helm就相当于Linux的包管理工具yum,但它管理的程序包是一些打包好的清单文件。
  其核心术语:
  Chart:一个helm程序包,它里面可理解为,包含了一下定义Pod的清单文件,这些清单包含Service,Deployment,DaemonSet,ReplicaSet,StatefulSet,HPA等配置信息,当然这些东西不一定都有,会根据应用不同,其清单内容也会有所区别,Template是模板文件,因为配置清单要能适用于各种场景,已经能够根据用户使用场景,做一些自定义配置,比如:Nginx配置清单中要配置HTTPS,那就需要配置证书,但证书不可能提前打包到Chart中,这就需要一些机制,能通过传递变量的方式来适应这些自定义需求,而template就是这样的目的而存在的,值列表就是为Template提供传递变量的文件。

  Repository:就是Helm的Chart仓库,它支持HTTPS/HTTP。
  Release:特定的Chart部署于目标K8s集群上的一个实例。

chart到release的过程:
  Chart---》Config ---》 Release

下图为Helm整体应用框架图:
  helm是作为Helm Repository的客户端工具,helm默认工作时,会从本地家目录中去获取chart,只有本地没有chart时,它才会到远端的Helm Repository上去获取Chart,当然你也可以自己在本地做一个Chart,当需要应用chart到K8s上时,就需要helm去联系K8s Cluster上部署的Tiller Server,当helm将应用Chart的请求给Tiller Server时,Tiller Server接受完helm发来的charts(可以是多个chart) 和 chart对应的Config 后,它会自动联系API Server,去请求应用chart中的配置清单文件,最终这些清单文件会被实例化为Pod或其它定义的资源,而这些通过chart创建的资源,统称为release,一个chart可被实例化多次,其中的某些参数是会根据Config规则自动更改,例如Pod的名字等。

  

部署Helm:
#下载helm 二进制文件
    wget -c https://get.helm.sh/helm-v2.14.2-linux-amd64.tar.gz
    
    #下载完成后,解压后,里面会有helm二进制可执行文件,只需要将helm 放到 PATH 路径下。

#参考示例:
    https://github.com/helm/helm/blob/master/docs/rbac.md
#创建一个能在集群级别管理Pod资源的tiller
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: tiller
      namespace: kube-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: tiller
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
      - kind: ServiceAccount
        name: tiller
        namespace: kube-system
        
#在进行tiller server安装时,默认是从google镜像仓库中下载的,但国内很多下载不下来,这里可先从阿里云的谷歌镜像仓库下载下来,
#导入自己的harbor中,或直接使用阿里的谷歌镜像仓库也可
#下面是我提前下载了tiller的镜像,推到我的harbor了
        docker  pull  registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.2       #这是从谷歌镜像仓库下载.
        
        helm  init  --tiller-image  harbor.zcf.com/k8s/tiller:v2.14.2  --service-account tiller  --history-max  200

#若后期需要升级tiller镜像,可直接使用下面命令
        $ export TILLER_TAG=v2.0.0-beta.1        # Or whatever version you want
        $ kubectl --namespace=kube-system set image deployments/tiller-deploy tiller=gcr.io/kubernetes-helm/tiller:$TILLER_TAG

#初始化完成后,查看版本
    # helm version
        Client: &version.Version{SemVer:"v2.14.2", GitCommit:"a8b13cc5ab6a7dbef0a58f5061bcc7c0c61598e7", GitTreeState:"clean"}
        Server: &version.Version{SemVer:"v2.14.2", GitCommit:"a8b13cc5ab6a7dbef0a58f5061bcc7c0c61598e7", GitTreeState:"clean"}

#做helm仓库更新
   #  helm  repo  update

#测试安装memcached
   # helm  install  stable/memcached

#查看安装的Chart

  # helm list
  NAME        REVISION   UPDATED            STATUS    CHART       APP VERSION   NAMESPACE
  plucking-buffalo 1      Tue Jul 30 15:55:04 2019  DEPLOYED   memcached-2.9.0 1.5.12      default


#删除Chart
  # helm  delete  --purge  plucking-buffalo

    #官方可用的helm仓库地址
  https://hub.kubeapps.com

 #这是一个很深入介绍helm的文章:

  https://www.hi-linux.com/posts/21466.html

 

posted @ 2019-08-02 21:26  张朝锋  阅读(1572)  评论(0编辑  收藏