第十一章 Helm-kubernetes的包管理器(上)

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>        44134/TCP   131dkubeusr@GalaxyKubernetesMaster:~$ kubectl get -n kube-system deployment tiller-deploy
NAME            DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
tiller-deploy   1         1         1            1           131dkubeusr@GalaxyKubernetesMaster:~$ kubectl get -n kube-system pod tiller-deploy-895d57dd9-bjlwf
NAME                            READY     STATUS    RESTARTS   AGE
tiller-deploy-895d57dd9-bjlwf   1/1       Running   0          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.1          5.7.14          Fast, reliable, scalable, and easy to use open-source rel...
stable/mysqldump                        1.0.0           5.7.21          A Helm chart to help backup MySQL databases using mysqldump
stable/prometheus-mysql-exporter        0.1.0           v0.10.0         A Helm chart for prometheus mysql exporter with cloudsqlp...
stable/percona                          0.3.2           5.7.17          free, fully compatible, enhanced, open source drop-in rep...
stable/percona-xtradb-cluster           0.2.0           5.7.19          free, fully compatible, enhanced, open source drop-in rep...
stable/phpmyadmin                       1.1.2           4.8.2           phpMyAdmin is an mysql administration frontend
stable/gcloud-sqlproxy                  0.5.0           1.11            Google Cloud SQL Proxy
stable/mariadb                          5.0.9           10.1.36         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  2 03:19:02 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  0/1    Pending  0         0s==> v1/Secret
NAME                      TYPE    DATA  AGE
invisible-stingray-mysql  Opaque  2     0s==> v1/ConfigMap
NAME                           DATA  AGE
invisible-stingray-mysql-test  1     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>       3306/TCP  0s==> v1beta1/Deployment
NAME                      DESIRED  CURRENT  UP-TO-DATE  AVAILABLE  AGE
invisible-stingray-mysql  1        1        1           0          0sNOTES:                                             # 显示的是release的使用方法
MySQL can be accessed via port 3306 on the following DNS name from within your cluster:
invisible-stingray-mysql.default.svc.cluster.localTo 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:1. Run an Ubuntu pod that you can use as a client:kubectl run -i --tty ubuntu --image=ubuntu:16.04 --restart=Never -- bash -il2. Install the mysql client:$ apt-get update && apt-get install mysql-client -y3. Connect using the mysql cli, then provide your password:$ mysql -h invisible-stingray-mysql -pTo connect to your database directly from outside the K8s cluster:MYSQL_HOST=127.0.0.1MYSQL_PORT=3306# Execute the following command to route the connection:kubectl port-forward svc/invisible-stingray-mysql 3306mysql -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      1               Wed Jan  2 03:19:02 2019        DEPLOYED        mysql-0.10.1    5.7.14          default
vehement-lambkin        1               Wed Jan  2 03:18:15 2019        DEPLOYED        mysql-0.10.1    5.7.14          default
kubeusr@GalaxyKubernetesMaster:~$ helm delete invisible-stingray

 

 

 

 

  

  

 

  

  

 

 

 

转载于:https://www.cnblogs.com/liufei1983/p/10208846.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# - JSON详解

C# - JSON详解 转载于:https://www.cnblogs.com/macT/p/10214396.html

弗尤博客(十一)之搜索博文

在首页中右侧在textbox输入值&#xff0c;单击搜索Botton 跳转到 找一找 页面 其中textbox文本值传递过去并且显示在控件中&#xff0c;搜索结果也一起显示&#xff08;datalist&#xff09;转载于:https://www.cnblogs.com/frankybpx/p/10214409.html

史上最全的前端开发面试题(含详细答案)

本文由我收集网络 自己平时面试的 或者面试别人时的一些前端面试题&#xff0c;初学者阅后也要用心钻研其中的原理&#xff0c;重要知识需要系统学习、透彻学习&#xff0c;形成自己的知识链。万不可投机取巧&#xff0c;切勿临时抱佛脚只求面试侥幸混过关. 知识最重要的是学习…

MySQL之IFNULL()、ISNULL、NULLIF用法

MySQL之IFNULL()、ISNULL、NULLIF用法 IFNULL语法说明 IFNULL(expr1,expr2) 如果 expr1 不是 NULL&#xff0c;IFNULL() 返回 expr1&#xff0c;否则它返回 expr2。 IFNULL()返回一个数字或字符串值&#xff0c;取决于它被使用的上下文环境。 举个栗子&#xff1a; 1 mysql…

postgresql模糊匹配正则表达式性能问题

postgresql 模糊匹配 目前建议使用like&#xff0c;~~,不建议使用正则表达式&#xff0c; 目前有性能问题https://yq.aliyun.com/articles/405097正则表达式效率比较低下&#xff1a;操作符 ~~ 等效于 LIKE&#xff0c; 而 ~~* 对应 ILIKE。 还有 !~~ 和 !~~* 操作符 分别代表 …

数据库的原理,一篇文章搞定(一)

