Helm - K8s的包管理器

11.1 Why Helm

  K8s能够很好的组织和编排容器,但它缺少一个更高层次的应用打包工具,Helm就是干这个的。

  比如对于一个MySQL服务,K8s需要部署如下对象:

  (1)Service,让外界能访问MySQL

  (2)Secret,定义MySQL的密码

  (3)PersisentVolumeClaim,为MySQL申请持久化存储空间。

  (4)Deployment,部署MySQL Pod,并使用上面的这些支持对象。

可以将上面这些配置保存到文件中,或几种写进一个文件,然后通过kubectl apply -f 部署。

  如果服务少,这样问题也不大,但是如果是微服务架构,服务多达数十个甚至上百个,这种组织和管理应用的方式就不好使了:

  (1)很难管理、编辑和维护如此多的服务。每个服务有若干个配置,缺乏更高层次的工具将这些配置组织起来。

  (2)不容易将这些服务作为一个整体统一发布。部署人员需要首先理解应用都包含哪些服务,然后按照逻辑顺序依次执行kubectl apply, 缺少一种工具定义应用与服务,已经服务之间的依赖。

  (3)不能高效的共享和重用服务。比如两个应用都用到MySQL服务,但是配置参数不一样,这两个应用只能分别复制一套标准MySQL配置文件,修改后通过kubectl apply部署。也就是不支持参数化配置和多环境部署。

  (4)不支持应用级别的版本管理。虽然可以通过kubectl rollout undo进行回滚,但这只针对单个deployment,不支持整个应用的的回滚。

  (5)不支持对部署的应用状态进行验证。比如是否能通过预定义账号访问MySQL。虽然K8s有健康检查,但那时针对单个容器,我们需要应用(服务)级别的健康检查。

  Helm能够解决上面这些问题。

11.2 Helm架构

  Helm有两个重要概念:chart和release

  • chart: 是创建一个应用的信息集合,包括各种k8s对象的配置模板、参数定义、依赖关系、文档说明等。chart是应用部署的自包含逻辑单元。可以将char想象成apt、yum中的软件安装包。
  • release: 是chart的运行实例,代表了一个正在运行的应用。当chart被安装到k8s集群,就生成一个release。chart能够多次安装到同一个集群,每次安装都是一个release。

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

  • 从零创建新chart。
  • 与存储chart的仓库交互。拉取、保存、和更新chart
  • 在k8s集群中安装和卸载release.
  • 更新、回滚和测试release。

Helm包含两个组件:Helm客户端和Tiller服务器,

Helm客户端,用户可以

  • 在本地开发chart
  • 管理chart仓库
  • 与Tiller服务器交互
  • 在远程K8s集群上安装chart
  • 查看release信息。
  • 升级或卸载已有的release

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

  • 监听来自Helm客户端的请求
  • 通过chart创建release
  • 在k8s中安装chart,并跟踪release状态
  • 通过API server升级或卸载已有的release

简单说: Helm客户端负责管理chart,Tiller服务器负责管理release。

11.3 安装Helm 

  11.3.1 Helm客户端

  因为我的环境已经安装过了,就没写,以后补充

kubeusr@GalaxyKubernetesMaster:~$ helm version
Client: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.10.0", GitCommit:"9ad53aac42165a5fadc6c87be0dea6b115f93090", GitTreeState:"clean"}

  11.3.2 Tiller服务器

  运行helm init就可以

  如下查看Tiller的Service、deployment和Pod

kubeusr@GalaxyKubernetesMaster:~$ kubectl get -n kube-system svc tiller-deploy
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
tiller-deploy ClusterIP 10.111.0.95 <none> /TCP 131d kubeusr@GalaxyKubernetesMaster:~$ kubectl get -n kube-system deployment tiller-deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
tiller-deploy 131d kubeusr@GalaxyKubernetesMaster:~$ kubectl get -n kube-system pod tiller-deploy-895d57dd9-bjlwf
NAME READY STATUS RESTARTS AGE
tiller-deploy-895d57dd9-bjlwf / Running 40d

 11.4 使用Helm

  helm search                 # 查看当前可以安装的chart

