??k3s 是一個(gè)精簡版的k8s轴合,可以安裝到樹莓派上。之前也曾經(jīng)把k8s安裝到3個(gè)樹莓上做一個(gè)集群,但是k8s實(shí)在是一個(gè)吃資源的大戶,安裝完之后樹莓大部分資源都用來跑k8s了春缕, 本想做一些小實(shí)驗(yàn)也只好放棄了。k3s只有40M台囱,運(yùn)行起來要求也低淡溯,我的樹莓就可以利用上了读整。
k3s在樹莓上安裝很簡單
安裝master服務(wù)器
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 找.
??不過因?yàn)橄螺d的文件在國外簿训。可以考慮把https://get.k3s.io 的執(zhí)行腳本下回來,資源文件下回來强品,在本地執(zhí)行膘侮。我比較懶,直接把資源放在我自己的web站點(diǎn)的榛,改動腳本里的GITHUB_URL=https://github.com/rancher/k3s/releases琼了,這樣我的幾個(gè)樹莓批量處理起來就快了。
??安裝很快就完成了夫晌,可能碰到的問題就來了雕薪,如果像我一樣折騰了幾回后,就會碰到worker節(jié)點(diǎn)沒加到集群這種情況晓淀,systemctl status k3s.service 看到如下問題所袁,
msg="Node password rejected, contents of
'/var/lib/rancher/k3s/agent/node-password.txt'
may not match server passwd entry"
這個(gè)比較好解決, cat /var/lib/rancher/k3s/server/cred/node-passwd凶掰,去改worker節(jié)點(diǎn)的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
估計(jì)是鏡像拉不下來懦窘,考慮已經(jīng)機(jī)器得到了鏡像前翎, 我準(zhǔn)備導(dǎo)出一個(gè),到此我才發(fā)現(xiàn)k3s默認(rèn)用的不是docker用的是Containerd 畅涂,ok沒用過Containerd 港华,正好探索一下。資料不多午衰,半摸半試
Containerd 導(dǎo)出 鏡像
ctr images export pause.tar k8s.gcr.io/pause:3.1
Containerd 導(dǎo)入 鏡像
ctr image import --base-name k8s.gcr.io/pause:3.1 pause.tar
看來如果不想再折騰苹丸,還得熟悉一下Containerd ,不過貌似跟docker差不太多
后補(bǔ):
- k3s支持使用多種容器運(yùn)行時(shí)環(huán)境,但是server默認(rèn)以containerd作為運(yùn)行時(shí)苇经,不支持更改赘理。agent節(jié)點(diǎn)可以使用contained也可以使用docker。
- 在邊緣計(jì)算中扇单,往往涉及到訪問硬件資源商模,如何從容器內(nèi)部訪問硬件資源?
Linux系統(tǒng)中蜘澜,所有的硬件資源都體現(xiàn)為/dev/目錄下面的一個(gè)設(shè)備施流,因此只要能夠訪問/dev/目錄下面的設(shè)備文件即可,有的同學(xué)會說鄙信,那是不是將/dev/目錄掛載到容器里面就可以了呢瞪醋?經(jīng)過我的實(shí)踐證明不行,因?yàn)閽燧d到容器里面装诡,即便容器里面是以root用戶運(yùn)行银受,然是仍舊有可能無法訪問一些特殊資源文件践盼,也就是說容器中的“root”用戶與宿主機(jī)的root用戶在訪問權(quán)限上還是有差別。只需要將容器的運(yùn)行模式設(shè)置為“privileged”即可
resources:
limits:
cpu: 300m
memory: 512Mi
requests:
cpu: 300m
memory: 512Mi
securityContext:
privileged: true