墙内K8s部署¶
备注
本文是一些实践经验和想法,并不是 Kubernetes 的真正技术,然而对于墙内技术工作者来说又是不得不面对的挑战。
墙内部署Kubernetes: 不能说的秘密¶
使用国内的镜像源搭建 kubernetes(k8s)集群 方法如下:
先使用 kubeadm 按照正常流程构建集群,显然下载镜像会失败
执行
kubeadm
检查当前集群需要的镜像列表:
kubeadm config images list
根据输出镜像列表以及对应版本信息,将
docker pull
命令的镜像改写成阿里云镜像registry来下载K8s镜像为下载好的镜像打上对应的
k8s.gcr.io/XXXX
标签,这样就相当于直接从Google的镜像registry下载了正确的镜像继续完成K8s部署
lank8s.cn¶
在墙内部署Kubernetes以及很多原生应用是非常麻烦的,有一些技术爱好者,例如 申远鹏 创建了一个 lank8s.cn服务 为墙内Kubernetes用户提供 Kubernetes基础镜像
墙内镜像网站。这个项目弥补了微软镜像代理节点 azk8s.cn
从2020年上半年开始只对微软云的国内服务器提供服务的缺憾。( 微软azure.cn文档 GCR Proxy Cache 帮助 介绍了 Proxy Server仅限于 Azure China IP
使用,不再对外提供服务 ,以及使用方法)
备注
如果是自建自用服务(不对外),可以采用 Squid父级socks代理 方式,在墙内和墙外构建一个代理通道,通过 配置Docker使用代理 / containerd代理 / helm代理 等组合配置,实现全系列穿墙部署Kubernetes
不过,作为个人项目 lank8s.cn服务 依然存在不稳定的问题,我在一个项目部署上遇到一个问题,同事使用 Kubespray 部署Kubernetes使用了 lank8s.cn服务 ,然而在升级更新时遇到报错:
failed to pull image "lank8s.cn/pause:3.2": failed to resolve image "lank8s.cn/pause:3.2": no available registry endpoint: unexpected status code https://lank8s.cn/v2/pause/manifests/3.2: 503 Service Unavailable
实际上是 lank8s.cn服务 服务器后端异常,这卡住了我的应用升级重启
使用国内的镜像源搭建 kubernetes(k8s)集群 采用的方法提示了我,可以从Google官方下载好镜像(如果你可以翻墙)或者阿里云镜像服务器(如果你的服务器能够访问阿里云)下载:
检查集群部署需要的镜像:
kubeadm config images list
显示出当前集群需要的镜像列表:
k8s.gcr.io/kube-apiserver:v1.18.20
k8s.gcr.io/kube-controller-manager:v1.18.20
k8s.gcr.io/kube-scheduler:v1.18.20
k8s.gcr.io/kube-proxy:v1.18.20
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
由于我们系统缺少
lank8s.cn/pause:3.2
实际上就是k8s.gcr.io/pause:3.2
,所以我们下载阿里云提供的k8s.gcr.io/pause:3.2
镜像:
ctr -n k8s.io images pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
此时系统还看不到
lank8s.cn/pause:3.2
,我们需要给下载的阿里云对应镜像打上同名tag
(当初同事部署Kubernetes集群的时候应该是指定了):
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
ctr images tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
似乎早期版本 ctr
不支持 tag
命令,提示错误:
No help topic for 'tag'
结合 docker images
和 ctr images
实现镜像下载导入¶
采用变通方法,先导出再导入,导入时加上标签(晕倒,导出镜像没有成功):
ctr -n k8s.io images export pause_3.2.tar registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
报错:
ctr: export failed: content digest sha256:bbb7780ca6592cfc98e601f2a5e94bbf748a232f9116518643905aa30fc01642: not found
怎么办呢? 我改为使用 Docker Atlas 命令来下载镜像,然后通过 无需Docker Registry传输Docker镜像 相似方法,利用 docker
功能丰富的镜像管理命令,先导出镜像,再用 ctr
导入镜像到 containerd运行时(runtime) (是的, ctr
导入命令可以使用):
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 lank8s.cn/pause:3.2
此时检查 docker images
可以看到:
REPOSITORY TAG IMAGE ID CREATED SIZE
lank8s.cn/pause 3.2 80d28bedfe5d 3 years ago 683 kB
registry.cn-hangzhou.aliyuncs.com/google_containers/pause 3.2 80d28bedfe5d 3 years ago 683 kB
docker
导出镜像:
docker save -o pause_3.2.tar lank8s.cn/pause:3.2
现在使用 ctr
导入 docker
保存的镜像 :
ctr -n k8s.io images import pause_3.2.tar
此时就会看到导入的是 lank8s.cn/pause:3.2
:
unpacking lank8s.cn/pause:3.2 (sha256:59fa8c6c7377bafde05000f2b3b182507370313e420e7bf74822ef6a39e51222)...done
现在使用 ctr -n k8s.io images ls | grep lank8s.cn
就能够看到我们需要的镜像标记
参考¶
国内镜像列表 非常有用的镜像网站列表,需要时可以参考