☸️ Как вручную скачать образы контейнеров, используя Kubernetes kubeadm

by itisgood

При настройке кластера Kubernetes с помощью kubeadmin параметр команды init используется для настройки Kubernetes control plane.

В Kubernetes есть несколько образов контейнеров, которые будут использоваться при начальной загрузке кластера.

В среде, где доступ к Интернету нестабильный, или когда у вас ограниченный доступ к Интернету, как при использовании прокси-серверов, или если ваши ноды Kubernetes вообще не имеют доступа к Интернету, имеет смысл предварительно извлечь образы контейнеров, которые будут использоваться.

Сначала вам нужно вывести список образов, которые будет использовать 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, у вас есть возможность использовать другой реджестри.
Система будет использовать последнюю стабильную версию Kubernetes.
Вы также можете указать версию Kubernetes, например, stable, latest
$ kubeadm config images list --kubernetes-version latest

Извлечение образа контейнера с помощью команды kubeadm

-------Извлечь из реджестри по умолчанию: k8s.gcr.io -------
# kubeadm config images pull

------- Извлечь из другого реджестри, например Docker -------
# 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

Для нода Kubernetes без доступа к Интернету вам необходимо загрузить образы с локального компьютера и загрузить их на свои узлы Kubernetes.

Список образов, которые будут использоваться на машине с kubeadm

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
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
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 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 вы используете, вам может потребоваться заранее получить его образ, если вы выполняете автономную установку.

You may also like

Leave a Comment