k3s 是虚拟化编排工具 Kubernetes(k8s) 的轻量版,去掉了很多不必要的冗余组件,让 NAS 本地可以跑起一套单节点的集群服务。
大家都知道威联通的 Container Station 十分强大,它不仅支持我们常用的 docker 容器运行时(runtime),更是支持 LXD、KATA、K3S。

LXD 是基于 Linux 的原生虚拟化技术,它支持运行系统级的虚拟化环境。
Kata 是基于 Hypervisor 的虚拟化技术,内核完全独立,并且支持硬件级的虚拟化。
Docker 就是我们最常用的应用虚拟化,操作简单,compose 多服务单点管理也很方便。

而在三个容器运行时之上,威联通 Container Station 支持的 K3S,则满足了将威联通作为虚拟化编排测试、管理服务器。
先说下个人认为威联通 K3S 的意义:
1️⃣ 单主机也支持集群化调用,通过 POD、Deployment 实现更精细的生命周期管理。
2️⃣ 支持使用 Kubernetes 仪表板或 kubectl 命令部署 Kubernetes 工作负载并管理应用程序。
3️⃣ 独立的命名空间,容器可以实现自动负载和主备切换。
4️⃣ 适合对容器编排有需求的用户入手体验,不需要额外的高性能服务器,就可以学习 k8s 生态。
回到 K3S 的启动问题。为什么标题是说解决呢?
这是因为目前 docker 、k8s 的注册表全面被禁止访问了。而威联通的 K3S 为了确保服务运行,又不允许我们进行修改,这就导致网络无法访问无法启动 K3S 应用,无法打开控制面板,如此强大的功能成为了一个摆设。
目前网上,没有任何关于威联通 K3S 使用的教程,而原生系统也不支持修改 Containerd 的镜像源( 重启K3S 会复写)。
不过还在天无绝人之路,在我研究了几天之后,终于找到了解决威联通 K3S 无法使用的问题,希望对有这个需求的人提供一种思路。

首先在存储库里,添加 docker hub 的镜像加速地址,确保容器镜像正常下载。

接着开启威联通的 SSH 功能,登录并批量拉取以下镜像,这些都是 K3S 内部启动需要使用到的镜像。🔻指令,直接复制到 SSH 回车。
docker pull rancher/pause:3.1 && \
docker pull rancher/klipper-helm:v0.5.0-build20210505 && \
docker pull rancher/coredns-coredns:1.8.3 && \
docker pull rancher/metrics-server:v0.3.6 && \
docker pull rancher/klipper-lb:v0.2.0 && \
docker pull rancher/local-path-provisioner:v0.0.19 && \
docker pull rancher/library-traefik:2.4.8 && \
docker pull kubernetesui/metrics-scraper:v1.0.6 && \
docker pull kubernetesui/dashboard:v2.2.0
接着在 Container Station 界面切换到 Kubemetes,勾选启动 K3S 轻量级 Kubernets并应用,系统会自动下载rancher/k3s 镜像并启动 K3S 容器。
全部下载完成以后,可以看到一共是 10个 K3S 的镜像。

继续在 SSH 界面,输入以下指令,将除了 rancher/k3s 之外的 9个镜像一起打包成 .tar 压缩包。
🔻指令,直接复制到 SSH 回车。
docker save rancher/pause:3.1 rancher/klipper-helm:v0.5.0-build20210505 rancher/coredns-coredns:1.8.3 rancher/metrics-server:v0.3.6 rancher/klipper-lb:v0.2.0 rancher/local-path-provisioner:v0.0.19 rancher/library-traefik:2.4.8 kubernetesui/metrics-scraper:v1.0.6 kubernetesui/dashboard:v2.2.0 -o /share/Public/k3s.tar

接着把这个包复制到 K3S 容器内的根目录里,指令 dokcer cp /share/Public/k3s.tar qnap-k3s:/
然后进入容器内部 docker exec -it qnap-k3s /bin/sh,将k3s.tar包解压为镜像ctr -n k8s.io images import /k3s.tar
完成之后,使用 kubectl 指令将异常 POD 全部删除,让 K3S 可以使用本地镜像全部启动新服务。kubectl delete pods -A --field-selector=status.phase=Pending
然后使用指令 kubectl get pods -A 查看 POD 状态,像我下面这种的就说明正常了。

最后回到威联通的 Container Station 界面,切换到 Kubermetes 标签,可以看到右侧中的 部署 K8S WEB 界面 已经正常了,会出现一个本地的 URL,点击就可以访问 K3S 的控制台面板。

由于使用的是 HTTPS,如果切换以后出现不安全提醒,点击高级,然后在网页当前页面键盘输入 thisisunsafe 以跳过 HTTPS 安全检测。
这个页面里,需要我们输入鉴权信息,支持Token、Config 两种。

可以在上个截图里下载 yaml/token,个人建议使用第二种 Kubeconfig 登录。

好了,至此威联通的 K3S 服务正式修复完成,我们后续就可以在这里体验 K8S 的集群化服务,也可以用于自身学习。

更多关于 K8S/K3S 的内容,本文就不再赘述了,这个网上都有教程。我们还是聚焦如何解决威联通自身 K3S 服务顺利启用这件事情上!

最后,还是要说一下威联通 Container Station 的强大,也呼吁感兴趣的小伙伴可以多去体验一下 LXD 的好处,OS 系统的虚拟化可以实现比 Docker 更强大的应用。

以及官方提供的应用程序模板(Docker/LXD),这个类似于 docker 应用中心,直接套用互联网上的社群模板,我们就不需要再去找各种各样的应用了,直接一键点击部署。
