系列介绍:初探云原生应用管理系列是介绍如何用云原生技术来构建、测试、部署、和管理应用的内容专辑。做这个系列的初衷是为了推广云原生应用管理的最佳实践,以及传播开源标准和知识。通过这个系列,希望帮助大家学到 Kubernetes、Helm、Gitops、Kustomize 等新知识。

这是大厂程序员小张普普通通的一个早晨,大家好像在讨论着什么:

“什么?听说隔壁公司在用 K8s 发布应用了?”

“据说在用 Helm !”

像往常,小张根本不关心这些无聊的讨论。他稳稳的坐在办公桌前,打开公司内部自研的、魔改 Gitlab 打造的项目管理系统,点击了好几个 Button 之后,开始一天辛勤的劳作。

但这一次不知道为何,小张的内心居然有点慌:

“ Helm?啥是 Helm ?”

------ 分割线 ------

Helm: K8s 应用部署与打包工具

如果一个用户想要部署起来一个K8s 应用,最快捷的方法是什么呢?

我们知道,Kubernetes (简称 k8s ) 是一个能够部署和管理容器的平台。然而,在 k8s 里还没有抽象到“应用”这一层概念。一个应用往往由多个 k8s 资源 ( Deployment、Service、ConfigMap )组成。所以,我们需要一个工具在 k8s 之上来部署和管理一个应用所包含的资源( K8s API Resource ),这就是 Helm 所做的事情。

除此以外,Helm 定义了一套 Chart 格式来描述一个应用。怎么理解 Chart 呢?打个比方,一个安卓程序打包成 APK 格式,就可以安装到任意一台运行安卓系统的手机上。如果我们把 k8s 比做安卓系统,K8s 应用比做安卓程序,那么 Chart 就可以比做 APK。这也意味着,K8s 应用只要打包成 Chart ,就可以通过 Helm 部署到任意一个 k8s 集群上。

通常来说,我们可以直接使用别人已经做好的 Helm Chart ,就跟使用 Docker 镜像一样。所以,Helm 社区已经维护了一个官方 Helm Hub,这个 Hub 里包含的应用非常丰富,是目前云原生开发者搜索和下载应用的主要站点。

AppHub: Helm Hub 的中国小站

不过,遗憾的是,在国内使用 Helm Hub,对于绝大多数开发者来说都是很痛苦的一件事情。

原因很简单,随便打开一个 Charts 文件,你就会看到这个文件里充斥着大量的不可访问的镜像 URL :

 

或者是依赖根本访问不到的 Charts 库:

 

咱们软件工程师的时间这么宝贵(少),根本不想花时间解决这些无聊的网络问题上(大雾)!

可是,看着国外的程序员们通过一条 helm install 命令就把应用部署起来,咱们怎么感觉还是有点酸呢 ……

所以在正式开始探索云原生应用管理之前,我们首先要为你介绍一个叫做“开放云原生应用中心” ( Cloud Native App Hub,简称 AppHub ) 的服务,它的主页是:https://developer.aliyun.com/hub

AppHub 是一个托管在国内公有云上、全公益性的 Helm Hub “中国站”,它的后端由阿里云容器平台团队的三位工程师利用 20% 时间开发完成。

而这个站点的一个重要职责,就是把所有 Helm 官方 Hub 托管的应用自动同步到国内;同时,自动将 Charts 文件中的 gcr.io 等所有有网络访问问题的 URL 替换成为稳定的国内镜像 URL 。

这样,国内的开发者也可以自由的使用 helm install 来安装应用了!

接下来,我们就进入喜闻乐见的实践环节!

实例:用最快的速度部署 Guestbook

首先,当然是安装 Helm 。

在这里我们强烈推荐你使用 Helm v3 版本。

Helm v3 跟 Helm v2 的区别就像 Python 2 和 3 那么大,而且还比 Helm v2 要好用的多(比如:不需要安装服务端组件 Tiller)。我们下周的《为什么你必须尽快转向 Helm v3 》文章,会为你解释这个事情。

而为了方便国内开发者使用,我们已经自动同步了 Helm v3 二进制文件的下载链接到国内(一定要试,真的是秒下):

下载到 Helm 二进制文件直接解压到 $PATH 下就可以使用了。

接下来,我们使用 Helm 快速部署一个 guestbook 应用。这里假设你有一个阿里云 Kubernetes 服务在运行了(如果没有的话也没关系,下面还有自建 K8s 集群的例子)。

