Развертывание собственного образа докера в кластере Kubernetes

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

Я использую imagePullPolicy: IfNotPresent для развертывания Kubernetes.

Использую kubeadm v1.12 ошибка:

Normal   Scheduled       35s                default-scheduler       Successfully assigned default/test-777dd9bc96-chgc7 to ip-10-0-1-154
Normal   SandboxChanged  32s                kubelet, ip-10-0-1-154  Pod sandbox changed, it will be killed and re-created.
Normal   BackOff         30s (x3 over 31s)  kubelet, ip-10-0-1-154  Back-off pulling image "test_kube"
Warning  Failed          30s (x3 over 31s)  kubelet, ip-10-0-1-154  Error: ImagePullBackOff
Normal   Pulling         15s (x2 over 34s)  kubelet, ip-10-0-1-154  pulling image "test"
Warning  Failed          13s (x2 over 33s)  kubelet, ip-10-0-1-154  Failed to pull image "test": rpc error: code = Unknown desc = Error response from daemon: pull access denied for test_kube, repository does not exist or may require 'docker login'
Warning  Failed          13s (x2 over 33s)  kubelet, ip-10-0-1-154  Error: ErrImagePull

Мой файл развертывания:

apiVersion: apps/v1beta1
kind: Deployment
vmetadata:
  name: test-kube
spec:
  template:
    metadata:
  labels:
    app: test
spec:
  containers:
  - name: test
    image: test
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 3000
    env:
    - name: SECRET-KUBE
      valueFrom:
        secretKeyRef:
          name: secret-test
          key: username

образы докеров]

REPOSITORY  TAG
test   latest 
test   test  

В файле развертывания я пробовал с

изображение: тест и с изображением: тест: тест

Та же ошибка:

Ошибка: ErrImagePull


person pioupiou    schedule 24.10.2018    source источник
comment
Проверьте, создан ли ваш образ докера с тегом образа test_kube с использованием образов докеров. Если нет, то измените тег изображения докера на test_kube   -  person Prafull Ladha    schedule 24.10.2018
comment
Используете правильные учетные данные? Вы отправили изображение с теми же учетными данными?   -  person Rico    schedule 25.10.2018
comment
Я пытаюсь развернуть один созданный мной образ докера, который не находится в публичном или частном реестре.   -  person pioupiou    schedule 25.10.2018
comment
@PrafullLadha, я пробовал, все равно та же проблема, спасибо :)   -  person pioupiou    schedule 25.10.2018


Ответы (2)


  • создать секрет на основе пользователя реестра докеров с правами pull / push
  • использовать его как imagePullSecret

OR

  • предварительно вытащить образ на узел развертывания

Подробная информация о создании секрета и использовании:

Кластер Kubernetes использует тип Secret of docker-registry для аутентификации в реестре контейнеров для получения частного образа.

Создайте этот секрет, назвав его regcred:

kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>

куда:

<your-registry-server> is your Private Docker Registry FQDN. (https://index.docker.io/v1/ for DockerHub)
<your-name> is your Docker username.
<your-pword> is your Docker password.
<your-email> is your Docker email.

Затем создайте модуль, который использует этот секрет:

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: <your-private-image>
  imagePullSecrets:
  - name: regcred

Для случая использования локального изображения см. Этот пост:

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

person Ijaz Ahmad Khan    schedule 24.10.2018
comment
Я создаю образ на узле развертывания, есть на образах докеров, но ничего. Я попробую первое, что вы сказали. Создайте частный реестр докеров, извлеките и добавьте учетные данные в кубернетах. Спасибо :) - person pioupiou; 25.10.2018
comment
если изображение уже находится на узле, оно должно работать, проверьте путь к изображению - person Ijaz Ahmad Khan; 25.10.2018
comment
@cdemet ответ обновлен, пожалуйста, посмотрите этот пост, чтобы использовать локальное изображение - person Ijaz Ahmad Khan; 25.10.2018
comment
@IjazAhmadKhan исходный вопрос касается kubeadm, ваш связанный пост посвящен minikube. - person Neowizard; 07.04.2021

У вас должен быть частный реестр докеров на главном узле кластера kubernetes, чтобы, если модуль развернут на узле, вытащить образ оттуда. Вы можете найти шаги по созданию кластера Kubernetes с частным реестром Docker по адресу: Кластер Kubernetes с частным реестром Docker

6. Создание частного реестра Docker на главном узле.

# Set basic auth.
rm -f /auth/*
mkdir -p /auth
docker run --entrypoint htpasswd registry:2 -Bbn test test > /auth/htpasswd

docker rm registry -f
# Set certificates auth.
rm -f /certs/*
mkdir -p /certs
openssl genrsa 1024 > /certs/registrykey.pem
chmod 400 /certs/registrykey.pem
openssl req -new -x509 -nodes -sha1 -days 365 -key /certs/registrykey.pem  -out /certs/registry.pem  -subj "/C=/ST=/L=/O=/OU=/CN=registry.com" > /dev/null 2>&1
docker run -d -e REGISTRY_HTTP_ADDR=0.0.0.0:5000 -p 5000:5000 --restart=always --name registry -v `pwd`/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.pem -e REGISTRY_HTTP_TLS_KEY=/certs/registrykey.pem registry:2

# Create secret to be used in "imagePullSecrets" section of a pod
kubectl create secret docker-registry regsecret --docker-server=192.168.147.3:5000 --docker-username=test --docker-password=test --namespace=kube-system

# Push image in private registry.
docker tag test-image:latest 192.168.147.3:5000/test-image
docker push 192.168.147.3:5000/test-image

7. Пример YAML для модуля с изображением из частного реестра.

apiVersion: v1
kind: Pod
metadata:
  name: test-site
  labels:
    app: web
spec:
  containers:
    - name: test
  image: 192.168.147.3:5000/test-image:latest
    ports:
      - containerPort: 8000
  imagePullPolicy: Always
    imagePullSecrets:
      - name: regsecret
person Danut Radoaica    schedule 31.01.2019