• Helm


    What is Helm?

    - The package manager for kubernetes, Helm is the best way to find, share, and use software built for kubernetes.

    Helm helps you manage Kubernetes applications — Helm Charts helps you define, install, and upgrade even the most complex Kubernetes application.

    Charts are easy to create, version, share, and publish — so start using Helm and stop the copy-and-paste madness.

    The latest version of Helm is maintained by the CNCF - in collaboration with Microsoft, Google, Bitnami and the Helm contributor community.

    Why use Helm? 

    kubernetes发布一个生产级别的微服务应用需要包含的内容;当环境中的微服务越来越多,单纯通过手工的方式去管理将会非常混乱和负载。这时候Helm就应该登场了。

    Helm Architecture

    上面这张图描述了Helm的几个关键组件Helm(客户端),Tiller(服务器),Repository(Chart软件仓库),Release(Chart运行的实例),Chart(软件包)之前的关系。

     

     

    重要概念

    Helm 有三个重要概念:

    • chart:包含了创建Kubernetes的一个应用实例的必要信息
    • config:包含了应用发布配置信息
    • release:是一个 chart 及其配置的一个运行实例

    Helm组件

    Helm 有以下两个组成部分:

    Helm Client 是用户命令行工具,其主要负责如下:

    • 本地 chart 开发
    • 仓库管理
    • 与 Tiller sever 交互
    • 发送预安装的 chart
    • 查询 release 信息
    • 要求升级或卸载已存在的 release

    Tiller Server是一个部署在Kubernetes集群内部的 server,其与 Helm client、Kubernetes API server 进行交互。

    Tiller server 主要负责如下:

    • 监听来自 Helm client 的请求
    • 通过 chart 及其配置构建一次发布
    • 安装 chart 到Kubernetes集群,并跟踪随后的发布
    • 通过与Kubernetes交互升级或卸载 chart
    • 简单的说,client 管理 charts,而 server 管理发布 release

    Helm部署方法(1)

    在其中一个K8S节点上安装Helm Client(需要配置代理,否则无法下载安装包) 

    $ curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  6737  100  6737    0     0   3204      0  0:00:02  0:00:02 --:--:--  3205
    Downloading https://kubernetes-helm.storage.googleapis.com/helm-v2.9.0-linux-amd64.tar.gz
    Preparing to install into /usr/local/bin
    helm installed into /usr/local/bin/helm
    Run 'helm init' to configure helm.

    Tiller 服务器安装非常简单,只需要执行 helm init(需要配置docker代理,否则Tiller Image无法从gcr.io下载)

    $ 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!

    验证

    $ helm version
    Client: &version.Version{SemVer:"v2.9.0", GitCommit:"f6025bb9ee7daf9fee0026541c90a6f557a3e0bc", GitTreeState:"clean"}
    Server: &version.Version{SemVer:"v2.9.0", GitCommit:"f6025bb9ee7daf9fee0026541c90a6f557a3e0bc", GitTreeState:"clean"}

    配置RBAC

    我的kubernetes 集群是1.10版本的,默认开启了RBAC访问控制,所以我们需要为Tiller创建一个ServiceAccount,让他拥有执行的权限,详细内容可以查看 Helm 文档中的Role-based Access Control。  

    kubectl create serviceaccount --namespace kube-system tiller
    kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
    kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

    问题

    部署完成后,发现无法install任何chart,查看tiller容器的的logs发现以下错误日志,google查询到是2.9的bug,降级到2.8.2即可。

    Helm部署方法(2)

    安装Helm Client,

      直接在Helm Realese页面下载二进制文件,这里下载的2.8.2版本,解压后将可执行文件helm拷贝到/usr/local/bin目录下即可,这样Helm客户端就在这台机器上安装完成了。

    $ helm version
    Client: &version.Version{SemVer:"v2.8.2", GitCommit:"a80231648a1473929271764b920a8e346f6de844", GitTreeState:"clean"}

    安装Helm Server,

      执行命令

    $ helm init

      由于 Helm 默认会去gcr.io拉取镜像,所以如果你当前执行的机器没有配置科学上网的话可以实现下面的命令代替:

    $ helm init --upgrade --tiller-image cnych/tiller:v2.8.2

    创建Tiller ServiceAccount

    kubectl create serviceaccount --namespace kube-system tiller
    kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
    kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

    查看结果

    $ helm version
    Client: &version.Version{SemVer:"v2.8.2", GitCommit:"a80231648a1473929271764b920a8e346f6de844", GitTreeState:"clean"}
    Server: &version.Version{SemVer:"v2.8.2", GitCommit:"a80231648a1473929271764b920a8e346f6de844", GitTreeState:"clean"}

    $ helm list

     

    参考文档:

    https://helm.sh/ 

    https://blog.qikqiak.com/post/first-use-helm-on-kubernetes/

  • 相关阅读:
    详解ASP.NET的内置对象
    如何架设FTP服务器
    输出JSON问题
    new , virtual , override
    Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)
    Java回顾之I/O
    数据结构之栈和队列
    Java回顾之多线程同步
    设计模式之行为型模式
    Java回顾之网络通信
  • 原文地址:https://www.cnblogs.com/vincenshen/p/8934442.html
Copyright © 2020-2023  润新知