构建混合型ARM Kubernetes集群

对于此群集,我将使用LattePanda Alpha SBC作为主节点和NFS服务器。 LattePanda具有出色的Intel Core m3-7y30双核CPU(与12英寸Macbook相同),8GB RAM和32GB内部eMMC存储。 在此部署中,我将使用Kingspec的128GB NVMe SSD作为主节点存储。 它完美地工作,并具有惊人的性能。 另外,我还有一个通过USB3.0连接到主节点的1TB SSD,在其中我使用NFS提供了持久存储。

节点将是两个ARM64 SBC,FriendlyArm NanoPC-T4和Pine64 RockPro64。 这些主板具有Rockchip RK3399六核CPU,4GB内存,16GB内部eMMC存储和1Gbps以太网。 对于RockPro64,我计划将来将其用作NAS和Docker容器主机。

所有这三个都是出色的SBC,具有运行在此群集之类的无头服务器或具有Wi-Fi连接的Linux桌面环境所需的所有功能。 NanoPC板还支持NVMe M.2驱动器,尽管支持取决于所使用的内核和发行版。

在RockPro64上,将其用作NAS是一个很好的选择,因为它具有PCI-E插槽,并且我在其中获得了两端口SATA卡。我计划在构建NAS后添加四个或六个端口卡。

所有主板都运行Debian,在LattePanda中,我使用的是AMD64的默认Debian发行版;在ARM主板上,我使用的是DietPi,它是SBC的精益Debian发行版。

软件
自1.12版以来,混合架构集群的构建需要对主要的Kubernetes发行版进行一些改进。 Kubernetes拥有AMD64和ARM64映像已有一段时间了,但是为了能够透明地创建混合集群,它要求将Docker Manifests推送到存储库中,其中主映像标签指向已标记的架构映像。 您可以使用以下方法检查映像是否支持此功能:

Kubernetes已经在主映像(api服务器,调度程序,控制器,暂停)中使用了此功能,但在Dashboard,metrics-server和其他一些其他映像中则没有。 在某些情况下,为了解决这个问题,我从主存储库中提取了映像,将其推入DockerHub并创建了多体系结构清单,以指向正确的架构映像。 在某些情况下,我修补了Kubernetes部署,迫使该Pod降落在ARM64节点上(例如,在Dashboard中)。

节点
为了能够安装Kubernetes,每个节点都需要满足一些先决条件。为了使其自动化,我制作了一本Ansible Playbook,可以非常轻松地完成大部分工作。我还将在下面介绍要手动完成的任务。

Ansible是一种出色的工具,可以自动配置任意数量的主机。 您创建一个称为Playbooks的文件(或多个文件)。 它们由调用Ansible模块以提供所需配置的任务组成。 Ansible拥有大量能够自动执行大多数任务的模块。 此外,它仅需要通过ssh访问主机,而无需代理!

Ansible剧本还有其他任务(与下面的手动说明相比),用于安装实用程序,添加具有Sudo的新用户,修复权限,禁用IPv6等。查看剧本以获取更多信息,非常简单。

要运行,只需一个问题:

在将用于启动配置手册的主机上安装Ansible(可以是主节点)

创建一个清单文件,提供您的主机IP和root密码

从GIST中获取main.yaml剧本,并保存到inventory的同一目录中

运行Playbook

手动安装步骤
安装先决条件

安装Docker

验证MAC地址和product_uuid对于每个节点都是唯一的(这在SBC上很重要)

安装Kubernetes软件包

创建集群
Kubernetes是使用出色的kubeadm工具安装的。它配置主节点,并提供其他节点加入集群的要求。

以下是安装步骤(在主节点中):

预拉Kubernetes映像
创建集群

安装后,kubeadm将生成一个要在其他节点上运行的命令,以便它们可以加入集群。 密钥具有24小时有效性,因此如果将来需要添加节点,请使用主节点中的命令kubeadm token create --print-join-command重新生成密钥,并获取要在新节点上运行的命令 。

在其他节点上运行kubeadm join命令

使用在主节点中生成的命令并在要添加的所有节点上运行:

将身份验证文件复制到用户目录

为了能够通过kubectl使用集群,请将身份验证文件复制到当前用户:

安装Weave Net覆盖网络

在这个新集群中,我还将使用Weave Net。 Weave提供了许多功能,良好的性能,并且已经具有带有正确标签和清单的多体系结构映像。

NO_MASQ_LOCAL环境变量允许将真实客户端IP传递给具有以下功能的服务和Pod:

service.spec.externalTrafficPolicy =Local 注释。

在主服务器上启用Pod调度

如果您希望也可以在主节点中运行Pods,请taint标签,以便可以对其进行调度。

启用TTL功能门

要允许Jobs使用TTL功能,请在/ etc / kubernetes / manifests中使用主节点中的sudo编辑所有清单,并在命令部分的开头添加以下标记—feature-gates = TTLAfterFinished = true:

此后,请等待5分钟,以使Master Pod重新启动。

集群状态 | 其他集群工具 | 使用EFK的聚合日志记录 | 监控方式

详情参阅 - 亚图跨际

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值