OpenShift: ожидание создания потока изображения - PullRequest
0 голосов
/ 30 октября 2019

Я создаю сценарий установки, который будет создавать ресурсы из файлов YAML †. Этот скрипт будет делать эквивалент этой команды:

oc new-app registry.access.redhat.com/rhscl/nginx-114-rhel7~http://github.com/username/repo.git

Три файла YAML были созданы следующим образом:

  1. imagestream для nginx-114-rhel7 - is-nginx.yaml
apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
  labels:
    build: build-repo
  name: nginx-114-rhel7
  namespace: ns
spec:
  tags:
    - annotations: null
      from:
        kind: DockerImage
        name: registry.access.redhat.com/rhscl/nginx-114-rhel7
      name: latest
      referencePolicy:
        type: Source
imagestream для repo - is-repo.yaml
apiVersion: v1
kind: ImageStream
metadata:
  labels:
    application: is-rp
  name: is-rp
  namespace: ns
buildconfig для repo (вывод будет imagestream для repo) - bc-repo.yaml

apiVersion: v1
kind: BuildConfig
metadata:
  labels:
    build: rp
  name: bc-rp
  namespace: ns
spec:
  output:
    to:
      kind: ImageStreamTag
      name: 'is-rp:latest'
  postCommit: {}
  resources: {}
  runPolicy: Serial
  source:
    git:
      ref: dev_1.0
      uri: 'http://github.com/username/repo.git'
    type: Git
  strategy:
    sourceStrategy:
      from:
        kind: ImageStreamTag
        name: 'nginx-114-rhel7:latest'
        namespace: flo
    type: Source
  successfulBuildsHistoryLimit: 5

Когда эти команды выполняются одна за другой,

oc create -f is-nginx.yaml;oc create -f is-repo.yaml;oc create -f bc-repo.yaml;oc start-build bc/bc-rep --wait

Я получаю это сообщение об ошибке,

The ImageStreamTag "nginx-114-rhel7:latest" is invalid: from: Error resolving ImageStreamTag nginx-114-rhel7:latest in namespace ns: unable to find latest tagged image

Но, когда я запускаю команды с sleep до start-build, сборка запускается правильно.

oc create -f is-nginx.yaml;oc create -f is-repo.yaml;oc create -f bc-repo.yaml;sleep 5;oc start-build bc/bc-rep

Как мне вызвать start-build без ввода команды sleep? oc wait, кажется, работает только для --for=condition и --for=delete. Я не знаю, какое значение будет использоваться для --for=condition.

† - я не вижу четкого руководства по созданию сценариев установки - с YAML или эквивалентными oc командами только - для развертывания приложений в OpenShift.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

oc wait --for=condition=available работает только тогда, когда объект статуса включает условия, что не относится к imagestreams.

status:
  dockerImageRepository: image-registry.openshift-image-registry.svc:5000/test/s2i-openresty-centos7
  tags:
  - items:
    - created: "2019-11-05T11:23:45Z"
      dockerImageReference: quay.io/openresty/openresty-centos7@sha256:db224d642ad4001ab971b934a6444da16bb87ddfcc9c048bbf68febafcac52db
      generation: 2
      image: sha256:db224d642ad4001ab971b934a6444da16bb87ddfcc9c048bbf68febafcac52db
    tag: builder
  - items:
    - created: "2019-11-05T11:23:45Z"
      dockerImageReference: qquay.io/openresty/openresty-centos7@sha256:082ee75ed83f161375d0d281f235b7271176b1d129f5ed9972c7d31923e08660
      generation: 2
      image: sha256:082ee75ed83f161375d0d281f235b7271176b1d129f5ed9972c7d31923e08660
    tag: runtime

До тех пор, пока CLI openshift не реализует встроенную команду ожидания для imagestreams, я обычно использовал: запрос объекта imagestream, анализ состояния объекта для ожидаемого тега и несколько секунд ожидания, если он не готов. Как то так:

until oc get is nginx-114-rhel7 -o json || echo '{}' | jq '[.status.tags[] | select(.tag == "latest")] | length == 1' --exit-status; do
    sleep 1
done
0 голосов
/ 30 октября 2019

Вместо запуска oc start-build вы должны изучить Триггеры изменения изображения и Триггеры изменения конфигурации

В вашей конфигурации сборки вы можете указать на ImageStreamTag чтобы начать сборку

type: "imageChange" 
imageChange: {}
type: "imageChange" 
imageChange:
  from:
    kind: "ImageStreamTag"
    name: "custom-image:latest"
...