词汇表
此术语表旨在提供 Kubernetes 术语的完整、标准列表。其中包含特定于 Kubernetes 的技术术语以及能够构造有用的语境的一般性术语。
根据标签过滤术语
点击 [+] 下面的指示符号获取特定术语的更为完整的描述。
-
API 发起的驱逐(API-initiated eviction)LINK
API 发起的驱逐是一个先调用 Eviction API 创建
[+]Eviction
对象,再由该对象体面地中止 Pod 的过程。你可以通过 kube-apiserver 的客户端,比如
kubectl drain
这样的命令,直接调用 Eviction API 发起驱逐。 当Eviction
对象创建出来之后,该对象将驱动 API 服务器终止选定的 Pod。API 发起的驱逐取决于你配置的
PodDisruptionBudgets
和terminationGracePeriodSeconds
。API 发起的驱逐不同于 节点压力引发的驱逐。
- 有关详细信息,请参阅 API 发起的驱逐。
-
API 服务器LINK亦称作:kube-apiserver
API 服务器是 Kubernetes 控制平面的组件, 该组件负责公开了 Kubernetes API,负责处理接受请求的工作。 API 服务器是 Kubernetes 控制平面的前端。
[+]Kubernetes API 服务器的主要实现是 kube-apiserver。
kube-apiserver
设计上考虑了水平扩缩,也就是说,它可通过部署多个实例来进行扩缩。 你可以运行kube-apiserver
的多个实例,并在这些实例之间平衡流量。 -
DeploymentLINK
管理多副本应用的一种 API 对象,通常通过运行没有本地状态的 Pod 来完成工作。
[+]每个副本表现为一个 Pod, Pod 分布在集群中的节点上。 对于确实需要本地状态的工作负载,请考虑使用 StatefulSet。
-
DockershimLINK
dockershim 是 Kubernetes v1.23 及之前版本中的一个组件。 Kubernetes 系统组件通过它与 Docker Engine通信。
[+]从 Kubernetes v1.24 开始,dockershim 已从 Kubernetes 中移除。 想了解更多信息,可参考移除 Dockershim 的常见问题。
-
Downward APILINK
Kubernetes 将 Pod 和容器字段值暴露给容器中运行的代码的机制。
[+]在不需要修改容器代码的前提下让容器拥有关于自身的信息是很有用的。修改代码可能使容器直接耦合到 Kubernetes。
Kubernetes Downward API 允许容器使用它们自己或它们在 Kubernetes 集群中所处环境的信息。 容器中的应用程序可以访问该信息,而不需要以 Kubernetes API 客户端的形式执行操作。
有两种方法可以将 Pod 和容器字段暴露给正在运行的容器:
- 使用环境变量
- 使用
downwardAPI
卷
这两种暴露 Pod 和容器字段的方式统称为 Downward API。
-
EndpointSliceLINK
一种将网络端点与 Kubernetes 资源组合在一起的方法。
[+]一种将网络端点组合在一起的可扩缩、可扩展方式。 它们将被 kube-proxy 用于在 每个 节点 上建立网络路由。
-
FinalizerLINK
Finalizer 是带有命名空间的键,告诉 Kubernetes 等到特定的条件被满足后, 再完全删除被标记为删除的资源。 Finalizer 提醒控制器清理被删除的对象拥有的资源。
[+]当你告诉 Kubernetes 删除一个指定了 Finalizer 的对象时, Kubernetes API 通过填充
.metadata.deletionTimestamp
来标记要删除的对象, 并返回202
状态码(HTTP "已接受") 使其进入只读状态。 此时控制平面或其他组件会采取 Finalizer 所定义的行动, 而目标对象仍然处于终止中(Terminating)的状态。 这些行动完成后,控制器会删除目标对象相关的 Finalizer。 当metadata.finalizers
字段为空时,Kubernetes 认为删除已完成并删除对象。你可以使用 Finalizer 控制资源的垃圾收集。 例如,你可以定义一个 Finalizer,在删除目标资源前清理相关资源或基础设施。
-
FlexVolumeLINK
FlexVolume 是一个已弃用的接口,用于创建树外卷插件。 容器存储接口(CSI) 是一个更新的接口,它解决了 FlexVolume 的一些问题。
[+]FlexVolume 允许用户编写自己的驱动程序,并在 Kubernetes 中加入对用户自己的数据卷的支持。 FlexVolume 驱动程序的二进制文件和依赖项必须安装在主机上。 这需要 root 权限。如果可能的话,SIG Storage 建议实现 CSI 驱动程序, 因为它解决了 FlexVolume 的限制。
-
HostAliasesLINK
主机别名 (HostAliases) 是一组 IP 地址和主机名的映射,用于注入到 Pod 内的 hosts 文件。
[+]HostAliases 是一个包含主机名和 IP 地址的可选列表,配置后将被注入到 Pod 内的 hosts 文件中。 该选项仅适用于没有配置 hostNetwork 的 Pod。
-
KopsLINK
kops 是一个命令行工具,可以帮助你创建、销毁、升级和维护生产级,高可用性的 Kubernetes 集群。
[+]说明:官方仅支持 AWS。对 GCE 和 VMware vSphere 的支持还处于 Alpha 阶段。
kops
为你的集群提供了:- 全自动化安装
- 基于 DNS 的集群标识
- 自愈功能:所有组件都在自动扩缩组(Auto-Scaling Groups)中运行
- 有限的操作系统支持 (推荐使用 Debian,支持 Ubuntu 16.04,试验性支持 CentOS & RHEL)
- 高可用 (HA) 支持
- 直接提供或者生成 Terraform 清单文件的能力
你也可以将自己的集群作为一个构造块,使用 Kubeadm 构造集群。
kops
是建立在 kubeadm 之上的。 -
kube-proxyLINK
kube-proxy 是集群中每个节点(node)所上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。
[+]kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。
如果操作系统提供了可用的数据包过滤层,则 kube-proxy 会通过它来实现网络规则。 否则,kube-proxy 仅做流量转发。
-
KubeletLINK
[+]kubelet
会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在 Pod 中。kubelet 接收一组通过各类机制提供给它的 PodSpecs, 确保这些 PodSpecs 中描述的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。
-
LimitRangeLINK
提供约束来限制命名空间中每个 容器(Containers) 或 Pod 的资源消耗。
[+]LimitRange 按照类型来限制命名空间中对象能够创建的数量,以及单个 容器(Containers) 或 Pod 可以请求/使用的计算资源量。
-
MinikubeLINK
Minikube 是用来在本地运行 Kubernetes 的一种工具。
[+]Minikube 在用户计算机上的一个虚拟机内运行单节点 Kubernetes 集群。 你可以使用 Minikube 在学习环境中尝试 Kubernetes。
-
Operator 模式LINK
operator 模式 是一种系统设计, 将 控制器(Controller) 关联到一个或多个自定义资源。
[+]除了使用作为 Kubernetes 自身一部分的内置控制器之外,你还可以通过 将控制器添加到集群中来扩展 Kubernetes。
如果正在运行的应用程序能够充当控制器并通过 API 访问的方式来执行任务操控 那些在控制平面中定义的自定义资源,这就是一个 operator 模式的示例。
-
PodLINK
Pod 是 Kubernetes 的原子对象。 Pod 表示你的集群上一组正在运行的容器(Container)。
[+]通常创建 Pod 是为了运行单个主容器。 Pod 还可以运行可选的边车(sidecar)容器,以添加诸如日志记录之类的补充特性。 通常用 Deployment 来管理 Pod。
-
Pod Disruption BudgetLINK亦称作:PDB
Pod 干扰预算(Pod Disruption Budget,PDB) 使应用所有者能够为多实例应用创建一个对象,来确保一定数量的具有指定标签的 Pod 在任何时候都不会被主动驱逐。
[+]PDB 无法防止非主动的中断,但是会计入预算(budget)。
-
Pod 水平自动扩缩器(Horizontal Pod Autoscaler)LINK亦称作:HPA
Pod 水平自动扩缩器(Horizontal Pod Autoscaler)是一种 API 资源,它根据目标 CPU 利用率或自定义度量目标扩缩 Pod 副本的数量。
[+]HPA 通常用于 ReplicationController 、Deployment 或者 ReplicaSet 上。 HPA 不能用于不支持扩缩的对象,例如 DaemonSets。
-
SecretLINK
Secret 用于存储敏感信息,如密码、OAuth 令牌和 SSH 密钥。
[+]Secret 允许用户对如何使用敏感信息进行更多的控制,并减少信息意外暴露的风险。 默认情况下,Secret 值被编码为 base64 字符串并以非加密的形式存储,但可以配置为 静态加密(Encrypt at rest)。
Pod 可以通过多种方式引用 Secret, 例如在卷挂载中引用或作为环境变量引用。Secret 设计用于机密数据,而 ConfigMap 设计用于非机密数据。
-
StatefulSetLINK
StatefulSet 用来管理某 Pod 集合的部署和扩缩, 并为这些 Pod 提供持久存储和持久标识符。
[+]和 Deployment 类似, StatefulSet 管理基于相同容器规约的一组 Pod。但和 Deployment 不同的是, StatefulSet 为它们的每个 Pod 维护了一个有粘性的 ID。这些 Pod 是基于相同的规约来创建的, 但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久不变的 ID。
如果希望使用存储卷为工作负载提供持久存储,可以使用 StatefulSet 作为解决方案的一部分。 尽管 StatefulSet 中的单个 Pod 仍可能出现故障, 但持久的 Pod 标识符使得将现有卷与替换已失败 Pod 的新 Pod 相匹配变得更加容易。
-
成员(Member)LINK
K8s 社区中持续活跃的贡献者(contributor)。
[+]可以将问题单(issue)和 PR 指派给成员(Member),成员(Member)也可以通过 GitHub 小组加入 特别兴趣小组 (SIGs)。针对成员(Member)所提交的 PR,系统自动运行提交前测试。成员(Member)应该是持续活跃的社区贡献者。
-
持久卷申领(Persistent Volume Claim)LINK
申领持久卷(PersistentVolume) 中定义的存储资源,以便可以将其挂载为容器(container)中的卷。
[+]指定存储的数量,如何访问存储(只读、读写或独占)以及如何回收存储(保留、回收或删除)。 存储本身的详细信息在 PersistentVolume 对象中。
-
代理(Proxy)LINK
在计算机领域,代理指的是充当远程服务中介的服务器。
[+]客户端与代理进行交互;代理将客户端的数据复制到实际服务器;实际服务器回复代理;代理将实际服务器的回复发送给客户端。
kube-proxy 是集群中每个节点上运行的网络代理,实现了部分 Kubernetes 服务(Service) 概念。
你可以将 kube-proxy 作为普通的用户态代理服务运行。 如果你的操作系统支持,则可以在混合模式下运行 kube-proxy;该模式使用较少的系统资源即可达到相同的总体效果。
-
代码贡献者(Code Contributor)LINK
为 Kubernetes 开源代码库开发并贡献代码的人。
[+]他们也是加入一个或多个特别兴趣小组 (Special Interest Groups;SIGs)的活跃成员。
-
动态卷供应(Dynamic Volume Provisioning)LINK
允许用户请求自动创建存储卷。
[+]动态供应让集群管理员无需再预先供应存储。相反,它通过用户请求自动地供应存储。 动态卷供应是基于 API 对象 StorageClass 的, StorageClass 可以引用 卷插件(Volume Plugin) 提供的 卷,也可以引用传递给卷插件的参数集。
-
端点(Endpoints)LINK
端点负责记录与服务的选择器相匹配的 Pod 的 IP 地址。
[+]端点可以手动配置到服务(Service)上,而不必指定选择器标识。
EndpointSlice 提供了一种可伸缩、可扩展的替代方案。
-
对象(Object)LINK
Kubernetes 系统中的实体。Kubernetes API 用这些实体表示集群的状态。
[+]Kubernetes 对象通常是一个“目标记录”-一旦你创建了一个对象,Kubernetes 控制平面(Control Plane) 不断工作,以确保它代表的项目确实存在。 创建一个对象相当于告知 Kubernetes 系统:你期望这部分集群负载看起来像什么;这也就是你集群的期望状态。
-
服务目录(Service Catalog)LINK
服务目录是一种过去曾经存在的扩展 API,它能让 Kubernetes 集群中运行的应用易于使用外部托管的软件服务,例如云供应商提供的数据仓库服务。
[+]服务目录可以检索、供应并绑定外部托管服务(Managed Services), 而无需知道那些服务具体是怎样创建和托管的。
-
干扰(Disruption)LINK
干扰(Disruption)是指导致一个或者多个 Pod 服务停止的事件。 干扰会影响依赖于受影响的 Pod 的资源,例如 Deployment。
[+]如果你作为一个集群操作人员,销毁了一个从属于某个应用的 Pod, Kubernetes 视之为自愿干扰(Voluntary Disruption)。 如果由于节点故障或者影响更大区域故障的断电导致 Pod 离线, Kubernetes 视之为非愿干扰(Involuntary Disruption)。
更多信息请查阅干扰。
-
工作负载(Workload)LINK
工作负载是在 Kubernetes 上运行的应用程序。
[+]代表不同类型或部分工作负载的各种核心对象包括 DaemonSet、Deployment、Job、ReplicaSet 和 StatefulSet。
例如,具有 Web 服务器和数据库的工作负载可能在一个 StatefulSet 中运行数据库, 而 Web 服务器运行在 Deployment。
-
工作组(Working Group,WG)LINK
工作组是为了方便讨论和(或)推进执行一些短周期、窄范围、或者从委员会和 SIG 分离出来的项目、以及跨 SIG 的活动。
[+]工作组可以将人们组织起来,一起完成一项分散的任务。
更多信息请参考 kubernetes/community 代码库和当前的 SIGs 和工作组 列表。
-
贡献者(Contributor)LINK
通过贡献代码、文档或者投入时间等方式来帮助 Kubernetes 项目或社区的人。
[+]贡献形式包括提交拉取请求(PRs)、问题报告(Issues)、反馈、参与特别兴趣小组(SIG)或者组织社区活动等等。
-
混排切片(Shuffle Sharding)LINK
混排切片(Shuffle Sharding)是指一种将请求指派给队列的技术,其隔离性好过对队列个数哈希取模的方式。
[+]我们通常会关心不同的请求序列间的相互隔离问题,目的是为了确保密度较高的 请求序列不会湮没密度较低的序列。 将请求放入不同队列的一种简单方法是对请求的某些特征值执行哈希函数, 将结果对队列的个数取模,从而得到要使用的队列的索引。 这一哈希函数使用请求的与其序列相对应的特征作为其输入。例如,在因特网上, 这一特征通常指的是由源地址、目标地址、协议、源端口和目标端口所组成的 五元组。
这种简单的基于哈希的模式有一种特性,高密度的请求序列(流)会湮没那些被 哈希到同一队列的其他低密度请求序列(流)。 为大量的序列提供较好的隔离性需要提供大量的队列,因此是有问题的。 混排切片是一种更为灵活的机制,能够更好地将低密度序列与高密度序列隔离。 混排切片的术语采用了对一叠扑克牌进行洗牌的类比,每个队列可类比成一张牌。 混排切片技术首先对请求的特定于所在序列的特征执行哈希计算,生成一个长度 为十几个二进制位或更长的哈希值。 接下来,用该哈希值作为信息熵的来源,对一叠牌来混排,并对整个一手牌(队列)来洗牌。 最后,对所有处理过的队列进行检查,选择长度最短的已检查队列作为请求的目标队列。 在队列数量适中的时候,检查所有已处理的牌的计算量并不大,对于任一给定的 低密度的请求序列而言,有相当的概率能够消除给定高密度序列的湮没效应。 当队列数量较大时,检查所有已处理队列的操作会比较耗时,低密度请求序列 消除一组高密度请求序列的湮没效应的机会也随之降低。因此,选择队列数目 时要颇为谨慎。
-
基于角色的访问控制(RBAC)LINK
管理授权决策,允许管理员通过 Kubernetes API 动态配置访问策略。
[+]RBAC 使用 角色 (包含权限规则)和 角色绑定 (将角色中定义的权限授予一组用户)。
-
集群操作者(Cluster Operator)LINK
配置、控制、监控集群的人。
[+]他们的主要责任是保持集群正常运行,可能需要进行周期性的维护和升级活动。
说明:注意: 集群操作者不同于操作者模式(Operator Pattern),操作者模式是用来扩展 Kubernetes API 的。
-
聚合层(Aggregation Layer)LINK
聚合层允许你在自己的集群上安装额外的 Kubernetes 风格的 API。
[+]当你配置了 Kubernetes API 服务器 来 支持额外的 API, 你就可以在 Kubernetes API 中增加
APIService
对象来"申领(Claim)"一个 URL 路径。 -
控制器(Controller)LINK
在 Kubernetes 中,控制器通过监控集群 的公共状态,并致力于将当前状态转变为期望的状态。
[+]控制器(控制平面的一部分) 通过 API 服务器监控你的集群中的公共状态。
其中一些控制器是运行在控制平面内部的,对 Kubernetes 来说,他们提供核心控制操作。 比如:部署控制器(deployment controller)、守护控制器(daemonset controller)、 命名空间控制器(namespace controller)、持久化数据卷控制器(persistent volume controller)(等) 都是运行在 kube-controller-manager 中的。
-
量纲(Quantity)LINK
使用全数字来表示较小数值或使用 SI 后缀表示较大数值的表示法。
[+]量纲是使用紧凑的全数字表示法来表示小数值或带有国际计量单位制(SI) 的大数值的表示法。 小数用 milli 单位表示,而大数用 kilo、mega 或 giga 单位表示。
例如,数字
1.5
表示为1500m
, 而数字1000
表示为1k
,1000000
表示为1M
。 你还可以指定二进制表示法后缀;数字 2048 可以写成2Ki
。公认的十进制(10 的幂数)单位是
m
(milli)、k
(kilo,有意小写)、M
(mega)、G
(giga)、T
(terra)、P
(peta)、E
(exa)。公认的二进制(2 的幂数)单位是
Ki
(kibi)、Mi
(mebi)、Gi
(gibi)、Ti
(tebi)、Pi
(pebi)、Ei
(exbi)。 -
临时容器(Ephemeral Container)LINK
你可以在 Pod 中临时运行的一种 容器(Container) 类型。
[+]如果想要调查运行中有问题的 Pod,可以向该 Pod 添加一个临时容器(Ephemeral Container)并进行诊断。 临时容器没有资源或调度保证,因此不应该使用它们来运行任何部分的工作负荷本身。
-
平台开发人员(Platform Developer)LINK
定制 Kubernetes 平台以满足自己的项目需求的人。
[+]平台开发人员可以使用定制资源 或使用汇聚层扩展 Kubernetes API 来为其 Kubernetes 实例增加功能,特别是为其应用程序添加功能。 一些平台开发人员也是 kubernetes 贡献者, 他们会开发贡献给 Kubernetes 社区的扩展。 另一些平台开发人员则开发封闭源代码的商业扩展或用于特定网站的扩展。
-
容器存储接口(Container Storage Interface;CSI)LINK
容器存储接口(Container Storage Interface;CSI)定义存储系统暴露给容器的标准接口。
[+]CSI 允许存储驱动提供商为 Kubernetes 创建定制化的存储插件, 而无需将这些插件的代码添加到 Kubernetes 代码仓库(外部插件)。 要使用某个存储提供商的 CSI 驱动,你首先要 将它部署到你的集群上。 然后你才能创建使用该 CSI 驱动的 Storage Class 。
-
容器运行时(Container Runtime)LINK
容器运行环境是负责运行容器的软件。
[+]Kubernetes 支持许多容器运行环境,例如 containerd、 CRI-O 以及 Kubernetes CRI (容器运行环境接口) 的其他任何实现。
-
特别兴趣小组(SIG)LINK
共同管理大范畴 Kubernetes 开源项目中某组件或方面的一组社区成员。
[+]SIG 中的成员对推进某个领域(如体系结构、API 机制构件或者文档)具有相同的兴趣。 SIGs 必须遵从 governance guidelines 的规定, 不过可以有自己的贡献策略以及通信渠道(方式)。
更多的详细信息可参阅 kubernetes/community 仓库以及 SIGs 和工作组(Working Groups)的最新列表。
-
云提供商(Cloud Provider)LINK亦称作:云服务提供商(Cloud Service Provider)
一个提供云计算平台的商业机构或其他组织。
[+]云提供商(Cloud provider),有时也称作云服务提供商(CSPs)提供云计算平台或服务。
很多云提供商提供托管的基础设施(也称作基础设施即服务或 IaaS)。 针对托管的基础设施,云提供商负责服务器、存储和网络,而用户(你) 负责管理其上运行的各层软件,例如运行一个 Kubernetes 集群。
你也会看到 Kubernetes 被作为托管服务提供;有时也称作平台即服务或 PaaS。 针对托管的 Kubernetes,你的云提供商负责 Kubernetes 的控制平面以及 节点 及他们所依赖的基础设施: 网络、存储以及其他一些诸如负载均衡器之类的元素。
反馈
此页是否对你有帮助?
感谢反馈。如果你有一个关于如何使用 Kubernetes 的具体问题需要答案,可以访问 Stack Overflow. 在 GitHub 仓库上登记新的问题 报告问题 或者 提出改进建议.