第一步是添加 apphub 作为你的 Helm Hub Repo:

 

可以直接在命令行搜索 guestbook:

 

然后,只需一行命令即可:

 

访问 Guestbook 服务

部署完成后,运行以下命令来查询并等待 pods 启动完毕 ( Running ):

 

查询服务地址:

 

通过 External IP 即可访问 guestbook 服务:

 

使用 Minikube 或者自建 K8s 集群?

实际上,K8s 本身是不区分云上服务还是自建集群的。只不过在没有云提供的负载均衡服务的话,Service 的访问方式会稍微麻烦一些,比如使用 NodePort :

 

这条命令执行完之后,应用会自动提示你接下来的访问方式。而通过--set 这种方式设置应用参数到底是怎么回事,我们后面的文章会细聊。

如果是 Minikube 的话,还需要把这个 NodePort Service 从 Minikube 里映射出来才能访问:

 

试用“一键安装” (体验功能)

除了正常的部署方法, AppHub 上也可以通过网页 UI 来体验一键部署 Chart 到任何云的 k8s 上。

举个例子,只需打开 guestbook 应用详情页面,点击 “一键安装”:

然后在”安装参数“弹窗里填写相应的服务器 URL 和 base64 编码的证书数据后,点击“确认”,AppHub 就会尝试安装 guestbook chart 到对应 k8s 集群上,成功后会弹窗通知。

不过,这个功能目前只是“体验”,因为你现在还没办法在 AppHub 上直接修改应用的配置参数。在线进行“应用定制”的功能就在 AppHub 的 Roadmap 里,预计下个月会上线。

不过,说起 Roadmap 的话:

AppHub 6 个月内的 Roadmap ,都在 Github 上开源!

是的,你可以通过 Github来随时对这个 Helm Hub 中国小站点提出你的改进思路。比如:如何更好的做“应用定制”?如何对接和托管你自己的 Charts Repo ?等等。

我们的口号是:每一位中国开发者,都是我们的 PM !(认真脸)

远不止 Helm !

可以看到,通过 Helm 快速部署起来K8s 应用的过程,使用门槛和心智负担都是非常低的。而相比于传统的应用构建、编排和发布的流程,Helm + K8s 的自动化组合正在迅速成为云时代提升开发者效率的不二法宝。

而这里介绍到的所有同步自官方 Hub Repo 的应用 Charts ,全都托管在这个 Github 上: cloudnativeapp/charts。大家有对 AppHub 相关的任何吐槽,都欢迎来这个 Repo 提 issue ;也欢迎来通过提交 pull requests 把你的 Charts 和 Repo 加入到 AppHub 上。

不过,如果深入使用过 Helm 一段时间后,你可能会有些其他的感受:

比如: “Helm 里的 Release 的概念到底是啥意思? Helm 的 Rollback 又是咋回事儿,跟 K8s 是啥关系?”

“Helm 对 K8s 应用管理的流程,好像不是那么的 Native 啊,总感觉哪里不对啊。”

在后面的几篇文章中,我们会和大家一起深入的分析 Helm 这套体系的优点和缺点,梳理在 K8s 架构中使用 Helm 的最佳实践,分享和讲解 Kustomize 流程和 GitOps 架构,以及更多的云原生应用管理的实例。

敬请期待吧!

作者简介: 邓洪超,阿里云工程师,前 CoreOS 软件工程师、Kubernetes Operator 机制的初始作者之一、Operator 第二人(因为第一人是李响),对 K8s 应用管理体系有较多的研究和经验。

