惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Know Your Adversary
Know Your Adversary
C
CERT Recently Published Vulnerability Notes
V
Vulnerabilities – Threatpost
N
News | PayPal Newsroom
O
OpenAI News
A
About on SuperTechFans
月光博客
月光博客
Martin Fowler
Martin Fowler
L
LangChain Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V2EX - 技术
V2EX - 技术
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
人人都是产品经理
人人都是产品经理
T
Tor Project blog
D
DataBreaches.Net
Cloudbric
Cloudbric
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
云风的 BLOG
云风的 BLOG
F
Full Disclosure
S
SegmentFault 最新的问题
Vercel News
Vercel News
T
Tailwind CSS Blog
Schneier on Security
Schneier on Security
宝玉的分享
宝玉的分享
M
MIT News - Artificial intelligence
博客园 - 【当耐特】
P
Privacy International News Feed
美团技术团队
S
Secure Thoughts
P
Privacy & Cybersecurity Law Blog
Google DeepMind News
Google DeepMind News
F
Fortinet All Blogs
Scott Helme
Scott Helme
Forbes - Security
Forbes - Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Recent Announcements
Recent Announcements
AWS News Blog
AWS News Blog
Stack Overflow Blog
Stack Overflow Blog
S
Security Affairs
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
T
Tenable Blog
Cyberwarzone
Cyberwarzone
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
J
Java Code Geeks
T
Threatpost

顾宇的博客

用 AI 重启生活 初始化 MacOS 关于我 再次见面,期待相遇 演讲和分享 如何通过政策红利获利?——海南发展(SZ.002163)交易复盘 2025年的总结 2024年的总结 2023年的总结 2022年的总结 《敏捷测试价值观、方法与实践》序 【翻译】函数式编程中的领域驱动设计 【翻译】通过跟踪技术债来改进你的开发实践 【翻译】不要把测试用例自动化 【翻译】持续部署 vs 持续交付 【翻译】测试替身 【翻译】做多少测试才足够 【翻译】蓝绿部署的起源 【翻译】持续部署 【翻译】作为演进式架构的微服务架构 【翻译】gRPC 的动机和设计原则 【翻译】分布式计算谬误 【翻译】微服务和分布式对象第一法则 采用 Multipass 管理本机虚拟 K8S 集群 博客主题升级到 Congo 2.0 【翻译】Terraform 最佳实践:模块组合 通过 Vagrant 一键初始化 K8S 集群 2021年的总结 通过 Github Actions 部署 Mkdocs 文档 博客迁移到了新的 Hugo 主题 2020年的总结 2019年的总结 千人规模组织级 DevOps 演进的 9 个实践技巧 从技术雷达看 DevOps 的十年——容器技术与微服务 DevOps 模式 - 引入 DevOps 顾问 DevOps 模式 - 索引 DevOps 模式 - 定义你的DevOps 从技术雷达看 DevOps 的十年——基础设施即代码与云计算 DevOps 模式 - 采用模式语言讨论 DevOps 从星巴克店面运营学习 DevOps 从技术雷达看 DevOps 的十年——DevOps与持续交付 【翻译】微服务安全:所有应该被问到的问题 云原生下的 DevSecOps 实践 【翻译】软件定义交付宣言 微服务演进中的经验和反思 迟到的 2018 年终总结 成功微服务实施的组织演进 从第19期技术雷达看 DevOps 的发展趋势 成功微服务实施的技术演进 我们如何衡量微服务的成功? 关于四周四 AWS 架构工作坊的设计和实践 讨论微服务之前,你知道微服务的 4 个定义吗? 公有云(AWS)上的生产环境架构优化案例和迁移套路总结 公有云(AWS)上的生产环境性能分析案例 一怒之下,我又写了一个开源流量测试工具 采用 DevOps 故事落地 DevOps 测试驱动开发 Nginx 配置 云原生 DevOps 翻译-混沌工程的原则 Serverless 风格的微服务的持续交付 从最新一期技术雷达看 DevOps 的发展 关于 DevOps ,咱们聊的可能不是一回事 Serverless 风格的微服务的架构案例 提升微服务实施效率的 7 个步骤 微服务实施常被忽视的 5 个难点 你的 CI 在挖矿吗? DevOps前世今生 - 4. DevOps 的文化 DevOps发展的九个趋势 不要让你的持续集成服务器成为安全隐患 DevOps 前世今生 - 3. DevOps 的目标和核心 DevOps 前世今生 - 2. DevOps 矛盾从何而来 DevOps 前世今生 - 1. DevOps 编年史
【翻译】Kubernetes 部署语言(Kubernetes Deployment Language)
顾宇 · 2022-02-15 · via 顾宇的博客
  1. 顾宇的博客/
  2. Blogs/
  3. 【翻译】Kubernetes 部署语言(Kubernetes Deployment Language)/

