@HankChow
https://linux.cn/article-12049-1.html
This commit is contained in:
Xingyu Wang 2020-03-29 12:18:53 +08:00
parent c80ab10a57
commit 622346acfd

View File

@ -1,29 +1,32 @@
[#]: collector: (lujun9972)
[#]: translator: (HankChow)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-12049-1.html)
[#]: subject: (Run Kubernetes on a Raspberry Pi with k3s)
[#]: via: (https://opensource.com/article/20/3/kubernetes-raspberry-pi-k3s)
[#]: author: (Lee Carpenter https://opensource.com/users/carpie)
使用 K3s 在树莓派上运行 Kubernetes 集群
======
> 跟随接下来的介绍,自己搭建一个三节点的 Kubernetes 集群。
![A ship wheel with someone steering][1]
> 跟随接下来的介绍,自己搭建一个三节点的 Kubernetes 集群。
![](https://img.linux.net.cn/data/attachment/album/202003/29/121559p44e3dfrerf3zver.jpg)
我对在树莓派上搭建 [Kubernetes][2] 集群已经感兴趣很长时间了,只要照着网上的教程,我可以在由三个树莓派组成的集群中搭建一套 Kubernetes 并正常运行。但在这种情况下,主节点上的内存和 CPU 资源捉襟见肘,执行 Kubernetes 任务的时候往往性能不佳,想要升级 Kubernetes 就更不可能了。
这个时候,我发现了 [K3s][3] 这个项目。K3s 誉为可用于资源受限环境下的轻量级 Kubernetes它还针对 ARM 处理器做出了优化,这让 Kubernetes 集群可以在树莓派上运行得更好。在下文中,我们将会使用 K3s 来创建一个 Kubernetes 集群。
这个时候,我非常激动地发现了 [K3s][3] 这个项目。K3s 被誉为在可用于资源受限环境下的轻量级 Kubernetes它还针对 ARM 处理器做出了优化,这让 Kubernetes 集群可以在树莓派上运行得更好。在下文中,我们将会使用 K3s 来创建一个 Kubernetes 集群。
- [video](https://youtu.be/6PqxJhV-t1s)
### 准备
要按照本文介绍的方式创建 Kubernetes 集群,首先需要准备:
* 至少一个树莓派(包括 SD 卡和电源)
* 网线
* 将所有树莓派连接到一起的交换机或路由器
* 至少一个树莓派(包括 SD 卡和电源)
* 网线
* 将所有树莓派连接到一起的交换机或路由器
我们会通过在线安装的方式安装 K3s因此还需要可以连接到互联网。
@ -35,7 +38,6 @@
为了不需要通过 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
@ -48,20 +50,17 @@ echo -e "192.168.0.52\tknode2" | sudo tee -a /etc/hosts
在主节点上安装 Raspbian 完成后,启动树莓派并通过 `ssh` 连接上去:
```
ssh pi@kmaster
```
执行以下命令安装 K3s
在主节点上执行以下命令安装 K3s
```
curl -sfL https://get.k3s.io | sh -
```
等到命令跑完以后,一个单节点集群就已经运行起来了。还在这个树莓派上执行:
等到命令跑完以后,一个单节点集群就已经运行起来了。让我们检查一下,还在这个树莓派上执行:
```
sudo kubectl get nodes
@ -69,7 +68,6 @@ sudo kubectl get nodes
就会看到这样的输出:
```
NAME STATUS ROLES AGE VERSION
kmaster Ready master 2m13s v1.14.3-k3s.1
@ -77,8 +75,7 @@ kmaster Ready master 2m13s v1.14.3-k3s.1
### 获取<ruby>连接令牌<rt>join token</rt></ruby>
之后我们需要部署工作节点。在工作节点上安装 K3s 的时候,会需要用到连接令牌,它放置在主节点的文件系统上。首先把连接令牌打印出来保存以便后续使用:
之后我们需要部署工作节点。在工作节点上安装 K3s 的时候,会需要用到连接令牌,它放置在主节点的文件系统上。首先把连接令牌保存出来以便后续使用:
```
sudo cat /var/lib/rancher/k3s/server/node-token
@ -90,17 +87,15 @@ sudo cat /var/lib/rancher/k3s/server/node-token
启动主机名为 `knode1` 的树莓派,通过 `ssh` 连接上去:
```
ssh pi@knode1
```
在这个树莓派上,安装 K3s 的过程和之前差不多,但需要另外加上一些参数,表示它是一个工作节点,需要连接到一个已有的集群上:
```
curl -sfL <http://get.k3s.io> | K3S_URL=<https://192.168.0.50:6443> \
K3S_TOKEN=<刚才保存下来的连接令牌> sh -
curl -sfL http://get.k3s.io | K3S_URL=https://192.168.0.50:6443 \
K3S_TOKEN=刚才保存下来的连接令牌 sh -
```
`K3S_TOKEN` 的值需要替换成刚才保存下来的实际的连接令牌。完成之后,在主机名为 `knode2` 的树莓派上重复这个安装过程。
@ -109,20 +104,17 @@ K3S_TOKEN=<刚才保存下来的连接令牌> sh -
现在如果我们想要查看或者更改集群,都必须 `ssh` 到集群的主节点才能使用 `kubectl`,这是比较麻烦的。因此我们会将 `kubectl` 放到 PC 上使用。首先,在主节点上获取一些必要的配置信息,`ssh` 到 `kmaster` 上执行:
```
sudo cat /etc/rancher/k3s/k3s.yaml
```
复制上面命令的输出,创建一个目录用来放置配置文件:
复制上面命令的输出,然后在你的 PC 上创建一个目录用来放置配置文件:
```
mkdir ~/.kube
```
将复制好的内容写入到 `~/.kube/config` 文件中,然后将
将复制好的内容写入到 `~/.kube/config` 文件中,然后编辑该文件,将
```
server: https://localhost:6443
@ -130,26 +122,22 @@ server: https://localhost:6443
改为
```
server: https://kmaster:6443
```
出于安全考虑,只对自己保留这个配置文件的读写权限:
```
chmod 600 ~/.kube/config
```
如果 PC 上还没有安装 `kubectl` 的话就可以开始安装了。Kubernetes 官方网站上有各种平台安装 `kubectl` 的[方法说明][5],我使用的是 Ubuntu 的衍生版 Linux Mint所以我的安装方法是这样的
```
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
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
```
@ -157,14 +145,12 @@ sudo apt update && sudo apt install kubectl
现在在 PC 上就可以查看 Kubernetes 集群了:
```
kubectl get nodes
```
输出大概会是这样:
```
NAME STATUS ROLES AGE VERSION
kmaster Ready master 12m v1.14.3-k3s.1
@ -176,11 +162,10 @@ knode1 Ready worker 103s v1.14.3-k3s.1
### K3s 的彩蛋
如果执行 `kubectl get pods --all-namespaces`,就会看到其它服务的一些 pod比如 [Traefik][6]。Traefik 在这里起到是反向代理和负载均衡器的作用它可以让流量从单个入口进入集群后引导到集群中的各个服务。Kubernetes 支持这种机制,但 Kubernetes 本身不提供这个功能,因此 Traefik 是一个不错的选择K3s 安装后立即可用的优点也得益于此。
如果执行 `kubectl get pods --all-namespaces`,就会看到其它服务的一些 Pod比如 [Traefik][6]。Traefik 在这里起到是反向代理和负载均衡器的作用它可以让流量从单个入口进入集群后引导到集群中的各个服务。Kubernetes 支持这种机制,但 Kubernetes 本身不提供这个功能,因此 Traefik 是一个不错的选择K3s 安装后立即可用的优点也得益于此。
在后续的文章中,我们会继续探讨 Traefik 在 Kubernetes ingress 中的应用,以及在集群中部署其它组件。敬请关注。
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/3/kubernetes-raspberry-pi-k3s
@ -188,7 +173,7 @@ via: https://opensource.com/article/20/3/kubernetes-raspberry-pi-k3s
作者:[Lee Carpenter][a]
选题:[lujun9972][b]
译者:[HankChow](https://github.com/HankChow)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出