kubeusr@GalaxyKubernetesMaster:~$ helm repo list             # 查看仓库
NAME URL
stable https://kubernetes-charts.storage.googleapis.com # stable是官方仓库
local http://127.0.0.1:8879/charts # local是用户存放自己开发的chart的本地仓库

  可以通过helm repo add 添加更多个仓库。

  支持关键字搜索:

kubeusr@GalaxyKubernetesMaster:~$ helm search mysql
NAME CHART VERSION APP VERSION DESCRIPTION
stable/mysql 0.10. 5.7. Fast, reliable, scalable, and easy to use open-source rel...
stable/mysqldump 1.0. 5.7. A Helm chart to help backup MySQL databases using mysqldump
stable/prometheus-mysql-exporter 0.1. v0.10.0 A Helm chart for prometheus mysql exporter with cloudsqlp...
stable/percona 0.3. 5.7. free, fully compatible, enhanced, open source drop-in rep...
stable/percona-xtradb-cluster 0.2. 5.7. free, fully compatible, enhanced, open source drop-in rep...
stable/phpmyadmin 1.1. 4.8. phpMyAdmin is an mysql administration frontend
stable/gcloud-sqlproxy 0.5. 1.11 Google Cloud SQL Proxy
stable/mariadb 5.0. 10.1. Fast, reliable, scalable, and easy to use open-source rel...

安装chart也很简单,执行如下命令就可以安装MySQL:

kubeusr@GalaxyKubernetesMaster:~$ helm install stable/mysql             # 安装MySQL
NAME: invisible-stingray # release的名字, 如果不用-n指定名字,这里就随机生成。
LAST DEPLOYED: Wed Jan :: 2019
NAMESPACE: default # 命名空间,可以通过--namespace指定
STATUS: DEPLOYED # 状态是DEPLOYED, 表示已经将chart部署到集群 RESOURCES: # 当前release包含的资源,POD, secret,configmap, persistentVolumeClaim
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
invisible-stingray-mysql-8787ff6c8-dh8bh / Pending 0s ==> v1/Secret
NAME TYPE DATA AGE
invisible-stingray-mysql Opaque 0s ==> v1/ConfigMap
NAME DATA AGE
invisible-stingray-mysql-test 0s ==> v1/PersistentVolumeClaim
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
invisible-stingray-mysql Pending 0s ==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
invisible-stingray-mysql ClusterIP 10.107.208.222 <none> /TCP 0s ==> v1beta1/Deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
invisible-stingray-mysql 0s NOTES: # 显示的是release的使用方法
MySQL can be accessed via port on the following DNS name from within your cluster:
invisible-stingray-mysql.default.svc.cluster.local To get your root password run: MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default invisible-stingray-mysql -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo) To connect to your database: . Run an Ubuntu pod that you can use as a client: kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il . Install the mysql client: $ apt-get update && apt-get install mysql-client -y . Connect using the mysql cli, then provide your password:
$ mysql -h invisible-stingray-mysql -p To connect to your database directly from outside the K8s cluster:
MYSQL_HOST=127.0.0.1
MYSQL_PORT= # Execute the following command to route the connection:
kubectl port-forward svc/invisible-stingray-mysql mysql -h ${MYSQL_HOST} -P${MYSQL_PORT} -u root -p${MYSQL_ROOT_PASSWORD}

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

kubeusr@GalaxyKubernetesMaster:~$ helm list --namespace default
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
invisible-stingray Wed Jan :: DEPLOYED mysql-0.10. 5.7. default
vehement-lambkin Wed Jan :: DEPLOYED mysql-0.10. 5.7. default
kubeusr@GalaxyKubernetesMaster:~$ helm delete invisible-stingray

  

  

 

  

  

