对于想要上k8s大船的同学们来说,一路上有几个大坑是避不掉的

镜像拉取困难


【资料图】

各种k8s以外的第三方组件谁是谁,要不要安装,怎么安装,怎么配置?

各种工具平台,都号称能管好k8s,选哪个?

这些坑,在我的k8s之路上都遇到过,解决过,在我看来,microk8s解决得最好。

最为简便的用上k8s的办法,应该是docker desktop,直接安装了启用k8s就行,但是很耗内存,应该也是走的虚拟机的实现方式。但是canonical的实现方式不一样,基于snap构建的microk8s,封装了kubelitekubectl,容器引擎用的是containerd。containerd好呀,好就好在它支持tag操作,使用起来和docker差别几乎没有,便于曲线救国拉镜像。

安装

安装很简单,只要使用如下命令即可

上面安装的是最新版本的,如果需要安装指定版本的,可以先使用命令看一下snap提供了哪些选择

然后在安装命令后面加上--channel参数即可,像下面这样

snap现在号称支持了其他linux系统,但是对于microk8s来说,非ubuntu系统上snap安装的版本启动会出问题,粗看下来应该是python版本的差异导致,所以还是要统一使用ubuntu的版本。

snap默认是自动更新应用的,每次更新后所需的镜像不一定保证相同,所以需要禁用其对于microk8s的自动更新,这是长期使用最值得注意的事,具体做就是将microk8s从snap自动更新中标记出来:

如果对于已经安装的版本不满意,想要换个版本,同样也是使用refresh子命令

启动

安装完成之后不用急着启动,因为要拉取镜像。microk8s已经体会到了中国区用户拉取镜像的痛苦,所以它对于k8s的镜像要求不多,完整的镜像列表在github中可以看到:https://github.com/canonical/microk8s/blob/1.22/build-scripts/images.txt

根据这个列表,可以在docker hub中找到对应的替代,我找到的替代如下

docker.io/calico/cni:v3.19.1

docker.io/calico/kube-controllers:v3.17.3

docker.io/calico/node:v3.19.1

docker.io/calico/pod2daemon-flexvol:v3.19.1

docker.io/cdkbot/hostpath-provisioner:1.1.0

docker.io/coredns/coredns:1.8.0

无需替代

k8s.gcr.io/ingress-nginx/controller:v1.2.0

=> docker.io/giantswarm/ingress-nginx-controller:v1.2.0

k8s.gcr.io/metrics-server/metrics-server:v0.5.0

=> docker.io/bitnami/metrics-server:0.5.0

k8s.gcr.io/pause:3.1

=> docker.io/rancher/pause:3.1

只需要3个镜像需要替换,使用microk8s.ctr i pull命令拉取下来之后,再使用microk8s.ctr i tag改头换面就行了。之后再启动microk8s就基本没什么问题了。

如果你在一台机器上把镜像下载完成了,启动起来了,其他机器上不需要再逐一操作了,使用microk8s.images export-localmicrok8s.images import就可以把本机的镜像导出为tar文件并复制到其他机器上去导入。

最后,使用microk8s.dashboard-proxy就可以部署并代理k8s的dashboard出来。

感言

并不是说不需要理解k8s本身和其他组件原理了,microk8s只是将门脸做得简洁了,登堂入室还是靠继续努力。

如果出了问题,记得到官方文档里去翻翻,https://microk8s.io/docs

关键词: