高可用NixOS上的Kubernetes集群玩具项目
该项目是一个精心设计的方案,通过Terraform管理和虚拟机,构建在NixOS上高度可用的Kubernetes集群。借助Colmena,你可以体验到优雅且灵活的集群部署。
项目介绍
该项目旨在提供一个高级示例,展示如何使用NixOS的Kubernetes模块来构建一个高可用的集群。它采用外部etcd拓扑结构,确保了服务的健壮性。集群包括3个etcd节点,3个控制面节点(运行关键组件),2个工作节点,以及2个负载均衡器节点。
动机
虽然NixOS已经提供了一套基本的Kubernetes模块,但其高可用性支持仍有限。这个项目就是要填补这一空白,创建一个无需手动操作就能正常运行的复杂集群环境。
架构
该架构遵循官方建议的外部etcd拓扑,将etcd、控制面和工作节点分离,以提高整体稳定性。此外,还配置了两个负载均衡器节点,确保API服务的持续可用性。
目标
- 所有基础设施都由Terraform和Nix声明式管理。
- 服务直接在NixOS和systemd上运行,不依赖于额外的Pod。
- 提供基本的实用功能,能够承载实际的工作负载。
- 确保高可用性,单点故障不会影响整个集群。
非目标
尽管如此,项目并不追求达到生产级的完美状态,也不专注于提供最高级别的安全性,但已采取了一些基础的安全措施。
技术应用场景
如果你是系统管理员或开发者,想要在本地环境中快速搭建实验性的高可用Kubernetes集群,或者想学习如何利用NixOS和Terraform进行自动化部署,那么这个项目非常适合你。
项目特点
- 全栈声明式管理:从基础设施到服务,所有东西都通过Terraform和Nix进行声明式配置。
- 零依赖Pod:除了必要的组件,集群启动后没有额外的Pod,保持整洁。
- 易用性:只需简单的命令即可创建、修改和销毁集群,适合快速试验。
- 高可用性:每个层次都经过优化,确保单点故障时集群仍能继续运行。
开始使用
首先,确保你已经安装了Nix、Libvirtd并准备好相关资源,然后按照项目文档中的步骤运行初始化、应用配置、生成证书和部署。项目提供了详细的检查脚本,可帮助验证集群的状态。
注意:在多次创建和销毁集群后,可能需要清理.ssh/known_hosts
文件,避免出现主机键匹配错误。
贡献与支持
欢迎贡献代码和完善文档。项目中列出了待办事项,你可以选择感兴趣的领域进行改进。在提交之前,请确保通过了代码格式检查,并且在新集群上成功运行了检查脚本。
希望这个项目能为你的Kubernetes之旅带来启发,也期待你的参与和反馈,共同推动项目的进步。