第十一章 Helm-kubernetes的包管理器(上)的更多相关文章

  1. Helm:kubernetes应用包管理工具

    概要 Helm:kubernetes应用包管理工具 K8s部署应用的时候,应用会通过yaml描述信息调用K8s-api:Helm即是管理这些Yaml的应用包管理工具 组成 Helm包含5个部分 Hel ...

  2. 使用脚本在Linux服务器上自动安装Kubernetes的包管理器Helm

    Helm之于Kubernetes好比yum之于Red Hat Enterprise Linux,或者apt-get之于Ubuntu. Helm是由helm CLI和Tiller组成,是典型的Clien ...

  3. Kubernetes学习之路(二十五)之Helm程序包管理器

    目录 1.Helm的概念和架构 2.部署Helm (1)下载helm (2)部署Tiller 3.helm的使用 4.chart 目录结构 5.chart模板 6.定制安装MySQL chart (1 ...

  4. kubernetes-helm程序包管理器(二十)

    helm概述 Helm是Kubernetes的包管理器,Helm 让我们能够像 yum 管理 rpm 包那样安装.部署.升级和删除容器化应用. Helm的核心术语: Chart:一个helm程序包,是 ...

  5. 认识 Cargo-Rust构建工具和包管理器

    认识 Cargo-Rust构建工具和包管理器 上两篇文章 都有说到 hello world 程序,但是我们如果使用自己创建文件的方式创建项目,一旦文件多了,那得多麻烦,整个项目将变得难以管理.下面我来 ...

  6. 使用 Windows 包管理器 (winget) 安装 .Net

    用户可以在 Windows 10 和 Windows 11 计算机上使用 winget 命令行工具来发现.安装.升级.删除和配置应用程序. 此工具是 Windows 程序包管理器服务的客户端接口. 以 ...

  7. ASP.NET Core on K8S深入学习(10)K8S包管理器Helm

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 一.关于Helm 1.1 为何需要Helm? 虽然K8S能够很好地组织和编排容 ...

  8. 容器编排系统K8s之包管理器Helm基础使用

    前文我们了解了k8s上的hpa资源的使用,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14293237.html:今天我们来聊一下k8s包管理器helm的相 ...

  9. Node.js包管理器Yarn的入门介绍与安装

    FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱 ...

随机推荐

  1. APUE学习笔记——10.可靠信号与不可靠信号

    首先说明:现在大部分Unix系系统如Linux都已经实现可靠信号. 1~31信号与SIGRTMIN-SIGRTMAX之间并不是可靠信号与不可靠信号的区别,在大多数系统下他们都是可靠信号. 只不过: 1 ...

  2. chrome浏览器使用记录

    出现错误 net::ERR_BLOCKED_BY_CLIENT 出现这个错误一般是因为chrome安装了adblocker等这样的插件,这些插件会把路径及文件名中包含广告字样的文字禁止掉,比如:adv ...

  3. [Linux] 随机切分文件内容

    1.从原文件中随机选出若干行 可以直接用shuf命令就可以完成: $ shuf -n source.txt > target.txt shuf命令的说明: $ shuf --help Usage ...

  4. 一个简洁、好用的Pytorch训练模板

    一个简洁.好用的Pytorch训练模板 代码地址:https://github.com/KinglittleQ/Pytorch-Template 怎么使用 1) 更改template.py 替换 __ ...

  5. bootstrap 折叠菜单

    首先从 左侧的折叠菜单 开始.看图. 2. CSS 代码 以下是自定义的css代码,由于系统是内部使用,所以优先考虑chrome,firefox 不考虑IE了. #main-nav { margin- ...

  6. WPF/UWP 的 Grid 布局竟然有 Bug,还不止一个!了解 Grid 中那些未定义的布局规则

    只要你用 XAML 写代码,我敢打赌你一定用各种方式使(nuè)用(dài)过 Grid.不知你有没有在此过程中看到过 Grid 那些匪夷所思的布局结果呢? 本文将带你来看看 Grid 布局中的 Bu ...

  7. Java8新特性——StreamAPI(一)

    1. 流的基本概念 1.1 什么是流? 流是Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合. 众所周知,集合操作非常麻烦,若要对集合进行筛选.投影,需要写大量的代码, ...

  8. excel怎么一次性生成10万个6位连续数 和 随机6位数

    1.打开工作表,在名称框输入A1:A100000 2.编辑栏输入 =int(rand()*900000+100000) 3.按ctrl+enter 需要提取的话,马上ctrl+c就可以在其它软件中粘贴 ...

  9. 《DSP using MATLAB》示例Example 8.12

    %% ------------------------------------------------------------------------ %% Output Info about thi ...

  10. PHP匹配Email、URL、IP

    /* * 正则表达式匹配 */ $email = '137813369@qq.com'; $regex = '/\w+([−+.]\w+)*@\w+([−.]\w+)*\.\w+([−.]\w+)*/ ...