我們知道無論手動安裝kubernetes還是使用kubeadm安裝kubernetes,都需要以下各模塊的docker鏡像。
kube-proxy-amd64 kube-scheduler-amd64 kube-controller-manager-amd64 kube-apiserver-amd64 etcd-amd64 pause-amd64 kubernetes-dashboard-amd64 k8s-dns-sidecar-amd64 k8s-dns-kube-dns-amd64
由於國內的網絡原因,在搭建環境時,經常無法pull到這些鏡像。那我們可以考慮曲線救國,利用Docker Hub搭建自己的鏡像倉庫(當然你也可以在aliyun搭建)
一、前提條件:已註冊GitHub及Docker Hub賬戶
二、基本原理:
1、關聯GitHub,配置Docker Hub自動構建鏡像,
2、在Docker主機pull構建的鏡像,重新docker tag爲指定的鏡像名
三、操作步驟
1、登錄GitHub,創建代碼倉庫,比如Kubernetes
2、本地主機上git clone該倉庫
git clone https://github.com/904573261/Kubernetes.git
3、編寫各鏡像對應的Dockerfile文件,例如kube-apiserver-amd64
-
mkdir kube-apiserver-amd64
-
cd kube-apiserver-amd64
-
vim Dockerfile
內容如下:
-
FROM gcr.io/google_containers/kubernetes-apiserver-amd64:v1.9.0
-
MAINTAINER shayu
說明:v1.9.0是鏡像tag,這裏你應該修改爲你需要的版本號。例如kubernetes v1.9.0對應的kubernetes-apiserver-amd64版本爲v1.9.x
4、commit代碼到Kubernetes倉庫
-
git status
-
git add .
-
git status
-
git commit -m "add Dockerfile:kubernetes-apiserver-amd64:v1.9.0"
-
git push original master
我這裏沒有創建分支直接推送到master
5、GitHub上可以查詢到你的commit信息
6、登錄Docker Hub配置Automated Build鏡像
點擊Create下的Create Automated Build
如果之前未綁定,會提示綁定,按照步驟提示操作即可;
如果之前已經綁定,例如我之前已經綁定GitHub,點擊
選擇你創建的GitHub上的倉庫Kubernetes
填寫Name及Short Description,點擊Create按鈕,切換到Build Setting欄
填寫Dockerfile Location及Docker Tag Name,點擊Save Change,然後點擊上方的Trigger,就觸發構建鏡像。
切換到Build Details欄,會看到Queue->Building->Success或者Error
當然你可以點擊進入,查看Build過程或者Error的原因。
點擊Dashboard頁面,就可以看到你鏡像倉庫
下一次,當你修改了Dockerfile文件重新commit到GitHub上時,Docker Hub就自動開始構建新的鏡像。
7、將構建出的Kubernetes鏡像pull到本地主機,並重新tag爲希望的鏡像名
手動pull鏡像麻煩,藉助腳本實現,內容如下:
-
#!/bin/bash
-
images=(kube-proxy-amd64:v1.9.0 kube-scheduler-amd64:v1.9.0 kube-controller-manager-amd64:v1.9.0 kube-apiserver-amd64:v1.9.0
-
etcd-amd64:3.1.10 pause-amd64:3.0 kubernetes-dashboard-amd64:v1.8.3 k8s-dns-sidecar-amd64:1.14.7 k8s-dns-kube-dns-amd64:1.14.7
-
k8s-dns-dnsmasq-nanny-amd64:1.14.7)
-
for image in ${images[@]} ; do
-
docker pull shayu/$image
-
docker tag shayu/$image gcr.io/google_containers/$image
-
docker rmi shayu/$image
-
done
雖然官網上給出的鏡像名爲k8s.gcr.io/kube-apiserver-amd64,但是實際上,根據我的操作來看,鏡像名應該爲gcr.io/google_containers/kube-apiserver-amd64(可能之前的版本不同)
Bash腳本運行後,docker images
下面就可以使用kubeadm init初始化kubernetes集羣了。