I have this StartupProbe:
startupProbe:
httpGet:
path: someurl
port: 6060
scheme: HTTP
periodSeconds: 10
successThreshold: 1
failureThreshold: 12
timeoutSeconds: 9
When trying to apply that probe in a DeploymentConfig like this:
(oc process -f path/to/DeploymentConfig.yml \
-p SomeVariable=$SomeVariable \
| oc apply -f - \
)
It runs into this Error:
error: unable to find api field in struct Container for the json field "startupProbe"
Note the following things:
- The DeploymentConfig worked before. I only added the Startupprobe.
- The First Deployment is successful but the second and following are not due to the mentioned Error
- When editing/adding/rollouting the DeploymentConfig in Openshift directly, then there is no issue => the startupProbe should be valid
- I don't have access to Openshift Logs only the Events. The Events contain no Errors.
- The Deployment and Error happen inside a Gitlab pipeline. In other words: Openshift blocks the Config before applying it.
- the Openshift Plattform Version should be the 4.12
Question(s)
- How/Why is this Error exactly triggered?
- How can I prevent the Error?
Edit (Adding DeploymentConfig)
apiVersion: v1
kind: Template
metadata:
name: deploymentconfig-template
objects:
- apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
labels:
app: ${IMAGE_NAME}-${TARGET_SYSTEM}
name: ${IMAGE_NAME}-${TARGET_SYSTEM}
namespace: ${OPENSHIFT_NAMESPACE}
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
app: ${IMAGE_NAME}-${TARGET_SYSTEM}
deploymentconfig: ${IMAGE_NAME}-${TARGET_SYSTEM}
strategy:
activeDeadlineSeconds: 21600
resources: {}
rollingParams:
intervalSeconds: 1
maxSurge: 25%
maxUnavailable: 25%
timeoutSeconds: 600
updatePeriodSeconds: 1
type: Rolling
template:
metadata:
labels:
app: ${IMAGE_NAME}-${TARGET_SYSTEM}
deploymentconfig: ${IMAGE_NAME}-${TARGET_SYSTEM}
spec:
containers:
- name: ${IMAGE_NAME}
image: ${DOCKER_REGISTRY}/${DOCKER_NAMESPACE}/${IMAGE_NAME}:${IMAGE_TAG}
imagePullPolicy: Always
ports:
- containerPort: 5555
protocol: TCP
resources:
requests:
memory: 120Mi
limits:
memory: 200Mi
livenessProbe:
exec:
command:
- /bin/sh
- -c
- nc -z localhost 5555
initialDelaySeconds: 60
periodSeconds: 10
readinessProbe:
httpGet:
path: someurl
port: 6060
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 60
successThreshold: 1
failureThreshold: 3
timeoutSeconds: 60
startupProbe:
httpGet:
path: someurl
port: 6060
scheme: HTTP
periodSeconds: 20
successThreshold: 1
failureThreshold: 20
timeoutSeconds: 19
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
env:
- name: SERVICE_ACCOUNT_ENABLED
value: ${SERVICE_ACCOUNT_ENABLED}
- name: NODE_TLS_REJECT_UNAUTHORIZED
value: "0"
envFrom:
- configMapRef:
name: ${IMAGE_NAME}-${TARGET_SYSTEM}
volumeMounts:
- name: keycloak-json-server
mountPath: /server/keycloak/keycloak.json
subPath: keycloak.json
- name: keycloak-2fa-disabled-json-server
mountPath: /server/keycloak/keycloak_2FAdisabled.json
subPath: keycloak_2FAdisabled.json
- mountPath: /server/modules/external_apis/eko-ora/deploy-config
name: deploy-config
- mountPath: /server/deploy-config
name: deploy-global-config
imagePullSecrets:
- name: mtr
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: keycloak-json-server
configMap:
name: ${IMAGE_NAME}-${TARGET_SYSTEM}
items:
- key: keycloak.json
path: keycloak.json
- name: keycloak-2fa-disabled-json-server
configMap:
name: ${IMAGE_NAME}-${TARGET_SYSTEM}
items:
- key: keycloak_2FAdisabled.json
path: keycloak_2FAdisabled.json
- name: deploy-config
configMap:
name: ${IMAGE_NAME}-${TARGET_SYSTEM}
items:
- key: eko-ora.deploy.json
path: eko-ora.deploy.json
- key: scim.deploy.json
path: scim.deploy.json
- key: apiSettings.deploy.json
path: apiSettings.deploy.json
- name: deploy-global-config
configMap:
name: ${IMAGE_NAME}-${TARGET_SYSTEM}
items:
- key: globalSettings.deploy.json
path: globalSettings.deploy.json
- key: roleBasedUI.deploy.json
path: roleBasedUI.deploy.json
- key: createUserReq.deploy.json
path: createUserReq.deploy.json
- key: searchUserReq.deploy.json
path: searchUserReq.deploy.json
test: false
parameters:
- name: TARGET_SYSTEM
- name: OPENSHIFT_NAMESPACE
- name: DOCKER_REGISTRY
- name: DOCKER_NAMESPACE
- name: IMAGE_NAME
- name: IMAGE_TAG
- name: SERVICE_ACCOUNT_ENABLED
So after some testing and research, this was the problem/solution:
The oc command was executed in a GitLab job. This job used a docker Image to execute the various commands including the oc one.
The Image however was out of date or rather the openshift CLI in it. After updating the Image everything worked as expected.