K8s安装离线依赖库与镜像制作

一:docker环境下载

1.1 yum仓库添加

vim /etc/yum.repos.d/docker-ce.repo 
添加以下内容:
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

推荐添加阿里云的源,速度非常快。

1.2 docker环境本地下载

yum install --downloadonly  --downloaddir=. docker-ce-18.09.4-3.el7

该命令会把docker以及依赖全下载到指定目录。 注:若发现目录下没有下载的rpm包,请到/var/cache/yum/{RepositoryName}/packages/目录中找

二:kubeadm环境下载

2.1 yum仓库添加

vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

2.2 kubeadm环境本地下载

yum install --downloadonly  --downloaddir=. kubeadm

该命令会把kubeadm以及依赖全下载包括kubelet,kubectl到指定目录。 注:若发现目录下没有下载的rpm包,请到/var/cache/yum/{RepositoryName}/packages/目录中找

三:k8s依赖镜像下载

kubeadm安装时会访问特定的tag,若不存在就会走外网下载,所以kubeadm部署前必须将所需的k8s环境以镜像方式下载好,并导入docker中

3.1 阿里云海外镜像下载配置

由于各种原因,k8s的依赖kube-proxy,kube-apiserver,kube-controller-manager,kube-scheduler,coredns,etcd和pause都难于下载,本人通过阿里云海外镜像下载方式,分享一下。 1) 将github上建立一个项目,github的配置不再赘述。 2) 将所有依赖建立目录,并在每个目录下建立Dockerfile,并输入FROM命令,每个组件的命令如下:

FROM k8s.gcr.io/kube-apiserver:v1.14.2
FROM k8s.gcr.io/kube-proxy:v1.14.2
FROM k8s.gcr.io/kube-controller-manager:v1.14.2
FROM k8s.gcr.io/kube-scheduler:v1.14.2
FROM k8s.gcr.io/etcd:3.3.10
FROM k8s.gcr.io/coredns:1.3.1
FROM k8s.gcr.io/pause:3.1

其中,每个需要的组件以及版本的信息通过命令得到。

kubeadm --kubernetes-version=v1.14.2 config images list

将这些信息提交到git上。

git init  (本地目录初始化)
git remote add origin https://xxx.git  (本地目录与远程库链接)
git add .  (添加目录下所有文件)
git commit -m "edit"。 (提交)
git push -u origin master. (上传)

3) 创建镜像仓库,并选择公开。下一步选择github帐号关联,并选择之前提交的项目,务必勾选上海外机器构建。

4) 创建完镜像仓库后,进去构建选项卡,将之前上传的几个依赖分别如下图配置,因为一个仓库只能创建5个镜像,所以需要再以相同方法建一个镜像并构建。

5) 创建完后后台登陆阿里云

sudo docker login --username=<username> registry.cn-hangzhou.aliyuncs.com

并输入密码,用户名和密码是对应阿里云帐号的。

6) 进入构建,对每个镜像点击立即构建,下面的构建日志成功即表示拉到了国内仓库。若失败则可能登陆超时,重新执行第5步。

7) docker拉取镜像

sudo docker pull registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep:[镜像版本号]

这些信息在基本信息中可以查看。

3.2 依赖镜像重打tag

拉取镜像后,需要修改成kubeadm拉取的tag,并删除老的tag 执行命令

sudo docker tag registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep:kube-apiserver-1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2
sudo docker tag registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep:kube-controller-manager-1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2
sudo docker tag registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep:kube-scheduler-1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2
sudo docker tag registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep:kube-proxy-1.14.2 k8s.gcr.io/kube-proxy:v1.14.2
sudo docker tag registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep2:coredns-1.3.1 k8s.gcr.io/coredns:1.3.1
sudo docker tag registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep2:etcd-3.3.10 k8s.gcr.io/etcd:3.3.10
sudo docker tag registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep:pause-3.1 k8s.gcr.io/pause:3.1
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep:kube-apiserver-1.14.2
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep:kube-controller-manager-1.14.2
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep:kube-scheduler-1.14.2
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep:kube-proxy-1.14.2
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep2:coredns-1.3.1
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep2:etcd-3.3.10
sudo docker rmi registry.cn-hangzhou.aliyuncs.com/zhy111/dockerdep:pause-3.1

3.3 网络模块flannel下载

执行命令

sudo docker pull jmgao1983/flannel:v0.11.0-amd64

修改kube-flannel.yml配置文件,将镜像地址改成本地(tag也可)

sudo sed -i 's#quay.io/coreos/flannel:v0.11.0-amd64#jmgao1983/flannel:v0.11.0-amd64#g' kube-flannel.yml

3.4 所有k8s依赖包导出

执行导出命令至k8s-images-1.14.2.tar

sudo docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o k8s-images-1.14.2.tar

最后,将docker以及依赖的rpm包,kubeadm以及依赖的rpm包,kubeadm安装需要的docker镜像包,kubeadm.yaml,kube-flannel.yml一起打包分发到各台待安装的服务器上。