zoukankan      html  css  js  c++  java
  • Helm入门

    前言:
    Helm是GO语言编写的,是管理kubernetes集群中应用程序包的客户端工具。
    Helm是类似于centos上的yum工具或Ubuntu上的apt-get工具。
    对于应用发布者而言,可以通过Helm打包应用,管理应用依赖关系,管理应用版本并发布应用到软件仓库。
    对于使用者而言,使用Helm后不用需要了解Kubernetes的Yaml语法并编写应用部署文件,可以通过Helm下载并在kubernetes上安装需要的应用。
    除此以外,Helm还提供了kubernetes上的软件部署,删除,升级,回滚应用的强大功能。
    Helm中并不提供镜像,但资源清单中会指明相关的镜像仓库。

    一、基本概念
      1.Helm的三个基本概念
        Chart:Helm应用(package),包括对资源的定义及相关镜像的引用,还有模板文件、values文件等。类似于YUM RPM或Apt dpkg文件
        Repository:Chart仓库,http/https服务器,Chart的程序包放在这里。
        Release:chart的部署实例,每个chart可以部署一个或多个release

      2.helm的程序架构:
        helm:客户端,管理本地的Charts、reprepository和release。与Tiller服务器交互,发送Chart,实例安装、查询、添加、卸载等操作。
              可以运行在集群外的主机上。
              基于grpc协议与Tiller通信。(使用kubectl port-forward将tiller的端口映射到本地,然后再通过映射后的端口跟tiller通信)向tiller发送请求
              并由tiller来管理对应的Kubernetes资源。Helm客户端的使用方法参见helm --help命令。
        Tiller:服务端,Tiller多数运行在集群内。接收来自helm客户端的请求,并把相关资源的操作发送到kube-apiserver,生成release。
                为了方便管理,tiller把release的相关信息保存在kubernetes的ConfigMap中。tiller对外暴露gRPC API,供helm客户端调用。

      3.工作流程:
        首先helm把需要的应用程序包Chart从repository仓库下载到本地。若需定制化操作,则需修改模板文件和values文件,使用模板文件和values文件对配置清单进行赋值。
        helm把请求提交给Tiller,Tiller接收到请求后连接apiserver,通过认证授权,apiserver负责完成创建。
        创建完成后,这个运行在集群上的实例不再称作Chart,而被称作release。
        helm主机中,helm的家目录下若存在需要的Chart包,则以后再创建时不再从网上拉取Chart包,直接使用本地Chart包。

    二、安装helm(我这里在集群中master主机上安装helm)
      1.获取helm的安装包:
        https://github.com/helm/helm/releases

      2.解压二进制包:
        tar xf helm-v2.13.1-linux-amd64.tar.gz你会得到一个linux-amd64的文件目录。

      3.将linux-amd64里面的可执行文件helm复制到/usr/bin/
          cp linux-amd64/helm /usr/bin/

      4.如果集群基于RBAC认证的话,需要创建serviceaccount,并绑定到集群中合适的角色(我这里绑定的是集群管理员)。
        详情看官方:https://github.com/helm/helm/blob/master/docs/rbac.md

     1     vim tiller-rbac.yaml
     2 apiVersion: v1
     3 kind: ServiceAccount
     4 metadata:
     5   name: tiller
     6   namespace: kube-system
     7 ---
     8 apiVersion: rbac.authorization.k8s.io/v1
     9 kind: ClusterRoleBinding
    10 metadata:
    11   name: tiller
    12 roleRef:
    13   apiGroup: rbac.authorization.k8s.io
    14   kind: ClusterRole
    15   name: cluster-admin
    16 subjects:
    17   - kind: ServiceAccount
    18     name: tiller
    19     namespace: kube-system
    20     应用:kubectl apply -f tiller-rbac.yaml

     
      5.初始化helm
        由于tiller的镜像无法直接从国内pull下来,所以我这里使用Azure中国的镜像。
        也可以自己寻找国内可使用的镜像仓库如:阿里的镜像仓库。
        注意helm要和tiller的版本保持一致。

     1 helm init --service-account tiller --upgrade -i gcr.azk8s.cn/kubernetes-helm/tiller:v2.13.1
     2 
     3 Creating /root/.helm/repository/repositories.yaml
     4 Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
     5 Adding local repo with URL: http://127.0.0.1:8879/charts
     6 $HELM_HOME has been configured at /root/.helm.
     7 
     8 Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
     9 
    10 Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
    11 To prevent this, run `helm init` with the --tiller-tls-verify flag.
    12 For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
    13 Happy Helming!
    14   


      6.查看tiller版本及pod是否正常运行:

    1 [root@K8s-master helm]# helm version
    2 Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
    3 Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
    4     
    5 kubectl get pods -n kube-system
    6 NAME                                    READY   STATUS              RESTARTS   AGE
    7 tiller-deploy-5fcc86f85f-qvr4b          0/1     ContainerCreating   0          31s


    三、使用helm
        helm官方支持的Chart列表为:https://hub.kubeapps.com/
      1.查看当前repo仓库:

    1 helm repo list
    2 NAME      URL                                             
    3 stable    https://kubernetes-charts.storage.googleapis.com  ##此仓库地址无法在国内使用,所以我们更换其他国内可使用的仓库。
    4 local     http://127.0.0.1:8879/charts


      2.删除repo仓库:

    1 helm repo remove 仓库名
    2 例:helm repo remove stable


      3.添加repo仓库:

    1 helm repo add 仓库地址    
    2 例:helm repo add https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts  ##阿里云的chart仓库   


      4.更新仓库:

    1 helm repo update
    2 Hang tight while we grab the latest from your chart repositories...
    3 ...Skip local chart repository
    4 ...Successfully got an update from the "stable" chart repository
    5 Update Complete. ⎈ Happy Helming!⎈


      5.搜索chart:

    1 helm search chart名称
    2 例:helm search wordpress
    3 NAME                CHART VERSION    APP VERSION    DESCRIPTION                                             
    4 stable/wordpress    0.8.8            4.9.4          Web publishing platform for building blogs and websites.


      6.查看chart的详细信息:

    1 helm inspect stable/wordpress


      7.安装chart:

    1 helm install chart名称  


    不再一一举例,常用命令选项总结如下:
    对于chart的管理命令:
        create、fetch、get、inspect、package、verify...
    对于release的管理命令:
        install、delete、upgrade/rollback、list、history、status...
    更多命令详情请查看helm --help命令。

    四、注意事项
      1.每次获取chart时,程序包都会被下载到.helm/cache/archive/目录下。    

      2.将.helm/cache/archive/目录下的chart包文件解压后,里面就是一些资源清单文件和模板文件和values文件等。
    使用tree命令查看chart程序包解压后的文件结构:
    例:

     1 [root@K8s-master archive]# tree redis
     2 redis
     3 ├── Chart.yaml             ##常用来描述当前Chart的属性、名称、版本等信息,在升级chart时参考版本等信息。
     4 ├── README.md              ##自述文件,描述作者等相关信息。
     5 ├── templates              ##模板目录,包含了此chart部署时所需的相关资源清单文件。
     6 │   ├── deployment.yaml    ##templates目录下的yaml文件和我们平时自己写的不太一样,里面大量调用了Go模板语法。
     7 │   ├── _helpers.tpl
     8 │   ├── networkpolicy.yaml
     9 │   ├── NOTES.txt
    10 │   ├── pvc.yaml
    11 │   ├── secrets.yaml
    12 │   └── svc.yaml
    13 └── values.yaml  


      3.可以修改values.yaml文件,用来自定义一些参数,向模板中的各属性赋值,从而实现自定义chart,生成release。 

  • 相关阅读:
    Discuz!X3.2 uc_server密码正确无法登录的解决方法
    手动添加uc应用及其 提示notelist表缺少appX字段的处理方法
    discuz 3 头像显示不成功
    用户名称修改的完美解决方法
    WEB服务器、应用程序服务器、HTTP服务器区别
    小议函数指针
    Difference Between objectForKey and valueForKey in NSDictionary
    valueforkey objectforkey区别,
    budle identifier,
    return,hiding 之前,
  • 原文地址:https://www.cnblogs.com/Smbands/p/11003643.html
Copyright © 2011-2022 走看看