[环境]
树莓派4,4GB版本。单节点的k8s还是要多一些内存。
系统ubuntu20.04,arm64版本
docker 19.03
k3s 1.17.4+k3s1
[步骤]
安装ubuntu20.04
之前的版本存在不能完全利用3G以上内存的问题,在ubuntu20.04上都不存在,放心的装。在官网下载arm64版本,烧录刀tf卡带,等待开机 https://ubuntu.com/download/raspberry-pi
ubuntu镜像源
用vim或者sed在 /etc/apt/sources.list 中修改镜像源为阿里云,20.04的代号就是focal
https://mirrors.aliyun.com/ubuntu-ports/
安装桌面
本想着支持国产,用个优麒麟的,奈何arm64的beta版本不给力,还是原生的好,挑一个xubuntu
sudo apt-get update
sudo apt-get install xubuntu-desktop
ubuntu 的网络配置从18以后就改成了netplan,这里用的wifi,配置如下,把自己wifi名和密码填入即可
安装docker19.03
k3s默认使用的containerd,对这玩意不熟悉,还是上docker。ubuntu20的docker-ce镜像源还没出,先用18的顶着。在/etc/apt/sources.list中加上
deb https://mirrors.aliyun.com/docker-ce/linux/ubuntu/bionic stable
sudo apt-get update
sudo apt-cache madison docker-ce
apt install docker-ce
修改docker配置,新建 /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {"max-size": "100m","max-file": "5"},
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}
由于arm64版的ubuntu20.04上默认没有开启cgroup memory support,在启动k3s的时候会启动失败,需要在 /boot/firmware/cmdline.txt 中最后添加显式开启
cgroup_memory=1 cgroup_enabel=memory
然后reboot,docker info就正常了
离线安装k3s
鉴于国内github访问的速度,用离线方式安装k3s更合适。访问 https://github.com/rancher/k3s/releases/tag/v1.17.4+k3s1 并参考离线安装文档 https://rancher.com/docs/k3s/latest/en/installation/airgap/
下载 k3s-airgap-images-arm64.tar 和 k3s-arm64 文件,远程登陆树莓派4,并通过lszrz的rz传输这两个文件到 /home/ubuntu 目录下,导入docker images
sudo cp k3s-arm64 /usr/local/bin/k3s
sudo chmod +x /usr/local/bin/k3s
sudo mkdir -p /var/lib/rancher/k3s/agent/images/
sudo cp ./k3s-airgap-images-arm64.tar /var/lib/rancher/k3s/agent/images/
sudo docker load -i /var/lib/rancher/k3s/agent/images/k3s-airgap-images-arm64.tar
ubuntu中自带firefox,访问github获取和保存安装脚本https://github.com/rancher/k3s/blob/v1.17.4%2Bk3s1/install.sh
保存至ubuntu任意目录,这边还是用/home/ubuntu目录,指明离线安装,并将runtime改成docker
chmod +x install.sh
INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC="--docker" ./install.sh
然后这个精简版的k8s就可以使用了,service k3s status
server中自带了client和kubectl,可以直接用,单节点的k3s就安装好了。
部署第一个应用
su -
docker pull nextcloud
kubectl create namespace nextcloud
kubectl create deployment nextcloud --image=nextcloud -n nextcloud
kubectl expose deployment nextcloud -n nextcloud --port=80 --name=nextcloud