容器编排器们的自我介绍

容器,编排,自我介绍 · 浏览次数 : 288

小编点评

**Kubernetes 的基本概念** Kubernetes 是一个开源的容器编排器,它可以帮助开发者创建和管理多个容器的集群。 ** Kubernetes 的核心概念** * **容器:** Kubernetes 的核心单位是容器,它可以独立地创建和管理多个应用程序。 * **集群:** Kubernetes 的集群是一个多个容器的集群,它可以互相调度。 * **编排器:** Kubernetes 的编排器可以帮助开发者创建和管理容器的集群。 ** Kubernetes 的基本功能** * **创建容器:** 开发者可以使用 Kubernetes 的 API 创建新的容器。 * **管理容器:** 开发者可以使用 Kubernetes 的 API管理容器的状态。 * **分配资源:** 开发者可以使用 Kubernetes 的 API分配资源给容器。 * **调度容器:** 开发者可以使用 Kubernetes 的 API调度容器到集群中的某个节点。 ** Kubernetes 的优点** * **可扩展性:** Kubernetes 可以扩展到多个节点的集群。 * **容错性:** Kubernetes 可以容错到容器的死亡。 * **资源效率:** Kubernetes 可以资源效率地创建和管理容器的集群。 * **开发者友善:** Kubernetes 提供大量 API,可以帮助开发者创建和管理容器的集群。

正文

哈喽大家好,我是咸鱼

咸鱼在《一文带你了解容器技术的前世今生》有介绍过容器技术的由来以及Docker项目的发展

我们知道,Docker 及其他容器技术能够极大地简化应用程序的部署,做到了”开箱即用“

俗话说:”凡是具有两面性“。容器技术给我们带来便利的同时,一些问题也随之出现了

随着企业规模或者说业务规模的不断扩大,应用程序越来越多、而每个应用程序往往又由多个容器组成

例如想要实现一个简单的数据库 web 界面也可能需要为数据库服务器和应用程序运行单独的容器

于是容器的管理便成为了一个棘手的难题。工程师们为了解决这个问题,开发了一系列的容器编排器(container orchestrator),其中最有名的当属 kubernetes

容器编排器可以将一组容器作为一个基本单元去进行管理(例如 K8s 里的 pod),而且容器编排器可以在集群之间自动分配容器工作负载

那么今天,咸鱼将以自我介绍的形式来带大家了解三个容器编排器——Docker Compose、Swarm、Kubernetes

Docker Compose

大家好,我叫 Docker Compose 。我的爸爸是一个名叫 Docker 的公司

我的前身是一个叫 Fig 的项目,Fig 项目可是大有来头——因为它第一次提出了容器编排的概念

你只需要执行一条命令 fig up 就能够依次创建一系列容器,并且容器之间的关系及依赖性,都会自动帮你解决

当时它在 Github 上的热度可是比肩 Docker 的,后来我的爸爸秉承”打不过就加入“的理念,把 Fig 项目收购了

收购之后将名字改成了 Compose,于是我诞生了

我是根据一个 yaml 格式的配置文件来工作的,通常命名为 Docker-compose.yml

  • 首先我会去读取这个文件,然后通过 Docker API 创建这个文件声明的资源
  • 我还会为这些资源打上标签,方便我创建之后将它们分组管理

实际上我并不能够称得上是一个容器编排器,因为我实际上是通过 Docker 命令行接口(Docker command-line interface )去操作一组组容器的

举个例子,比如说在配置文件里有这三种类型的资源:

  • service:包含了要启动的容器的声明。里面的每一个条目都相当于一个 Docker run 命令
  • networks:包含了可以访问到容器的网络。里面的每个条目都相当于一个 Docker network create 命令
  • volumes:包含了可以访问到容器内部的容器卷(容器卷即能够挂载到容器内部的持久存储)。里面的每一个条目都相当于一个 Docker vloume create 命令

尽管如此,我依旧能够较好地管理容器之间的依赖关系,我还能够为容器创建一个共享网络和卷,使它们可以相互通信和共享数据

但是我不能够实现容器的高可用性,如果容器出现故障,需要手动进行恢复

Swarm

哈喽大家好,我叫 Swarm

Docker Compose 虽然为大家提供了一种方便的方式去管理容器,但他在一开始的时候只能在单台主机上工作

也就是说他创建的所有容器都在同一台机器上面运行,抛开性能不谈,如果所有应用都在一台服务器上,要是这台服务器宕了,后果可是不堪设想的

