В настоящее время я работаю над шаблоном для OpenShift, и мой триггер ImageChange удаляется, когда я инициализирую приложение. Мой шаблон содержит следующие объекты
- ImageStream
- BuildConfig
- Услуги
- Маршрут
- Deploymentconfig
Я полагаю, что маршрут не имеет значения, но так он выглядит до сих пор (для лучшего обзора я опубликую отдельные объекты, но все они являются элементами в моем шаблоне)
ImageStream
- kind: ImageStream
apiVersion: v1
metadata:
labels:
app: my-app
name: my-app
namespace: ${IMAGE_NAMESPACE}
BuildConfig
- kind: BuildConfig
apiVersion: v1
metadata:
labels:
app: my-app
deploymentconfig: my-app
name: my-app
namespace: ${IMAGE_NAMESPACE}
selfLink: /oapi/v1/namespaces/${IMAGE_NAMESPACE}/buildconfigs/my-app
spec:
runPolicy: Serial
source:
git:
ref: pre-prod
uri: 'ssh://git@git.myreopo.net:port/project/my-app.git'
sourceSecret:
name: git-secret
type: Git
strategy:
type: Source
sourceStrategy:
env:
- name: HTTP_PROXY
value: 'http://user:password@proxy.com:8080'
- name: HTTPS_PROXY
value: 'http://user:password@proxy.com:8080'
- name: NO_PROXY
value: .something.net
from:
kind: ImageStreamTag
name: 'nodejs:8'
namespace: openshift
output:
to:
kind: ImageStreamTag
name: 'my-app:latest'
namespace: ${IMAGE_NAMESPACE}
Услуги
- kind: Service
apiVersion: v1
metadata:
name: my-app
labels:
app: my-app
spec:
selector:
deploymentconfig: my-app
ports:
- name: 8080-tcp
port: 8080
protocol: TCP
targetPort: 8080
sessionAffinity: None
type: ClusterIP
DeploymentConfig
Теперь, что уже странно в DeploymentConfig, это то, что в spec.template.spec.containers [0] .image я должен указать полный путь к хранилищу, чтобы он работал, в противном случае я получаю ошибку при извлечении образа. (хотя в документации написано, что my-app: последняя будет правильной)
- kind: DeploymentConfig
apiVersion: v1
metadata:
labels:
app: my-app
deploymentconfig: my-app
name: my-app
namespace: ${IMAGE_NAMESPACE}
selfLink: /oapi/v1/namespaces/${IMAGE_NAMESPACE}/deploymentconfigs/my-app
spec:
selector:
app: my-app
deploymentconfig: my-app
strategy:
type: Rolling
rollingParams:
intervalSeconds: 1
maxSurge: 25%
maxUnavailability: 25%
timeoutSeconds: 600
updatePeriodSeconds: 1
replicas: 1
template:
metadata:
labels:
app: my-app
deploymentconfig: my-app
spec:
containers:
- name: my-app-container
image: "${REPOSITORY_IP}:${REPOSITORY_PORT}/${IMAGE_NAMESPACE}/my-app:latest"
imagePullPolicy: Always
ports:
- containerPort: 8080
protocol: TCP
- containerPort: 8081
protocol: TCP
env:
- name: MONGODB_USERNAME
valueFrom:
secretKeyRef:
name: my-app-database
key: database-user
- name: MONGODB_PASSWORD
valueFrom:
secretKeyRef:
name: my-app-database
key: database-password
- name: MONGODB_DATABASE
value: "myapp"
- name: ROUTE_PATH
value: /my-app
- name: MONGODB_AUTHDB
value: "myapp"
- name: MONGODB_PORT
value: "27017"
- name: HTTP_PORT
value: "8080"
- name: HTTPS_PORT
value: "8082"
restartPolicy: Always
dnsPolicy: ClusterFirst
triggers:
- type: ImageChange
imageChangeParams:
automatic: true
from:
kind: ImageStreamTag
name: 'my-app:latest'
namespace: ${IMAGE_NAMESPACE}
containerNames:
- my-app-container
- type: ConfigChange
Я развертываю приложение, используя
oc process -f ./openshift/template.yaml ..Parameters... | oc apply -f -
Но результат тот же, когда я использую oc new-app.
Странная вещь. Приложение развернуто и работает нормально, но изменения изображения не будут иметь никакого эффекта. Поэтому я экспортировал DeploymentConfig и обнаружил, что в нем отсутствует ImageChangeTrigger, оставляя часть триггера
triggers:
- type: ConfigChange
Сначала я подумал, что это связано с тем, что, возможно, сборка была не готова, когда я попытался применить DeploymentConfig, поэтому я сначала создал сборку и ждал ее завершения. После этого я развернул остальную часть приложения (Service, Route, DeploymentConfig). Результат был таким же, однако. Если я использую Webgui и изменю там DeploymentConfig с
, заполните пространство имен, приложение и тег (последний) и нажмите «Применить», все работает как надо. Я просто не могу понять, почему триггер изначально игнорируется. Было бы здорово, если у кого-то есть идея, где я не прав
Версии, которые я использую:
oc: v3.9.0
Кубернетес: v1.6.1
openshift v3.6.173.0.140