前言
在搭建 Kubernetes
集群时,国内用户遇到的第一个问题就是无法访问 gcr.io 镜像,直接导致无法初始化集群也就没有办法成功搭建 Kubernetes
集群。
通常要解决此问题有几种方法:
- 通过梯子直接访问 gcr.io 镜像。由于目前对梯子的打击力度很大,使用这种方式很难。
- 通过公开的镜像服务器寻找别人搜集的镜像进行下载。缺点是匹配到的镜像版本很难找到。
- 通过国内的 gcr.io 镜像的代理进行访问。笔者尝试使用这种方法,但是由于代理失效也无法访问到镜像
- 通过将 gcr.io 的镜像搬运到
Docker hub
上进行访问。
由于前三种方法都存在一些问题。本文主要介绍第四种方法,其实现方式是通过 Docker Hub 的自动构建功能,结合 Github 仓库使用 Dockerfile
文件构建镜像。镜像完成后,可以进行 pull
和 tag
修改从而完成 Kubernetes
集群的搭建。
Kubernetes 组件
下面我们会以 kube-apiserver
的 1.18.3
版本为例详细介绍。同时列出了搭建 v1.18.3
的 kubernetes 集群所需要的组件以及事先创建好的 Docker Hub 访问地址。
k8s.gcr.io/kube-apiserver:v1.18.3
docker pull jason88/kube-apiserver:1.18.3
k8s.gcr.io/kube-controller-manager:v1.18.3
docker pull jason88/kube-controller-manager:v1.18.3
k8s.gcr.io/kube-scheduler:v1.18.3
docker pull jason88/kube-scheduler:v1.18.3
k8s.gcr.io/kube-proxy:v1.18.3
docker pull jason88/kube-proxy:v1.18.3
k8s.gcr.io/pause:3.2
docker pull jason88/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
docker pull jason88/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7
docker pull jason88/coredns:1.6.7
配置
前提条件:
需要在Docker Hub (https://hub.docker.com/) 和Github(https://github.com/) 上注册帐号并登陆。
在 Github 上创建仓库。
-
1.1 在
+
号上点击New repostory
。
-
1.2 在新建页面的
Repository name
列输入仓库名称,点击"create reposifoty"
完成创建。示例中的名称为k8s-images
。
创建新文件用来存放 Dockerfile
命令。
-
1.3 仓库页面,点击
"creating a new file"
。
-
1.4 在页面编辑页面,输入文件名称
kube-apiserver:v1.18.3
,在文件中输入内容为FROM gcr.io/google-containers/kube-apiserver:v1.18.3
。点击页面下方的"Commit new file"
。
-
1.5 返回仓库查看创建的文件。
-
1.6 按照以上步骤创建剩下的组件。
在 Docker Hub 上进行 Github 授权。
-
2.1 打开 帐号的
"Account Settings"
,点击"Linked Accounts"
。
-
2.2 在Github 后面点击
"Connect"
进行相关账户的授权
在 Docker Hub 上创建仓库。
-
2.3 点击页面上方的
"Repositories"
,进入到仓库管理页面。
-
2.4 在点击
"Create Repository"
,在name
栏中输入仓库名称"kube-apiserver"
(建议使用组件名称作为仓库名称)。
-
2.5 在
Build Settings
选项点击github
的图标,选择GitHub帐号和仓库。这里选择k8s-images
仓库,即上面步骤中创建的仓库。 -
2.6 点击
Build Rules
,会出现构建规则选项卡。在Docker Tag
选项输入版本号v1.18.3
,在Dockerfile location
选项卡中输入Github 中创建的文件名称kube-apiserver:v1.18.3
,然后点击Create & Build
。
注:Dockerfile location
选项必须要与Github 中文件名称对应上。
- 2.7 在此仓库的
Builds
页面查看创建进度。
在 Recent Builds
中可以查看构建详情,状态变成 success
后就可以进行下载。
- 2.8 在
tags
中查看镜像的标签信息
结束语
- 镜像制作完成后使用 pull 命令将镜像下载到本地
- 使用tag 命令为镜像重新打标签,标签要和gcr.io 镜像标签一致。