为了解决这个问题,早在 2014 年我的哥哥 Classic Swarm (https://github.com/Docker-archive/classicswarm

就已经开始提供跨主机运行容器的解决方案了,但不久之后我的爸爸就不管他了,在社区上不再维护

时间来到 2016 年,我诞生了

与我的哥哥 Classic Swarm 相比,我是直接被内置到了 Docker 当中

不但如此,我能够提供更强大的功能和更好的性能,支持服务发现、负载均衡、滚动更新等特性

创建集群的时候,我只需要在初始节点上执行 Docker swarm init 命令,然后在每个要添加进集群的其他节点上面执行 Docker swarm join 命令就可以了

怎么样,是不是非常方便

小伙伴们可能对我怎么管理集群比较关心,首先我会将集群中的节点分成两类:

  • 管理节点(Manager nodes)

管理节点提供了一个 API ,可以通过这个 API 来启动容器

而且管理节点之间使用基于 Raft 共识算法的协议相互通信,便于同步集群的状态,实现了高可用性和数据一致性

  • 工作节点(Worker nodes)

工作节点,顾名思义就是就负责干活的节点啦。它们负责执行实际的容器工作

而且我的爸爸跟我说管理节点最多只能设置七个,但工作节点数量不限制

别看我这么能干,其实我也有一些缺点,毕竟器无完器嘛

缺点一:集群里面不能够实现跨节点共享存储

虽然我支持集群里面跨节点网络通信(使用桥接方法),但是我不能够支持跨节点的共享存储。我必须依赖第三方的卷插件才能实现

缺点二:stack file 和 compose file 难以区分

自从我被集成到 Docker Engine 后,我发现我能够通过 compose 文件来部署服务了(部署 services、volumes等资源)

而你们也知道的,compose 文件一开始是给 Docker Compose 用的

我们来看下对比,可以看到用法是很相似的

Docker-compose -f Docker-compose up

Docker stack deploy -c Docker-compose.yml somestackname

但实际上我是通过 stack file 来进行集群部署的,stack file 也是 YML 格式的文件,它跟 compose file 极其相似

这样就会导致一些初学者在学习的时候不知道该用 stack file 还是 compose file ,可以看下下面这个 issue

https://stackoverflow.com/questions/43099408/whats-the-difference-between-a-stack-file-and-a-compose-file

PS:一般来讲,Stack file 和Compose file 的语法和功能非常相似,都可以用来定义和部署多个服务或容器

但是,Stack file 更加适合用来管理生产环境中的服务,而Compose file 更加适合用来管理开发和测试环境中的容器

此外,Stack file 还支持一些 Compose file 不支持的功能,如服务发现、负载均衡、滚动更新等

我的器生并非一帆风顺,我曾经可是 Docker Cloud 的支柱,但是 Docker Cloud 在 2018 年的时候就被关闭了

不但如此,随着对手 Kubernetes 的发展,我的地位不断地受到威胁。直到 2019 年,我的爸爸宣布停止对我的开发和维护,将重心转向 Kubernetes

可谓是:”跻攀分寸不可上,失势一落千丈强“

Kubernetes

哈喽大家好,我叫 Kubernetes。为了方便,你们可以叫我 K8s

想必大家都听说过我,作为迄今为止最受欢迎的容器编排器,我能够在多达数千个节点的集群上管理和分配资源

请允许我骄傲一下,我在容器编排器中地位相当于谷歌在搜素引擎中的地位,可以说是我主导了容器编排

但我能有今天,一方面归功于我的爸爸是谷歌,另一方面我得到了云原生计算基金会(Cloud Native Computing Foundation,CNCF)的支持

在 2014~2015 年间,整个容器社区可谓热闹非凡。但是热闹非凡的景象背后则是许多人的担忧和不满

那时候 Docker 项目已经成为 Docker 公司一个商业产品,当时我的爸爸找到了 Docker 公司,希望能够跟 Docker 合作,但是强硬的 Docker 觉得这会消弱自己的地位,拒绝掉了这个请求

而且 Docker 公司在 Docker 开源项目的发展上,始终保持着绝对的权威和发言权,并在多个场合用实际行动挑战到了其他玩家(比如,CoreOS、RedHat,甚至我爸爸和微软)的切身利益

于是这些开源基础设施领域巨头们联合我爸爸发起了一个名为CNCF(Cloud Native Computing Foundation)的基金会

这个基金会的目的就是希望以 Kubernetes 项目为基础,建立一个由开源基础设施领域厂商主导的、按照独立基金会方式运营的平台级社区,来对抗以 Docker 公司为核心的容器商业生态

于是在那个时候,我诞生了。我的前身是 Borg (一个谷歌内部工具)

如果你看过 Kubernetes 项目早期的 GitHub Issue 和 Feature 的话,就会发现它们大多来自于 Borg 和 Omega 系统的内部特性,这些特性落到 Kubernetes 项目上,就是 Pod、Sidecar 等功能和设计模式

我刚出生那会,因为操作太过复杂被很多人抱怨

如果你们想要配置集群,除了我本身,你们还需要选择和配置一些第三方组件。这就跟 Linux 内核需要跟 GNU 相结合才能构成一个完整的操作系统一样,我只是一个编排器,我需要跟其他软件结合才能构成一个完整的集群

还记得上面说过的 CNCF 基金会不,RedHat 也在里面,它把它的那一套玩法搬到了我的身上

跟 Linux 发行版本一样,我跟安装程序和其他精心挑选的第三方组件捆绑在一起,摇身一变就成了 K8s 发行版

有了 K8s 发行版,你们对我的抱怨就少了很多

不但如此,我的爸爸开始在 K8s 社区上大力推行”民主化“变革,即从 API 到容器运行时的每一层,Kubernetes 项目都为开发者暴露出了可以扩展的插件机制,鼓励用户通过代码的方式介入 Kubernetes 项目的每一个阶段

这个民主化变革带来的效果是巨大的,很快在整个容器社区中催生出了大量的、基于 Kubernetes API 和扩展接口的二次创新工作

随着我不断崛起不断扩大,Docker 公司也不得不面对自己即将失败的现实,从 2017 年开始,Docker 公司先是将 Docker 项目的容器运行时部分 Containerd 捐赠给 CNCF 社区

接着 10 月份的时候,Docker 公司出人意料地宣布,将我内置到它们的主打产品 Docker 企业版中,这标志着这场轰轰烈烈的”编排器之争“至此落下帷幕

如果当初 Docker 公司选择了跟我爸爸合作,那么如今的容器生态又会是一番怎样的景象呢?

本文参考链接:https://lwn.net/Articles/905164/#t

与容器编排器们的自我介绍相似的内容:

容器编排器们的自我介绍

哈喽大家好,我是咸鱼 咸鱼在《[一文带你了解容器技术的前世今生](https://mp.weixin.qq.com/s?__biz=MzkzNzI1MzE2Mw==&mid=2247484578&idx=1&sn=a8ae0d1c470351a8bbcb6891bae0ca23&chksm=c293

软件开发人员 Kubernetes 入门指南|Part 2

在第 1 部分中,我们讲解了 Kubernetes 的核心组件,Kubernetes 是一种开源容器编排器,用于在分布式环境中部署和扩展应用程序;我们还讲解了如何在集群中部署一个简单的应用程序,然后更改其副本数量以扩大或缩小其规模。 在本文中,我们将为您深入讲解 Kubernetes 提供的网络和监

Boost程序库完全开发指南:1-开发环境和构建工具

Boost官方于2019年12月发布的1.72版编写,共包含160余个库/组件,涵盖字符串与文本处理、容器、迭代器、算法、图像处理、模板元编程、并发编程等多个领域,使用Boost,将大大增强C++的功能和表现力。环境:Windows 10,WSL2,Ubuntu 20.04 LTS,Rider(WS

10.1 C++ STL 模板适配与迭代器

STL(Standard Template Library)标准模板库提供了模板适配器和迭代器等重要概念,为开发者提供了高效、灵活和方便的编程工具。模板适配器是指一组模板类或函数,它们提供一种适配机制,使得现有的模板能够适应新的需求。而迭代器则是STL中的令一种重要的概念,它是一个抽象化的数据访问机制,通过迭代器可以遍历STL容器中的元素。适配器与迭代器两者的紧密配合,使得开发者能够高效地处理容器

[转帖]整理常用的 vim 命令

vim 是一款功能强大的文本编辑器,它是Linux下常用的编辑器之一,对于熟练掌握了 vim 的人来说,用它编辑文件,方便又快捷,能极大的提高工作效率 vim 功能强大,对应的命令也非常的多,对于初学者来说,看到这么多的命令容易打退堂鼓,想当初,自己刚接触vim的时候,由于不熟悉vim,每一个命令都

6个优化策略,助你降低K8S成本

Kubernetes 早已成为容器编排引擎的事实标准,而随着 Kubernetes 环境的复杂性持续增长,成本也在不断攀升。CNCF 发布的调查报告《Kubernetes 的 FinOps》显示,68%的受访者表示 Kubernetes 开销正在上涨,并且一半的人所在的组织经历了每年超过20%的开销

Karmada 多云容器编排引擎支持多调度组,助力成本优化

摘要:Karmada 社区也在持续关注云成本的管理,在最近发布的 v1.5 版本中,支持用户在分发策略 PropagationPolicy/ClusterPropagationPolicy 中设置多个集群调度组,实现将业务调度到成本更低的集群组中去。 本文分享自华为云社区《Karmada 多云容器编

DevOps 必备的 Kubernetes 安全清单

Kubernetes 是当今许多公司采用的容器编排平台,它的实施需要对其生态系统有一定的了解,以便部署一个准备好用于生产的集群。然而从原则上来说,Kubernetes 并不是一个安全的平台,因为它缺乏处理大多数与安全相关任务的本地工具。 因此,Kubernetes 的实施工作原理或工具至关重要,这个

一键开启云原生网络安全新视界

本文作者:陈桐乐 李卓嘉 随着云原生的兴起,微服务、容器、kubernetes容器编排正在快速改变着企业软件架构的形态,单体架构、分布式架构、微服务架构,软件架构在持续演进的过程中,变得越来越复杂,管理和维护也越来越困难,不断出现的安全漏洞也在持续挑战着企业的安全运营响应能力,如何准确识别风险点,怎

细数华为云云原生产品及五大开源实践

摘要:华为云已向CNCF贡献多个首创开源项目,包括云原生边缘计算平台项目KubeEdge,云原生批量计算项目Volcano,云原生多云容器编排项目Karmada,今年,华为云又开源了两个云原生领域的项目Kurator和Kappital,收到广大开发者的追捧。 本文分享自华为云社区《细数华为云云原生产