理念
kOps (Kubernetes-Ops) 是一套用于安装、操作和删除 Kubernetes 集群的工具。
它遵循 Kubernetes 的设计理念:用户在 JSON/YAML 中创建一个集群配置对象,然后控制器创建集群。
每个组件(kubelet、kube-apiserver 等)都经过明确配置:我们在可能的情况下重复使用 k8s componentconfig 类型,并为附加组件的配置创建附加类型。
kOps 可以
- 创建一个集群
- 升级一个集群
- 重新配置组件
- 添加、删除或重新配置机器组(实例组)
- 管理集群附加组件
- 删除一个集群
一些用户可能需要或更喜欢使用 Terraform 等工具进行集群配置,因此 kOps 也可以输出这些工具的等效配置(目前仅限于 Terraform,其他工具计划中)。使用您喜欢的工具创建完成后,您仍然可以使用 kOps 的其他工具来操作您的集群。
主要 API 类型 ¶
主要有两个类型
-
Cluster 代表整个集群配置(例如我们正在运行的 Kubernetes 版本),并包含各个节点的默认值。
-
InstanceGroup 是一组具有相似配置的实例,这些实例一起管理。通常,这表示一组节点或单个主节点实例。在 AWS 上,它目前通过 AutoScalingGroup 实现。
状态存储 ¶
API 对象目前存储在称为 "状态存储" 的抽象中,该抽象包含更多详细信息。
配置推断 ¶
Kubernetes 集群的配置实际上非常复杂:有很多选项,并且许多组合必须彼此一致地配置。
类似于创建 Kubernetes 对象的方式填充其他规范值,kops create cluster
命令会推断其他未设置的值,以便您可以指定最少的值集(但是,如果您不想覆盖默认值,则只需指定字段!)。
由于推断出的值比简单的 k8s 对象更多,因此我们将用户创建的规范与完整的推断出的规范分开记录。这意味着我们可以跟踪用户实际设置了哪些值,而不是仅仅是默认值;这样可以避免一些问题,例如,在服务上的 ClusterIP。
我们的目标是从下游组件(即 nodeup 和 protokube)中删除所有计算逻辑;这意味着只有一个事实来源,并且实际上可以实现 nodeup 和 protokube 的替代方案。例如,kubelet 等组件将来可能会直接从状态存储中读取其配置,从而无需管理进程来复制值。
目前,“完成的”集群规范存储在状态存储中,位于名为 cluster.spec
的文件中。