Размещение образов#

Стадия применима к сценарию без доступа в интернет; при онлайн-обновлении пропустите ее.

На этой стадии сценарий Ansible из состава установочного пакета размещает образы контейнеров новой версии на рабочих узлах кластера. Сценарий копирует архивы образов на каждый узел из инвентаря и импортирует их для службы containerd, поэтому отдельный реестр образов не требуется.

Команды этой стадии необходимо выполнять из каталога установочного пакета, распакованного на стадии подготовки:

cd ~/aa-bundle

Описание инвентаря#

В файле tools/inventory.yml перечислите узлы кластера, на которых могут запускаться поды платформы:

all:
  children:
    k8s_nodes:
      hosts:
        node1.example.com:
        node2.example.com:
        node3.example.com:
      vars:
        ansible_user: astra
        ansible_become: true
        ansible_ssh_private_key_file: ~/.ssh/astra
        images_dir: /tmp/images

Примечание

Узлы плоскости управления (control plane) с ограничением NoSchedule не следует включать в описание инвентаря. Поды платформы на них не запускаются, а размещение образов занимает время и место на диске. Если ограничение с узлов снято, включите их в описание.

Установка rsync на узлы#

Установите сервис rsync на все узлы инвентаря:

ansible -i tools/inventory.yml k8s_nodes -b -m ansible.builtin.package -a "name=rsync state=present"

Примечание

Сценарий размещения образов содержит задачу автоматической установки rsync, однако эта задача не выполняется, что зафиксировано в списке известных проблем.

Размещение образов#

Запустите сценарий размещения образов:

ansible-navigator run tools/load-containerd-images.yml -i tools/inventory.yml

Сценарий выполняет следующие действия:

  1. Проверяет свободное место на каждом узле для обеспечения прогнозируемой занятости диска не выше 80%.

  2. Копирует архивы образов из каталога images/ во временный каталог /tmp/images на каждом узле.

  3. Импортирует образы для службы containerd.

  4. Если используется containerd версии 1.7 и новее, помечает импортированные образы меткой io.cri-containerd.pinned, которая запрещает службе kubelet автоматически удалять эти образы при нехватке места на диске, пока поды еще не запущены. Для более ранних версий containerd сценарий выводит предупреждение о том, что пометка недоступна, однако конфигурация остается работоспособной.

  5. Удаляет временный каталог /tmp/images на узлах (переменная cleanup_image_archives, по умолчанию true).

Примечание

Выполнение сценария занимает десятки минут, в течение которых на каждый узел передается по сети около 24 ГБ, а затем containerd распаковывает образы. При работе по нестабильному каналу запускайте сценарий в сеансе tmux или screen.

Проверка размещения#

Убедитесь, что образы новой версии доступны на узлах кластера:

ssh <user>@<node> 'sudo ctr -n k8s.io images ls | grep ":2.1"'

Здесь:

  • <user> – название учетной записи пользователя на узле кластера;

  • <node> – доменное имя или IP-адрес любого узла из инвентаря.

Ожидаемый результат: список всех образов версии 2.1 из каталога images/ установочного пакета.