长期以来,我对用一堆廉价的 Raspberry Pi 构建一个 Kubernetes 集群很感兴趣。 按照网络上各种教程,我成功地在一个三节点 Pi 集群中安装并运行了 Kubernetes。 然而,主 节点上的 RAM 和 CPU 要求使我的 Pi 不堪重负。 这导致执行各种 Kubernetes 任务时性能不佳。 这也使得 Kubernetes 的就地升级变得不可能。
因此,我很高兴看到 k3s 项目。 K3s 被誉为轻量级 Kubernetes,适用于资源受限的环境。 它也针对 ARM 处理器进行了优化。 这使得运行基于 Raspberry Pi 的 Kubernetes 集群更加可行。 事实上,我们将在本文中创建一个。
所需材料
要创建本文中描述的 Kubernetes 集群,我们需要:
- 至少一台 Raspberry Pi(带 SD 卡和电源适配器)
- 以太网线
- 一个交换机或路由器,用于将所有 Pi 连接在一起
我们将从互联网安装 k3s,因此它们需要能够通过路由器访问互联网。
我们的集群概述
对于此集群,我们将使用三台 Raspberry Pi。 第一个我们将命名为 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 卡,并在每个 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 允许这样做,但不直接提供此类服务。 Rancher Labs 默认安装 Traefik 是一项不错的举措。 这使得默认的 k3s 安装完全完整且可立即使用!
我们将在未来的文章中探索如何通过 Kubernetes ingress 规则使用 Traefik,并将各种好东西部署到我们的集群中。 敬请关注!
10 条评论