При настройке кластера Kubernetes с kubeadmin, опция команды используется для настройки плоскости управления Kubernetes. Kubernetes имеет несколько образов контейнеров, которые будут использоваться при загрузке кластера.
В условиях ненадежного доступа в Интернет или ограниченного доступа в Интернет, например, при использовании Proxy-серверов, или если узлы Kubernetes вообще не имеют доступа в Интернет, имеет смысл предварительно собрать образы контейнеров, которые будут использоваться.
Сначала вам нужно распечатать список образов, которые будет использовать kubeadm (на машине с установленным kubeadm).
$ sudo kubeadm config images list
[config/images] Pulled registry.k8s.io/kube-apiserver:v1.28.0
[config/images] Pulled registry.k8s.io/kube-controller-manager:v1.28.0
[config/images] Pulled registry.k8s.io/kube-scheduler:v1.28.0
[config/images] Pulled registry.k8s.io/kube-proxy:v1.28.0
[config/images] Pulled registry.k8s.io/pause:3.9
[config/images] Pulled registry.k8s.io/etcd:3.5.9-0
[config/images] Pulled registry.k8s.io/coredns/coredns:v1.10.1
По умолчанию используется следующий реестр registry.k8s.io, у вас есть возможность использовать другой реестр. Например, используя docker:
$ sudo kubeadm config images list --image-repository docker.io
[config/images] Pulled registry.k8s.io/kube-apiserver:v1.28.0
[config/images] Pulled registry.k8s.io/kube-controller-manager:v1.28.0
[config/images] Pulled registry.k8s.io/kube-scheduler:v1.28.0
[config/images] Pulled registry.k8s.io/kube-proxy:v1.28.0
[config/images] Pulled registry.k8s.io/pause:3.9
[config/images] Pulled registry.k8s.io/etcd:3.5.9-0
[config/images] Pulled registry.k8s.io/coredns/coredns:v1.10.1
При этом будет использоваться последняя стабильная версия Kubernetes. Вы также можете указать версию Kubernetes, которую нужно использовать, например стабильная, последние
sudo kubeadm config images list --kubernetes-version latest
Извлечение образов контейнеров с помощью команды kubeadm
Если ваши машины Kubernetes имеют доступ к интернету для извлечения образов контейнеров, вы можете использовать команду kubeadm для предварительного извлечения необходимых образов:
### Pull from default registry: registry.k8s.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
Для узлов Kubernetes, не имеющих доступа к Интернету, вам нужно будет загрузить образы с локальной машины и загрузить их на узлы Kubernetes.
- Список изображений, которые будут использоваться на машине с kubeadm
sudo kubeadm config images list
- Загружайте images локально
for image in registry.k8s.io/kube-apiserver:v1.28.0 \
registry.k8s.io/kube-controller-manager:v1.28.0 \
registry.k8s.io/kube-scheduler:v1.28.0 \
registry.k8s.io/kube-proxy:v1.28.0 \
registry.k8s.io/etcd:3.5.9-0 \
registry.k8s.io/coredns/coredns:v1.10.1; do
sudo docker pull $image;
done
Если вы используете podman:
for image in registry.k8s.io/kube-apiserver:v1.28.0 \
registry.k8s.io/kube-controller-manager:v1.28.0 \
registry.k8s.io/kube-scheduler:v1.28.0 \
registry.k8s.io/kube-proxy:v1.28.0 \
registry.k8s.io/etcd:3.5.9-0 \
registry.k8s.io/coredns/coredns:v1.10.1; do
sudo podman pull $image;
done
- Сохраните images как .tar файлы
# Example
mkdir ~/k8s-images
docker save registry.k8s.io/kube-apiserver:v1.28.0 > ~/k8s-images/kube-apiserver:v1.28.0.tar
# Do the same for all other images
- Загрузка сохраненных 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: registry.k8s.io/coredns/coredns:v1.10.1
fe9a8b4f1dcc: Loading layer [==================================================>] 43.87MB/43.87MB
ce04b89b7def: Loading layer [==================================================>] 224.9MB/224.9MB
1b2bc745b46f: Loading layer [==================================================>] 21.22MB/21.22MB
Loaded image: registry.k8s.io/etcd:3.5.9-0
fc4976bd934b: Loading layer [==================================================>] 53.88MB/53.88MB
f103db1d7ea4: Loading layer [==================================================>] 118.6MB/118.6MB
Loaded image: registry.k8s.io/kube-apiserver:v1.28.0
01b437934b9d: Loading layer [==================================================>] 108.5MB/108.5MB
Loaded image: registry.k8s.io/kube-controller-manager:v1.28.0
ac06623e44c6: Loading layer [==================================================>] 42.1MB/42.1MB
Loaded image: registry.k8s.io/kube-scheduler:v1.28.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: registry.k8s.io/kube-proxy:v1.28.0
e17133b79956: Loading layer [==================================================>] 744.4kB/744.4kB
Loaded image: registry.k8s.io/pause:3.9
Убедитесь, что images импортированы:
crictl images
После этого вы можете продолжить установку Kubernetes с локально добавленными образами. В зависимости от используемого CNI, при автономной установке может потребоваться заранее извлечь его образ.