长期以来,我对使用一堆廉价的树莓派构建 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://localhost: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 条评论