DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

Docker Swarm、Kubernetes 和 Mesos 是最流行的容器编排框架。 Arun Gupta 在演讲中比较了 Docker、Swarm 和 Kubernetes 的以下几个方面:

  • 地方发展。
  • 部署功能。
  • 多容器应用。
  • 服务发现。
  • 扩展服务。
  • 运行一次任务。
  • 与 Maven 集成。
  • “滚动”更新。
  • 创建 Couchbase 数据库集群。

因此,您将清楚地了解每个编排工具必须提供的功能,并了解如何有效地使用这些平台。

Arun Gupta 是 Amazon Web Services 开源产品的首席技术专家,十多年来一直致力于开发 Sun、Oracle、Red Hat 和 Couchbase 开发者社区。 在领导跨职能团队制定和实施营销活动和计划策略方面拥有丰富的经验。 他领导了 Sun 工程师团队,是 Java EE 团队的创始人之一,也是 Devoxx10Kids 美国分支的创建者。 Arun Gupta 在 IT 博客上发表了 4 多篇文章,并在 2 多个国家/地区发表过演讲。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分
DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

第 55 行包含指向此数据库服务的 COUCHBASE_URI,该服务也是使用 Kubernetes 配置文件创建的。 如果您查看第 2 行,您可以看到 kind: Service 是我正在创建的名为 couchbase-service 的服务,并且第 4 行列出了相同的名称。下面是一些端口。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

关键行是第 6 行和第 7 行。在服务中,我说,“嘿,这些是我正在寻找的标签!”,这些标签只不过是变量对名称,第 7 行指向我的 couchbase-rs-pod应用。 以下是提供对这些相同标签的访问的端口。

在第 19 行,我创建了一个新类型 ReplicaSet,第 31 行包含映像的名称,第 24-27 行指向与我的 pod 关联的元数据。 这正是服务正在寻找的内容以及应该建立连接的内容。 在文件的末尾,第 55-56 行和第 4 行之间有某种联系,表示:“使用此服务!”

因此,当存在副本集时,我启动服务,并且由于每个副本集都有自己的端口和相应的标签,因此它包含在服务中。 从开发人员的角度来看,您只需调用该服务,然后该服务就会使用您需要的副本集。

因此,我有一个 WildFly pod,它通过 Couchbase 服务与数据库后端进行通信。 我可以将前端与多个 WildFly pod 一起使用,它还通过 couchbase 服务与 couchbase 后端进行通信。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

稍后我们将了解位于集群外部的服务如何通过其 IP 地址与位于集群内部且具有内部 IP 地址的元素进行通信。

所以,无状态容器很棒,但是使用有状态容器有多好呢? 让我们看一下有状态容器或持久容器的系统设置。 在 Docker 中,有 4 种不同的数据存储布局方法值得您注意。 第一个是隐式每容器,这意味着当使用 couchbase、MySQL 或 MyDB 饱和容器时,它们都从默认的 Sandbox 开始。 也就是说,存储在数据库中的所有内容都存储在容器本身中。 如果容器消失,数据也会随之消失。

第二个是显式每个容器,当您使用 docker volume create 命令创建特定存储并在其中存储数据时。 第三种每主机方法与存储映射相关,此时容器中存储的所有内容都会同时复制到主机上。 如果容器发生故障,数据将保留在主机上。 后者是使用多个Multi-Host主机,这在各种解决方案的生产阶段是可取的。 假设您的容器和应用程序正在主机上运行,​​但您希望将数据存储在 Internet 上的某个位置,为此您可以使用分布式系统的自动映射。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

这些方法中的每一种都使用特定的存储位置。 隐式和显式每个容器将数据存储在主机上的 /var/lib/docker/volumes 中。 使用 Per-Host 方法时,存储安装在容器内部,容器本身安装在主机上。 对于多主机,可以使用Ceph、ClusterFS、NFS等解决方案。

如果持久性容器发生故障,则在前两种情况下存储目录将无法访问,但在后两种情况下仍可保持访问。 但是,在第一种情况下,您可以通过在虚拟机上运行的 Docker 主机访问存储库。 在第二种情况下,数据也不会丢失,因为您已经创建了显式存储。

如果主机出现故障,前三种情况下存储目录不可用;最后一种情况下与存储的连接不会中断。 最后,在第一种情况下,共享函数被完全排除在存储之外,而在其余情况下是可能的。 在第二种情况下,您可以根据您的数据库是否支持分布式存储来共享存储。 在 Per-Host 的情况下,数据分发只能在给定的主机上进行,对于多主机来说,数据分发是通过集群扩展来提供的。

