9

超强教程!在树莓派上构建多节点K8S集群!

 3 years ago
source link: http://dockone.io/article/10424
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在很长一段时间里,我对于在树莓派上搭建Kubernetes集群极为感兴趣。在网络上找到一些教程并且跟着实操,我已经能够将Kubernetes安装在树莓派上,并在三个Pi集群中工作。然而,在master节点上对于RAM和CPU的要求已经超过了我的树莓派所能提供的,因此在执行Kubernetes任务时性能并不优异。这也使得就地升级Kubernetes成为不可能。

所以,我看到业界应用最为广泛的Kubernetes管理平台创建者Rancher Labs推出轻量级Kubernetes发行版K3s时,十分兴奋,它专为资源受限场景而设计,还针对ARM处理器进行了优化,这使得在树莓派上运行Kubernetes更加可行。在本文中,我将使用K3s和树莓派创建一个Kubernetes集群。

前期准备

要创建本文中的Kubernetes集群,我们需要准备:

  • 至少一个树莓派(带有SD卡和电源适配器)
  • 以太网电缆
  • 将我们所有的树莓派连接在一起的交换机或路由器

我将从网络上安装K3s,所以需要通过路由器访问互联网。

集群架构

对于这一集群,我们将使用3个树莓派。第一个树莓派我把它命名为kmaster,并分配一个静态IP 192.168.0.50(因为我的本地网络是192.168.0.0/24)。第一个worker节点(也就是第二个Pi),我们称它为knode1并分配IP 192.168.0.51。最后一个worker节点,我们称它为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

安装master节点

现在我们已经准备好,可以开始安装master节点。第一步,安装最新的Raspbian镜像。我之前写过一篇详细的文章介绍为什么需要最新的镜像,感兴趣的朋友可以在访问链接查看:

https://carpie.net/articles/he ... ition

接下来,开始安装Raspbian,启用SSH server,为kmaster设置主机名称并分配静态IP 192.168.0.50。

既然Raspbian已经在master节点上安装完毕,让我们启用我们的master Pi并通过ssh进入它:

ssh pi@kmaster

现在我们要准备安装K3s。在master 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

提取join token

我们想要添加一对worker节点。在这些节点上安装K3s,我们需要一个join token。Join token存在于master节点的文件系统上。让我们复制并将它保存在某个地方,稍后我们可以获取它:

sudo cat /var/lib/rancher/k3s/server/node-token

安装worker节点

为两个worker节点获取一些SD卡,并在每个节点上安装Raspbian。对于其中一个,将主机名设置为knode1并分配IP 192.168.0.51。对于另一个,将主机名设置为knode2并分配IP 192.168.0.52。现在,让我们安装K3s。

启动你的第一个worker节点,并通过ssh进入它:

ssh pi@knode1

在这个Pi上,我们将像之前一样安装K3s,但我们将给安装程序额外的参数,让它了解我们正在安装一个worker节点并且要加入一个现有集群:

curl -sfL http://get.k3s.io | K3S_URL=https://192.168.0.50:6443 \

K3S_TOKEN=join_token_we_copied_earlier sh -

使用从上个部分提取出来的join token替换 join_token_we_copied_earlier 。为knode2重复这些步骤。

从我们的PC访问集群

每当我们要检查或修改集群时,都必须通过SSH到master节点来运行kubectl,这很烦人。因此,我们像将kubectl放在我们的PC上,但是首先让我们从master节点获取所需的配置信息。通过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

Congratulations!你现在已经有一个正在工作的3个节点的Kubernetes集群!

使用K3s的附加 bonus

如果你运行kubectl get pods --all-namespaces,你将看到一些Traefik的额外pod。Treafik是一个反向代理和负载均衡器,我们可以使用它从单个入口点将流量引导到我们的集群中。Kubernetes当然也可以安装Traefik,但不是默认提供的。所以K3s中默认提供Traefik是一个非常棒的设计!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK