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一起打包分发到各台待安装的服务器上。