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 节点正在运行 kubicdsalt-master 和第一个 kubernetes 主节点。kubicdsalt-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.crtuser.keyuser.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 正在积极开发中。许多新功能将会出现,这些功能可能会更改当前的功能。

感谢,祝您玩得开心!

类别: 博客

标签

分享这篇文章