文档样式指南
此页面提供了 Kubernetes 文档的写作样式指南。这些是指导原则,而不是规则。请根据您的最佳判断,并随时通过 pull request 提出修改此文档的建议。
有关创建 Kubernetes 文档新内容的更多信息,请阅读文档内容指南。
样式指南的更改由 SIG Docs 作为一个团队进行。要提出更改或添加建议,请将其添加到议程中,以便参加即将举行的 SIG Docs 会议,并在会议上参与讨论。
语言
Kubernetes 文档已被翻译成多种语言(请参阅 本地化 README)。
将文档本地化为不同语言的方法在 本地化 Kubernetes 文档 中有描述。
英语文档使用美国英语拼写和语法。
文档格式标准
对 API 对象使用大驼峰式命名
当您专门指与 API 对象交互时,请使用 大驼峰式命名,也称为 Pascal 命名法。您可能会在 API 参考 中看到不同的首字母大小写,例如 "configMap"。在编写通用文档时,最好使用大驼峰式命名法,将其称为 "ConfigMap"。
当您通常讨论 API 对象时,请使用 句子式大小写。
以下示例侧重于大小写。有关格式化 API 对象名称的更多信息,请查看相关的 代码风格 指南。
| 示例 | 不示例 |
|---|---|
| HorizontalPodAutoscaler 资源负责… | Horizontal pod autoscaler 资源负责… |
| PodList 对象是 Pod 列表。 | Pod List 对象是 Pod 列表。 |
Volume 对象包含一个 hostPath 字段。 | Volume 对象包含一个 hostPath 字段。 |
| 每个 ConfigMap 对象都属于一个命名空间。 | 每个 configMap 对象都属于一个命名空间。 |
| 对于管理机密数据,请考虑使用 Secret API。 | 对于管理机密数据,请考虑使用 secret API。 |
使用尖括号表示占位符
使用尖括号表示占位符。告诉读者占位符代表什么,例如
显示 Pod 的信息
kubectl describe pod <pod-name> -n <namespace>
如果 Pod 的命名空间是 default,您可以省略 '-n' 参数。
使用粗体表示用户界面元素
| 示例 | 不示例 |
|---|---|
| 单击 Fork。 | 单击 "Fork"。 |
| 选择 Other。 | 选择 "Other"。 |
使用斜体定义或介绍新术语
| 示例 | 不示例 |
|---|---|
| 集群是一组节点… | “集群”是一组节点… |
| 这些组件构成控制平面。 | 这些组件构成控制平面。 |
使用代码风格表示文件名、目录和路径
| 示例 | 不示例 |
|---|---|
打开 envars.yaml 文件。 | 打开 envars.yaml 文件。 |
转到 /docs/tutorials 目录。 | 转到 /docs/tutorials 目录。 |
打开 /_data/concepts.yaml 文件。 | 打开 /_data/concepts.yaml 文件。 |
使用国际标准表示引号内的标点符号
| 示例 | 不示例 |
|---|---|
| 事件与关联的 "stage" 记录在一起。 | 事件与关联的 "stage." 记录在一起。 |
| 副本被称为 "fork"。 | 副本被称为 "fork."。 |
内联代码格式
使用代码风格表示内联代码、命令
在 HTML 文档中,使用 <code> 标签表示内联代码。在 Markdown 文档中,使用反引号 (`)。但是,StatefulSet 或 ConfigMap 等 API 类型按原样书写(不使用反引号);这允许使用所有格撇号。
| 示例 | 不示例 |
|---|---|
kubectl run 命令创建一个 Pod。 | “kubectl run” 命令创建一个 Pod。 |
| 每个节点上的 kubelet 获取一个 Lease… | 每个节点上的 kubelet 获取一个 Lease… |
| PersistentVolume 表示持久存储… | PersistentVolume 表示持久存储… |
CustomResourceDefinition 的 .spec.group 字段… | CustomResourceDefinition.spec.group 字段… |
使用声明式管理,请使用 kubectl apply。 | 使用声明式管理,请使用 "kubectl apply"。 |
| 使用三重反引号括起代码示例。 (```) | 使用其他语法括起代码示例。 |
使用单个反引号括起内联代码。例如,var example = true。 | 使用双星号 (**) 或下划线 (_) 括起内联代码。例如,var example = true。 |
| 使用三重反引号在多行代码块前后括起代码,以创建带围栏的代码块。 | 使用多行代码块创建图表、流程图或其他说明。 |
| 使用具有上下文的有意义的变量名。 | 使用没有意义且缺乏上下文的变量名,例如 'foo'、'bar' 和 'baz'。 |
| 删除代码中的尾随空格。 | 添加代码中的尾随空格,因为屏幕阅读器也会读取这些空格。 |
说明
网站支持代码示例的语法高亮显示,但指定语言是可选的。代码块中的语法高亮显示应符合 对比度指南。使用代码风格表示对象字段名和命名空间
| 示例 | 不示例 |
|---|---|
在配置文件中设置 replicas 字段的值。 | 在配置文件中设置 "replicas" 字段的值。 |
exec 字段的值是一个 ExecAction 对象。 | “exec” 字段的值是一个 ExecAction 对象。 |
在 kube-system 命名空间中以 DaemonSet 运行该进程。 | 在 kube-system 命名空间中以 DaemonSet 运行该进程。 |
使用代码风格表示 Kubernetes 命令工具和组件名称
| 示例 | 不示例 |
|---|---|
kubelet 维护节点稳定性。 | kubelet 维护节点稳定性。 |
kubectl 处理查找和验证 API 服务器。 | kubectl 处理查找和验证 apiserver。 |
使用证书运行该进程,kube-apiserver --client-ca-file=FILENAME。 | 使用证书运行该进程,kube-apiserver --client-ca-file=FILENAME。 |
以组件工具或组件名称开头
| 示例 | 不示例 |
|---|---|
kubeadm 工具引导并配置集群中的机器。 | kubeadm 工具引导并配置集群中的机器。 |
| kube-scheduler 是 Kubernetes 的默认调度器。 | kube-scheduler 是 Kubernetes 的默认调度器。 |
使用通用描述符代替组件名称
| 示例 | 不示例 |
|---|---|
| Kubernetes API 服务器提供 OpenAPI 规范。 | apiserver 提供 OpenAPI 规范。 |
| 聚合 API 是从属 API 服务器。 | 聚合 API 是从属 APIServers。 |
使用常规样式表示字符串和整数字段值
对于字符串或整数类型的字段值,请使用常规样式,不带引号。
| 示例 | 不示例 |
|---|---|
将 imagePullPolicy 的值设置为 Always。 | 将 imagePullPolicy 的值设置为 "Always"。 |
将 image 的值设置为 nginx:1.16。 | 将 image 的值设置为 nginx:1.16。 |
将 replicas 字段的值设置为 2。 | 将 replicas 字段的值设置为 2。 |
但是,请考虑引用值,以防读者将该值与 API 类型混淆。
引用 Kubernetes API 资源
本节讨论了我们在文档中引用 API 资源的方式。
“资源”的澄清
Kubernetes 使用术语 resource (资源) 来指代 API 资源。例如,URL 路径 /apis/apps/v1/namespaces/default/deployments/my-app 代表名为 "my-app" 的 Deployment,位于 "default" namespace (命名空间) 中。在 HTTP 术语中,namespace (命名空间) 也是一种资源——就像所有 Web URL 都标识一种资源一样。
Kubernetes 文档也使用 "resource" (资源) 来讨论 CPU 和内存的请求和限制。通常,最好将 API 资源称为 "API 资源",这有助于避免与 CPU 和内存资源,或其他类型的资源混淆。
如果使用资源名称的复数小写形式,例如 deployments 或 configmaps,请提供额外的书面上下文来帮助读者理解你的意思。如果你在可以使用 UpperCamelCase (大驼峰命名法) 名称的上下文中,并且存在歧义的风险,请考虑使用 UpperCamelCase (大驼峰命名法) 的 API 类型。
何时使用 Kubernetes API 术语
不同的 Kubernetes API 术语是
- API kinds (API 类型):在 API URL 中使用的名称(例如
pods、namespaces)。API kinds (API 类型) 有时也称为 resource types (资源类型)。 - API resource (API 资源):API kind (API 类型) 的单个实例(例如
pod、secret)。 - Object (对象):作为“意图记录”的资源。Object (对象) 是集群特定部分的期望状态,Kubernetes 控制平面尝试维护该状态。Kubernetes API 中的所有对象也是资源。
为了清晰起见,在 Kubernetes 文档中引用 API 资源时,可以添加 "resource" (资源) 或 "object" (对象)。例如:写 "a Secret object" (一个 Secret 对象) 而不是 "a Secret"。如果仅从大小写就可以清楚地判断,则无需添加额外的单词。
如果更改有助于避免误解,请考虑重新措辞。常见的情况是你想用 API kind (API 类型) 开始一个句子,例如“Secret”;因为英语和其他语言在句子的开头会大写,读者无法判断你指的是 API kind (API 类型) 还是通用概念。重新措辞可以帮助解决这个问题。
API 资源名称
始终使用 UpperCamelCase (大驼峰命名法),也称为 PascalCase (帕斯卡命名法) 来格式化 API 资源名称。不要使用代码格式化来编写 API 类型。
不要将 API 对象名称拆分为单独的单词。例如,使用 PodTemplateList,而不是 Pod Template List。
有关 PascalCase (帕斯卡命名法) 和代码格式化的更多信息,请查看关于 对 API 对象使用大驼峰命名法 和 对内联代码、命令和 API 对象使用代码样式 的相关指南。
有关 Kubernetes API 术语的更多信息,请查看关于 Kubernetes API 术语 的相关指南。
代码片段格式
不要包含命令提示符
| 示例 | 不示例 |
|---|---|
kubectl get pods | $ kubectl get pods |
将命令与输出分开
验证 Pod 是否正在您选择的节点上运行
kubectl get pods --output=wide
输出类似于此
NAME READY STATUS RESTARTS AGE IP NODE
nginx 1/1 Running 0 13s 10.200.0.4 worker0
Kubernetes 示例的版本控制
包含版本信息的代码示例和配置示例应与附带的文本保持一致。
如果信息与特定版本相关,则需要在 Task template (任务模板) 或 Tutorial template (教程模板) 的 prerequisites (先决条件) 部分中定义 Kubernetes 版本。保存页面后,prerequisites (先决条件) 部分将显示为 Before you begin (在开始之前)。
要为任务或教程页面指定 Kubernetes 版本,请在页面的 front matter (正文头部) 中包含 min-kubernetes-server-version。
如果示例 YAML 位于单独的文件中,请查找并查看包含它的主题作为参考。验证使用单独 YAML 的任何主题是否定义了适当的版本信息。如果单独的 YAML 文件未被任何主题引用,请考虑删除它而不是更新它。
例如,如果你正在编写一个与 Kubernetes 1.8 版本相关的教程,你的 markdown 文件的 front matter (正文头部) 应该如下所示
---
title: <your tutorial title here>
min-kubernetes-server-version: v1.8
---
在代码和配置示例中,不要包含关于替代版本的注释。小心不要在你的示例中包含不正确的语句作为注释,例如
apiVersion: v1 # earlier versions use...
kind: Pod
...
公式和方程
你可以使用 Docsy 对 图表和公式 提供支持。
例如:\\(\frac{7}{9} \sqrt{K^8 s}\\),渲染为 \(\frac{7}{9} \sqrt{K^8 s}\)。
在合理的情况下,优先使用行内公式,但如果这可能有助于读者,你可以使用 math (数学) 块。
阅读 Docsy 指南,了解你需要更改页面中的哪些内容才能激活支持;如果遇到问题,请将 math: true 添加到页面的 front matter (正文头部) (即使你认为自动激活应该足够)。
Kubernetes.io 词汇表
一个 Kubernetes 特定术语和单词列表,将在整个网站中一致使用。
| 术语 | 用法 |
|---|---|
| Kubernetes | Kubernetes 应该始终大写。 |
| Docker | Docker 应该始终大写。 |
| SIG Docs | SIG Docs 而不是 SIG-DOCS 或其他变体。 |
| On-premises (本地部署) | On-premises (本地部署) 或 On-prem (本地部署) 而不是 On-premise (本地部署) 或其他变体。 |
| cloud native (云原生) | Cloud native (云原生) 或 cloud native (云原生),具体取决于句子结构,而不是 cloud-native (云原生) 或 Cloud Native (云原生)。 |
| open source (开源) | Open source (开源) 或 open source (开源),具体取决于句子结构,而不是 open-source (开源) 或 Open Source (开源)。 |
Shortcodes (短代码)
Hugo Shortcodes (短代码) 有助于创建不同水平的修辞吸引力。我们的文档支持这一类别的三个不同的 shortcodes (短代码):Note (注意) {{< note >}}、Caution (警告) {{< caution >}} 和 Warning (警示) {{< warning >}}。
用一个开始标签和一个结束标签将文本包围起来。
使用以下语法来应用样式
{{< note >}} No need to include a prefix; the shortcode automatically provides one. (Note:, Caution:, etc.) {{< /note >}}输出如下:
说明
你选择的前缀与标签的文本相同。
说明
使用 {{< note >}} 来突出显示提示或可能对了解有帮助的信息。
例如
{{< note >}}
You can _still_ use Markdown inside these callouts.
{{< /note >}}
输出如下:
说明
你仍然可以在这些 callout (标注) 中使用 Markdown。你可以在列表中使用 {{< note >}}
1. Use the note shortcode in a list
1. A second item with an embedded note
{{< note >}}
Warning, Caution, and Note shortcodes, embedded in lists, need to be indented four spaces. See [Common Shortcode Issues](#common-shortcode-issues).
{{< /note >}}
1. A third item in a list
1. A fourth item in a list
输出如下:
在列表中使用 note shortcode (注意短代码)
第二个带有嵌入式 note (注意) 的项目
说明
Warning, Caution, and Note shortcodes, embedded in lists, need to be indented four spaces. See [Common Shortcode Issues](#common-shortcode-issues).列表中的第三个项目
列表中的第四个项目
注意
使用 {{< caution >}} 来引起对重要信息,以避免陷阱的注意。
例如
{{< caution >}}
The callout style only applies to the line directly above the tag.
{{< /caution >}}
输出如下:
注意
callout (标注) 样式仅应用于紧接标签上方的行。警告
使用 {{< warning >}} 来指示危险或必须遵循的重要信息。
例如
{{< warning >}}
Beware.
{{< /warning >}}
输出如下:
警告
小心。常见的 Shortcode (短代码) 问题
有序列表
除非你在 notice (通知) 和标签之前缩进四个空格,否则 shortcodes (短代码) 会中断编号列表。
例如
1. Preheat oven to 350˚F
1. Prepare the batter, and pour into springform pan.
{{< note >}}Grease the pan for best results.{{< /note >}}
1. Bake for 20-25 minutes or until set.
输出如下:
将烤箱预热至 350˚F
准备面糊,倒入 springform pan (弹簧扣模具)。
说明
为了获得最佳效果,请润滑模具。烘烤 20-25 分钟或直至凝固。
Include (包含) 语句
include (包含) 语句中的 shortcodes (短代码) 会破坏构建。你必须在调用 include (包含) 之前和之后,在父文档中插入它们。例如
{{< note >}}
{{< include "task-tutorial-prereqs.md" >}}
{{< /note >}}
Markdown 元素
换行符
使用单个换行符来分隔块级内容,例如标题、列表、图像、代码块等。例外是二级标题,应该使用两个换行符。二级标题紧随一级标题(或标题)之后,没有任何先前的段落或文本。两个换行符有助于更好地可视化代码编辑器中的内容结构。
在适当的时候,手动在 Markdown 源代码中换行段落。由于 git 工具和 GitHub 网站逐行生成文件差异,手动换行长行有助于审阅者轻松找到 PR 中所做的更改并提供反馈。它还帮助下游本地化团队,他们会逐行跟踪上游更改。换行可以在句子的结尾或标点符号处进行,例如。
标题和标题
访问此文档的人员可能会使用屏幕阅读器或其他辅助技术 (AT)。屏幕阅读器 是线性输出设备,它们一次输出页面上的一个项目。如果页面上有大量内容,你可以使用标题为页面提供内部结构。良好的页面结构有助于所有读者轻松浏览页面或过滤感兴趣的主题。
| 示例 | 不示例 |
|---|---|
| 更新页面或博客文章的 front matter (正文头部) 中的标题。 | 使用一级标题,因为 Hugo 会自动将页面 front matter (正文头部) 中的标题转换为一级标题。 |
| 使用有序标题提供内容的有意义的高级概述。 | 除非绝对必要,否则不要使用四到六级的标题。如果你的内容如此详细,可能需要将其分解为单独的文章。 |
对于非博客文章内容,使用井号或哈希符号 (#) 来表示标题。 | 使用下划线 (--- 或 ===) 来表示一级标题。 |
| 使用句子大小写来表示页面正文中的标题。例如,Extend kubectl with plugins (使用插件扩展 kubectl) | 使用标题大小写来表示页面正文中的标题。例如,Extend Kubectl With Plugins (使用插件扩展 Kubectl) |
使用标题大小写来表示 front matter (正文头部) 中的页面标题。例如,title: Kubernetes API Server Bypass Risks (Kubernetes API 服务器绕过风险) | 不要在 front matter (正文头部) 中使用句子大小写来表示页面标题。例如,不要使用 title: Kubernetes API server bypass risks |
| 在正文中放置相关链接。 | 在标题中包含超链接 (<a href=""></a>)。 |
使用井号或哈希符号 (#) 来表示标题。 | 使用 粗体 文本或其他指示符来分隔段落。 |
段落
| 示例 | 不示例 |
|---|---|
| 尽量将段落控制在 6 句话以内。 | 使用空格字符缩进第一个段落。例如,⋅⋅⋅在段落前添加三个空格会缩进它。 |
使用三个连字符 (---) 创建水平规则。将水平规则用于段落内容的断开。例如,故事中的场景变化,或部分内容中的主题转变。 | 不要使用水平规则进行装饰。 |
链接
| 示例 | 不示例 |
|---|---|
| 编写带有上下文的超链接,以便链接的内容能够提供相关信息。例如:您的机器上打开了某些端口。请参阅 检查所需端口 以获取更多详细信息。 | 避免使用含糊不清的术语,例如“点击此处”。例如:您的机器上打开了某些端口。请参阅 此处 以获取更多详细信息。 |
编写 Markdown 风格的链接:[链接文本](URL)。例如:[Hugo shortcodes](/docs/contribute/style/hugo-shortcodes/#table-captions),输出为 Hugo shortcodes。 | 编写 HTML 风格的链接:<a href="/media/examples/link-element-example.css" target="_blank">访问我们的教程!</a>,或者创建在新标签页或窗口中打开的链接。例如:[示例网站](https://example.com){target="_blank"} |
列表
将相关且需要按特定顺序显示或指示多个项目之间相关性的项目分组到列表中。当屏幕阅读器遇到列表(无论是无序列表还是有序列表)时,它会向用户通告这是一组列表项。然后,用户可以使用箭头键在列表中的各个项目之间上下移动。网站导航链接也可以标记为列表项;毕竟它们只是一组相关的链接。
如果列表中有一个或多个项目是完整的句子,则用句号结束列表中的每个项目。为了保持一致性,通常要么所有项目都是完整的句子,要么没有项目是完整的句子。
说明
作为不完整引言句一部分的有序列表可以使用小写字母并像每个项目都是引言句的一部分一样标点。对于有序列表,使用数字一 (
1.)。对于无序列表,使用 (
+)、(*) 或 (-)。在每个列表之后留下一行空白。
使用四个空格缩进嵌套列表(例如,⋅⋅⋅⋅)。
列表项可以包含多个段落。列表项中的每个后续段落必须缩进四个空格或一个制表符。
表格
数据表格的语义目的是呈现表格数据。有视力的用户可以快速扫描表格,但屏幕阅读器会逐行读取。表格标题用于为数据表格创建一个描述性标题。辅助技术 (AT) 使用 HTML 表格标题元素在页面结构中向用户标识表格内容。
- 使用 Hugo shortcodes 为表格添加表格标题。
内容最佳实践
本节包含清晰、简洁和一致内容的建议最佳实践。
使用现在时
| 示例 | 不示例 |
|---|---|
| 此命令启动一个代理。 | 此命令将启动一个代理。 |
例外:如果需要传达正确的含义,请使用将来时或过去时。
使用主动语态
| 示例 | 不示例 |
|---|---|
| 您可以使用浏览器探索 API。 | API 可以使用浏览器探索。 |
| YAML 文件指定副本计数。 | 副本计数在 YAML 文件中指定。 |
例外:如果主动语态导致笨拙的结构,请使用被动语态。
使用简单直接的语言
使用简单直接的语言。避免使用不必要的短语,例如说“请”。
| 示例 | 不示例 |
|---|---|
| 要创建一个 ReplicaSet,… | 为了创建一个 ReplicaSet,… |
| 请参阅配置文件。 | 请参阅配置文件。 |
| 查看 Pod。 | 使用下一个命令,我们将查看 Pod。 |
以“您”称呼读者
| 示例 | 不示例 |
|---|---|
| 您可以通过…创建一个 Deployment。 | 我们将通过…创建一个 Deployment。 |
| 在前面的输出中,您可以看到… | 在前面的输出中,我们可以看到… |
避免使用拉丁语短语
优先使用英语术语而不是拉丁语缩写。
| 示例 | 不示例 |
|---|---|
| 例如,… | 例如,… |
| 也就是说,… | 即,… |
例外:对于“等等”,请使用“etc.”。
避免的模式
避免使用“我们”
在句子中使用“我们”可能会令人困惑,因为读者可能不知道您描述的“我们”中是否包含他们。
| 示例 | 不示例 |
|---|---|
| 版本 1.4 包含… | 在版本 1.4 中,我们添加了… |
| Kubernetes 为…提供了一个新功能。 | 我们提供了一个新功能… |
| 此页面教您如何使用 Pod。 | 在本页中,我们将学习有关 Pod 的知识。 |
避免使用术语和习语
有些读者以英语为第二语言。避免使用术语和习语,以帮助他们更好地理解。
| 示例 | 不示例 |
|---|---|
| 内部,… | 在底层,… |
| 创建一个新集群。 | 启动一个新集群。 |
避免关于未来的陈述
避免做出承诺或暗示未来。如果您需要讨论一个 alpha 功能,请将文本放在一个标识其为 alpha 信息的标题下。
此规则的例外情况是关于宣布将在未来版本中删除的弃用功能的文档。一个这样的文档示例是 弃用 API 迁移指南。
避免会很快过时的陈述
避免使用“当前”和“新”等词语。今天很新的功能,几个月后可能就不再被认为是新的了。
| 示例 | 不示例 |
|---|---|
| 在版本 1.4 中,… | 在当前版本中,… |
| Federation 功能提供… | 新的 Federation 功能提供… |
避免使用假设特定理解水平的词语
避免使用“只是”、“简单”、“容易”、“轻松”或“简单”等词语。这些词语没有价值。
| 示例 | 不示例 |
|---|---|
| 在…中包含一个命令 | 在…中仅包含一个命令 |
| 运行容器… | 简单地运行容器… |
| 您可以删除… | 您可以轻松删除… |
| 这些步骤… | 这些简单的步骤… |
EditorConfig 文件
Kubernetes 项目维护一个 EditorConfig 文件,该文件在 VS Code 等文本编辑器中设置常见的样式首选项。如果您希望确保您的贡献与项目的其余部分保持一致,可以使用此文件。要查看该文件,请参阅仓库根目录中的 .editorconfig。
接下来
- 了解 编写新主题。
- 了解 使用页面模板。
- 了解 自定义 Hugo shortcodes。
- 了解 创建拉取请求。