在网上搜索规范化的 K8S 的部署架构图画法时,发现了 Redhat 的一篇博客。觉得非常不错,遂翻译分享之。

原文: https://github.com/raffaelespazzoli/kdl

介绍 #

这篇博文介绍了 Kubernetes API 对象的图形表示法:Kubernetes 部署语言(简称 KDL)。 Kubernetes API 对象可被用于描述如何在 Kubernetes 中部署一个解决方案。

笔者认为有必要描述和记录如何在 Kubernetes 中部署应用程序,特别是当应用程序用到了多个不同的 Kuberenetes 组件时。

笔者想创建一个简单的图形符号约定来描述这些应用程序的部署,以便这些图形可以轻松地在白板或文档中绘制。

为了更好地解释该符号体系的目标,我们可以将其与 UML比较。UML 有几种图形语言来描述应用程序架构的不同方面。 不过,与 UML 的不同之处在于,在 KDL 中,我们没有进行正向或逆向工程的目标(即我们不转换 yaml 文件中的图表,反之亦然)。 这样,我们就有机会管理要在图表中显示的信息量。 作为一般经验法则,我们只会显示与架构相关的信息。

您还可以下载KDL 的 visio模板

目标 #

该图形符号体系的目标如下:

  • 创建一种通用的图形语言来描述如何在 Kubernetes 中部署应用程序。
  • 表示 Kubernetes API 对象与架构最相关的方面。
  • 简单地说,在理想情况下,一个拥有白板和一些彩色便利贴的人应该能够创建这些图表。

以下内容不是该符号体系的目标:

  • 自动生成 API 对象定义

颜色编码 #

一般来说,Kubernetes API 对象涵盖以下范畴:

范畴颜色约定例子
Kubernetes 集群Kubernetes 解决方案中包含的若干个集群
计算绿部署
网络服务
存储持久卷申领(PersistentVolumeClaim),持久卷(PersistentVolume)

Kubernetes 集群 #

Kubernetes 集群可以简单地表示为一个红色的矩形:

KubernetesCluster

所有其他 API 对象都存在于集群内部或集群边缘。 永远不需要显式表现 Kubernetes 集群内的各个节点。

您可以用其他的图形表示集群外部的组件以及它们如何与集群内部的组件连接。 此图形约定不含集群外的组件的展示方式。

计算 #

计算对象是最复杂的图形。 通常,它们由一个带有组件标识的矩形表示,用于展示计算对象的附加信息。 这是一个模板:

ComputeTemplate

图片的中心部分代表一个 Pod。 在其中我们可以看到一个或多个容器。 Pod 和容器都应该有一个名称。

在 Pod 的左侧,我们有额外的计算附加信息。 顶部标记指定此 Pod 的控制器类型。 以下是控制器的类型及其缩写:

控制器类型缩写
Replication ControllerRC
Replica SetRS
DeploymentD
DeploymentConfig (OpenShift only)DC
DaemonSetDS
StatefulSetSS
JobJ
Cron JobJ

