尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Meshery Catalog 部署模式解析:ASP.NET Core 7.0.35(Bitnami 导入)在 Kubernetes 上的设计与使用

Meshery Catalog 部署模式解析:ASP.NET Core 7.0.35(Bitnami 导入)在 Kubernetes 上的设计与使用 Meshery Catalog 部署模式解析ASP.NET Core 7.0.35Bitnami 导入在 Kubernetes 上的设计与使用【免费下载链接】mesheryMeshery, the cloud native manager项目地址: https://gitcode.com/GitHub_Trending/me/meshery本篇技术指南以 Meshery 文档仓库中的 Catalog 部署条目 aspnet-core-7.0.35.tgz 为核心深入拆解该 Design设计模式的完整 Kubernetes 组件清单、每个组件的关键配置项及其相互关联并给出基于mesheryctl design import的实际使用方式。读完本文你将理解 Meshery Catalog 中一个从 Bitnami Helm Chart 导入的 deployment 类型模式是如何组织的以及如何将其作为可复用的可视化设计在 Kubernetes 集群中落地。一、Catalog 条目概览这是一份什么样的文档该文档是 Meshery Catalog模式目录中的一个 deployment 类型条目本质上是一条带 front matter 元数据的 Markdown 文件描述了一个从 Bitnami 导入的 ASP.NET Core 应用部署模式。其核心元数据如下字段值说明nameaspnet-core-7.0.35.tgz模式名称源自 Bitnami 的 Helm Chart 包名publishedVersion0.0.1当前发布版本typedeployment模式类型表示这是一套完整部署形态compatibilitykubernetes兼容目标平台patternId1012970d-bbf5-4bc5-b5e2-f6cb1da64b84模式的唯一标识符同时是目录中数据文件的目录名patternInfoaspnet-core v7.0.35 imported from Bitnami模式简介从 Bitnami 导入的 ASP.NET Core 7.0.35patternCaveatsrequires Kubernetes 1.21 and Helm 3使用前提条件downloadLink1012970d-bbf5-4bc5-b5e2-f6cb1da64b84/design.yml可下载的 Design 文件相对路径可以看到front matter 中通过downloadLink指向的 design.yml 才是这条模式的实质内容——一份符合designs.meshery.io/v1beta1schema 的完整设计文件。同时同目录下的 artifacthub-pkg.yml 提供了该模式在 Artifact Hub 生态中的元数据与安装命令。二、Design 文件结构与组件总览Design 文件designs.meshery.io/v1beta1是 Meshery 中描述一组组件及其关系的可视化设计载体。本条目对应的 Design 包含 5 个 Kubernetes 组件全部源自kubernetes模型model versionv1.0.0底层模型版本v1.32.0-alpha.3类别为Orchestration Management组件 KindAPI 版本核心职责Deploymentapps/v1运行 ASP.NET Core 应用容器的主工作负载Servicev1提供集群内稳定的服务访问入口NetworkPolicynetworking.k8s.io/v1限制 Pod 网络入站/出站流量PodDisruptionBudgetpolicy/v1保证滚动更新/维护期间的最小可用副本ServiceAccountv1为 Pod 提供身份默认不挂载 token所有组件共享同一组 Helm 标准标签labels这是它们之间能够相互关联的基础helm.sh/chart: aspnet-core-7.0.35 app.kubernetes.io/name: aspnet-core app.kubernetes.io/version: 9.0.8 app.kubernetes.io/instance: aspnet-core app.kubernetes.io/managed-by: Helm注意尽管 Chart 名称为aspnet-core-7.0.35其应用镜像版本实际为9.0.8docker.io/bitnami/aspnet-core:9.0.8-debian-12-r1这与 Bitnami Chart 的命名习惯一致即 Chart 版本号与应用镜像版本号相互独立。三、核心工作负载Deployment 详解Deployment 是这套设计的主体完整承载了 ASP.NET Core 应用的运行逻辑其配置要点如下。3.1 基础调度与更新策略副本数replicas: 1更新策略strategy.type: RollingUpdate滚动更新Pod 反亲和配置了preferredDuringSchedulingIgnoredDuringExecution以topologyKey: kubernetes.io/hostname为维度权重weight: 1倾向将同一应用的 Pod 分散到不同节点提升可用性。调度相关字段nodeAffinity与podAffinity均为null表示未做强制约束。3.2 主容器 aspnet-core主容器是整个设计的信息密度最高之处配置如下containers: - name: aspnet-core image: docker.io/bitnami/aspnet-core:9.0.8-debian-12-r1 command: [dotnet, OCMinimal.dll] workingDir: /app env: - name: ASPNETCORE_URLS value: http://:8080 ports: - name: http containerPort: 8080 resources: limits: cpu: 375m memory: 384Mi ephemeral-storage: 2Gi requests: cpu: 250m memory: 256Mi ephemeral-storage: 50Mi livenessProbe: exec: command: [pgrep, dotnet] initialDelaySeconds: 10 periodSeconds: 20 timeoutSeconds: 1 failureThreshold: 6 successThreshold: 1 readinessProbe: tcpSocket: port: http initialDelaySeconds: 10 periodSeconds: 20 timeoutSeconds: 1 failureThreshold: 6 successThreshold: 1 imagePullPolicy: IfNotPresent securityContext: runAsUser: 1001 runAsGroup: 1001 runAsNonRoot: true readOnlyRootFilesystem: true allowPrivilegeEscalation: false capabilities: add: [NET_BIND_SERVICE] drop: [ALL] seccompProfile: type: RuntimeDefault关键点解读监听地址通过环境变量ASPNETCORE_URLShttp://:8080将 Kestrel 绑定到 8080 端口与容器端口http8080及后续 Service 的targetPort保持一致。启动命令dotnet OCMinimal.dll说明这是一个发布后的 .NET 程序集入口。资源请求与限制请求 250m CPU / 256Mi 内存限制 375m CPU / 384Mi 内存并单独限制临时存储ephemeral-storage为 2Gi。双探针体系livenessProbe通过pgrep dotnet进程级探测判断存活readinessProbe通过 TCP 连接 8080 端口判断就绪两者均采用 20 秒周期、10 秒初始延迟容错阈值 6 次。纵深防御以非 root 用户UID/GID 1001运行、只读根文件系统、禁用权限提升、丢弃所有 Linux capabilities 仅放行NET_BIND_SERVICE、启用RuntimeDefaultseccomp profile整体安全基线较高体现了 Bitnami 镜像的加固风格。3.3 Init 容器从源码编译应用该 Deployment 最具特色之处在于使用两个 Init 容器在启动前完成克隆源码 → 编译发布的流水线将 CI 阶段前移到集群内Init 容器镜像行为clone-repositorydocker.io/bitnami/git:2.51.0-debian-12-r0以--depth 1浅克隆github.com/dotnet/AspNetCore.Docs仓库的main分支到/repodotnet-publishdocker.io/bitnami/dotnet-sdk:9.0.304-debian-12-r1进入aspnetcore/performance/caching/output/samples/8.x/目录执行dotnet publish -o /app两者通过共享的空目录卷协作clone-repository挂载empty-dirsubPathapp-repo-dir→/repo写入源码dotnet-publish将同一卷挂载到/repo作为工作目录并把编译产物输出到挂载了app空目录卷的/app主容器随后以/app为工作目录启动。卷挂载关系如下appemptyDir→ 主容器/app、Init 容器dotnet-publish的/appempty-diremptyDir→ 主容器/tmpsubPathtmp-dir、两个 Init 容器的/reposubPathapp-repo-dir从源码结构看该应用对应 .NET 官方文档仓库中缓存输出Response Caching中间件的性能示例即部署的是一个用于演示缓存行为的 ASP.NET Core 样例应用。四、网络与访问Service 与 NetworkPolicy4.1 ServiceClusterIPspec: type: ClusterIP ports: - name: http port: 80 targetPort: http selector: app.kubernetes.io/name: aspnet-core app.kubernetes.io/instance: aspnet-core sessionAffinity: NoneService 以80 → http即容器 8080的映射暴露应用targetPort通过命名端口http引用容器端口降低配置耦合selector 通过app.kubernetes.io/name与app.kubernetes.io/instance两个标签精确选中 Deployment 创建的 Pod。类型为ClusterIP意味着该服务默认只在集群内部可访问。4.2 NetworkPolicyspec: podSelector: matchLabels: app.kubernetes.io/name: aspnet-core app.kubernetes.io/instance: aspnet-core policyTypes: [Ingress, Egress] ingress: - ports: - port: 8080 egress: - {}NetworkPolicy 以IngressEgress双方向管控流量入站仅允许访问 8080 端口与应用监听端口一致出站为空规则{}放行全部。该策略只作用于带上述标签的 Pod为其提供默认拒绝式的网络边界。五、可用性与身份PodDisruptionBudget 与 ServiceAccount5.1 PodDisruptionBudgetspec: selector: matchLabels: app.kubernetes.io/name: aspnet-core app.kubernetes.io/instance: aspnet-core maxUnavailable: 1PDB 设置了maxUnavailable: 1即允许在节点维护或驱逐操作中最多有 1 个副本不可用。考虑到当前副本数为 1该策略在单副本场景下仍允许 Kubernetes 在维护窗口内对 Pod 进行驱逐从而避免阻塞节点级运维操作。5.2 ServiceAccountmetadata: name: aspnet-core automountServiceAccountToken: falseServiceAccount 与 Deployment 中的serviceAccountName: aspnet-core对应automountServiceAccountToken: false表明 Pod 不会自动挂载服务账号令牌配合 Deployment 中 Pod 级别的automountServiceAccountToken: false双保险进一步收窄了攻击面——这是一个遵循最小权限原则的典型配置。六、安装与使用方式根据 artifacthub-pkg.yml 中记录的install指令该模式通过 Meshery 命令行工具导入mesheryctl design import -f-f指向 Design 文件路径即目录中的design.yml。导入后可在 Meshery UI 中以可视化拓扑图的形式查看这 5 个组件及其标签关联关系也可直接执行部署Apply让 Meshery 依据设计在目标 Kubernetes 集群中创建全部资源。使用前提来自patternCaveatsKubernetes 1.21 及以上版本NetworkPolicy、PDBpolicy/v1等 API 均需该版本基线Helm 3模式由 Bitnami Helm Chart 导入沿用 Helm 3 的标准标签与 Chart 结构集群需具备拉取docker.io/bitnami/*系列镜像的网络能力且应用启动时需要访问github.com/dotnet/AspNetCore.Docs执行浅克隆Init 容器阶段。七、相关源码与资料导航本模式条目的元数据文档docs/catalog/deployment/1012970d-bbf5-4bc5-b5e2-f6cb1da64b84.md完整 Design5 组件清单docs/data/catalog/1012970d-bbf5-4bc5-b5e2-f6cb1da64b84/0.0.1/design.ymlArtifact Hub 元数据安装命令、许可、说明docs/data/catalog/1012970d-bbf5-4bc5-b5e2-f6cb1da64b84/0.0.1/artifacthub-pkg.ymlCatalog 目录结构说明模板docs/catalog/_defaults.md总结而言这条 Catalog 条目是Bitnami Helm Chart → Meshery Design导入流程的完整样例front matter 提供发现与索引信息design.yml承载经过模型化拆分的 5 个 Kubernetes 组件及完整配置artifacthub-pkg.yml负责生态元数据与安装入口。理解这一结构有助于你在 Meshery 中高效检索、导入并二次编排类似的第三方应用部署模式。【免费下载链接】mesheryMeshery, the cloud native manager项目地址: https://gitcode.com/GitHub_Trending/me/meshery创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表