尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

用 Meshery 部署多容器 Pod:Pod Multi Containers 设计模式实战解析

发布时间:2026/9/23 23:47:10

资讯中心
01
ARTICLE

用 Meshery 部署多容器 Pod:Pod Multi Containers 设计模式实战解析

用 Meshery 部署多容器 Pod:Pod Multi Containers 设计模式实战解析
云原生微服务运维DevOps【免费下载链接】mesheryMeshery, the cloud native manager项目地址https://gitcode.com/GitHub_Trending/me/meshery点击查看免费下载本文基于 Meshery 仓库中的 Catalog 设计条目Pod Multi Containersdocs/catalog/resiliency/17c46515-50ef-436c-9383-451e13348ddd.md及其配套的 design.yml 展开讲解该设计在 Kubernetes 集群中的组件构成、配置语义与部署方式。读完本文你将掌握如何读懂一个 Meshery Catalog 设计文件Design File的组件与关系结构以及如何用mesheryctl design命令将多容器 Pod 设计导入并部署到真实集群。一、设计文件Meshery 中可复用的部署单元在 Meshery 中设计Design是一个声明式的可视化与部署单元它描述了一组 Kubernetes 组件的期望状态以及组件之间的关系Relationship。Catalog目录是 Meshery 社区共享设计的集合每个目录条目都通过 frontmatter 元数据描述其名称、类型、兼容性、作者与下载入口。以本文的主角为例其 catalog 条目的 frontmatter见 docs/catalog/resiliency/17c46515-50ef-436c-9383-451e13348ddd.md包含了以下关键字段字段值含义namePod Multi Containers设计名称typeresiliency目录分类归属于弹性/韧性类目compatibilitykubernetes兼容的平台/运行时patternId17c46515-50ef-436c-9383-451e13348ddd全局唯一标识符patternInfo见下文设计用途说明patternCaveatsNo caveats使用注意事项本文档声明为无downloadLink17c46515-…/design.yml设计文件的下载路径其中patternInfo对设计用途的原始描述为Pod Multi Containers design facilitates the deployment of Kubernetes Pods that consist of multiple containers, each serving a distinct role within a single cohesive unit.即该设计用于部署由多个容器组成的 Kubernetes Pod每个容器在同一个整体单元Pod内承担不同的职责。这正是 Kubernetes 多容器 Pod如 Sidecar、Adapter、Ambassador 等模式的常见落地形态。catalog 条目的元数据还配套在 docs/data/catalog/17c46515-50ef-436c-9383-451e13348ddd/0.0.1/artifacthub-pkg.yml 中其中明确给出了安装方式提示mesheryctl design import -f并注明许可证为 Apache-2.0。说明Catalog 条目的 frontmatter 结构遵循 docs/catalog/_defaults.md 定义的模板约定layout: item、patternId、patternInfo、downloadLink等字段这为所有 Catalog 条目提供了统一的元数据规范。二、design.yml 整体解剖组件、配置与关系该设计的实际内容全部承载在 docs/data/catalog/17c46515-50ef-436c-9383-451e13348ddd/0.0.1/design.yml 中其 schema 版本为designs.meshery.io/v1beta1设计版本号为0.0.135。文件主要包含两大块components组件组成设计的所有资源每个组件都携带component类型声明、configuration实际配置、model来源模型、styles可视化样式等元数据relationships关系组件之间的拓扑与配置继承关系schema 版本为relationships.meshery.io/v1alpha3。2.1 组件拓扑一览该设计共声明了 4 个组件构成如下的嵌套结构Namespace default父级inventory 关系 └── Pod pods-multi-container-pod父级alias 关系 ├── Container container-chmannotations 组件注入 spec.containers[1] └── Container container-edtannotations 组件注入 spec.containers[0]其中 Namespace 与 Pod 来自Kubernetes模型models.meshery.io/v1beta1版本基于 kubernetes v1.32.0-alpha.3 的 OpenAPI 定义而两个 Container 组件来自Meshery Core模型category 为 Orchestration Management它们被标记为isAnnotation: true在图形化编辑器中表现为可拖放到 Pod 内的注释/子组件。2.2 Pod 的核心配置两个各司其职的容器Pod 组件的configuration是该设计最关键的部分它直接对应一个标准的 Kubernetes Pod 清单{ metadata: { annotations: {}, labels: {}, namespace: default }, spec: { containers: [ { command: [sleep, 3600], image: busybox, name: pods-multi-container-container-1 }, { command: [sleep, 3601], image: busybox, name: pods-multi-container-container-2 } ] } }要点解读两个容器共享同一个 Pod 生命周期它们属于default命名空间共用一个网络命名空间、同一个 IP 与存储卷这正是单一凝聚单元single cohesive unit的技术本质镜像与命令示例采用busybox镜像分别以sleep 3600和sleep 3601作为启动命令保持容器存活便于后续验证多容器共存与日志观察。实际生产使用时只需在 Meshery 的可视化设计器中把镜像、命令替换为真实业务镜像即可namespace通过关系自动继承Pod 配置中metadata.namespace的取值来自 Namespace 组件的注入详见下文关系分析无需手工重复编写。三、Relationships设计如何实现配置自动注入design.yml 中的 3 条 relationship 揭示了 Meshery 设计系统配置自动补全的底层机制——这与 Kubernetes 原生清单的编写方式截然不同是理解该设计价值的关键。3.1 Alias 关系Container → Pod两对两条kind: hierarchical、type: parent、subType: alias的关系把 Container 子组件的配置打补丁到 Pod 的容器数组上关系 ID源from目标topatch 策略mutatorRef29937222-…Containercontainer-chmid deb2ec96-…Podpods-multi-container-podreplaceconfiguration.spec.containers[1]cb1bdb6c-…Containercontainer-edtid 456edab8-…Podpods-multi-container-podreplaceconfiguration.spec.containers[0]其元数据中的通用语义描述为A hierarchical inventory relationship in which the configuration of (parent) component is patched with the configuration of other (child) component.也就是说当你在可视化画布上把container-chm拖入 Pod 时Meshery 会根据这条关系将子组件的配置以replace策略写入父组件 Pod 的spec.containers[1]container-edt则写入spec.containers[0]。两个容器由此获得确定的数组下标顺序从而保证容器在 Pod 中的声明顺序稳定、可预测。3.2 Inventory 关系Pod → Namespace第三条关系id 649519d8-…同样是 hierarchical/parent 类型但subType: inventory其作用是把 Pod 的metadata.namespace自动补全为 Namespace 组件的 displayName即default。这正是上一节 Pod 配置中namespace: default的来源——从源码结构看用户在画布上只需放置 Namespace 与 Pod命名空间归属便会自动建立无需手动填写。这种关系驱动配置的机制使得 Catalog 中的设计天然具备可移植性组件配置与关系拓扑分离导入到不同集群时Meshery 会依据关系重新计算并生成最终的 Kubernetes 清单。四、实操一导入设计mesheryctl design importCatalog 条目在 artifacthub-pkg.yml 中给出的安装方式即为mesheryctl design import -f。该命令的实现位于 mesheryctl/internal/cli/root/design/import.go支持两种输入形态# 方式一从本地文件导入文件内容会被读取并上传 mesheryctl design import -f 17c46515-50ef-436c-9383-451e13348ddd/design.yml # 方式二从远程 URL 导入 mesheryctl design import -f https://.../design.yml # 可选指定源类型与设计名称 mesheryctl design import -f design.yml -s Kubernetes Manifest -n my-pod-design从 import.go 的实现可以确认以下行为-f是必填参数未提供时命令直接报错ErrDesignFileNotProvided-s源类型可选合法取值为Helm Chart、Kubernetes Manifest、Meshery Design、Docker Compose未指定时由服务端自动识别未通过-n指定名称时默认以文件名path.Base(file)作为设计名命令最终通过POST /api/pattern/import接口把文件内容或 URL 交给 Meshery Server 解析入库import.go成功后返回设计 ID 与名称。提示本设计文件是标准的 Meshery DesignJSON格式导入时可显式声明-s Meshery Design以跳过类型探测。五、实操二部署设计mesheryctl design apply设计导入后即可部署到集群。mesheryctl design apply实现见 mesheryctl/internal/cli/root/design/apply.go支持两种调用方式# 方式一直接 apply 一个设计文件 mesheryctl design apply -f 17c46515-50ef-436c-9383-451e13348ddd/design.yml # 方式二按名称部署已保存的设计 mesheryctl design apply pod-multi-containers从 apply.go 的实现可以看到传入设计名时命令会先调用GET /api/pattern?populatepattern_filesearch名称检索已保存的设计并取出pattern_file若存在多个同名设计会弹出交互式确认传入文件时若参数不是https://github.com或https://raw.githubusercontent.com开头的 URL则按本地文件读取内容最终通过POST /api/pattern/deploy触发真正的 Kubernetes 部署apply.goMeshery 会根据设计中的组件与关系生成最终资源清单下发到集群。部署完成后可以验证多容器 Pod 是否就绪kubectl get pods -n default kubectl logs -n default pods-multi-container-pod -c pods-multi-container-container-1 kubectl logs -n default pods-multi-container-pod -c pods-multi-container-container-2六、适用场景与注意事项该 Catalog 条目的patternCaveats声明为No caveats无使用注意项说明它作为入门级的多容器 Pod 模板可直接使用。结合 Kubernetes 多容器 Pod 的通用实践它适合作为以下场景的起点Sidecar 模式一个容器承载主业务另一个容器承载日志采集、网络代理等辅助职责Adapter / Ambassador 模式为业务容器附加协议转换或流量代理容器共享网络与存储的多进程协作多个容器通过 localhost 通信、共享 EmptyDir 卷。需要留意的是示例中的容器仅以busyboxsleep保持存活并未定义ports、volumeMounts、resources等字段生产使用时应基于该骨架在 Meshery 可视化编辑器中补充这些配置并遵循 Kubernetes 官方建议如多容器场景下合理设置resources与就绪探针。同时Catalog 中与本条目同属 resiliency 分类的其余条目见 docs/catalog/resiliency 目录也提供了更多可参考的弹性设计模板。七、参考文件速览Catalog 条目元数据docs/catalog/resiliency/17c46515-50ef-436c-9383-451e13348ddd.md设计文件组件 关系完整定义docs/data/catalog/17c46515-50ef-436c-9383-451e13348ddd/0.0.1/design.ymlCatalog 安装元数据docs/data/catalog/17c46515-50ef-436c-9383-451e13348ddd/0.0.1/artifacthub-pkg.ymlCatalog 条目模板约定docs/catalog/_defaults.mdmesheryctl design import实现mesheryctl/internal/cli/root/design/import.gomesheryctl design apply实现mesheryctl/internal/cli/root/design/apply.go同类 resiliency 设计条目docs/catalog/resiliency赞分享云原生微服务运维DevOps【免费下载链接】mesheryMeshery, the cloud native manager项目地址https://gitcode.com/GitHub_Trending/me/meshery点击查看免费下载相关推荐Meshery Catalog 实战使用 Pod Privileged Simple 设计模式在 Kubernetes 中部署特权容器Meshery Catalog 实战使用 Pod Privileged Simple 设计模式在 Kubernetes 中部署特权容器 导读 本文以 M云原生微服务运维DevOps使用 Meshery 在 Kubernetes 上部署 WordPress 与 MySQLMeshMap 设计模式实战解析使用 Meshery 在 Kubernetes 上部署 WordPress 与 MySQLMeshMap 设计模式实战解析 本篇技术指南基于 Meshery云原生微服务运维DevOps使用 Meshery 设计模式部署 Nginx ControllerCatalog 条目解析与实战指南使用 Meshery 设计模式部署 Nginx ControllerCatalog 条目解析与实战指南 Meshery Catalog 中的每个部署类设计d云原生微服务运维DevOps创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。