要部署kubernetes的话,无论手动安装kubernetes还是使用kubeadm安装kubernetes,都需要以下各模块的docker镜像。而国内的网络被墙的原因,在搭建环境时,经常无法pull到这些镜像。那我们可以考虑曲线救国,利用Docker Hub搭建自己的镜像仓库。
通过科学上网的方式可以查看到kubernetes各个组件的docker镜像,通过这些镜像我们使用docker hub来构建自定义的k8s镜像。
k8s镜像官方地址:https://console.cloud.google.com/gcr/images/google-containers/GLOBAL?location=GLOBAL&project=google-containers
要使用docker hub来获取kubernetes镜像的话,前提要有github和docker hub的账号(注册即可)。docker hub通过关联github后自动构建docker镜像。在docker hub中构建好docker镜像后,就可以使用docker pull 拉取这些镜像并对拉取下来的镜像做tag处理便可正式部署kubernetes了。
步骤演示如下:
1、登录github,创建仓库名称为mykubernetes
2、克隆这个仓库,以备后期上传kubernetes各个组件的dockerfile文件使用
[root@linux-node2 ~]# git clone https://github.com/goser1158/mykubernetes.git
在clone的时候可能会报错,解决办法:yum update -y nss curl libcurl
3、编写kubernetes各个组件docker镜像对应的各个dockerfile
[root@linux-node2 ~]# cd mykubernetes/ #创建各个组件dockerfile文件对应的目录 [root@linux-node2 mykubernetes]# mkdir {kube-apiserver-amd64,kube-controller-manager-amd64,kube-scheduler-amd64,kube-proxy-amd64,etcd-amd64,pause-amd64,kubernetes-dashboard-amd64,k8s-dns-sidecar-amd64,k8s-dns-kube-dns-amd64,k8s-dns-dnsmasq-nanny-amd64,flannel} #编写各个镜像对应的Dockerfile文件 [root@linux-node2 mykubernetes]# cat kube-apiserver-amd64/Dockerfile FROM gcr.io/google_containers/kube-apiserver-amd64:v1.10.1 MAINTAINER goser [root@linux-node2 mykubernetes]# cat kube-scheduler-amd64/Dockerfile FROM gcr.io/google_containers/kube-scheduler-amd64:v1.10.1 MAINTAINER goser [root@linux-node2 mykubernetes]# cat kube-controller-manager-amd64/Dockerfile FROM gcr.io/google_containers/kube-controller-manager-amd64:v1.10.1 MAINTAINER goser [root@linux-node2 mykubernetes]# cat kube-proxy-amd64/Dockerfile FROM gcr.io/google_containers/kube-proxy-amd64:v1.10.1 MAINTAINER goser [root@linux-node2 mykubernetes]# cat etcd-amd64/Dockerfile FROM gcr.io/google_containers/etcd-amd64:3.1.12 MAINTAINER goser [root@linux-node2 mykubernetes]# cat kubernetes-dashboard-amd64/Dockerfile FROM gcr.io/google_containers/kubernetes-dashboard-amd64:v1.8.3 MAINTAINER goser [root@linux-node2 mykubernetes]# cat k8s-dns-dnsmasq-nanny-amd64/Dockerfile FROM gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.8 MAINTAINER goser [root@linux-node2 mykubernetes]# cat k8s-dns-kube-dns-amd64/Dockerfile FROM gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.8 MAINTAINER goser [root@linux-node2 mykubernetes]# cat k8s-dns-sidecar-amd64/Dockerfile FROM gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.8 MAINTAINER goser [root@linux-node2 mykubernetes]# cat pause-amd64/Dockerfile FROM gcr.io/google_containers/pause-amd64:3.1 MAINTAINER goser [root@linux-node2 mykubernetes]# cat flannel/Dockerfile FROM quay.io/coreos/flannel:v0.9.1-amd64 MAINTAINER goser
说明:v1.10.1是镜像tag,这里你应该修改为你需要的版本号。例如kubernetes v1.10.1对应的kubernetes-apiserver-amd64版本为v1.10.1
4、创建好Dockerfile文件后,将其push到自己新建的github仓库mykubernetes中
[root@linux-node2 mykubernetes]# git add . [root@linux-node2 mykubernetes]# git commit -m "add kubernetes:v1.10.1-images Dockerfile" [root@linux-node2 mykubernetes]# git remote add origin https://github.com/goser1158/mykubernetes.git [root@linux-node2 flannel]# git push -u origin master
5、在GitHub上可以查询到你的commit上传的文件
6、登录Docker Hub配置Automated Build镜像
点击Create下的Create Automated Build
这个时候会提示要求绑定github仓库,如果之前未绑定,会提示绑定,按照步骤提示操作即可
选择你创建的GitHub上的仓库mykubernetes
填写Name及Short Description,点击Create按钮,切换到Build Setting栏
填写Dockerfile Location及Docker Tag Name,点击Save Change,然后点击上方的Trigger,就触发构建镜像。
切换到Build Details栏,会看到Queue->Building->Success或者Error
这样一个kube-apiserver-amd64:v1.10.1的docker镜像使用docker hub的自动构建完成了,当你修改了Dockerfile文件重新commit到GitHub上时,Docker Hub就自动开始构建新的镜像。
按照构建kube-apiserver-amd64:v1.10.1的镜像方式构建kubernetes其他组件的docker镜像。在kubernetes各个组件的docker镜像构建完成后,就可以正式部署kubernetes了
7、将构建出的Kubernetes镜像pull到本地主机,并重新tag为kubernetes要求定义的镜像名
创建一个可以拉取kubernetes组件docker镜像同时修改tag的脚本pull-k8s.sh
[root@linux-node2 ~]# vim pull-k8s.sh #!/bin/bash images=(kube-proxy-amd64:v1.10.1 kube-scheduler-amd64:v1.10.1 kube-controller-manager-amd64:v1.10.1 kube-apiserver-amd6 4:v1.10.1 etcd-amd64:3.1.12 pause-amd64:3.1 kubernetes-dashboard-amd64:v1.8.3 k8s-dns-sidecar-amd64:1.14.8 k8s-dns-kube -dns-amd64:1.14.8 k8s-dns-dnsmasq-nanny-amd64:1.14.8) for image in ${images[@]} ; do docker pull goser/$image docker tag goser/$image gcr.io/google_containers/$image docker rmi goser/$image done # pull flannel && tag flannel docker pull goser/flannel:v0.9.1-amd64 && docker tag goser/flannel:v0.9.1-amd64 quay.io/coreos/flannel:v0.9.1-amd64 && docker rmi goser/flannel:v0.9.1-amd64
运行pull-k8s.sh后,检查pull的镜像
[root@linux-node2 ~]# sh pull-k8s.sh [root@linux-node2 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE quay.io/coreos/flannel v0.9.1-amd64 c309cd26d428 8 hours ago 51.3 MB gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 1.14.8 14a4f52fa725 8 hours ago 40.9 MB gcr.io/google_containers/kubernetes-dashboard-amd64 v1.8.3 f9b7e7a05753 8 hours ago 102 MB gcr.io/google_containers/etcd-amd64 3.1.12 2f7b9681bfac 9 hours ago 193 MB gcr.io/google_containers/kube-proxy-amd64 v1.10.1 3f1425ae677b 9 hours ago 97.1 MB gcr.io/google_containers/kube-controller-manager-amd64 v1.10.1 a6368b54f5e1 9 hours ago 148 MB gcr.io/google_containers/kube-apiserver-amd64 v1.10.1 7c9017884357 9 hours ago 225 MB gcr.io/google_containers/kube-scheduler-amd64 v1.10.1 34dea3bc0ba7 9 hours ago 50.4 MB gcr.io/google_containers/pause-amd64 3.1 c2b09938bcb8 9 hours ago 742 kB gcr.io/google_containers/k8s-dns-kube-dns-amd64 1.14.8 1f5bd4ca55be 9 hours ago 50.5 MB gcr.io/google_containers/k8s-dns-sidecar-amd64 1.14.8 ff06e2ddc9fe 9 hours ago 42.2 MB
8、pull完kubernetes各个组件的docker镜像后,就可以正式部署kubernetes了。。。
至于如何部署kubernetes,参考:https://www.cnblogs.com/goser/articles/9361338.html