Использовать локальный docker образ без настройки реестра в k8s - PullRequest
2 голосов
/ 14 февраля 2020

Я настроил kubernetes с одним узлом в соответствии с официальным руководством .

В дополнение к официальной документации я настроил кластер с одним узлом:

kubectl taint nodes --all node-role.kubernetes.io/master-

Отключено ограничение на выселение:

cat << EOF >> /var/lib/kubelet/config.yaml
evictionHard:
  imagefs.available: 1%
  memory.available: 100Mi
  nodefs.available: 1%
  nodefs.inodesFree: 1%
EOF

systemctl daemon-reload
systemctl restart kubelet

И настроен драйвер systemd для Docker:

cat << EOF > /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

systemctl daemon-reload
systemctl restart docker

Я пробовал следующее:

docker build -t localhost:5000/my-image .
kubectl run -it --rm --restart=Always --image=localhost:5000/my-image my-image

Но в логах pod я вижу ImagePullBackOff. Если я настраиваю локальный репозиторий, и я делаю docker push localhost:5000/my-image после создания образа, то все работает.

Возможно ли использовать локальные образы (которые уже доступны после выдачи docker images) без необходимости настройки локальный репозиторий, нажав на этот репозиторий, а затем вытащив из него?

Ответы [ 2 ]

3 голосов
/ 14 февраля 2020

Вам просто нужно установить imagePullPolicy в шаблоне Pod в спецификации container на Never. В противном случае Кубеле попытается вытянуть изображение. Пример определения Pod может выглядеть следующим образом:

apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  containers:
    - name: uses-local-image
      image: local-image-name
      imagePullPolicy: Never

Подробнее об этом вы можете найти здесь .

По умолчанию kubelet будет пытаться извлечь каждое изображение из указанного реестра. Однако, если для свойства imagePullPolicy контейнера установлено значение IfNotPresent или Never, используется локальное изображение (предпочтительно или исключительно, соответственно).

Если вы хотите полагаться на предварительно вытянутые изображения в качестве замены проверки подлинности реестра, вы должны убедиться, что все узлы в кластере имеют одинаковые предварительно извлеченные образы.

Это можно использовать для предварительной загрузки определенных образов на скорости или в качестве альтернативы аутентификации для частного Registry.

Все модули будут иметь доступ на чтение к любым предварительно извлеченным изображениям.

2 голосов
/ 14 февраля 2020

Марио ответ правильный. Было бы в комплекте с командой, хотя. Итак, вы хотите создать ваше развертывание следующим образом:

kubectl run -it --rm --restart Always DEPLOYMENT_NAME --image my-image --image-pull-policy IfNotPresent COMMAND

Примечание: если у вас будет более одного узла, вам необходимо убедиться, что на всех них есть изображение с таким именем, как репо не существует, и он потерпит неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...