- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Kubernetes中的多容器 Pod 设计模式由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
Pod在Kubernetes中,Pod是一个可部署单元。如果要部署应用程序,它必须将Pod作为容器部署在Pod中。尽管应用程序可以在容器中运行,但容器必须是Pod的一部分。Pod规范具有声明容器规范的属性容器。这个属性是复数的。这意味着可以在Pod规范中声明多个容器.
但是Kubernetes管理员总是选择单一容器Pod而不是多容器Pod。每个Pod采用一个容器是行业中的一人不成文做法。以下了解多容器Pod可以提供什么优势.
Pod有一个IP,而一个Pod中的所有容器可以共享相同的IP。如果为Pod创建了任何卷,则作为Pod一部分的所有容器都可以安装该卷。因此,容器可以共享存储空间,它们还可以通过本地主机相互通信.
在这种情况下,为什么仍然首选单一容器Pod。以具有用户界面(UI)、后端、数据库和消息传递层的Web应用程序为例。将所有四个层部署为单个Pod中的四个容器。所有四个容器的资源、配置、操作要求都不同。后端和前端是面向客户的。如果需要将这些扩展到不同的层次,则不能单独完成,由于不能扩展容器,只能扩展Pod。因此,如果扩展Pod,也会创建数据库和消息层的多个实例,尽管这不是必需的.
因此,最好将它们分开部署,因为像单独的一个Pod一样管理和扩展它们会更好.
在什么情况下,可以在同一个Pod中使用多个容器?
情况1–如果容器的生命周期相同.
情况2–如果两个容器高度耦合.
情况3–如果需要使应用程序无需任何代码更改即可部署到Kubernetes。在这种情况下,应用程序代码缺乏利用Kubernetes功能的东西。在这种情况下,可以在应用程序容器中引入一个辅助容器,这将打破这种障碍.
如今的家庭通常采用的是交流电,而人们使用的笔记本电脑使用的是直流电。在这种情况下,使用交流适配器从插座获取电源,然后将其转换为直流电并为笔记本电脑供电。在不改变供电模式的情况下,可以借助适配器为笔记本电脑充电.
那么如何将这种模式与Kubernetes有什么联系?例如,如果在Kubernetes集群中安装了一个集中监控工具,它需要将所有应用日志以“应用程序(APP)-名称(NAME)-主机名称(HOSTNAME)-日期(DATE)-严重程度(SEVERITY)”格式打印。但是集群可以有许多应用程序以多种语言编写,并以多种格式打印日志。在这种情况下,所有应用程序都更改其日志记录格式是不明智的,就好像该工具将来会更改并且格式可能再次更改一样。为了解决这个问题,可以生成第二个容器来读取主要应用程序容器的日志,并将其处理成监控工具所需的格式。这样可以解决不匹配的问题.
大使是各国派驻他国的特使。这种模式如何在Kubernetes Pod提供帮助?
例如,如果有一个遗留应用程序,其中DB URL在应用程序内被硬编码为localhost。更改遗留应用程序很困难,因为它会在许多其他地方带来更改。如果必须使其可在Kubernetes集群中部署,则需要更改代码。可以使用大使模式在不更改代码的情况下做到这一点。大使容器将应用程序容器共置在同一个Pod中。它是一个代理,根据开发、质量保证(QA)或Stage环境连接到正确的数据库.
主应用程序可以通过大使容器连接到诸如localhost之类的外部URL。大使模式找到正确的URL,并将其提供给位于localhost的应用程序容器。主应用程序容器不需要担心正确的URL。这将被分配给大使容器.
边车(Sidecar)的原理与挎斗摩托车类似,挎斗摩托车只是增加了一个座位,而没有对其主要部署进行任何更改,虽然这个座位不是摩托车的组成部分,但增强了性能。Sidecar容器也采用同样的工作方式。边车增强了与它一起部署的主容器的能力,而无需对主容器进行任何更改。例如,应用程序在某个文件夹中生成日志文件.
如果在Kubernetes集群中采用应用程序监控工具,需要将所有部署到集群的应用程序的日志存储在某个外部存储空间中,那么在应用程序级别根本无法完成。相反,可以使用一个边车容器,它可以轻松地将日志文件存储在所需的存储空间中,而无需在主应用程序级别进行任何代码更改.
所有这些模式对于在不更改主要应用程序的情况下执行横切作业非常有用。它们为主容器提供支持,并且必须作为辅助容器进行部署。这些工作负载必须以可以在不同Pod中重用的方式编写.
为了解释这种方法,使用适配器模式,必须将主容器的输出转换或处理为某种标准格式;大使模式用于提供网络代理;边车模式用于向主容器提供帮助程序/实用程序服务.
而人们尝试使用这些模式可以充分利用Kubernetes集群.
原文连接:Multi-Container Pod Design Patterns in Kubernetes,作者:Aditya Bhuyan 。
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】 。
原文链接:https://cloud.51cto.com/art/202111/691905.htm 。
最后此篇关于Kubernetes中的多容器 Pod 设计模式的文章就讲到这里了,如果你想了解更多关于Kubernetes中的多容器 Pod 设计模式的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
kubernetes的新手,希望了解使用不同kubernetes对象的最佳实践,并且很难理解“Pods”和“Static Pods”在功能上的主要区别(如果有)吗? 主要问题如下: 问题1:如果有功能
以下是 pods 文件的截图,其中不包含 AFNetworking 库。当我在终端中运行命令 pod install 时,它安装了 AFNetworking 库版本 3.0.1。我无法理解为什么会这样
在通过 pod lib create projectName 创建的目录中执行 pod init 是否受支持?它似乎对我不起作用,但否则如何指定他们正在创建的 pod 的上游依赖项? pod inst
我正在尝试制作一个 Pod::Simple::HTML 的简单子(monad)类用于 Pod::Simple::HTMLBatch .我希望使用 POD::Weaver 对所有 POD 进行预处理.但
根据定义here , POD 是一个简单的类,没有用户定义的构造函数、非静态成员,并且只包含简单的数据类型。 问题是,下面这两个类是否等同于 POD 类型(就内存占用而言): class pod {
使用 Airflow 在 AWS EKS 上运行 KubernetesPodOperator 获取 kubernetes.client.rest.ApiException: (400),指出版本\"v
据我了解,当 POD 与服务对话时,IP 表已由 CNI 提供商更新(这可能特定于某些但不是所有 CNI 提供商)。 iptables 基本上提供了一个虚拟 IP,然后循环或分发(以某种方式)到后端临
我有一个 pod 需要将数据持久保存到 pod 外部的位置。我认为persistentVolume 是一个好主意。名为 writerPod 的 pod 需要对该卷进行读写访问。 多个其他 Pod(我称
我想知道,如果 HPA 考虑一个 pod 中多个容器的 CPU 利用率的平均值,以便向上/向下扩展数量。 pod 。例如,如果我为具有 2 个容器的部署(pod)指定如下所示的 HPA。为了让 HPA
我有以下情况: 我有几个微服务,现在只有两个是相关的。 - Web 套接字服务 API - 调度服务 我们有 3 个用户,我们将分别称为 1、2 和 3。这些用户将自己连接到我们后端的 Web 套接字
我已经注意到,当使用kubectl时,您几乎可以互换使用 pod 和 pods 。是否有任何实例可以使用一个实例而不是另一个实例来获得不同的结果,或者您可以只使用其中一个而不用担心呢? 例如: kub
我尝试使用命令 pod update 更新我的 podfile但它需要永远。 我也按照这个问题做了所有的步骤 cocoapods - 'pod install' takes forever但什么都没有
我正在设置一个 Kubernetes 主节点。 只是主节点,暂时没有工作节点。 使用 this tutorial. 完成设置,没有任何问题现在, $kubectl get pods -o wide -
是否可以在 pod install 期间让一个 Pod 保持不变和pod update ? pod update 不是一个选项。 最佳答案 您实际上可以使用pod update [NAMES...]来
基本上,我有一个部署,它创建了 3 个自动扩展的容器:PHP-FPM、NGINX 和包含应用程序的容器,所有这些都设置了 secret 、服务和入口。该应用程序还在 PHP-FPM 和 NGINX 之
在为Kubernetes创建/添加节点时,我们还必须创建Canal pod。 当前,kubernetes在尝试调度Pod之前不会等待Canal Pod准备就绪,从而导致失败(错误如下) Error s
我正在寻找一个选项来从部署/复制中删除 pod 而不删除它。我找到了一个很好的解决方案 using selector and labels here ,但在我的情况下这是不可能的,因为我不是 pod/
来自 PodInterface两个操作Delete和 Evict似乎具有相同的效果:删除旧 Pod 并创建一个新 Pod。 如果两个操作效果一样,为什么删除一个Pod并创建一个新的Pod需要两个API
Kubernetes版本1.12.3。 kubectl排水是先移开 pods 还是先创建 pods 。 最佳答案 您可以在节点上执行维护(例如内核升级,硬件维护等)之前,使用kubectlrain安全
有没有办法通过主机名访问 pod? 我有一个主机名:my-pod-1需要使用主机名连接到另一个 pod:my-pod-2 . 在没有服务的情况下实现这一目标的最佳方法是什么? 最佳答案 通过您的描述,
我是一名优秀的程序员,十分优秀!