https://blog.csdn.net/zhangcanyan/article/details/51439012 一提到关系型数据库&#xff0c;我禁不住想&#xff1a;有些东西被忽视了。关系型数据库无处不在&#xff0c;而且种类繁多&#xff0c;从小巧实用的 SQLite 到强大的 Teradata 。但很少有文章讲解数据库是如何工作…

配置MySQL的环境变量

配置MySQL的环境变量 1.现在安装MySQL ——–下载最新版MySQL软件&#xff0c;将MySQL安装到系统目录中&#xff0c;记录当前安装目录&#xff1b; 如安装mysql到D:\wamp\mysql目录下 2.打开win7系统——右击计算机——单击属性-弹出win7系统页面 3.高级系统设置-环境变…

通过mysqldump备份数据库

使用mysqldump命令备份 mysqldump命令的作用是备份MySQL数据库。是将数据库中的数据备份成一个文本文件。表的结构和表中的数据将存储在生成的文本文件中。mysqldump命令的工作原理很简单。它先查出需要备份的表的结构&#xff0c;再在文本文件中生成一个CREATE语句。然后&…

ThinkPHP-保存生成的二维码

通过TP框架引入Qrcode插件&#xff0c;然后调用插件生成二维码&#xff0c;并保存1.引入qrcode插件&#xff1a; 2.功能页面-生成二维码按钮&#xff1a; 3.生成二维码-代码&#xff1a; 4.后台代码-通过vendor方法引入&#xff1a; //下载生成的二维码-引用方法1 pu…

工厂方法 Factory Method

背景&#xff1a;有一个应用框架&#xff0c;它可以向用户显示多个文档。在这个框架中&#xff0c;两个主要的抽象是类Application和Document.这两个类都是抽象的。客户必须通过它们的子类来做与举替应用相关的实现。 分析&#xff1a;因为被实例化的特定Document子类是与特定应…

解析.DBC文件, 读懂CAN通信矩阵,实现车内信号仿真

通常我们拿到某个ECU的通信矩阵数据库文件&#xff0c;.dbc后缀名的文件。 直接使用CANdb Editor打开&#xff0c;可以很直观的读懂信号矩阵的信息&#xff0c;例如下图&#xff1a; 现在要把上图呈现的信号从.dbc文件中解析出来&#xff0c;供实现自动化仿真总线信号使用&…

linux命令——init 的使用用法

1.手动输入命令会执行相关操作 #init 0 - 停机&#xff08;千万不能把initdefault 设置为0 &#xff09; #init 1 - 单用户模式 #init 2 - 多用户&#xff0c;没有 NFS 不联网#init 3 - 完全多用户模式(标准的运行级) #init 4 - 没有用到 #init 5 - X11 &#xff08;xwindow) 图…

01-数据库基础

1 数据库系统概述 1.1 数据库的4个基本概念 数据&#xff08;Data&#xff09;:数据库中存储的基本对象数据库&#xff08;Database&#xff09;:长期储存在计算机内、有组织的、可共享的大量数据的集合。数据库管理系统&#xff08;DBMS&#xff09;:用户与操作系统之间的一层…

linux命令——crontab的使用方法

一、crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程&#xff0c;与windows下的计划任务类似&#xff0c;当安装完成操作系统后&#xff0c;默认会安装此服务工具&#xff0c;并且会自动启动crond进程&#xff0c;crond进程每分钟会定期检…

mongdb group聚合操作

1、数据准备 [{"goods_id":1,"cat_id":4,"goods_name":"KD876","goods_number":1,"click_count":7,"shop_price":1388.00,"add_time":1240902890},{"goods_id":4,"cat_id&quo…

PHP连接MySQL数据库的几种方法

1.最简单的方式-mysql&#xff08;面向过程&#xff09; <?php $con mysql_connect("localhost","root","password"); $select_db mysql_select_db(test); if (!$select_db) {die("could not connect to the db:\n" . mysql_e…

jQuery 教程01——jQuery安装

1、简介 jQuery是一个轻量级的”写的少&#xff0c;做的多”的JavaScript库。 jQuery 极大地简化了 JavaScript 编程。 jQuery 很容易学习。 jQuery库包含以下功能&#xff1a; HTML 元素选取 HTML 元素操作 CSS 操作 HTML 事件函数 JavaScript 特效和动画 HTML DOM 遍历和…

第一个程序 快速编译链接的办法

转载于:https://www.cnblogs.com/ZHONGZHENHUA/p/10223249.html

变量 和 注释

转自&#xff1a;白月黑羽Python3教程&#xff1a;http://www.python3.vip/doc/tutorial/python/0003/ Python语言中&#xff0c;所有的 数据 都被称之为 对象。 每个整数、小数、字符串&#xff0c;还有我们后面要学的 字典、元组、列表 等&#xff0c; 都是对象。 在Python程…

jQuery 教程02-jQuery 语法

通过 jQuery&#xff0c;您可以选取&#xff08;查询&#xff0c;query&#xff09; HTML 元素&#xff0c;并对它们执行”操作”&#xff08;actions&#xff09;。 jQuery 语法 jQuery 语法是通过选取 HTML 元素&#xff0c;并对选取的元素执行某些操作。 基础语法&#x…