Приложение неправильно развернуто с использованием Kuberenetes
Я все время разрабатывал приложение Spring Boot, я использовал docker-compose для создания своих контейнеров. А для Кубернетеса я использовал композу через миникубы. Я отправил свои изображения в докер-концентратор и попытался развернуть свой контейнер обоими способами.
составить
а также
kompose convert -f docker-compose.yaml kubectl create -f (deplymentfiles)
Но я получаю этот ответ
WARN Volume mount on the host "/home/App/src/main/docker/postgres-data" isn't supported - ignoring path on the host
INFO We are going to create Kubernetes Deployments, Services and PersistentVolumeClaims for your Dockerized application. If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead.
INFO Deploying application in "default" namespace
INFO Successfully created Service: adminer
INFO Successfully created Service: app
INFO Successfully created Service: mypostgres
INFO Successfully created Deployment: adminer
INFO Successfully created Deployment: app
INFO Successfully created Deployment: mypostgres
INFO Successfully created PersistentVolumeClaim: mypostgres-claim0 of size 100Mi. If your cluster has dynamic storage provisioning, you don't have to do anything. Otherwise you have to create PersistentVolume to make PVC work
когда я бегу kubectl get pods
NAME READY STATUS RESTARTS AGE
adminer-6cd96f8846-69qb8 1/1 Running 0 2m
app-5796c489ff-m46xk 0/1 ImagePullBackOff 0 2m
mypostgres-649865b4d8-nhglj 1/1 Running 0 2m
kubectl description pod app-5796c489ff-m46xk
показывает это
Name: app-5796c489ff-m46xk
Namespace: default
Node: minikube/192.168.99.100
Start Time: Mon, 11 Jun 2018 11:02:32 +0200
Labels: io.kompose.service=app
pod-template-hash=1352704599
Annotations: <none>
Status: Pending
IP: 172.17.0.3
Controlled By: ReplicaSet/app-5796c489ff
Containers:
app:
Container ID:
Image: iroolapp
Image ID:
Port: 8086/TCP
Host Port: 0/TCP
State: Waiting
Reason: ImagePullBackOff
Ready: False
Restart Count: 0
Environment:
DATABASE_HOST: mypostgres
DATABASE_NAME: test
DATABASE_PASSWORD: root
DATABASE_PORT: 5432
DATABASE_USER: root
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-wdb8n (ro)
Conditions:
Type Status
Initialized True
Ready False
PodScheduled True
Volumes:
default-token-wdb8n:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-wdb8n
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m default-scheduler Successfully assigned app-5796c489ff-m46xk to minikube
Normal SuccessfulMountVolume 3m kubelet, minikube MountVolume.SetUp succeeded for volume "default-token-wdb8n"
Normal Pulling 1m (x4 over 3m) kubelet, minikube pulling image "iroolapp"
Warning Failed 1m (x4 over 3m) kubelet, minikube Failed to pull image "iroolapp": rpc error: code = Unknown desc = Error response from daemon: pull access denied for iroolapp, repository does not exist or may require 'docker login'
Warning Failed 1m (x4 over 3m) kubelet, minikube Error: ErrImagePull
Normal BackOff 1m (x6 over 3m) kubelet, minikube Back-off pulling image "iroolapp"
Warning Failed 1m (x6 over 3m) kubelet, minikube Error: ImagePullBackOff
Наконец-то это мой docker-compose файл
version: '3'
services:
app:
image: iroolapp
depends_on:
- mypostgres
ports:
- "9000:8086"
environment:
- DATABASE_HOST=mypostgres
- DATABASE_USER=root
- DATABASE_PASSWORD=root
- DATABASE_NAME=test
- DATABASE_PORT=5432
networks:
default:
mypostgres:
image: postgres:9.6-alpine
container_name: mypostgres
ports:
- "5433:5432"
environment:
- POSTGRES_PASSWORD=root
- POSTGRES_USER=root
- POSTGRES_DB=irooldb
volumes:
- ./postgres-data:/var/lib/postgresql/data
adminer:
image: adminer
ports:
- 8080:8080
networks:
default:
networks:
default:
external:
name: mynetwork
Мой вопрос: на что ссылается ImagePullBackoff? использование kompose это хороший подход? и это необходимый шаг, чтобы отправить изображения в докер-концентратор перед использованием kubernetes
3 ответа
Я понял это. На самом деле в моем файле docker-compose я должен указать изображение, ссылающееся на изображение, размещенное в репозитории, помещенном в концентратор docker:
image: docker.io/<dockerHub username>/<imagename>
ImagePullBackoff
означает, что вы не можете получить изображение.
Вы действительно прочитали сообщение об ошибке? Это говорит Failed to pull image "iroolapp": rpc error: code = Unknown desc = Error response from daemon: pull access denied for iroolapp, repository does not exist or may require 'docker login'
Вы вошли в Docker Hub? Ваше изображение в докер-хабе? Потому что именно отсюда он пытается вытянуть изображение.
Я думаю, что название изображения вообще не получает правильного направления. Если вы сохранили в своем репо, укажите полный путь, например "имя пользователя / репо: тег", или сначала выполните поиск по команде в терминале "docker search imagename". Kubernetes вытаскивает изображение снова и снова до рабочего состояния, поэтому может быть большое количество RESTART. Так что дайте ему правильный URL-адрес или путь частного репо.
Q1
к чему относится ImagePullBackoff
Из журнала видно, что он несколько раз пытался вытянуть образ контейнера "iroolapp" pod app-5796c489ff-m46xk (см. Поле image
стручка container
) из реестра и все не удалось. ImagePullBackoff
произошло после этих неудач.
Q2
использование kompose это хороший подход?
Не использовал это...
Q3
и это необходимый шаг, чтобы отправить изображения в докер-концентратор перед использованием kubernetes
Это не. Если только для простого теста, вы можете использовать локальное изображение, установив imagePullPolicy
в IfNotPreset
или же Never
(убедитесь, что изображение загружено). В качестве альтернативы вы можете иметь свой личный реестр.