zoukankan      html  css  js  c++  java
  • k8s-helm-二十四

    一、介绍

    Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理。可以把Helm比作CentOS的yum工具。

    yum不光要解决包之间的依赖关系,还要提供具体的程序包。但是helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供,比如hub.docker.com等;

    Helm有如下几个基本概念:

    • Chart: 是Helm管理的安装包,里面包含需要部署的安装包资源。可以把Chart比作CentOS yum使用的rpm文件。每个Chart包含下面两部分:
      • 包的基本描述文件Chart.yaml
      • 放在templates目录中的一个或多个Kubernetes manifest文件模板
    • Release:是chart的部署实例,一个chart在一个Kubernetes集群上可以有多个release,即这个chart可以被安装多次
    • Repository:chart的仓库,用于发布和存储chart

    helm提供了一个应用所需要的所有清单文件。比如对于一个nginx,我们需要一个deployment的清单文件、一个service的清单文件、一个hpa的清单文件。我们把这三个文件打包到一起,就是一个应用程序的程序包,我们称之为Chart。

    Helm把Kubernetes资源(比如deployments、services或 ingress等) 打包到一个chart中,而chart被保存到chart仓库。通过chart仓库可用来存储和分享chart。

    helm是工作在k8s集群之外的。helm不直接操作apiserver,而是和Tiller交互。Tlller再和apiserver交互,最后由Apiserver把chart使用config赋值(值文件),最后部署成为release。

    在helm工作中,helm先去检查chart是否存在,存在就把chart下载到helm本机当前用户的家目录下。然后helm把chart交给tiller,tiller再和api server交互。api server一旦把chart部署在k8s集群上,就不再叫chart了,而叫release。

    所以,一个chart赋值不同,完全可以部署出多个release出来的,所以我们可以把chart看做是一个安装包的模板。

    如果发现chart更新了,helm就自动滚动更新,而且helm还支持一键回滚的操作。

    image

    二、安装helm

    一般helm是安装在k8s集群之外,这里我们就安装在master上了;

    https://github.com/helm/helm/releases

    image

    下载压缩包,并解压:

    [root@master src]# tar zxf helm-v2.9.1-linux-amd64.tar.gz
    
    [root@master src]# ls
    helm-v2.9.1-linux-amd64.tar.gz   linux-amd64 
    
    [root@master src]# cd linux-amd64/    #解压后名字是 linux-amd64
    
    [root@master linux-amd64]# ls
    helm  LICENSE  README.md
    
    [root@master linux-amd64]# mv helm /usr/bin/    #直接就能用
    
    [root@master linux-amd64]# helm -h        #查看帮助

     

    三、部署Tiller

    (1)Tiller运行在K8s集群之上,也必须拥有集群的管理权限,也就是需要一个serviceaccount,创建一个clusterrolebinding到cluster-admin

    rbac配置示例文件: https://github.com/helm/helm/blob/master/docs/rbac.md

    [root@master helm]# pwd
    /root/manifests/helm
    
    #资源定义清单
    [root@master helm]# vim tiller-rbac.yaml
    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
    
    #创建
    [root@master helm]# kubectl apply -f tiller-rbac.yaml 
    serviceaccount/tiller created
    clusterrolebinding.rbac.authorization.k8s.io/tiller created
    
    [root@master helm]# kubectl get sa -n kube-system |grep tiller 
    tiller                               1         107s

    (2)初始化

    进行初始化时,会用到gcr.io/kubernetes-helm中的镜像,可以提前去阿里云下载、打标,镜像标签要和Helm版本号相同;

    #初始化
    [root@master helm]# helm init
    Creating /root/.helm 
    Creating /root/.helm/repository 
    Creating /root/.helm/repository/cache 
    Creating /root/.helm/repository/local 
    Creating /root/.helm/plugins 
    Creating /root/.helm/starters 
    Creating /root/.helm/cache/archive 
    Creating /root/.helm/repository/repositories.yaml 
    Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com 
    Adding local repo with URL: http://127.0.0.1:8879/charts 
    $HELM_HOME has been configured at /root/.helm.
    Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
    Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
    For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
    Happy Helming!
    
    #查看,pod起来了
    [root@master helm]# kubectl get pods -n kube-system |grep tiller
    tiller-deploy-86c9995bb6-6mnvb           1/1     Running   0          49s
    
    #查看server、client
    [root@master helm]# helm version
    Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
    Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

     

    四、使用helm

    (1)

    官方可用的Chart仓库列表: https://hub.kubeapps.com

    可以搜索charts

    image

    也可以使用helm命令搜索;

    [root@master helm]# helm search redis
    NAME                                CHART VERSION    APP VERSION    DESCRIPTION                                       
    stable/prometheus-redis-exporter    1.0.2            0.28.0         Prometheus exporter for Redis metrics             
    stable/redis                        6.4.3            4.0.14         Open source, advanced key-value store. It is of...
    stable/redis-ha                     3.3.3            5.0.3          Highly available Kubernetes implementation of R...
    stable/sensu                        0.2.3            0.28           Sensu monitoring framework backed by the Redis ...

    (2)helm常用命令:

    helm常用命令:
    - helm search:    搜索charts
    - helm fetch:     下载charts到本地目录
    - helm install:   安装charts
    - helm list:      列出charts的所有版本
    
    用法:
      helm [command]
    
    命令可用选项:
      completion  为指定的shell生成自动补全脚本(bash或zsh)
      create      创建一个新的charts
      delete      删除指定版本的release
      dependency  管理charts的依赖
      fetch       下载charts并解压到本地目录
      get         下载一个release
      history     release历史信息
      home        显示helm的家目录
      init        在客户端和服务端初始化helm
      inspect     查看charts的详细信息
      install     安装charts
      lint        检测包的存在问题
      list        列出release
      package     将chart目录进行打包
      plugin      add(增加), list(列出), or remove(移除) Helm 插件
      repo        add(增加), list(列出), remove(移除), update(更新), and index(索引) chart仓库
      reset       卸载tiller
      rollback    release版本回滚
      search      关键字搜索chart
      serve       启动一个本地的http server
      status      查看release状态信息
      template    本地模板
      test        release测试
      upgrade     release更新
      verify      验证chart的签名和有效期
      version     打印客户端和服务端的版本信息

    (3)helm仓库

    Helm 安装时已经默认配置好了两个仓库:stablelocalstable 是官方仓库,local 是用户存放自己开发的chart的本地仓库。

    [root@master .helm]# helm repo list
    NAME      URL                                             
    stable    https://kubernetes-charts.storage.googleapis.com
    local     http://127.0.0.1:8879/chart
  • 相关阅读:
    iOS BUG整理-记录我近期视频开发遇到的问题
    iOS 翻译-UIWebView的基本简介-官方文档翻译
    iOS 翻译-Xcode使用-文档翻译
    4.redis设计与实现--跳跃表
    3.redis设计与实现--字典
    2.redis设计与实现--链表
    1.redis设计与实现--简单动态字符串
    12.编码问题讨论
    11.nginx upload module + python django 后台 实现视频上传与切片
    10.nginx+ffmpeg上搭建HLS切片
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/10635270.html
Copyright © 2011-2022 走看看