创建有状态容器时应考虑到这一点。 另一个有用的 Docker 工具是 Volume 插件,它的工作原理是“电池存在,但必须更换”。 当你启动一个 Docker 容器时,它会说:“嘿,一旦你启动了一个带有数据库的容器,你就可以将你的数据存储在这个容器中!” 这是默认功能,但您可以更改它。 该插件允许您使用网络驱动器或类似的东西来代替容器数据库。 它包含用于基于主机的存储的默认驱动程序,并允许容器与外部存储系统(例如 Amazon EBS、Azure 存储和 GCE 持久磁盘)集成。

下一张幻灯片展示了 Docker Volume 插件的架构。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

蓝色代表与蓝色 Docker 主机关联的 Docker 客户端,该主机具有本地存储引擎,为您提供用于存储数据的容器。 绿色表示插件客户端和插件守护进程,它们也连接到主机。 它们提供了将数据存储在您所需的存储后端类型的网络存储中的机会。

Docker Volume 插件可与 Portworx 存储一起使用。 PX-Dev 模块实际上是您运行的一个容器,它连接到您的 Docker 主机,并允许您轻松地将数据存储在 Amazon EBS 上。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

Portworx 客户端允许您监控连接到主机的各种存储容器的状态。 如果您访问我的博客,您可以阅读如何通过 Docker 充分利用 Portworx。

Kubernetes 中的存储概念与 Docker 类似,由 pod 中的容器可访问的目录表示。 它们与任何容器的生命周期无关。 最常见的可用存储类型是 hostPath、nfs、awsElasticBlockStore 和 gsePersistentDisk。 让我们看看这些存储在 Kubernetes 中是如何工作的。 通常,连接它们的过程包括 3 个步骤。

第一个是网络端的某人(通常是管理员)为您提供持久存储。 为此有一个相应的 PersistentVolume 配置文件。 接下来,应用程序开发人员编写一个名为 PersistentVolumeClaim 的配置文件,或 PVC 存储请求,其中表示:“我配置了 50GB 的分布式存储,但为了让其他人也能使用其容量,我告诉这个 PVC,我当前只需要 10 GB”。 最后,第三步是将您的请求安装为存储,并且具有 Pod、副本集或类似内容的应用程序开始使用它。 重要的是要记住,此过程由提到的 3 个步骤组成,并且是可扩展的。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

下一张幻灯片展示了AWS架构的Kubernetes持久化容器。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

在代表 Kubernetes 集群的棕色矩形内,有 XNUMX 个主节点和 XNUMX 个工作节点(以黄色表示)。 其中一个工作节点包含一个橙色 Pod、存储、一个副本控制器和一个绿色 Docker Couchbase 容器。 在集群内部,节点上方,紫色矩形表示可从外部访问的服务。 建议将此架构用于在设备本身上存储数据。 如果有必要,我可以将数据存储在集群外部的 EBS 中,如下一张幻灯片所示。 这是典型的扩展模型,但使用它时需要考虑财务方面的问题 - 将数据存储在网络上的某个位置可能比存储在主机上更昂贵。 在选择容器化解决方案时,这是重要的论据之一。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

就像使用 Docker 一样,您可以将持久性 Kubernetes 容器与 Portworx 结合使用。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

这就是当前 Kubernetes 1.6 术语中所谓的“StatefulSet”——一种使用有状态应用程序的方式,用于处理有关停止 Pod 和执行优雅关闭的事件。 在我们的例子中,此类应用程序是数据库。 在我的博客中,您可以阅读如何使用 Portworx 在 Kubernetes 中创建 StatefulSet。
我们来谈谈发展方面。 正如我所说,Docker 有 2 个版本 - CE 和 EE,在第一种情况下,我们谈论的是社区版的稳定版本,每 3 个月更新一次,而不是 EE 每月更新一次。 您可以下载适用于 Mac、Linux 或 Windows 的 Docker。 安装后,Docker 会自动更新,上手非常简单。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

对于 Kubernetes,我更喜欢 Minikube 版本 - 这是通过在单个节点上创建集群来开始使用该平台的好方法。 要创建多个节点的集群,版本的选择范围更广:kops、kube-aws(CoreOS+AWS)、kube-up(已过时)。 如果您希望使用基于 AWS 的 Kubernetes,我建议您加入 AWS SIG,该 SIG 每周五在线举行会议,并发布各种有关使用 AWS Kubernetes 的有趣材料。

让我们看看滚动更新在这些平台上是如何执行的。 如果存在由多个节点组成的集群,则它使用特定版本的映像,例如 WildFly:1。 滚动更新意味着镜像版本在每个节点上依次替换为新版本。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

为此,我使用 docker service update(服务名称)命令,在该命令中我指定了 WildFly:2 镜像的新版本以及更新方法 update-parallelism 2。数字 2 表示系统将更新 2 个应用程序镜像同时,然后 10 秒的更新延迟 10 秒,之后接下来的 2 个图像将在另外 2 个节点上更新,依此类推。 这个简单的滚动更新机制是作为 Docker 的一部分提供给您的。

