k3s 是一个精简版的k8s,可以安装到树莓派上。之前也曾经把k8s安装到3个树莓上做一个集群,但是k8s实在是一个吃资源的大户,安装完之后树莓大部分资源都用来跑k8s了, 本想做一些小实验也只好放弃了。k3s只有40M,运行起来要求也低,我的树莓就可以利用上了。
k3s在树莓上安装很简单
安装master服务器
curl -sfL https://get.k3s.io | sh -
安装worker
curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=XXX sh -
其中的K3S_TOKEN去master的/var/lib/rancher/k3s/server/node-token 找.
不过因为下载的文件在国外。可以考虑把https://get.k3s.io 的执行脚本下回来,资源文件下回来,在本地执行。我比较懒,直接把资源放在我自己的web站点,改动脚本里的GITHUB_URL=https://github.com/rancher/k3s/releases,这样我的几个树莓批量处理起来就快了。
安装很快就完成了,可能碰到的问题就来了,如果像我一样折腾了几回后,就会碰到worker节点没加到集群这种情况,systemctl status k3s.service 看到如下问题,
msg="Node password rejected, contents of
'/var/lib/rancher/k3s/agent/node-password.txt'
may not match server passwd entry"
这个比较好解决, cat /var/lib/rancher/k3s/server/cred/node-passwd,去改worker节点的node-password.txt 就可以了。
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
ssomq Ready worker 32h v1.15.4-k3s.1
mydb Ready worker 32h v1.15.4-k3s.1
rak8s001 Ready master 32h v1.15.4-k3s.1
一切似乎都很顺利,可是总有pod起不来
# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
helm-install-traefik-8v6ql 0/1 Completed 0 30h
coredns-66f496764-5fm9x 1/1 Running 3 30h
svclb-traefik-jrngr 3/3 Running 9 30h
traefik-d869575c8-d5qkk 1/1 Running 3 30h
svclb-traefik-n72c2 3/3 Running 11 30h
svclb-traefik-r45xt 0/3 ContainerCreating 1 30h
估计是镜像拉不下来,考虑已经机器得到了镜像, 我准备导出一个,到此我才发现k3s默认用的不是docker用的是Containerd ,ok没用过Containerd ,正好探索一下。资料不多,半摸半试
Containerd 导出 镜像
ctr images export pause.tar k8s.gcr.io/pause:3.1
Containerd 导入 镜像
ctr image import --base-name k8s.gcr.io/pause:3.1 pause.tar
看来如果不想再折腾,还得熟悉一下Containerd ,不过貌似跟docker差不太多
后补:
- k3s支持使用多种容器运行时环境,但是server默认以containerd作为运行时,不支持更改。agent节点可以使用contained也可以使用docker。
- 在边缘计算中,往往涉及到访问硬件资源,如何从容器内部访问硬件资源?
Linux系统中,所有的硬件资源都体现为/dev/目录下面的一个设备,因此只要能够访问/dev/目录下面的设备文件即可,有的同学会说,那是不是将/dev/目录挂载到容器里面就可以了呢?经过我的实践证明不行,因为挂载到容器里面,即便容器里面是以root用户运行,然是仍旧有可能无法访问一些特殊资源文件,也就是说容器中的“root”用户与宿主机的root用户在访问权限上还是有差别。只需要将容器的运行模式设置为“privileged”即可
resources:
limits:
cpu: 300m
memory: 512Mi
requests:
cpu: 300m
memory: 512Mi
securityContext:
privileged: true