zoukankan      html  css  js  c++  java
  • Helm安装部署

    1.为什么要用Helm?

    首先在原来项目中都是基于yaml文件来进行部署发布的,而目前项目大部分微服务化或者模块化,会分成很多个组件来部署,每个组件可能对应一个deployment.yaml,一个service.yaml,一个Ingress.yaml还可能存在各种依赖关系,这样一个项目如果有5个组件,很可能就有15个不同的yaml文件,这些yaml分散存放,如果某天进行项目恢复的话,很难知道部署顺序,依赖关系等,而所有这些包括

    • 基于yaml配置的集中存放
    • 基于项目的打包
    • 组件间的依赖

    都可以通过helm来进行解决。

    2.Helm 基本概念

    Helm 可以理解为 Kubernetes 的包管理工具,可以方便地发现、共享和使用为Kubernetes构建的应用,它包含几个基本概念

    • Chart:一个 Helm 包,其中包含了运行一个应用所需要的镜像、依赖和资源定义等。chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板、参数定义、依赖关系、文档说明等。chart 是应用部署的自包含逻辑单元。可以将 chart 想象成 apt、yum 中的软件安装包。
    • Release: 在 Kubernetes 集群上运行的 Chart 的一个实例。在同一个集群上,一个 Chart 可以安装很多次。每次安装都会创建一个新的 release。例如一个 MySQL Chart,如果想在服务器上运行两个数据库,就可以把这个 Chart 安装两次。每次安装都会生成自己的 Release,会有自己的 Release 名称。
    • Repository:用于发布和存储 Chart 的仓库。

    Helm 是包管理工具,这里的包就是指的 chart。Helm 能够:

    1. 从零创建新 chart。

    2. 与存储 chart 的仓库交互,拉取、保存和更新 chart。

    3. 在 Kubernetes 集群中安装和卸载 release。

    4. 更新、回滚和测试 release。

    3.Helm 组件及架构

    Helm 采用客户端/服务器架构,有如下组件组成:

    • Helm CLI 是 Helm 客户端,可以在本地执行
    • Tiller 是服务器端组件,在 Kubernetes 群集上运行,并管理 Kubernetes 应用程序的生命周期
    • Repository 是 Chart 仓库,Helm客户端通过HTTP协议来访问仓库中Chart的索引文件和压缩包。

    Helm 客户端是终端用户使用的命令行工具,用户可以:

    1. 在本地开发 chart。

    2. 管理 chart 仓库。

    3. 与 Tiller 服务器交互。

    4. 在远程 Kubernetes 集群上安装 chart。

    5. 查看 release 信息。

    6. 升级或卸载已有的 release。

    Tiller 服务器运行在 Kubernetes 集群中它会处理 Helm 客户端的请求,与 Kubernetes API Server 交互。Tiller 服务器负责:

    1. 监听来自 Helm 客户端的请求。

    2. 通过 chart 构建 release。

    3. 在 Kubernetes 中安装 chart,并跟踪 release 的状态。

    4. 通过 API Server 升级或卸载已有的 release。

    简单的讲:Helm 客户端负责管理 chart;Tiller 服务器负责管理 release

    4.Helm客户端的安装

    通常,我们将 Helm 客户端安装在能够执行 kubectl 命令的节点上,只需要下面一条命令进行安装

    # curl https://raw.githubusercontent.com/helm/helm/master/scripts/get | bash

      % Total % Received % Xferd Average Speed Time Time Time Current
      Dload Upload Total Spent Left Speed
      100 7236 100 7236 0 0 10536 0 --:--:-- --:--:-- --:--:-- 10532
      Downloading https://kubernetes-helm.storage.googleapis.com/helm-v2.11.0-linux-amd64.tar.gz
      Preparing to install helm and tiller into /usr/local/bin
      helm installed into /usr/local/bin/helm
      tiller installed into /usr/local/bin/tiller
      Run 'helm init' to configure helm.

    
    

    执行 helm version 验证。

    helm 有很多子命令和参数,为了提高使用命令行的效率,通常建议安装 helm 的 bash 命令补全脚本,方法如下:

    echo "source <(helm completion bash)" >>.bashrc

    重新登录后就可以通过 Tab 键补全 helm 子命令和参数了。

     
     

     5.Tiller服务器安装

    对于已开启RBAC访问控制的集群,首先需要新建帐户和绑定

    参考:https://github.com/helm/helm/blob/master/docs/rbac.md

    vim tiller-rbac-config.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-config.yaml

    配置 Helm 的 Repository 使用阿里云容器服务提供的 Charts 存储库以及镜像
    # helm repo delete stable
    # helm init --upgrade --service-account tiller -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.16.3 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

    # helm version

    Client: &version.Version{SemVer:"v2.16.3", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}
    Server: &version.Version{SemVer:"v2.16.3", GitCommit:"2e55dbe1fdb5fdb96b75ff144a339489417b146b", GitTreeState:"clean"}

    查看生成的帐户和POD

    # kubectl get sa -n kube-system |grep tiller

    # kubectl get pods -n kube-system |grep tiller

    删除tiller

    # helm reset -f

    6.Helm的使用 

    Helm 安装成功后,可执行 helm search 查看当前可安装的 chart。

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

    # helm repo list
    NAME    URL                                             
    stable  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
    local   http://127.0.0.1:8879/charts

    可以通过 helm repo add 添加更多的仓库,比如企业的私有仓库,仓库的管理和维护方法请参考官网文档 https://docs.helm.sh

    # helm repo update 更新仓库中可以使用的镜像仓库

    安装 chart 也很简单,执行如下命令即可安装 MySQL。

    # helm install --name mysql stable/mysql  #可使用--name自定义名称

    helm list 显示已经部署的 release,helm delete 可以删除 release

    输出分为三部分:

    ① chart 本次部署的描述信息:

    NAME 是 release 的名字,因为我们没用 -n 参数指定,Helm 随机生成了一个,这里是 fun-zorse。

    NAMESPACE 是 release 部署的 namespace,默认是 default,也可以通过 --namespace 指定。

    STATUS 为 DEPLOYED,表示已经将 chart 部署到集群。

    ② 当前 release 包含的资源:Service、Deployment、Secret 和 PersistentVolumeClaim,其名字都是 fun-zorse-mysql,命名的格式为 ReleasName-ChartName。

    ③ NOTES 部分显示的是 release 的使用方法。比如如何访问 Service,如何获取数据库密码,以及如何连接数据库等

    7.Chart目录结构

    Chart 由一系列文件组成,这些文件描述了 Kubernetes 部署应用时所需要的资源,比如 Service、Deployment、PersistentVolumeClaim、Secret、ConfigMap 等。

    单个的 chart 可以非常简单,只用于部署一个服务,比如 Memcached;chart 也可以很复杂,部署整个应用,比如包含 HTTP Servers、 Database、消息中间件、cache 等。

    chart 将这些文件放置在预定义的目录结构中,通常整个 chart 被打成 tar 包,而且标注上版本信息,便于 Helm 部署。

    已安装过的release的tar包默认存放在 ~/.helm/cache/archive 目录下,解压后一般大致相同,主要包含:

    # helm create hello #这里的手动新建初始化一个release

    # tree hello

    hello
    ├── charts
    ├── Chart.yaml
    ├── templates
    │   ├── deployment.yaml
    │   ├── _helpers.tpl
    │   ├── ingress.yaml
    │   ├── NOTES.txt
    │   └── service.yaml
    └── values.yaml
    
    2 directories, 7 files

    Chart.yaml : YAML 文件,描述 chart 的概要信息。name 和 version 是必填项,其他都是可选。

    values.yaml : Chart 支持在安装的时根据参数进行定制化配置,而 values.yaml 则提供了这些配置参数的默认值。 

    templates 目录 :
    各类 Kubernetes 资源的配置模板都放置在这里。Helm 会将 values.yaml 中的参数值注入到模板中生成标准的 YAML 配置文件。

    模板是 chart 最重要的部分,也是 Helm 最强大的地方。模板增加了应用部署的灵活性,能够适用不同的环境。

    templates/NOTES.txt : Chart 的简易使用文档,chart 安装成功后会显示此文档内容。

     8.Helm之创建自定义Chart

    官方介绍文档:https://docs.helm.sh/developing_charts/#charts

     # helm serve

    在本地启动一个仓库,端口:8879,http://127.0.0.1:8879/charts ,当然使用其它的web服务器进行取代也是可以的

    # helm status myapp

    对应的NOTE.txt信息

    # helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com 

    添加仓库

    # helm fetch incubator/elasticsearch

    拉取chart,下载taz包

     
  • 相关阅读:
    Java配置jdk图文教程
    线程池介绍与应用
    继承机制的探讨
    1.深入分析_NIO性能分析
    1.类的加载机制_继承类的加载(一个小的Demo)说明
    githup创建新java项目
    UE常用快捷键使用
    堡垒机上传文件
    16.linux常用查看命令
    15.vi/vim编辑器下常用光标移动
  • 原文地址:https://www.cnblogs.com/wjoyxt/p/10071055.html
Copyright © 2011-2022 走看看