长期以来,我对使用一堆廉价的树莓派构建 Kubernetes 集群很感兴趣。按照网络上的各种教程,我能够在三个 Pi 集群中安装并运行 Kubernetes。但是,主 节点上的 RAM 和 CPU 要求压垮了我的 Pi。这导致执行各种 Kubernetes 任务时性能不佳。这也使得 Kubernetes 的原地升级变得不可能。
因此,我很高兴看到 k3s 项目。K3s 被誉为轻量级 Kubernetes,用于资源受限的环境。它也针对 ARM 处理器进行了优化。这使得运行基于树莓派的 Kubernetes 集群变得更加可行。事实上,我们将在本文中创建一个。
所需材料
要创建本文中描述的 Kubernetes 集群,我们需要
- 至少一个树莓派(带有 SD 卡和电源适配器)
- 以太网电缆
- 交换机或路由器,用于将所有 Pi 连接在一起
我们将从互联网安装 k3s,因此它们需要能够通过路由器访问互联网。
我们的集群概述
对于这个集群,我们将使用三个树莓派。第一个我们将命名为 kmaster 并分配一个静态 IP 为 192.168.0.50(因为我们的本地网络是 192.168.0.0/24)。第一个工作节点(第二个 Pi),我们将命名为 knode1 并分配一个 IP 为 192.168.0.51。最后一个工作节点我们将命名为 knode2 并分配一个 IP 为 192.168.0.52。
显然,如果您有不同的网络布局,您可以使用您可用的任何网络/IP。只需在本文中使用 IP 的任何地方替换您自己的值。
为了不必一直通过 IP 引用每个节点,让我们将它们的主机名添加到我们 PC 上的 /etc/hosts 文件中。
echo -e "192.168.0.50\tkmaster" | sudo tee -a /etc/hosts
echo -e "192.168.0.51\tknode1" | sudo tee -a /etc/hosts
echo -e "192.168.0.52\tknode2" | sudo tee -a /etc/hosts安装主节点
现在我们准备好安装主节点了。第一步是安装最新的 Raspbian 镜像。我不打算在这里解释这一点,但是如果您需要,我有一篇详细的文章介绍如何执行此操作。所以请安装 Raspbian,启用 SSH 服务器,将主机名设置为 kmaster,并分配一个静态 IP 为 192.168.0.50。
现在 Raspbian 已经安装在主节点上,让我们启动我们的主 Pi 并 ssh 进入它
ssh pi@kmaster现在我们准备好安装 k3s 了。在主 Pi 上,运行
curl -sfL https://get.k3s.io | sh -当命令完成时,我们已经设置并运行了一个单节点集群!让我们来看看。仍然在 Pi 上,运行
sudo kubectl get nodes您应该看到类似这样的内容
NAME STATUS ROLES AGE VERSION
kmaster Ready master 2m13s v1.14.3-k3s.1提取加入令牌
我们想要添加几个工作节点。在这些节点上安装 k3s 时,我们需要一个加入令牌。加入令牌存在于主节点的文件系统中。让我们复制它并将其保存在我们可以稍后访问它的地方
sudo cat /var/lib/rancher/k3s/server/node-token安装工作节点
为两个工作节点抓取一些 SD 卡并在每个卡上安装 Raspbian。对于一个,将主机名设置为 knode1 并分配一个 IP 为 192.168.0.51。对于另一个,将主机名设置为 knode2 并分配一个 IP 为 192.168.0.52。现在,让我们安装 k3s。
启动您的第一个工作节点并 ssh 进入它
ssh pi@knode1在 Pi 上,我们将像以前一样安装 k3s,但我们将为安装程序提供额外的参数,以使其知道我们正在安装工作节点,并且我们希望加入现有集群
curl -sfL http://get.k3s.io | K3S_URL=https://192.168.0.50:6443 \
K3S_TOKEN=join_token_we_copied_earlier sh -将 join_token_we_copied_earlier 替换为“提取加入令牌”部分中的令牌。对 knode2 重复这些步骤。
从我们的 PC 访问集群
每次我们想要检查或修改我们的集群时都必须 ssh 到主节点来运行 kubectl 会很烦人。所以,我们想把 kubectl 放在我们的 PC 上。但首先,让我们从我们的主节点获取我们需要的配置信息。 Ssh 进入 kmaster 并运行
sudo cat /etc/rancher/k3s/k3s.yaml复制此配置信息并返回到您的 PC。为配置创建一个目录
mkdir ~/.kube将复制的配置保存为 ~/.kube/config。现在编辑文件并更改行
server: https://:6443为
server: https://kmaster:6443出于安全目的,将文件的读/写权限限制为您自己
chmod 600 ~/.kube/config现在让我们在我们的 PC 上安装 kubectl(如果您还没有安装)。Kubernetes 网站有说明,介绍如何为各种平台执行此操作。由于我运行的是 Linux Mint,一种 Ubuntu 衍生产品,我将在此处显示 Ubuntu 说明
sudo apt update && sudo apt install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | \
sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt update && sudo apt install kubectl如果您不熟悉,上面的命令会为 Kubernetes 添加一个 Debian 存储库,获取其 GPG 密钥以确保安全,然后更新软件包列表并安装 kubectl。现在,我们将通过标准软件更新机制获得有关 kubectl 的任何更新的通知。
现在我们可以从我们的 PC 检出我们的集群了!运行
kubectl get nodes您应该看到类似这样的内容
NAME STATUS ROLES AGE VERSION
kmaster Ready master 12m v1.14.3-k3s.1
knode1 Ready worker 103s v1.14.3-k3s.1
knode1 Ready worker 103s v1.14.3-k3s.1恭喜!您拥有一个正常工作的 3 节点 Kubernetes 集群!
k3s 的奖励
如果您运行 kubectl get pods --all-namespaces,您将看到一些额外的 Traefik pod。Traefik 是一个反向代理和负载均衡器,我们可以用它来从单个入口点将流量定向到我们的集群中。Kubernetes 允许这样做,但不直接提供这样的服务。默认情况下安装 Traefik 是 Rancher Labs 的一个很好的举措。这使得默认的 k3s 安装完全完整并且可以立即使用!
我们将在未来的文章中探索使用 Traefik 通过 Kubernetes ingress 规则并将各种好东西部署到我们的集群中。敬请关注!

10 条评论