Kubernete应用部署与管理-拿什么部署管理我们的容器应用?

应用部署及管理从容器技术开始大热开始,就是一个很大的话题,本身容器技术很大一部分动机就是解决应用如何部署,以及部署后如何弹性扩展伸缩,以便更好地便捷部署应用、增加应用弹性、提升资源使用率。

        我们来回顾一下,最早容器应用部署一般都是编写Dockerfile,在Dockerfile里根据基础镜像,使用镜像操作指令,组合定义生成新的Image,然后简单的docker run启动并进行容器的启动,整个过程非常简便。

        但是我们都知道,真正的应用,特别是企业级的应用,不会把所有应用信息放入到一个简单的容器运行,往往需要多个容器一起协同工作,复杂的应用整体运行起来,多的话要上百个容器应用同时运行,而如何进行折现容器管理,包括容器的调度管理、监控、容器存储管理等,往往成了一个很大的瓶颈。因此,为了解决这些问题,容器的编排调度平台,成了业界热点,其中包括Kubernetes、 Mesos、Swarm,也就是我们以前熟知的“三驾马车“。

      但事实上,随着技术的快速不断迭代发展,Kubernetes大获全胜,成了事实上的容器编排管理主流平台。但现在,应用在Kubernetes上的部署方式多种多样,这些部署方式都对应什么场景,如何出现的,我们如何选择合适的部署方式,对我们来讲不免常常困惑,因此如何在Kubernetes,以及基于Kubernetes基础上的容器管理平台,如红帽的Openshift上进行应用的部署、管理,值得我们探索究竟。

      以下,是初步整理的容器化应用部署方式:

基于Dockerfile部署

      出现较早,根据基础镜像,编写Dockerfile脚本,然后根据Dockerfile生成新的镜像直接部署;

      适合应用相对简单,演示类型应用, 但编写Dokerfile相对费力;

      单容器化应用部署;

直接镜像部署

      根据已经生成的镜像,直接部署,如已经把镜像做好后上传到镜像仓库,客户端可直接pull镜像仓库到本地,然后直接执行运行镜像;

      单容器化应用部署;

K8S的Deployment部署

      单镜像部署如上所述,存在了许多的问题,所以K8S里面有对应用的部署标准描述,也就是K8S原生的对象Deployment,我们可以在Deployment里面定义部署的应用上下文信息,包括包含的镜像,容器的部署分布方式,Pod的个数等,K8S根据Deployment信息进行Pod的自动部署等;

Helm部署应用;

    基于Deployment的部署,给我们在应用部署上带来了很多的便利,包括声明式的说明应用的部署逻辑,但总的来讲,直接采用Deployment部署在复杂应用部署上,还是有一定的繁琐性,以及Deployment所依赖的一些资源对象,我们也得额外配置。 因此,如何更高效部署应用,也是业界人士探索的,其中解决方案包括Helm,Helm 是 Kubernetes 的包管理器,Helm类似于Linux的yum一样,能快速查找、下载和安装基于K8S的软件包。Helm 由客户端组件 helm 和服务端组件 Tiller 组成, 能够将一组K8S资源打包统一管理, 是查找、共享和使用为Kubernetes构建的软件的一种便捷方式。

    更便捷的部署,不仅仅部署Deployment,还包括Deployment部署所需的一组资源对象。

Openshift的template部署

在此介绍红帽的混合容器云平台Openshift,它除了支持常规的K8S部署,如Deployment、镜像部署、Helm等,它还有一直部署方式,就是基于template文件部署,一个template模版是一系列可以被参数化并创建一组对象的集合。模版可以创建任何你有权限创建的任意对象,相当于定义一组可带参数的对象集合,需要使用的时候直接执行这个template脚本,如oc create -f templatefile.yaml。

基于Openshift template也有一个特点,就是如果是已经上传到global template library,那么可以通过Openshfit 控制台部署应用;

如果你的应用逻辑比较复杂,甚至需要关联多个容器的情况下建议使用Template。

Template是Openshift所特有的,在没有Helm之前,用户可以使用Template进行应用的上下文打包部署,有了Helm后,用户可以把Template转成相应的Helm部署包,具体参见:From Templates to Openshift Helm Charts    https://cloud.redhat.com/blog/from-templates-to-openshift-helm-charts

Template出现在Helm之前,是在没有Helm之前的Openshift打包应用部署解决方案。

Operator 部署

    其实,Docker 镜像的提出,是完成了应用静态描述的标准化。而 Kubernetes Operator 的出现,终于为应用的动态描述提出了一套行之有效的实现规范,相比于Helm,它还强调应用部署后的运维、调整等应用的全生命周期管理。

    K8S是声明式管理在其之上的对象状态,“声明式 API”的核心原理,就是当用户向 Kubernetes 提交了一个 API 对象的描述之后,Kubernetes 会负责为你保证整个集群里各项资源的状态,都与你生命的 API 对象描述的需求相一致。

  Operator本质上是自我实现一个控制器,对自定义的CRD资源对象进行控制,而整个应用部署集群的状态和定义,都成了Kubernetes 控制器需要保证的“终态”。

    因此,Operator上可以定义应用运行后需要的状态,如果状态不对,则需要进行怎么样的调整。

  Operator的目标类似于定义一个企业级应用的"App Store",我们可以制作Operator,然后再发布到Operator Hub上,然后需要部署应用的时候,直接拉取应用,执行运行,而运行时候,Operator可以自我管理调整。

kustomize部署管理

kustomize 是 kubernetes 原生的配置管理,以无模板方式来定制应用配置。而kustomize出现的意义是什么呢?一般应用都会有多套部署环境:开发环境、测试环境、生产环境,多套环境意味着存在多套 K8S 应用资源 YAML配置。而这么多套 YAML 之间只存在很小配置区别,比如镜像版本不同、Label 不同等,而这些不同环境下的YAML 经常会因为人为疏忽导致配置错误,因此如何管理多套环境,存在不少问题:

如何管理不同环境或不同团队的应用的 Kubernetes YAML 资源

如何以某种方式管理不同环境的微小差异,使得资源配置可以复用,减少 copy and change 的工作量

如何简化维护应用的流程,不需要额外学习模板语法

Kustomize 通过以下几种方式解决上述几个问题:

而kustomize 通过 Base & Overlays 方式方式维护不同环境的应用配置

kustomize 使用 patch 方式复用 Base 配置,并在 Overlay 描述与 Base 应用配置的差异部分来实现资源复用

kustomize 管理的都是 Kubernetes 原生 YAML 文件

        kustomize通过继承式进行应用部署描述,可以对多套环境进行统一管理。

        相比Helm,Kustomize 给 Kubernetes 的用户提供一种可以重复使用配置的声明式应用管理,从而在配置工作中,用户只需要管理Kubernetes 的原生 API 对象,而不需要使用复杂的模版。

        适用于需要管理多套K8S环境场景

GitOps部署管理

典型的部署方式为ArgoCD,GitOps的主要思想是将应用系统的声明性基础架构和应用程序存放在Git的版本控制库中,即一切都是以生明式为基础,未来应用部署,所有的部署上下文、配置、应用包、源代码均可放置在Git中,通过新式的部署工具,如ArgoCD,实时监测Git上的那些配置的变动,随时更新K8S上的资源,以此达到配置驱动应用部署管理。因此,GitOps可以更为高效的管理应用部署,应用的部署均可以通过版本化控制、回滚等。

适合于对部署管理进行自动化、版本控制场景。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容