文档风格指南
本页提供了 Kubernetes 文档的写作风格指南。这些是指南,而非规则。请自行判断,如有需要,可以通过 Pull Request 提出对本文档的修改建议。
有关如何为 Kubernetes 文档创建新内容的更多信息,请阅读文档内容指南。
风格指南的修改由 SIG Docs 小组共同完成。要提出修改或新增建议,请将其添加到即将召开的 SIG Docs 会议议程中,并参加会议参与讨论。
语言
Kubernetes 文档已被翻译成多种语言(参见本地化 README)。
在本地化 Kubernetes 文档中描述了如何将文档本地化为不同语言。
英文文档使用美式英语拼写和语法。
文档格式标准
对 API 对象使用驼峰式大写(Upper Camel Case)
当您特指与某个 API 对象交互时,使用驼峰式大写(UpperCamelCase),也称为 Pascal Case。您可能在API 参考中看到不同的首字母大写形式,例如 "configMap"。在撰写通用文档时,最好使用驼峰式大写,例如称之为 "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 Kind 按原样书写(不使用反引号);这允许使用所有格撇号。
应做 | 不应做 |
---|---|
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 规范。 |
Aggregated API 是从属的 API 服务器。 | Aggregated API 是从属的 APIServers。 |
对字符串和整数字段值使用常规风格
对于字符串或整数类型的字段值,使用常规风格,不带引号。
应做 | 不应做 |
---|---|
将 imagePullPolicy 字段的值设置为 Always。 | 将 imagePullPolicy 字段的值设置为 "Always"。 |
将 image 字段的值设置为 nginx:1.16。 | 将 image 字段的值设置为 nginx:1.16 。 |
将 replicas 字段的值设置为 2。 | 将 replicas 字段的值设置为 2 。 |
然而,如果字段值可能与 API Kind 混淆,请考虑使用引号。
引用 Kubernetes API 资源
本节讨论如何在文档中引用 API 资源。
关于 "resource" 的澄清
Kubernetes 使用术语 resource 来指代 API 资源。例如,URL 路径 /apis/apps/v1/namespaces/default/deployments/my-app
表示 "default" 命名空间中名为 "my-app" 的 Deployment。在 HTTP 术语中,命名空间是一个 resource,就像所有 Web URL 都标识一个 resource 一样。
Kubernetes 文档也使用 "resource" 来讨论 CPU 和内存的请求与限制。将 API 资源明确称为 "API 资源" 通常是个好主意;这有助于避免与 CPU 和内存资源或其他类型的 resource 混淆。
如果您使用资源名称的小写复数形式,例如 deployments
或 configmaps
,请提供额外的文本上下文以帮助读者理解您的意思。如果您在可以使用 UpperCamelCase 名称的上下文中使用该术语,且存在歧义风险,请考虑使用 UpperCamelCase 形式的 API Kind。
何时使用 Kubernetes API 术语
不同的 Kubernetes API 术语包括:
- API Kind:在 API URL 中使用的名称(例如
pods
、namespaces
)。API Kind 有时也称为 资源类型(resource types)。 - API Resource:API Kind 的单个实例(例如
pod
、secret
)。 - Object:一种充当 "意图记录" 的 resource。对象是集群特定部分的期望状态,Kubernetes 控制平面会努力维护该状态。Kubernetes API 中的所有对象也都是 resource。
为了清晰起见,在 Kubernetes 文档中引用 API resource 时,可以添加 "resource" 或 "object"。例如:写 "一个 Secret 对象" 而不是 "一个 Secret"。如果仅凭首字母大写就能清楚表达,则无需添加额外的词。
当重组句式有助于避免误解时,请考虑重述。常见的情况是您想用 API Kind(例如 “Secret”)开头一个句子;由于英语及其他语言的句子开头字母会大写,读者无法区分您是指 API Kind 还是泛指概念。重述可以提供帮助。
API 资源名称
始终使用驼峰式大写(UpperCamelCase)(也称为 PascalCase)格式化 API 资源名称。不要对 API Kind 使用代码格式。
不要将 API 对象名称拆分成单独的词。例如,使用 PodTemplateList,而不是 Pod Template List。
有关 PascalCase 和代码格式的更多信息,请查阅对 API 对象使用驼峰式大写(Upper Camel Case)和对行内代码、命令和 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 示例的版本控制
包含版本信息的代码示例和配置示例应与附带文本保持一致。
如果信息是版本特定的,则需要在任务模板或教程模板的 prerequisites
部分定义 Kubernetes 版本。页面保存后,prerequisites
部分显示为开始之前。
要指定任务或教程页面的 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 指南以了解如何在您的页面中进行更改来激活支持;如果您遇到问题,请在页面front matter中添加 math: true
(即使您认为自动激活应该足够,也可以这样做)。
Kubernetes.io 词汇列表
一份 Kubernetes 特有术语和词汇列表,供全站一致使用。
术语 | 用法 |
---|---|
Kubernetes | Kubernetes 始终应首字母大写。 |
Docker | Docker 始终应首字母大写。 |
SIG Docs | 使用 SIG Docs,而非 SIG-DOCS 或其他变体。 |
本地部署 | 使用 On-premises 或 On-prem,而非 On-premise 或其他变体。 |
云原生 | 根据句子结构使用 Cloud native 或 cloud native,而非 cloud-native 或 Cloud Native。 |
开源 | 根据句子结构使用 Open source 或 open source,而非 open-source 或 Open Source。 |
Shortcodes
Hugo Shortcodes 有助于创建不同修辞层级。我们的文档支持此类别中的三种不同 Shortcode:注意 {{< note >}}
、小心 {{< caution >}}
和警告 {{< warning >}}
。
用开启和关闭 Shortcode 标记将文本括起来。
使用以下语法应用样式:
{{< 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 >}}
输出为:
注意
您仍然可以在这些标注中使用 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 >}}
输出为:
小心
标注样式仅应用于标签紧上方的那一行。警告
使用 {{< warning >}}
来表示危险或必须遵循的关键信息。
例如:
{{< warning >}}
Beware.
{{< /warning >}}
输出为:
警告
注意危险。常见的 Shortcode 问题
有序列表
除非在通知和标签前缩进四个空格,否则 Shortcode 会打断编号列表。
例如:
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
准备面糊,并倒入活底蛋糕模。
注意
给模具抹油以获得最佳效果。烘烤 20-25 分钟,或直到凝固。
Include 语句
Include 语句内的 Shortcode 会导致构建失败。您必须将它们插入到父文档中,在调用 include 之前和之后。例如:
{{< note >}}
{{< include "task-tutorial-prereqs.md" >}}
{{< /note >}}
Markdown 元素
换行符
使用单个换行符分隔块级内容,如标题、列表、图片、代码块等。例外情况是二级标题,应该使用两个换行符。二级标题紧跟在一级标题(或页面标题)之后,没有 preceding 段落或文本。两个换行符有助于在代码编辑器中更好地可视化内容的整体结构。
在 Markdown 源文件中,适当时手动换行。由于 git 工具和 GitHub 网站按行生成文件差异(diff),手动换长行有助于审查者轻松找到 PR 中所做的更改并提供反馈。这也有助于下游本地化团队,他们按行跟踪上游更改。例如,可以在句末或标点符号处换行。一个例外是 Markdown 链接或 shortcode 应该在单行中。
标题和页面标题
访问本文档的用户可能使用屏幕阅读器或其他辅助技术 (AT)。屏幕阅读器是线性输出设备,它们一次输出页面上的一个项目。如果页面内容很多,可以使用标题为页面提供内部结构。良好的页面结构有助于所有读者轻松浏览页面或筛选感兴趣的主题。
应做 | 不应做 |
---|---|
更新页面或博客文章的 front matter 中的 title。 | 使用一级标题,因为 Hugo 会自动将页面 front matter 中的 title 转换为一级标题。 |
使用有序标题来提供内容的有意义的高级大纲。 | 除非绝对必要,否则不要使用 4 到 6 级的标题。如果您的内容如此详细,可能需要将其拆分成单独的文章。 |
对于非博客文章内容,使用井号或哈希号 (# )。 | 使用下划线 (--- 或 === ) 来指定一级标题。 |
对页面正文中的标题使用句式大写(Sentence case)。例如,使用插件扩展 kubectl | 对页面正文中的标题使用标题式大写(Title case)。例如,Extend Kubectl With Plugins |
对 front matter 中的页面 title 使用标题式大写(Title case)。例如,title: Kubernetes API Server Bypass Risks | 对 front matter 中的页面 title 使用句式大写(Sentence case)。例如,不要使用 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> ,或创建在新标签页或窗口中打开的链接。例如:[example website](https://example.com){target="_blank"} |
列表
将列表中相互关联、需要按特定顺序出现或表示多个项目之间关联的项分组。当屏幕阅读器遇到列表(无论是序列表还是无序列表)时,会向用户宣布存在一组列表项。然后用户可以使用箭头键在列表中的不同项之间上下移动。网站导航链接也可以标记为列表项;毕竟它们只是一组相关链接。
如果列表中有一项或多项是完整的句子,则以句号结束列表中的每一项。为了保持一致性,通常所有项要么都是完整的句子,要么都不是。
注意
作为不完整引言句子一部分的有序列表可以使用小写字母开头,并按照每个项是引言句一部分的方式添加标点。对有序列表使用数字一 (
1.
)。对无序列表使用 (
+
)、(*
) 或 (-
)。在每个列表后留一个空行。
使用四个空格缩进嵌套列表(例如,⋅⋅⋅⋅)。
列表项可能包含多个段落。列表项中后续的每个段落必须缩进四个空格或一个制表符。
表格
数据表的语义目的是呈现表格数据。有视力的用户可以快速浏览表格,但屏幕阅读器会逐行读取。表标题用于为数据表创建一个描述性标题。辅助技术 (AT) 使用 HTML 表格 caption 元素在页面结构内向用户标识表格内容。
- 使用Hugo shortcodes 为表格添加表标题。
内容最佳实践
本节包含清晰、简洁、一致的内容建议最佳实践。
使用现在时
应做 | 不应做 |
---|---|
此命令启动一个代理。 | 此命令将启动一个代理。 |
例外:如果需要表达正确的含义,请使用将来时或过去时。
使用主动语态
应做 | 不应做 |
---|---|
您可以使用浏览器探索 API。 | API 可以使用浏览器探索。 |
YAML 文件指定了副本数量。 | 副本数量在 YAML 文件中指定。 |
例外:如果使用主动语态会导致结构awkward(不自然),则使用被动语态。
使用简单直接的语言
使用简单直接的语言。避免使用不必要的词语,例如“请”。
应做 | 不应做 |
---|---|
要创建一个 ReplicaSet,... | 为了创建一个 ReplicaSet,... |
参阅配置文件。 | 请参阅配置文件。 |
查看 Pods。 | 使用此命令,我们将查看 Pods。 |
将读者称为“你”
应做 | 不应做 |
---|---|
你可以通过 ... 创建一个 Deployment | 我们将通过 ... 创建一个 Deployment |
在前面的输出中,你可以看到 ... | 在前面的输出中,我们可以看到 ... |
避免拉丁语短语
优先使用英语术语而非拉丁语缩写。
应做 | 不应做 |
---|---|
例如,... | e.g., ... |
即,... | i.e., ... |
例外:对 et cetera 使用 "etc."。
要避免的模式
避免使用“我们”
在一个句子中使用“我们”可能会造成困惑,因为读者可能不知道他们是否是你所描述的“我们”的一部分。
应做 | 不应做 |
---|---|
版本 1.4 包含 ... | 在版本 1.4 中,我们添加了 ... |
Kubernetes 为 ... 提供了一项新功能 | 我们提供了一项新功能 ... |
此页面教你如何使用 Pods。 | 在此页面中,我们将学习有关 Pods 的知识。 |
避免使用行话和习语
有些读者的母语不是英语。避免使用行话和习语,以帮助他们更好地理解。
应做 | 不应做 |
---|---|
内部,... | 底层(字面意思:引擎盖下),... |
创建一个新集群。 | 启动一个新集群。 |
避免关于未来的陈述
避免做出承诺或给出关于未来的暗示。如果你需要谈论一个 Alpha 特性,将文本放在一个标识其为 Alpha 信息的标题下。
一个例外是关于已宣布的在未来版本中移除的弃用功能的文档。这类文档的一个例子是弃用 API 迁移指南。
避免很快会过时的陈述
避免使用“当前”和“新”等词语。今天的新功能几个月后可能就不再被视为新功能。
应做 | 不应做 |
---|---|
在版本 1.4 中,... | 在当前版本中,... |
Federation 特性提供了 ... | 新的 Federation 特性提供了 ... |
避免使用假定读者具备特定理解水平的词语
避免使用“仅仅 (just)”、“简单地 (simply)”、“容易 (easy)”、“轻松地 (easily)”或“简单 (simple)”等词语。这些词语并不能增加价值。
应做 | 不应做 |
---|---|
包含一个命令 ... | 仅仅包含一个命令 ... |
运行容器 ... | 简单地运行容器 ... |
你可以移除 ... | 你可以轻松地移除 ... |
这些步骤 ... | 这些简单的步骤 ... |
EditorConfig 文件
Kubernetes 项目维护一个 EditorConfig 文件,用于在 VS Code 等文本编辑器中设置常见的样式偏好。如果你希望确保你的贡献与项目的其余部分保持一致,可以使用此文件。要查看此文件,请参阅仓库根目录下的 .editorconfig
。
下一步
- 了解如何编写新主题。
- 了解如何使用页面模板。
- 了解如何使用自定义 Hugo Shortcode。
- 了解如何创建拉取请求。