一.前言

首先,要解决的就是安装来源问题,由于长城防火墙的原因,我们要想办法自己找来源。


Kubernetes 编译的各种发行版安装包来源于 Github 上的另一个叫 release 的项目,地址 点这里,把这个项目 clone 下来,由于本人是 Centos 用户,所以进入 rpm 目录,在安装好 docker 的机器上执行那个 docker-build.sh 脚本即可编译 rpm 包,最后会生成到当前目录的 output 目录下,截图如下

wKioL1hXTNyQZ5Z2AAGf7yXd85c111.png-wh_50



1.git clone https://github.com/kubernetes/release

2.cd rpm && ./docker-build.sh

3.会在rpm目录下生成一个output 目录,cd output/x86_64下

[root@kube x86_64]# ll

root root  6121522 Nov 17 07:20 kubeadm-1.6.0-0.alpha.0.2074.a092d8e0f95f52.x86_64.rpm

-rw-r--r-- 1 root root  6918310 Nov 17 07:20 kubectl-1.5.1-0.x86_64.rpm

-rw-r--r-- 1 root root 12722002 Nov 17 07:20 kubelet-1.5.1-0.x86_64.rpm

-rw-r--r-- 1 root root 10283710 Nov 17 07:20 kubernetes-cni-0.3.0.1-0.07a8a2.x86_64.rpm

drwxr-xr-x 2 root root 4096 Nov 17 07:20 repodata

4.    yum install -y ebtables  socat

       rpm -ivh *.rpm




镜像如何而来:

利用 docker hub 做中转,简单的说就是利用 docker hub 的自动构建功能,在 Github 中创建一个 Dockerfile,里面只需要 FROM xxxx 这些 gcr.io 的镜像即可,最后 pull 到本地,然后再 tag 一下

######################################################################################


1.在github上注册个账号,登陆,建立一个docker-library的repository

2.上传本地服务器的公钥给github

  ssh-keygen 生成公钥,然后less /root/.ssh/id_rsa.pub 把内容复制,在github的用户setting中找到SSH的设置,把刚才的内容放进去。

wKiom1hXjZWxOt5aAAF5hWvKlTI274.png-wh_50


3.克隆repository到本地服务器

git clone git@github.com:mxl0721/docker-library

完成后在当前目录会生成和repository一样名字的目录docker-library


[root@kube ~]# ll

total 8

-rw-------. 1 root root  958 Nov 14 04:11 anaconda-ks.cfg

drwxr-xr-x  5 root root   83 Nov 14 09:36 docker-library


4.在repository中建立你想增加的项目(目录)和文件

mkdir etcd-amd64

cd   etcd-amd64 

vi Dockerfile


 FROM gcr.io/google_containers/etcd-amd64:3.0.14-kubeadm 

 MAINTAINER mxl0721 <mxl0721@163.com> 

#################################################################




[root@kube docker-library]#  git add etcd-amd64/Dockerfile 

[root@kube docker-library]#  git commit -m "add dirctory"

[root@kube docker-library]#  git push 


最后建完后的效果是:

wKioL1hYjHfBi3jQAAFqVrj8ehs931.png-wh_50


最后在 Docker Hub 上创建自动构建项目


wKioL1hYjSDxQta2AAEBK8zcUW4565.png-wh_50



spacer.gif

spacer.gif

wKioL1hjXI3CSeaqAAEWMuq2nA4810.png-wh_50


wKiom1hjXbfTCGvxAADbjKQ1UMU443.png-wh_50

wKioL1hjXbeD3LOpAAA6j-U36D8737.png-wh_50

wKiom1hjXbiDrm-2AADET7b0tFU094.png-wh_50

最后要手动触发一下,然后 Docker Hub 才会开始给你编译

wKioL1hjXbmiIoICAAB_3y5Qhs8727.png-wh_50




上面已经解决了镜像获取问题,但是一大心病就是 “我特么怎么知道是哪个版本的”,为了发扬 “刨根问底” 的精神,先进行一遍 kubeadm init,这时候绝对卡死,此时进入 /etc/kubernetes/manifests 可以看到许多 json 文件,这些文件中定义了需要哪些基础镜像




all json




p_w_picpath version从上图中基本可以看到 kubeadm init 的时候会拉取哪些基础镜像了,但是还有一些镜像,仍然无法找到,比如kubednspause 等,至于其他的镜像版本,可以从源码中找到,源码位置是 kubernetes/cmd/kubeadm/app/p_w_picpaths/p_w_picpaths.go 这个文件中,如下所示:


p_w_picpath version剩余的一些镜像,比如 kube-proxy-amd64kube-discovery-amd64 两个镜像,其中 kube-discovery-amd64 现在一直是 1.0 版本,源码如下所示






https://mritd.me/2016/10/29/set-up-kubernetes-cluster-by-kubeadm/