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. L159

    Waves are the children of the struggle between ocean and atmosphere, the ongoing signatures of infin ...

  2. L146 Space Station Hole Cause Will Be Determined

    The head of the U.S. space agency said Tuesday he's sure that investigators will determine the cause ...

  3. console 代理

    window.log = function(){ if(!window.console ){ return; } var arr = [].slice.call(arguments); arr.uns ...

  4. [知识图谱] 环境配置:Java8 + Maven3 + HBase + Titan

    1.Java Java8安装配置 2.Maven Linux下的Maven安装与配置 3.Hbase 官方安装教程:http://s3.thinkaurelius.com/docs/titan/1.0 ...

  5. OPEN(SAP) UI5 学习入门系列之三:MVC (上) - 模型

    这次我们来一起学习MVC,这个专题分为两个小节,本次主要是总览以及模型,下一次着重会介绍视图以及控制器,因为控制器其实没有太多可以讲的,所以和视图合并在一块. 1 Model View Control ...

  6. PyQt: “AttributeError: 'Form' object has no attribute 'exec_'” when opening second window

    # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QApplication , QMainWindow from PyQt5 ...

  7. MpVue开发之组件引入的问题

    再一次开发订餐系统中,遇到订餐页面引入头部商品列表,底部组件时,报错,模块编译失败,未进入缓存区. 我以为是新添加的模块没有重新启动导致的,然后重新与运行npm run dev后还是失败, 最后经过反 ...

  8. 【剑指offer】11--旋转数组的最小数字(二分查找)

    原创博文,转载请注明出处! # 本文是牛客网<剑指offer>刷题笔记 1.题目 旋转数组的最小数字:输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1 ...

  9. VS 工具箱 Dev控件显示

    工具箱修复Dev控件显示 用VS2010新打开一个项目,居然发现工具箱里边没了Dev控件. 命令提示符定位到Dev控件的安装目录下的\Components\Tools文件夹下,执行如下命令 添加:To ...

  10. vector 介绍

    介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...