虽然Docker已经很强大了,但是在实际使用中还是有很多不便之处,比如集群管理、资源调度、文件管理等等。所以在这样一个容器百花齐放的时代,出现了很多解决方案,比如Mesos、Swarm、Kubernetes等等,其中谷歌的开源Kubernetes作为老大哥的存在。Kubernetes的发展历史总是不同的,好的总会代替坏的。Kubernetes在希腊语中意为“舵手”。它最初由谷歌的几位软件工程师创立。深受公司内部Borg和Omega项目的影响。很多设计都是借鉴了Borg,Borg的缺陷也被review了。随着改进,Kubernetes目前是一个CNCF项目,是许多公司管理分布式系统的解决方案。比较有意思的一点是Kubernetes的缩写叫k8s。也就是说k和s这个词的中间正好由8个字母组成,所以是一个词的简写形式。同样的,我们在项目中使用的国际化(internationalization)叫做i18n,作用是一样的。建立在Docker之上的Kubernetes可以构建一个容器调度服务,其目的是让用户通过Kubernetes集群管理云容器集群,无需用户进行复杂的设置,系统会自动选择合适的工作节点来调度执行具体的容器集群调度处理工作。它的核心概念是ContainerPod。Pod由一组在同一个物理工作节点上工作的容器组成。这些组容器具有相同的网络命名空间、IP、存储配额,也可以根据实际情况对每个Pod进行端口映射。此外,Kubernetes工作节点由主系统管理,节点包含用于运行Docker容器的服务。我们可以看到多种服务方式阿里云=>基础设施即服务新浪云=>平台即服务Office365=>软件即服务作为编排工具,就社区时代而言,Kubernetes并不占优势.毕竟,Kubernetes只有三年的历史,而Apache的Mesos已经有七年了。DockerSwarm虽然比Kubernetes年轻,但背后是Docker官方容器中心的全力支持。但是因为是谷歌开源的,有十几年的容器化经验,所以用的人还是很多的,未来会成为整个行业的主要支柱。Kubernetes解决的核心问题是服务发现和负载均衡。Kubernetes可以使用DNS名称或它们自己的IP地址公开容器。如果流向容器的流量很大,Kubernetes可以负载均衡和分配网络流量,从而使部署稳定。StorageOrchestrationKubernetes允许您自动挂载您选择的存储系统,例如本地存储、公共云提供商等。自动部署和回滚您可以使用Kubernetes来描述已部署容器的期望状态,它可以以受控的速率将实际状态更改为期望状态。例如,您可以自动化Kubernetes为您的部署创建新容器,删除现有容器并将其所有资源用于新容器。自动二进制打包Kubernetes允许您指定每个容器需要多少CPU和内存(RAM)。当容器指定资源请求时,Kubernetes可以就管理容器的资源做出更好的决策。自我修复Kubernetes重启失败的容器,替换容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不通知客户端。密钥和配置管理Kubernetes允许您存储和管理敏感信息,例如密码、OAuth令牌和ssh密钥。您可以部署和更新机密和应用程序配置,而无需重建容器映像,或在堆栈配置中公开机密。Kubernetes的出现不仅主导了容器编排市场,也改变了以往的运维方式。不仅模糊了开发和运维的界限,也让DevOps的作用更加明确。每个软件工程师都有Kubernetes可以用来定义服务之间的拓扑关系、在线节点数、资源使用情况,可以快速实现水平扩展、蓝绿部署等以往复杂的运维操作。性能对比当今三大调度系统对比分析总结ApacheMesosApacheMesos是一个分布式系统内核的开源集群管理器。ApacheMesos的出现比DockerSwarm和Kubernetes早得多。结合用于基于容器的应用程序的编排框架Marathon,它提供了DockerSwarm和Kubernetes的有效替代方案。Mesos还可以使用其他框架来支持容器化和非容器化工作负载。Mesos可以在同一台集群机器上运行多种分布式系统类型,并且可以更加动态和高效地共享资源。并且Messos还提供服务故障检查、服务发布、服务跟踪、服务监控、资源管理和资源共享。Messos可以扩展到数千个节点。如果你有很多服务器并且想要构建一个大型集群,Mesos就派上用场了。许多现代和可扩展的数据处理应用程序都可以在Mesos上运行,包括大数据框架Hadoop、Kafka和Spark。然而,大而全往往意味着相应的复杂性和难度。这在Messos中是完全正确的。与使用相同API的Docker和DockerSwarm不同,Mesos和Marathon有自己的API,这使得它们比其他编排更复杂。系统比较复杂。ApacheMesos是混合环境的完美编排工具。因为它包含了容器和非容器应用,虽然Messos非常稳定,但是却增加了用户快速学习应用的难度,这也是难以在应用和部署场景中推广的原因之一。DockerSwarmDockerSwarm是Docker公司的容器编排系统,使用标准的DockerAPI接口。containeruse命令和docker命令是一套,简单方便。DockerSwarm的基本架构也简单明了。每个主机运行一个DockerSwarm代理,一个主机运行一个DockerSwarm管理器。该管理器负责在这些主机上指挥和调度容器。DockerSwarm以高可用性模式运行。DockerSwarm中的一个节点充当其他节点的管理器,包括调度程序和服务发现组件的容器。DockerSwarm的优点和缺点是使用标准的Docker接口。因为它易于使用,易于集成到现有系统中,所以支持复杂的调度系统会更加困难,尤其是在自定义接口中实现的调度。这或许就是为什么成功也在Docker,失败也在Docker。Kubernetes作为容器集群管理系统,用于管理云平台中多台主机上的容器应用。Kubernetes的目标是让容器化应用的部署变得简单高效,因此Kubernetes提供了应用部署、规划、更新、维护的一整套机制。Kubernetes没有固定的容器格式,但Kubernetes使用自己的API和命令行界面进行容器编排。除了Docker容器,Kubernetes还支持其他多种容器,如rkt、CoreOS等。Kubernetes是一个自包含的管理工具,可以实现容器调度、资源管理、服务发现、健康检查、自动伸缩、更新和升级等。它还可以在应用模板配置中指定副本数、服务需求(IO优先级;性能优先级等)、资源使用间隔、标签(Labels等)来匹配特定需求以实现desiredstate等等,这些特性足以征服开发者,再加上Kubernetes有一个非常活跃的社区。为用户提供了更多的选择,方便用户扩展编排容器以满足自己的需求。但是因为Kubernetes使用了自己的API接口,命令系统是另外一个系统,这也是Kubernetes的门槛比较高的原因。大多数应用程序在部署时都会受到适当的监控,尤其是对于运行的载体容器。Kubernetes提供liveness探测器来检查我们的应用程序,这些探测器由节点上的kubelet定期执行。知识图谱主要介绍要学什么知识。传统的客户端-服务器架构表明Kubernetes遵循非常传统的客户端/服务器架构。客户端可以通过RESTful接口或直接使用kubectl与Kubernetes集群通信。前者和后者没有太大区别,只是封装和提供了Kubernetes提供的RESTfulAPI。每个Kubernetes集群由一组Master节点和一系列Worker节点组成。Master节点主要负责存储集群的状态,为Kubernetes对象分配和调度资源。主节点服务——主架构是管理集群状态的主节点。它主要负责接收客户端请求,安排容器的执行和运行控制循环,将集群的状态迁移到目标状态。Master节点由以下三个组件组成:APIServer:负责处理来自用户的请求。它的主要功能是对外提供RESTful接口,包括查看集群状态的读请求和改变集群状态的写请求。它也是唯一一个与etcd集群通信的组件。etcd:是一个一致性高可用的key-value数据库,可以作为存储所有Kubernetes集群数据的后端数据库。Scheduler:master节点上的一个组件,负责监控新创建的没有指定运行节点的Pod,并选择一个节点让Pod运行。调度决策中考虑的因素包括单个Pod和Pod集合的资源需求、硬件/软件/策略约束、亲和力和反亲和力规范、数据局部性、工作负载之间的干扰以及截止日期。controller-manager:在主节点上运行控制器的组件。从逻辑上讲,每个控制器都是一个单独的进程,但为了降低复杂性,它们都被编译成同一个可执行文件,并在进程中运行。这些控制器包括:NodeControllers(负责在节点故障时通知和响应),ReplicationControllers(负责为系统中的每个ReplicaController对象维护正确数量的Pod),EndpointControllers(填充Endpoints对象,即加入Services和Pods))、服务账户和令牌控制器(为新命名空间创建默认账户和API访问令牌)。Worker节点-节点架构其他Worker节点实现比较简单,主要由两部分组成:kubelet和kube-proxy。kubelet:它是工作节点执行操作的代理。负责具体的容器生命周期管理,根据从数据库获取的信息对容器进行管理,报告pod运行状态等。kube-proxy:是一个简单的网络访问代理,也是一个负载均衡器。它负责将访问某项服务的请求分配给工作节点上同标签的Pod。kube-proxy的本质是通过操作防火墙规则(iptables或ipvs)来实现Pod映射。ContainerRuntime:容器运行时是负责运行容器的软件。Kubernetes支持多种容器运行时:Docker、containerd、cri-o、rktlet以及任何实现KubernetesCRI(容器运行时接口)的东西。组件说明主要介绍了K8s的一些基本概念。主要由以下几个核心组件组成:apiserver是所有服务访问的唯一入口,提供认证、授权、访问控制、API注册和发现等机制。controllermanager负责维护集群的状态,比如scheduler负责资源的调度,比如期望的副本数、故障检测、自动扩容、滚动更新等,按照预定的调度策略将Pod调度到相应的机器上。etcd键值对数据库保存了整个集群的状态。kubelet负责维护容器的生命周期。它还负责卷和网络管理。Kube-proxy负责提供集群内的服务发现和负载均衡。Containerruntime负责镜像管理以及pod和容器的实际运行。除了核心组件,还有一些推荐的插件:CoreDNS可以为集群中的SVC创建DNS服务Dashboard,解析域名和IP的对应关系。Dashboard为K8s集群提供了一个B/S架构的接入入口。IngressController官方只能实现四层网络代理,而Ingress可以实现七层代理Prometheus为K8s集群提供资源监控能力。Federation提供统一管理功能,可以跨越多个K8s跨集群中心,提供集群跨可用区作者:Escape链接:https://www.escapelife.site/p...