在 Kubernetes 中,滚动更新的工作原理如下。 复制控制器 rc 创建一组相同版本的副本,并且此 webapp-rc 中的每个 pod 都配有位于 etcd 中的标签。 当我需要 pod 时,我使用应用程序服务访问 etcd 存储库,它为我提供使用指定标签的 pod。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

在本例中,我们在 Replication 控制器中有 3 个 pod 运行 WildFly 版本 1 应用程序,在后台更新时,会创建另一个具有相同名称和末尾索引的复制控制器 - - xxxxx,其中 x 是随机数,并且具有相同的标签。 现在,应用程序服务在新的复制控制器中拥有三个具有旧版本应用程序的 pod 和三个具有新版本应用程序的 pod。 此后,旧的 Pod 将被删除,具有新 Pod 的复制控制器将被重命名并投入运行。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

让我们继续进行监控。 Docker有很多内置的监控命令。 例如,docker 容器统计命令行界面允许您每秒向控制台显示有关容器状态的信息 - 处理器使用情况、磁盘使用情况、网络负载。 Docker Remote API 工具提供有关客户端如何与服务器通信的数据。 它使用简单的命令,但基于 Docker REST API。 在这种情况下,REST、Flash、Remote 等词的含义相同。 当您与主机通信时,它是一个 REST API。 Docker Remote API 允许您获取有关运行容器的更多信息。 我的博客概述了在 Windows Server 上使用此监视的详细信息。

在运行多主机集群时监控docker系统事件可以获取有关主机崩溃或特定主机上的容器崩溃、扩展服务等的数据。 从 Docker 1.20 开始,它包含 Prometheus,它将端点嵌入到现有应用程序中。 这允许您通过 HTTP 接收指标并将其显示在仪表板上。

另一个监控功能是 cAdvisor(容器顾问的缩写)。 它分析并提供正在运行的容器的资源使用情况和性能数据,提供开箱即用的 Prometheus 指标。 该工具的特别之处在于它仅提供最后 60 秒的数据。 因此,您需要能够收集这些数据并将其放入数据库中,以便您可以监控长期过程。 它还可用于使用 Grafana 或 Kibana 以图形方式显示仪表板指标。 我的博客详细介绍了如何使用 cAdvisor 通过 Kibana 仪表板监控容器。

下一张幻灯片显示了 Prometheus 端点输出的样子以及可显示的指标。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

在左下角,您可以看到 HTTP 请求、响应等指标,右侧是它们的图形显示。

Kubernetes 还包括内置的监控工具。 这张幻灯片显示了一个包含一个主节点和三个工作节点的典型集群。

DEVOXX 英国会议。 选择一个框架:Docker Swarm、Kubernetes 或 Mesos。 第三部分

每个工作节点都包含一个自动启动的 cAdvisor。 此外,还有 Heapster,这是一个与 Kubernetes 1.0.6 及更高版本兼容的性能监控和指标收集系统。 Heapster 不仅可以收集工作负载、Pod 和容器的性能指标,还可以收集整个集群生成的事件和其他信号。 为了收集数据,它与每个 Pod 的 Kubelet 通信,自动将信息存储在 InfluxDB 数据库中,并将其作为指标输出到 Grafana 仪表板。 但是,请记住,如果您使用 miniKube,则默认情况下此功能不可用,因此您必须使用插件进行监控。 因此,这完全取决于您运行容器的位置以及默认情况下可以使用哪些监控工具以及需要作为单独的附加组件安装。

下一张幻灯片显示了 Grafana 仪表板,其中显示了我的容器的运行状态。 这里有很多有趣的数据。 当然,商业化的Docker和Kubernetes进程监控工具有很多,比如SysDig、DataDog、NewRelic。 其中一些有 30 年免费试用期,因此您可以尝试找到最适合您的。 就我个人而言,我更喜欢使用 SysDig 和 NewRelic,它们与 Kubernetes 集成得很好。 有些工具可以同样很好地集成到 Docker 和 Kubernetes 平台中。

一些广告🙂

感谢您与我们在一起。 你喜欢我们的文章吗? 想看更多有趣的内容? 通过下订单或推荐给朋友来支持我们, 面向开发人员的云 VPS,4.99 美元起, 我们为您发明的入门级服务器的独特模拟: VPS (KVM) E5-2697 v3(6 核)10​​4GB DDR480 1GB SSD 19Gbps XNUMX 美元或如何共享服务器的全部真相? (适用于 RAID1 和 RAID10,最多 24 个内核和最多 40GB DDR4)。

Dell R730xd 在阿姆斯特丹的 Equinix Tier IV 数据中心便宜 2 倍? 只有这里 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 电视低至 199 美元 在荷兰! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 美元起! 阅读 如何建设基础设施公司同级使用价值730欧元的Dell R5xd E2650-4 v9000服务器一分钱?

来源: habr.com

添加评论