初探云原生应用管理(一): Helm 与 App Hub的更多相关文章

  1. 初探云原生应用管理(二): 为什么你必须尽快转向 Helm v3

    系列介绍:这个系列是介绍如何用云原生技术来构建.测试.部署.和管理应用的内容专辑.做这个系列的初衷是为了推广云原生应用管理的最佳实践,以及传播开源标准和知识.在这个系列文章的开篇初探云原生应用管理(一 ...

  2. 初探云原生应用管理之:聊聊 Tekton 项目

    [编者的话]“人间四月芳菲尽,山寺桃花始盛开.” 越来越多专门给 Kubernetes 做应用发布的工具开始缤纷呈现,帮助大家管理和发布不断增多的 Kubernetes 应用.在做技术选型的时候,我们 ...

  3. 给 K8s API “做减法”:阿里巴巴云原生应用管理的挑战和实践

    作者 | 孙健波(天元)  阿里巴巴技术专家本文整理自 11 月 21 日社群分享,每月 2 场高质量分享,点击加入社群. 早在 2011 年,阿里巴巴内部便开始了应用容器化,当时最开始是基于 LXC ...

  4. 云原生应用管理,像管理手机APP一样管理企业应用

    我们在使用智能手机的时候,手机APP从应用市场一键安装,安装好即点即用,当有新版本一键升级,如果不想用了长按图标删除,整个过程非常简单,小朋友都能熟练掌握.而对于企业应用,由于结构复杂.可用性要求高. ...

  5. 云原生生态周报 Vol. 19 | Helm 推荐用户转向 V3

    作者| 禅鸣.忠源.天元.进超.元毅 业界要闻 Helm 官方推荐用户迁移到 V3 版本 Helm 官方发布博客,指导用户从 v2 迁移到 v3,这标志着官方开始正式推进 helm 从 v2 转向 v ...

  6. 云原生生态周报 Vol. 11 | K8s 1.16 早知道

    业界要闻 Pivotal 发布了完全基于 Kubernetes 的 Pivotal Application Service(PAS)预览版 这意味着 Pivotal 公司一直以来在持续运作的老牌 Pa ...

  7. OpenKruise - 云原生应用自动化引擎正式开源

    2019 年 6 月 24 日至 26 日, 由 Cloud Native Computing Foundation (CNCF) 主办的云原生技术大会 KubeCon + CloudNativeCo ...

  8. 规模化落地云原生,阿里云即将重磅亮相 KubeCon China

    2019 年 6 月 24 日至 26 日, 由 Cloud Native Computing Foundation (CNCF) 主办的云原生技术大会 KubeCon + CloudNativeCo ...

  9. API 管理在云原生场景下的机遇与挑战

    作者 | 张添翼 来源 | 尔达Erda公众号 ​ 云原生下的机遇和挑战 标准和生态的意义 自从 Kubernetes v1.0 于 2015 年 7 月 21 日发布,CNCF 组织随后建立以来,其 ...

随机推荐

  1. 英语阅读——The confusing pursuit of beauty

    这篇文章是<新视野大学英语>第四册的第二单元的文章,很好的一篇议论文,读起来也很有意思. 1 If you're a man, at some point a woman will ask ...

  2. 利用zabbix监控ogg进程(Linux平台下)

    前段时间生产的一个数据库的ogg进程挂了快半个月才被发现,已经起不来了,只有重新初始化再同步.因此很有必要监控下ogg的进程,这里给大家介绍如何使用zabbix监控oracle的ogg的进程.思路就是 ...

  3. SpringBoot(15)—@Conditional注解

    SpringBoot(15)-@Conditional注解 作用 @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件的才给容器注册Bean. 一.概述 1 ...

  4. SpringBoot(14)—注解装配Bean

    SpringBoot(14)-注解装配Bean SpringBoot装配Bean方式主要有两种 通过Java配置文件@Bean的方式定义Bean. 通过注解扫描的方式@Component/@Compo ...

  5. 用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat

    用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat 摘自:https://zhidao.baidu.com/question/492732911.html @echo off ...

  6. css 关于浮动float的使用以及清除浮动

    float:none | left | right 默认值:none 适用于:所有元素 none:设置对象不浮动left:设置对象浮在左边right:设置对象浮在右边 当该属性不等于none引起对象浮 ...

  7. [b0030] python 归纳 (十五)_多进程使用Pool

    1 usePool.py #coding: utf-8 """ 学习进程池使用 multiprocessing.Pool 总结: 1. Pool 池用于处理 多进程,并不 ...

  8. [b0006] Spark 2.0.1 伪分布式搭建练手

    环境: 已经安装好: hadoop 2.6.4  yarn 参考: [b0001] 伪分布式 hadoop 2.6.4 准备: spark-2.0.1-bin-hadoop2.6.tgz 下载地址:  ...

  9. Python—闭包和装饰器

    闭包 定义:内部函数对外部函数变量的引用,则将该函数与用到的变量称为闭包. 闭包必须满足以下三个条件: 必须有一个内嵌函数. 内嵌函数必须引用外部函数中的变量. 外部函数返回值必须是内嵌函数的引用. ...

  10. Mysql—数据库管理与表管理

    数据库管理 表管理 删除表