用树莓派构建 Kubernetes 集群

2024年 7月 17日 32.7k 0

将 Kubernetes 安装在多个树莓派上,实现自己的“家庭私有云”容器服务。

用树莓派构建 Kubernetes 集群-1

Kubernetes 从一开始就被设计为云原生的企业级容器编排系统。它已经成长为事实上的云容器平台,并由于接受了容器原生虚拟化和无服务器计算等新技术而继续发展。

从微型的边缘计算到大规模的容器环境,无论是公有云还是私有云环境,Kubernetes 都可以管理其中的容器。它是“家庭私有云”项目的理想选择,既提供了强大的容器编排,又让你有机会了解一项这样的技术 —— 它的需求如此之大,与云计算结合得如此彻底,以至于它的名字几乎就是“云计算”的代名词。

没有什么比 Kubernetes 更懂“云”,也没有什么能比树莓派更合适“集群起来”!在廉价的树莓派硬件上运行本地的 Kubernetes 集群是获得在真正的云技术巨头上进行管理和开发的经验的好方法。

在树莓派上安装 Kubernetes 集群

本练习将在三个或更多运行 Ubuntu 20.04 的树莓派 4 上安装 Kubernetes 1.18.2 集群。Ubuntu 20.04(Focal Fossa)提供了针对 64 位 ARM(ARM64)的树莓派镜像(64 位内核和用户空间)。由于目标是使用这些树莓派来运行 Kubernetes 集群,因此运行 AArch64 容器镜像的能力非常重要:很难找到 32 位的通用软件镜像乃至于标准基础镜像。借助 Ubuntu 20.04 的 ARM64 镜像,可以让你在 Kubernetes 上使用 64 位容器镜像。

AArch64 vs. ARM64;32 位 vs. 64 位;ARM vs. x86

请注意,AArch64 和 ARM64 实际上是同一种东西。不同的名称源于它们在不同社区中的使用。许多容器镜像都标为 AArch64,并能在标为 ARM64 的系统上正常运行。采用 AArch64/ARM64 架构的系统也能够运行 32 位的 ARM 镜像,但反之则不然:32 位的 ARM 系统无法运行 64 位的容器镜像。这就是 Ubuntu 20.04 ARM64 镜像如此有用的原因。

这里不会太深入地解释不同的架构类型,值得注意的是,ARM64/AArch64 和 x86_64 架构是不同的,运行在 64 位 ARM 架构上的 Kubernetes 节点无法运行为 x86_64 构建的容器镜像。在实践中,你会发现有些镜像没有为两种架构构建,这些镜像可能无法在你的集群中使用。你还需要在基于 Arch64 的系统上构建自己的镜像,或者跳过一些限制以让你的常规的 x86_64 系统构建 Arch64 镜像。在“家庭私有云”项目的后续文章中,我将介绍如何在常规系统上构建 AArch64 镜像。

为了达到两全其美的效果,在本教程中设置好 Kubernetes 集群后,你可以在以后向其中添加 x86_64 节点。你可以通过使用 Kubernetes 的 污点 taint 和 容忍 toleration 能力,由 Kubernetes 的调度器将给定架构的镜像调度到相应的节点上运行。

关于架构和镜像的内容就不多说了。是时候安装 Kubernetes 了,开始吧!

前置需求

这个练习的要求很低。你将需要:

  • 三台(或更多)树莓派 4(最好是 4GB 内存的型号)。
  • 在全部树莓派上安装 Ubuntu 20.04 ARM64。

为了简化初始设置,请阅读《修改磁盘镜像来创建基于树莓派的家庭实验室》,在将 Ubuntu 镜像写入 SD 卡并安装在树莓派上之前,添加一个用户和 SSH 授权密钥(authorized_keys)。

配置主机

在 Ubuntu 被安装在树莓派上,并且可以通过 SSH 访问后,你需要在安装 Kubernetes 之前做一些修改。

安装和配置 Docker

截至目前,Ubuntu 20.04 在 base 软件库中提供了最新版本的 Docker,即 v19.03,可以直接使用 apt 命令安装它。请注意,包名是 docker.io。请在所有的树莓派上安装 Docker:

# 安装 docker.io 软件包
$ sudo apt install -y docker.io

安装好软件包后,你需要做一些修改来启用 cgroup(控制组)。cgroup 允许 Linux 内核限制和隔离资源。实际上,这可以让 Kubernetes 更好地管理其运行的容器所使用的资源,并通过让容器彼此隔离来增加安全性。

在对所有树莓派进行以下修改之前,请检查 docker info 的输出:

# 检查 `docker info`
# 省略了某些输出
$ sudo docker info
(...)
 Cgroup Driver: cgroups
(...)
WARNING: No memory limit support
WARNING: No swap limit support
WARNING: No kernel memory limit support
WARNING: No kernel memory TCP limit support
WARNING: No oom kill disable support

上面的输出突出显示了需要修改的部分:cgroup 驱动和限制支持。

首先,将 Docker 使用的默认 cgroup 驱动从 cgroups 改为 systemd,让 systemd 充当 cgroup 管理器,确保只有一个 cgroup 管理器在使用。这有助于系统的稳定性,这也是 Kubernetes 所推荐的。要做到这一点,请创建 /etc/docker/daemon.json 文件或将内容替换为:

# 创建或替换 /etc/docker/daemon.json 以启用 cgroup 的 systemd 驱动

$ sudo cat > /etc/docker/daemon.json

相关文章

Linux 命令行的聊天工具 CenterIM
Linux 桌面年仍未到来 但 Linux 移动之年已到来
12 个在线学习 Linux 技能网站
Linux Mint : 会是另一个新的 Ubuntu 吗?
W3Conf 开发者大会将于下周召开
Ubuntu 10.04 ARM 处理器上网本版本结束服务期

发布评论