zoukankan      html  css  js  c++  java
  • k8s之helm入门

    1.概述

      helm是k8s的另外一个项目,相当于linux的yum,在yum仓库中,yum不光要解决包之间的依赖关系,还要提供具体的程序包,helm仓库里面只有配置清单文件,而没有镜像,镜像还是由镜像仓库来提供,比如hub.docker.com、私有仓库.

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

      Chart是一个helm程序包,其实质只是一个模板,我们可以对这个模板进行赋值(value),形成我们自定义的清单文件,也就实现我们生产个性化的需求,这样的仓库叫Chart仓库,一个https/http服务器.

      Helm把Kubernetes资源打包到一个chart中,而chart被保存到chart仓库,通过chart仓库可用来存储和分享chart.helm工作在k8s集群之外,helm不直接操作apiserver,而是和Tiller交互,Tlller再和apiserver交互,最后由Apiserver把chart使用config赋值,最后部署成为release.helm是tiller的客户端,管理本地的chart仓库,作用:发送chart、实例安装、查询、卸载等.

      helm先去检查chart是否存在,如果存在就把chart下载到helm本机当前用户的家目录下,然后helm把Chart和Config交给tiller,tiller和api server交互,api server把chart部署在k8s集群上,就不再叫chart了,而叫release;一个chart赋值不同,完全可以部署出多个release出来,所以可以把chart看做是一个安装包的模板,如果发现chart更新了,helm会自动滚动更新,还支持一键回滚的操作.

    访问:https://github.com/helm/helm/releases下载安装包

    wget https://storage.googleapis.com/kubernetes-helm/helm-v2.12.2-linux-amd64.tar.gz
    tar xf helm-v2.12.2-linux-amd64.tar.gz
    mv linux-amd64/helm /usr/bin/
    rbac配置文件样例:https://github.com/helm/helm/blob/master/docs/rbac.md 
    cat 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
    
    kubectl apply -f tiller-rbac.yaml
    cat /usr/lib/systemd/system/docker.service
    Environment="NO_PROXY=127.0.0.1/8,127.0.0.1/16"
    kubectl get pods --all-namespaces=true
    # 下面这两步没用,还得下国内的镜像,直接执行第三步
    export NO_PROXY="127.0.0.1/8,127.0.0.1/16"
    helm init --service-account tiller
    helm init --upgrade --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.12.2 
    --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
    
    Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster
    Happy Helming!
    helm version 
    Client: &version.Version{SemVer:"v2.12.2",...)
    Server: &version.Version{SemVer:"v2.12.2",...)
    

    2.使用helm

    官方charts列表 https://hub.kubeapps.com/

    helm默认使用的charts源地址是https://kubernetes-charts.storage.googleapis.com,需要替换为阿里的helm源:

    helm repo list
    NAME  	URL                                                   
    stable	https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
    local 	http://127.0.0.1:8879/charts
    # helm源已经变成国内的了,下面这两步是移除默认源的,不需要执行
    helm repo remove stable
    helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
    helm repo update
    # 添加incubator源,这个源是开发版的安装包,用起来可能不稳定
    helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/
    #列出charts仓库中所有可用的应用
    helm search
    helm search mysql
    helm inspect stable/mysql
    # 用helm安装软件包,-name:指定release名字 
    helm install --name mysql1 stable/mysql
    helm list # 查看安装的软件包
    helm delete mysql1
    

    helm常用命令

    release管理:
        install
        delete
        upgrade/rollback
        list
        history:查看release历史版本
        status:获取release状态信息
    chart管理:
        create:创建一个chart,生成基础chart示例性文件,供我们修改用
        fetch:下载仓库中的一个char到本地
        get
        inspect
        package
        verify
    
    # helm把安装包下载到当前用户的家目录下
    ll /root/.helm/cache/archive/
    # 修改chart里面的values.yaml实现定制,values.yaml文件中##是注释,#是可开启的参数
    helm install --name mysql1 -f /root/values.yaml stable/mysql
    metrics想要能被prometheus收集数据需要在metadata中将prometheus.io/scrape:设置为true
    metadata:
      annotations:
        prometheus.io/scrape: 'true'
    # 部署完应用包后,查看release提示信息
    helm status mysql1
    helm fetch stable/redis
    查看chart官方手册,了解每个参数的含义https://docs.helm.sh/developing_charts/#charts 
    # 用helm生成基础chart示例性文件,myapp是chart的名字
    helm create myapp
    # 做语法检查
    helm lint myapp
    ==> Linting myapp
    [INFO] Chart.yaml: icon is recommended
    1 chart(s) linted, no failures
    # 打包
    helm package myapp/
    Successfully packaged chart and saved it to: /root/myapp-0.1.0.tgz
    # 启动8879仓库的服务 
    helm serve
    # 查看local仓库里面是否有我们创建的chart包
    helm search myapp
    # 部署我们自定义的chart
    helm install --name myapp1 local/myapp
    # 删除我们部署的chart 
    helm delete --purge myapp1
    

    参考博客:http://blog.itpub.net/28916011/viewspace-2216650/

  • 相关阅读:
    ES6常用语法
    nodejs中exports与module.exports的区别
    CSS animation动画
    CSS user-select文本是否可复制
    VUE 滚动插件(better-scroll)
    VUE 父组件与子组件交互
    CSS div内文字显示两行,超出部分省略号显示
    linux下使用tar命令
    linux fdisk命令使用
    关于SUID、SGID、Sticky
  • 原文地址:https://www.cnblogs.com/fawaikuangtu123/p/11296574.html
Copyright © 2011-2022 走看看