在底部,我们有该 Pod 实例的基数。 根据控制器的类型,该字段具有不同的含义和格式,这里有一个参考表格:

控制器类型格式
Replication Controller一个数字或者数字范围 (例如 3 或 2:5)
ReplicaSet一个数字或者数字范围 (例如 3 或 2:5)
Deployment一个数字或者数字范围 (例如 3 或 2:5)
DeploymentConfig (只有 OpenShift 有)一个数字或者数字范围 (例如 3 或 2:5)
DaemonSet节点选择器: 例如 storage-node=true
StatefulSet一个数字: 例如 3
Job一个表示并行度的数字: 例如 3
Cron Job一个表示并行度的数字: 例如 3

在 pod 的顶部,是暴露的端口。 您可以使用小矩形仅显示端口号或添加端口名称。 这是一个例子:

PortExample

这些小矩形是黄色的,因为代表网络配置。您可以将每个端口与实际暴露该端口相关的容器连接起来。 但在大多数情况下,这不是必需的,因为大多数 pod 只有一个容器。

在 pod 的底部,我们有 附加卷。 卷的名称应显示在矩形中。 在大多数情况下,这些将是持久卷。 如果卷类型不是持久卷,则显示它可能是相关的。 此外,有时显示安装点也很重要。 以下是卷的符号示例:

VolumeExample

在 Pod 的右侧,具有与 Pod 的配置相关的卷:secretsconfigmaps。 对于数据卷,应该指明卷的名称,通常区分configmapssecret很重要,所以还应该指明卷的类型,如果需要还可以显示挂载点。 这里有些例子:

SecretExample

网络 #

网络对象有两种: servicesingresses (routes 在 OpenShift 里有).

服务 #

服务可以用椭圆表示,如下图所示:

ServiceTemplate

左侧有一个代表服务类型的小矩形。 以下是缩写:

类型缩写
Cluster IPCIP
Cluster IP, ClusterIP: NoneHS a.k.a. Headless Service
Node PortNP
LoadBalancerLB
External Name (OpenShift only)EN
External IPEIP

在服务的顶部有暴露的端口。 此处适用与计算对象端口相同的约定。

该服务应连接到计算对象。 这将隐式定义服务选择器,因此无需在图片中指示它。

如果服务允许从集群外部到内部 pod 的流量(例如负载均衡器或节点端口或外部 IP),则应在集群边缘进行描述。

EdgeService

相同的概念适用于调节出站流量(例如外部名称)的服务,尽管在这种情况下它们可能会出现在 Kubernetes 集群矩形的底部。

Ingress #

Ingress 可以用平行四边形表示,如下图:

IngressTemplate

Ingress 显示 Ingress 名称以及可选的 host。 Ingress 将连接到服务(相同的规则适用于 OpenShift 路由)。

Ingress 始终显示在 OpenShift 集群的边缘。

EdgeIngress

路由 (OpenShift) #

OpenShift 路由使用与 Ingress 相同的符号表示。

存储 #

存储用于指示持久卷。 存储的颜色是蓝色的,它的形状是一个桶,部署如下图:

StorageTemplate

存储应指明持久卷名和存储提供程序(例如 NFS、gluster 等)。 存储始终位于集群的边缘,因为它是指向外部可用存储的配置。

EdgeStorage

Putting it all together #

在本节中,我们将通过一个示例来说明如何使用此表示法来描述应用程序的部署。 我们的应用程序是一个银行服务应用程序,它使用 mariadb 数据库作为其数据存储。 作为银行应用程序,一切都必须在 HA 中。 以下是部署图:

mariadb-example

请注意,mariadb pod 使用 StatefulSet 和一个持久卷来存储其数据。 这个 pod 没有暴露给集群外部,但它的服务被 BankService 应用程序使用。 BankService 应用程序是一个由部署配置控制的无状态 pod,该部署配置具有用于访问数据库的凭据的机密。 它还有一个服务和一个路由,以便它可以接受来自集群外部的入站连接。