容器编排是指用于自动化、管理和调度由单个容器定义的工做负载的工具和平台。这个领域有不少参与者,包括Hashicorp的Nomad、Apache Mesos、Amazon的ECS,还有别忘了Google本身开发的Borg项目(Kubernetes就是从这个项目演变而来的)。每种技术都有优缺点,但Kubernetes的日益流行和强大的社区支持代表,Kubernetes目前是容器编排之王。 前端
Kubernetes在使用开源软件时具备明显的优点。做为一个开源平台,它与云无关,在它之上构建其余开源软件是有意义的。它还拥有超过40000名贡献者,并且因为许多开发人员已经熟悉Kubernetes,所以用户更容易集成在K8s之上构建的开源解决方案。 web
把Kubernetes分解成模块 后端
分解Kubernetes的最简单方法是了解容器编排器的核心概念。容器用做基本的工做构建块,而后在彼此之上构建组件以将系统链接在一块儿。api
组件有两种核心类型:工做负载管理器(托管和运行容器的方法)、集群管理器(表明集群作出决策的全局方法)。 安全
在Kubernetes中,这些角色由工做节点和管理工做(即Kubernetes组件)的控制平面完成。 服务器
管理工做负载 微信
Kubernetes工做节点有一个嵌套的组件层。在底层是容器自己。 网络
从技术上讲,容器运行在pods中,pods是Kubernetes集群中的基本对象类型。如下是它们之间的关系: app
Pod:Pod定义应用程序的逻辑单元。它能够包含一个或多个容器,每一个Pod部署到一个节点上。 运维
节点:这是做为集群中工做机的虚拟机;pods在节点上运行。
集群:由工做节点组成,由控制平面管理。
每一个节点运行一个名为kublet的代理(用于在pod中运行容器),并运行一个kube代理(用于管理网络规则)。
管理集群
工做节点管理容器,Kubernetes控制平面对集群进行全局决策。
控制平面由几个基本组件组成:
内存存储(etcd):这是全部集群数据的后端存储。虽然可使用不一样的备份存储运行Kubernetes集群,但etcd(一个开源的分布式键值存储)是默认的。
调度器(kube调度器):调度器负责将新建立的pod分配给适当的节点。
API前端(kube-apiserver):这是一个网关,开发人员能够经过它与Kubernetes交互,以部署服务、获取指标、检查日志等。
控制器管理器(kube Controller manager):监控集群并进行必要的更改,以使集群保持在所需的状态,例如扩展节点、保持每一个复制控制器的正确pod数以及建立新的命名空间。
控制平面作出决策以确保集群的正常运行,并将这些决策抽象出来,这样开发人员就没必要担忧它们了。它的功能很是复杂,系统用户须要了解的是控制平面的逻辑约束,而没必要过于纠结于细节。
使用控制器和模板
集群的组件决定了集群如何管理本身,可是开发人员或(人工)运维人员怎么告诉集群如何运行软件?这就是控制器和模板的来源。
控制器编排pod,K8s对于不一样的用例有不一样类型的控制器。但关键的是Jobs(用于运行到完成的一次性做业),以及ReplicaSets(用于运行指定的一组提供服务的相同pod)。
与Kubernetes中的其余概念同样,这些概念构成了更复杂系统的构建模块,容许开发人员运行弹性服务。咱们鼓励你使用Deployments,而不是直接使用ReplicaSets。
Deployments表明用户管理ReplicaSets并容许滚动更新。Kubernetes Deployments确保只有一些pod在更新时关闭,从而容许零停机部署。一样,CronJobs管理Jobs并用于运行调度好的和重复的进程。K8s的许多层容许更好的定制,可是Cronjob和Deployments足以知足大多数用例。
一旦知道要选择哪一个控制器来运行服务,就须要使用模板配置它。
模板解析
Kubernetes模板是一个YAML文件,它定义了运行容器的参数。与任何一种配置即代码同样,它有本身的特定格式和要求,须要学习不少东西。所幸的是,你须要提供的信息与针对任何容器编排器运行代码时所需的信息相同:
——告诉它应用程序的名称
——告诉它在哪里查找容器的镜像(一般称为容器注册表)
——告诉它要运行多少个实例(ReplicaSets的数量)
配置的灵活性是Kubernetes的众多优势之一。使用不一样的资源和模板,还能够提供有关如下集群信息:环境变量、秘密的位置、应挂载以供容器使用的任何数据卷、每一个容器或pod容许使用多少CPU和内存、容器应运行的特定命令等。
把这一切结合起来
结合来自不一样资源的模板,用户能够在Kubernetes中互操做组件,并根据它们的须要进行自定义。
在一个更大的生态系统中,开发人员利用Jobs、Services和Deployments(带有ConfigMaps和Secrets),生成须要在部署过程当中精心编排的应用程序。
管理这些步骤能够手动完成,也可使用一个经常使用的包管理选项来完成。虽然彻底能够根据Kubernetes API进行本身的部署,但打包配置一般是一个好主意,特别是若是你要发布的开源软件多是由其余人部署和管理的。
Kubernetes选择的打包管理器是Helm。它容许你打包本身的软件,以便在Kubernetes集群上轻松安装。
其实并不难
位于容器顶部的许多层和扩展可能使容器编排器难以理解。但一旦你把它们分解,搞清楚它们是如何相互做用的,其实并不复杂。就像一个真正的管弦乐队同样,你欣赏每一种乐器,喜欢它们的合奏。
原文连接:
https://opensource.com/article/20/6/container-orchestration
后台回复“加群”,带你进入高手如云交流群
推荐阅读:
▼
喜欢,就给我一个“在看”
10T 技术资源大放送!包括但不限于:云计算、虚拟化、微服务、大数据、网络、Linux、Docker、Kubernetes、Python、Go、C/C++、Shell、PPT 等。在公众号内回复「1024」,便可免费获取!!
本文分享自微信公众号 - Linux云计算网络(cloud_dev)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。