如何手动拉出Kubernetes kubeadm使用的容器镜像
时间:2020-02-23 14:31:47 来源:igfitidea点击:
当使用kubeadmin设置Kubernetes集群时,将使用init命令选项来设置Kubernetes控制平面。 Kubernetes有许多容器镜像,将在引导集群时使用。
在无法可靠访问Internet的环境中,或者当我们使用代理服务器时Internet访问受到限制时,或者Kubernetes节点根本没有Internet访问时,预拉要使用的容器镜像很有意义。
首先,我们需要打印kubeadm将使用的图像列表(在安装了kubeadm的计算机上)。
$sudo kubeadm config images list k8s.gcr.io/kube-apiserver:v1.17.0 k8s.gcr.io/kube-controller-manager:v1.17.0 k8s.gcr.io/kube-scheduler:v1.17.0 k8s.gcr.io/kube-proxy:v1.17.0 k8s.gcr.io/pause:3.1 k8s.gcr.io/etcd:3.4.3-0 k8s.gcr.io/coredns:1.6.5
使用的默认注册表是k8s.gcr.io,我们可以选择使用其他注册表。例如使用docker:
$sudo kubeadm config images list --image-repository docker.io docker.io/kube-apiserver:v1.17.0 docker.io/kube-controller-manager:v1.17.0 docker.io/kube-scheduler:v1.17.0 docker.io/kube-proxy:v1.17.0 docker.io/pause:3.1 docker.io/etcd:3.4.3-0 docker.io/coredns:1.6.5
这将使用Kubernetes的最新稳定版本。我们还可以指定要使用的Kubernetes版本,例如稳定,最新
$sudo kubeadm config images list --kubernetes-version latest
使用kubeadm命令提取容器图像
如果Kubernetes机器可以访问Internet来提取容器镜像,则可以使用kubeadm命令预拉所需的镜像:
------- Pull from default registry: k8s.gcr.io ------ $sudo kubeadm config images pull ------- Pull from a different registry, e.g docker.io or internal ------ $sudo kubeadm config images pull --image-repository docker.io
对于docker,我们可能需要登录才能拉取图像:
$sudo docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: jmutai Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
请注意,如果更改容器存储库,则在运行init时需要执行相同的操作。
$sudo kubeadm init --image-repository <registry> <options>
使用docker/podman命令提取容器镜像
对于无法访问Internet的Kubernetes节点,我们需要从本地计算机下载图像并将其上传到Kubernetes节点。列出要在kubeadm的计算机上使用的图像
sudo kubeadm config images list
在本地下载图像
for image in k8s.gcr.io/kube-apiserver:v1.17.0 \ k8s.gcr.io/kube-controller-manager:v1.17.0 \ k8s.gcr.io/kube-scheduler:v1.17.0 \ k8s.gcr.io/kube-proxy:v1.17.0 \ k8s.gcr.io/pause:3.1 \ k8s.gcr.io/etcd:3.4.3-0 \ k8s.gcr.io/coredns:1.6.5; do sudo docker pull $image; done
如果使用podman:
for image in k8s.gcr.io/kube-apiserver:v1.17.0 \ k8s.gcr.io/kube-controller-manager:v1.17.0 \ k8s.gcr.io/kube-scheduler:v1.17.0 \ k8s.gcr.io/kube-proxy:v1.17.0 \ k8s.gcr.io/pause:3.1 \ k8s.gcr.io/etcd:3.4.3-0 \ k8s.gcr.io/coredns:1.6.5; do sudo docker pull $image; done
将图像另存为.tar文件
# Example mkdir ~/k8s-images docker save k8s.gcr.io/kube-apiserver:v1.17.0 > ~/k8s-images/kube-apiserver.tar # Do the same for all other images
将保存的图像上传到Kubernetes节点
rsync -av ~/k8s-images/* k8s-node:~/k8s-images/
将.tar镜像文件导入Docker。
cd k8s-images/ ls * | while read image; do sudo docker load < $image; done
这是示例负载输出。
# ls * | while read image; do docker load < $image; done 225df95e717c: Loading layer [==================================================>] 336.4kB/336.4kB 7c9b0f448297: Loading layer [==================================================>] 41.37MB/41.37MB Loaded image: k8s.gcr.io/coredns:1.6.5 fe9a8b4f1dcc: Loading layer [==================================================>] 43.87MB/43.87MB ce04b89b7def: Loading layer [==================================================>] 224.9MB/224.9MB 1b2bc745b46f: Loading layer [==================================================>] 21.22MB/21.22MB Loaded image: k8s.gcr.io/etcd:3.4.3-0 fc4976bd934b: Loading layer [==================================================>] 53.88MB/53.88MB f103db1d7ea4: Loading layer [==================================================>] 118.6MB/118.6MB Loaded image: k8s.gcr.io/kube-apiserver:v1.17.0 01b437934b9d: Loading layer [==================================================>] 108.5MB/108.5MB Loaded image: k8s.gcr.io/kube-controller-manager:v1.17.0 ac06623e44c6: Loading layer [==================================================>] 42.1MB/42.1MB Loaded image: k8s.gcr.io/kube-scheduler:v1.17.0 682fbb19de80: Loading layer [==================================================>] 21.06MB/21.06MB 2dc2f2423ad1: Loading layer [==================================================>] 5.168MB/5.168MB ad9fb2411669: Loading layer [==================================================>] 4.608kB/4.608kB 597151d24476: Loading layer [==================================================>] 8.192kB/8.192kB 0d8d54147a3a: Loading layer [==================================================>] 8.704kB/8.704kB 6bc5ae70fa9e: Loading layer [==================================================>] 37.81MB/37.81MB Loaded image: k8s.gcr.io/kube-proxy:v1.17.0 e17133b79956: Loading layer [==================================================>] 744.4kB/744.4kB Loaded image: k8s.gcr.io/pause:3.1
确认镜像已导入:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE k8s.gcr.io/kube-proxy v1.17.0 7d54289267dc 4 weeks ago 116MB k8s.gcr.io/kube-apiserver v1.17.0 0cae8d5cc64c 4 weeks ago 171MB k8s.gcr.io/kube-controller-manager v1.17.0 5eb3b7486872 4 weeks ago 161MB k8s.gcr.io/kube-scheduler v1.17.0 78c190f736b1 4 weeks ago 94.4MB k8s.gcr.io/coredns 1.6.5 70f311871ae1 2 months ago 41.6MB k8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 2 months ago 288MB k8s.gcr.io/pause 3.1 da86e6ba6ca1 2 years ago 742kB
然后,我们可以使用本地添加的镜像继续安装Kubernetes。根据我们使用的CNI,如果进行脱机安装,则可能还需要提前拉出其镜像。