openSUSE Kubic 的 kubic-control
27. 8月 2019 | Thorsten Kukuk | 无许可
简介
如果您觉得这篇文档太长,过于复杂,或者您对背景信息不感兴趣:请安装 openSUSE Kubic 并直接跳转到“部署 Kubernetes”部分。部署 Kubernetes 真的没有更简单的方法了!
我为什么要使用 kubic-control?
我们已经在 openSUSE Kubic 上有了 kubeadm 来管理 kubernetes,为什么还需要另一个管理工具?有一篇不错的博文给出了答案:kubeadm v1.15 中的自动化高可用性:自带电池但可更换,它在解释 kubernetes 多主节点的同时,也很好地解释了 kubeadm 的范围:“kubeadm 专注于执行将最小可行、安全的集群启动并运行所需的操作,以用户友好的方式。kubeadm 的范围仅限于本地文件系统和 Kubernetes API,它旨在成为用于更高级工具的可组合构建块。”
以下任务不在 kubeadm 的范围内
- 基础设施配置
- 第三方网络
- 非关键插件,例如监控、日志记录和可视化
- 特定的云提供商集成
kubic-control 就是这样一个更高级的工具包。它配置主机操作系统(在未来,它甚至能够借助 yomi 安装新的裸机节点),设置所有必要的服务,使用 kubeadm 部署 kubernetes,并安装和配置所有必要的插件,例如 Pod 网络以及操作系统和集群的更新和重启服务。它还将帮助您避免错误,例如在希望使用 flannel 作为网络时,没有使用正确的参数调用 kubeadm。
kubic-control 是什么?
kubic-control 由三个二进制文件组成
- kubicd,一个通过 gRPC 与客户端通信的守护进程。它在 openSUSE Kubic 上设置 kubernetes,包括 Pod 网络、kured、事务更新等。
- kubicctl,一个命令行界面
- haproxycfg,一个用于调整 haproxy.cfg 以用作 kubernetes API 负载均衡器的命令行界面
通信已加密,kubicctl 命令可以在任何机器上运行。用户使用证书进行身份验证,使用 RBAC 来确定用户是否有权调用此函数。kubiccd 将使用 kubeadm 和 kubectl 来部署和管理集群。因此,管理员可以随时使用这些命令修改集群,没有隐藏的状态数据库,除了用于 kubernetes 多主节点/HA 设置所需的信息。
需求
主要是 kubernetes 本身通用的需求
- 集群中的所有节点必须位于同一网络上,并且能够直接相互通信。
- 集群中的所有节点必须分配静态 IP 地址。使用动态分配的 IP 会在 IP 地址更改时破坏集群功能。
- Kubernetes 主节点必须具有有效的完全限定域名 (FQDN),这些域名可以被所有其他节点以及需要访问集群的其他网络解析。
- 由于 Kubernetes 主要使用证书和令牌,因此所有节点上的时间需要始终保持同步。否则,集群内部的通信将会中断。
由于使用了 salt 进行通信,因此 Admin 节点需要运行 salt-master,所有其他节点需要配置为 salt-minion。
安装
目前,在 openSUSE Kubic 上获取运行的 kubernetes 集群的最简单方法是获取 DVD 并使用 YaST 安装节点。有三个相关的系统角色可供选择
- Kubic Admin 节点
- 附加 Kubic 节点
- Kubic 负载均衡器节点
Kubic Admin 节点
Kubic Admin 节点正在运行 kubicd、salt-master 和第一个 kubernetes 主节点。kubicd 和 salt-master 的开销非常低,因此您不需要为此使用更大的机器。在首次启动期间,一些证书将在 /etc/kubicd/pki 中为 kubicd 创建
- Kubic-Control-CA.key - 私有 CA 密钥
- Kubic-Control-CA.crt - 公有 CA 密钥。kubicctl 也需要此密钥
- KubicD.key - kubicd 的私有密钥
- kubicD.crt - kubicd 签名的公有密钥
- admin.key - 私有密钥,允许 kubicctl 以管理员身份连接到 kubicd
- admin.crt - 公有密钥,允许 kubicctl 以管理员身份连接到 kubicd
对于 kubicctl,您需要在 ~/.config/kubicctl 中创建一个目录,其中包含 Kubic-Control-CA.crt、user.key 和 user.crt。对于管理员角色,这需要是 admin.key 和 admin.crt 的副本。对于其他用户,您需要创建相应的证书并使用 Kubic-Control-CA.crt 对其进行签名。如果您以 root 身份调用 kubicctl 并且 ~/.config/kubicctl 中没有 user.crt,则如果存在,将使用 /etc/kubicd/pki 中的管理员证书。可以使用 _kubicctl certificates create_ 创建其他用户的证书
请妥善保管这些证书并安全存储,这些是访问 kubicd 的密码!
附加 Kubic 节点
附加 Kubic 节点将成为 kubernetes API 的附加主节点以实现 HA,或工作节点。两种情况下的过程相同
- 安装附加 Kubic 节点系统角色。在工作流的某个点,您需要输入 Kubic Admin 节点的 hostname 或 IP 地址以供 salt-minion 使用。
- 使用 salt-key -A 在 Kubic Admin 节点上接受 salt-minion。
Kubic 负载均衡器节点
Kubic 负载均衡器节点系统角色安装一个没有容器运行时但有 haproxy 的 MicroOS。在安装期间,您需要提供 Kubic Admin 节点的 hostname 或 IP 地址以供 salt minion 使用。使用 salt-key -A 在 Kubic Admin 节点上接受 salt-minion。
之后,需要配置并启用 haproxy。在未来的某个版本中,kubic-control 应该能够做到这一点。
部署 Kubernetes
通常,在安装了 Kubic Admin 节点 和所需的 附加 Kubic 节点 之后,部署 kubernetes 非常简单。登录到 Kubic Admin 节点,接受 salt-minion 的密钥,并运行以下命令以使用 weave net 作为 POD 网络和 kured 来管理升级期间节点重启,在主节点上部署控制平面
kubicctl init
现在我们只需要工作节点,它们将运行我们的工作负载。节点名称始终是 minion ID,通常是该节点的 FQHN
kubicctl node add node1,node2,...
就是这样。只需两个命令即可设置您的集群!现在运行 kubectl get nodes 查看您的集群!
多主节点 Kubernetes
设置具有三个主节点的控制平面(kubic-control 当前允许任意数量的控制平面节点,但至少应为三个且节点数为奇数!)非常简单。
首先,如果您网络中没有 kubernetes API 的负载均衡器,则需要设置一个。目前这是一个手动过程,但将来也将由 kubernetes-control 处理。
然后设置初始主节点,其中“load.balancer.dns”是应该可以访问 kubernetes API 服务器的 DNS 名称
kubicctl init --multi-master load.balancer.dns
现在添加更多主节点
kubicctl node add --type master master2,master3
以及工作节点
kubicctl node add node1,node2,...
现在您拥有一个具有 3 个主节点和多个工作节点的运行 kubernetes 集群,只需三个命令!kubectl get nodes 应该显示您的节点状态。
下一步
这只是我们让 kubic-control 成为管理您的整个 openSUSE Kubic 集群的工具的旅程的开始。许多更多的事情正在计划或积极开发中
- 在添加或删除主节点时重新配置 haproxy 负载均衡器
- 使用 yomi 安装新节点
- 证书处理
- 扩展插件的支持和处理,包括滚动更新
- 集成 ignition
- 为所有类型的虚拟化创建“开箱即用”镜像,包括三个系统角色:Kubic Admin 节点、附加 Kubic 节点和 Kubic 负载均衡器节点。
- 添加支持从 devel:kubic:containers 项目部署容器镜像
与任何新软件一样,尤其是我们正在如此快速更改的东西,存在错误的风险。如果您尝试本指南中的步骤并发现任何错误,请向我们的 Bugzilla 在“Kubic”组件下报告它们。
请注意: Kubic 上的 kubic-control 正在积极开发中。许多新功能将会出现,这些功能可能会更改当前的功能。
感谢,祝您玩得开心!
类别: 博客
标签