使用kubeadmin设置Kubernetes集群时,使用init命令选项来设置Kubernetes控制平面,Kubernetes有许多容器镜像,将在引导集群时使用。在无法可靠访问Internet的环境中,或者当您使用代理服务器时您的Internet访问受到限制时,或者您的Kubernetes节点根本没有Internet访问时,可以预拉要使用的容器映像是有意义的。
先决操作 首先,您需要打印kubeadm将使用的图像列表(在安装了kubeadm的计算机上): $ 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: $ 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版本,例如stable、latest: $ kubeadm config images list --kubernetes-version latest
使用kubeadm命令提取容器图像 如果您的Kubernetes机器可以访问Internet来提取Container图像,则可以使用kubeadm命令预拉所需的图像。 从默认注册表中提取:k8s.gcr.io: # kubeadm config images pull 从其他注册表中提取,例如docker.io或内部: # kubeadm config images pull --image-repository docker.io 对于docker,您可能需要登录才能拉出图像: # 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时需要执行相同的操作: # kubeadm init --image-repository <registry> <options>
使用docker/podman命令提取容器映像 对于无法访问Internet的Kubernetes节点,您需要从本地计算机下载图像并将其上传到Kubernetes节点。 1、列出要在kubeadm的机器上使用的图像: kubeadm config images list 2、在本地下载图像: 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 docker pull $image; done 如果使用podman(安装参考:在CentOS 8/RHEL 8系统上安装和使用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 docker pull $image; done 3、将图像另存为.tar文件 # 示例 mkdir ~/k8s-images docker save k8s.gcr.io/kube-apiserver:v1.17.0 > ~/k8s-images/kube-apiserver.tar # 对所有其他图像执行相同的操作 4、将保存的图像上传到Kubernetes节点 rsync -av ~/k8s-images/* k8s-node:~/k8s-images/ 5、将.tar映像文件导入Docker: cd k8s-images/ ls * | while read image; do docker load < $image; done 这是样本负载输出,如下图:
确认图像已导入: # docker images
然后,您可以使用本地添加的映像继续安装Kubernetes,根据您使用的CNI,如果进行脱机安装,则可能还需要提前提取其映像。
相关主题 |