在节点中执行docker pull时,缺省拉取当前平台的镜像,有时候我们需要拉取非本平台的镜像时,可以进行如下操作:

1、往/etc/docker/daemon.json文件中添加以下experimental配置参数:

# vim /etc/docker/daemon.json
{
  "experimental": true,
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "storage-opts": ["overlay2.override_kernel_check=true"]
}

2、重启docker 进程

# systemctl restart docker

3、这样我们就可以愉快地拉取我们想要平台镜像,以busybox拉取arm64平台为例:

# export arch=arm64
# docker pull --platform $arch busybox:1.35

4、验证

# docker inspect busybox:1.35  | grep Architecture
        "Architecture": "arm64",

举个粟子: 在x86平台上拉取arm64平台的k8s镜像
获取离线镜像列表

# kubeadm config images list --kubernetes-version=v1.20.15
k8s.gcr.io/kube-apiserver:v1.20.15
k8s.gcr.io/kube-controller-manager:v1.20.15
k8s.gcr.io/kube-scheduler:v1.20.15
k8s.gcr.io/kube-proxy:v1.20.15
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.7

在x86机器上拉取

export arch=arm64

docker pull --platform $arch k8s.gcr.io/kube-apiserver:v1.20.15
docker pull --platform $arch k8s.gcr.io/kube-controller-manager:v1.20.15
docker pull --platform $arch k8s.gcr.io/kube-scheduler:v1.20.15
docker pull --platform $arch k8s.gcr.io/kube-proxy:v1.20.15
docker pull --platform $arch k8s.gcr.io/pause:3.2
docker pull --platform $arch k8s.gcr.io/etcd:3.4.3-0
docker pull --platform $arch k8s.gcr.io/coredns:1.6.7