From 2f726b4d2be54d933e30cea0ce70736f488cf65d Mon Sep 17 00:00:00 2001 From: Rui Fu Date: Wed, 13 May 2026 21:49:22 +0800 Subject: [PATCH] Support startupProbe in pod policy --- api/compute/v1alpha1/common.go | 4 + api/compute/v1alpha1/zz_generated.deepcopy.go | 5 + ...ompute.functionmesh.io-backendconfigs.yaml | 88 ++- ...ompute.functionmesh.io-functionmeshes.yaml | 260 +++++++- ...crd-compute.functionmesh.io-functions.yaml | 88 ++- .../crd-compute.functionmesh.io-sinks.yaml | 88 ++- .../crd-compute.functionmesh.io-sources.yaml | 88 ++- ...ompute.functionmesh.io_backendconfigs.yaml | 88 ++- ...ompute.functionmesh.io_functionmeshes.yaml | 260 +++++++- .../compute.functionmesh.io_functions.yaml | 88 ++- .../bases/compute.functionmesh.io_sinks.yaml | 88 ++- .../compute.functionmesh.io_sources.yaml | 88 ++- controllers/spec/common.go | 16 +- controllers/spec/function.go | 7 +- controllers/spec/function_test.go | 108 ++++ controllers/spec/sink.go | 7 +- controllers/spec/source.go | 7 +- manifests/crd.yaml | 560 ++++++++++++++++++ 18 files changed, 1835 insertions(+), 103 deletions(-) diff --git a/api/compute/v1alpha1/common.go b/api/compute/v1alpha1/common.go index 998b2170..60a8c16c 100644 --- a/api/compute/v1alpha1/common.go +++ b/api/compute/v1alpha1/common.go @@ -228,6 +228,10 @@ type PodPolicy struct { Liveness *Liveness `json:"liveness,omitempty"` + // StartupProbe specifies the startup probe for the main function container. + // More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/ + StartupProbe *corev1.Probe `json:"startupProbe,omitempty"` + DisableDefaultAffinity bool `json:"disableDefaultAffinity,omitempty"` } diff --git a/api/compute/v1alpha1/zz_generated.deepcopy.go b/api/compute/v1alpha1/zz_generated.deepcopy.go index f66a8ac6..88d3c256 100644 --- a/api/compute/v1alpha1/zz_generated.deepcopy.go +++ b/api/compute/v1alpha1/zz_generated.deepcopy.go @@ -917,6 +917,11 @@ func (in *PodPolicy) DeepCopyInto(out *PodPolicy) { *out = new(Liveness) **out = **in } + if in.StartupProbe != nil { + in, out := &in.StartupProbe, &out.StartupProbe + *out = new(v1.Probe) + (*in).DeepCopyInto(*out) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodPolicy. diff --git a/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-backendconfigs.yaml b/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-backendconfigs.yaml index dbf4536c..d56af26b 100644 --- a/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-backendconfigs.yaml +++ b/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-backendconfigs.yaml @@ -6,7 +6,7 @@ metadata: {{- if eq .Values.admissionWebhook.certificate.provider "cert-manager" }} {{- include "function-mesh-operator.certManager.annotation" . | nindent 4 -}} {{- end }} - controller-gen.kubebuilder.io/version: v0.16.5 + controller-gen.kubebuilder.io/version: v0.15.0 name: backendconfigs.compute.functionmesh.io spec: conversion: @@ -1159,7 +1159,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1266,7 +1265,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1465,7 +1463,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1937,7 +1934,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2044,7 +2040,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2243,7 +2238,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2361,6 +2355,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer diff --git a/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-functionmeshes.yaml b/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-functionmeshes.yaml index ced49f7e..5e019204 100644 --- a/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-functionmeshes.yaml +++ b/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-functionmeshes.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.5 + controller-gen.kubebuilder.io/version: v0.15.0 name: functionmeshes.compute.functionmesh.io spec: group: compute.functionmesh.io @@ -1462,7 +1462,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1569,7 +1568,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1768,7 +1766,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2240,7 +2237,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2347,7 +2343,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2546,7 +2541,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2664,6 +2658,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer @@ -5469,7 +5543,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -5576,7 +5649,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -5775,7 +5847,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -6247,7 +6318,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -6354,7 +6424,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -6553,7 +6622,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -6671,6 +6739,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer @@ -9223,7 +9371,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -9330,7 +9477,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -9529,7 +9675,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -10001,7 +10146,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -10108,7 +10252,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -10307,7 +10450,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -10425,6 +10567,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer diff --git a/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-functions.yaml b/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-functions.yaml index 06f529ba..5180d855 100644 --- a/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-functions.yaml +++ b/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-functions.yaml @@ -6,7 +6,7 @@ metadata: {{- if eq .Values.admissionWebhook.certificate.provider "cert-manager" }} {{- include "function-mesh-operator.certManager.annotation" . | nindent 4 -}} {{- end }} - controller-gen.kubebuilder.io/version: v0.16.5 + controller-gen.kubebuilder.io/version: v0.15.0 name: functions.compute.functionmesh.io spec: conversion: @@ -1481,7 +1481,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1588,7 +1587,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1787,7 +1785,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2259,7 +2256,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2366,7 +2362,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2565,7 +2560,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2683,6 +2677,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer diff --git a/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-sinks.yaml b/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-sinks.yaml index a3fce9cd..318706e9 100644 --- a/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-sinks.yaml +++ b/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-sinks.yaml @@ -6,7 +6,7 @@ metadata: {{- if eq .Values.admissionWebhook.certificate.provider "cert-manager" }} {{- include "function-mesh-operator.certManager.annotation" . | nindent 4 -}} {{- end }} - controller-gen.kubebuilder.io/version: v0.16.5 + controller-gen.kubebuilder.io/version: v0.15.0 name: sinks.compute.functionmesh.io spec: conversion: @@ -1402,7 +1402,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1509,7 +1508,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1708,7 +1706,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2180,7 +2177,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2287,7 +2283,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2486,7 +2481,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2604,6 +2598,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer diff --git a/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-sources.yaml b/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-sources.yaml index 641e32dc..6c97682e 100644 --- a/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-sources.yaml +++ b/charts/function-mesh-operator/charts/admission-webhook/templates/crd-compute.functionmesh.io-sources.yaml @@ -6,7 +6,7 @@ metadata: {{- if eq .Values.admissionWebhook.certificate.provider "cert-manager" }} {{- include "function-mesh-operator.certManager.annotation" . | nindent 4 -}} {{- end }} - controller-gen.kubebuilder.io/version: v0.16.5 + controller-gen.kubebuilder.io/version: v0.15.0 name: sources.compute.functionmesh.io spec: conversion: @@ -1397,7 +1397,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1504,7 +1503,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1703,7 +1701,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2175,7 +2172,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2282,7 +2278,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2481,7 +2476,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2599,6 +2593,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer diff --git a/config/crd/bases/compute.functionmesh.io_backendconfigs.yaml b/config/crd/bases/compute.functionmesh.io_backendconfigs.yaml index acbb2d60..659c1ba5 100644 --- a/config/crd/bases/compute.functionmesh.io_backendconfigs.yaml +++ b/config/crd/bases/compute.functionmesh.io_backendconfigs.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.5 + controller-gen.kubebuilder.io/version: v0.15.0 name: backendconfigs.compute.functionmesh.io spec: group: compute.functionmesh.io @@ -1137,7 +1137,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1244,7 +1243,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1443,7 +1441,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1915,7 +1912,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2022,7 +2018,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2221,7 +2216,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2339,6 +2333,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer diff --git a/config/crd/bases/compute.functionmesh.io_functionmeshes.yaml b/config/crd/bases/compute.functionmesh.io_functionmeshes.yaml index 97b95fae..d2a8fb4e 100644 --- a/config/crd/bases/compute.functionmesh.io_functionmeshes.yaml +++ b/config/crd/bases/compute.functionmesh.io_functionmeshes.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.5 + controller-gen.kubebuilder.io/version: v0.15.0 name: functionmeshes.compute.functionmesh.io spec: group: compute.functionmesh.io @@ -1462,7 +1462,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1569,7 +1568,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1768,7 +1766,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2240,7 +2237,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2347,7 +2343,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2546,7 +2541,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2664,6 +2658,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer @@ -5469,7 +5543,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -5576,7 +5649,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -5775,7 +5847,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -6247,7 +6318,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -6354,7 +6424,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -6553,7 +6622,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -6671,6 +6739,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer @@ -9223,7 +9371,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -9330,7 +9477,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -9529,7 +9675,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -10001,7 +10146,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -10108,7 +10252,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -10307,7 +10450,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -10425,6 +10567,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer diff --git a/config/crd/bases/compute.functionmesh.io_functions.yaml b/config/crd/bases/compute.functionmesh.io_functions.yaml index 184fc97b..abbc3adf 100644 --- a/config/crd/bases/compute.functionmesh.io_functions.yaml +++ b/config/crd/bases/compute.functionmesh.io_functions.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.5 + controller-gen.kubebuilder.io/version: v0.15.0 name: functions.compute.functionmesh.io spec: group: compute.functionmesh.io @@ -1459,7 +1459,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1566,7 +1565,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1765,7 +1763,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2237,7 +2234,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2344,7 +2340,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2543,7 +2538,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2661,6 +2655,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer diff --git a/config/crd/bases/compute.functionmesh.io_sinks.yaml b/config/crd/bases/compute.functionmesh.io_sinks.yaml index f398f6d9..fc1a8102 100644 --- a/config/crd/bases/compute.functionmesh.io_sinks.yaml +++ b/config/crd/bases/compute.functionmesh.io_sinks.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.5 + controller-gen.kubebuilder.io/version: v0.15.0 name: sinks.compute.functionmesh.io spec: group: compute.functionmesh.io @@ -1380,7 +1380,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1487,7 +1486,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1686,7 +1684,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2158,7 +2155,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2265,7 +2261,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2464,7 +2459,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2582,6 +2576,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer diff --git a/config/crd/bases/compute.functionmesh.io_sources.yaml b/config/crd/bases/compute.functionmesh.io_sources.yaml index 6a7697d5..dfdd87e5 100644 --- a/config/crd/bases/compute.functionmesh.io_sources.yaml +++ b/config/crd/bases/compute.functionmesh.io_sources.yaml @@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.16.5 + controller-gen.kubebuilder.io/version: v0.15.0 name: sources.compute.functionmesh.io spec: group: compute.functionmesh.io @@ -1375,7 +1375,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1482,7 +1481,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -1681,7 +1679,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2153,7 +2150,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2260,7 +2256,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2459,7 +2454,6 @@ spec: format: int32 type: integer service: - default: "" type: string required: - port @@ -2577,6 +2571,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer diff --git a/controllers/spec/common.go b/controllers/spec/common.go index 09d7a513..71aca60d 100644 --- a/controllers/spec/common.go +++ b/controllers/spec/common.go @@ -519,9 +519,15 @@ func PatchStatefulSet(ctx context.Context, cli client.Client, namespace string, // configs which only work for the workload container switch container.Name { case FunctionContainerName, SinkContainerName, SourceContainerName: - // set liveness probe if it's not set - if container.LivenessProbe == nil && podPolicy != nil && podPolicy.Liveness != nil { - container.LivenessProbe = MakeLivenessProbe(podPolicy.Liveness) + if podPolicy != nil { + // set liveness probe if it's not set + if container.LivenessProbe == nil && podPolicy.Liveness != nil { + container.LivenessProbe = MakeLivenessProbe(podPolicy.Liveness) + } + // set startup probe if it's not set + if container.StartupProbe == nil && podPolicy.StartupProbe != nil { + container.StartupProbe = podPolicy.StartupProbe.DeepCopy() + } } default: // No action needed for other containers @@ -579,6 +585,9 @@ func mergePodPolicy(sourcePolicy *v1alpha1.PodPolicy, targetPolicy *v1alpha1.Pod if targetPolicy.Liveness != nil { sourcePolicy.Liveness = targetPolicy.Liveness } + if targetPolicy.StartupProbe != nil { + sourcePolicy.StartupProbe = targetPolicy.StartupProbe + } return sourcePolicy } @@ -2484,6 +2493,7 @@ func CheckIfStatefulSetSpecIsEqual(spec *appsv1.StatefulSetSpec, desiredSpec *ap container.Image != desiredContainer.Image || container.ImagePullPolicy != desiredContainer.ImagePullPolicy || !reflect.DeepEqual(container.LivenessProbe, desiredContainer.LivenessProbe) || + !reflect.DeepEqual(container.StartupProbe, desiredContainer.StartupProbe) || !reflect.DeepEqual(ports, desiredPorts) || !reflect.DeepEqual(containerEnvFrom, desiredContainerEnvFrom) || !reflect.DeepEqual(container.Resources, desiredContainer.Resources) { diff --git a/controllers/spec/function.go b/controllers/spec/function.go index 5c6f8322..661a233e 100644 --- a/controllers/spec/function.go +++ b/controllers/spec/function.go @@ -109,6 +109,7 @@ func MakeFunctionCleanUpJob(function *v1alpha1.Function) *v1.Job { container := makeFunctionContainer(function) container.Name = CleanupContainerName container.LivenessProbe = nil + container.StartupProbe = nil authConfig := function.Spec.Pulsar.CleanupAuthConfig if authConfig == nil { authConfig = function.Spec.Pulsar.AuthConfig @@ -174,7 +175,8 @@ func makeFunctionContainer(function *v1alpha1.Function) *corev1.Container { if imagePullPolicy == "" { imagePullPolicy = corev1.PullIfNotPresent } - probe := MakeLivenessProbe(function.Spec.Pod.Liveness) + livenessProbe := MakeLivenessProbe(function.Spec.Pod.Liveness) + startupProbe := function.Spec.Pod.StartupProbe.DeepCopy() allowPrivilegeEscalation := false mounts := makeFunctionVolumeMounts(function, function.Spec.Pulsar.AuthConfig) mounts = AppendPackageServiceVolumeMounts(mounts, function.Spec.PulsarPackageService) @@ -199,7 +201,8 @@ func makeFunctionContainer(function *v1alpha1.Function) *corev1.Container { ImagePullPolicy: imagePullPolicy, EnvFrom: envFrom, VolumeMounts: mounts, - LivenessProbe: probe, + LivenessProbe: livenessProbe, + StartupProbe: startupProbe, SecurityContext: &corev1.SecurityContext{ Capabilities: &corev1.Capabilities{ Drop: []corev1.Capability{"ALL"}, diff --git a/controllers/spec/function_test.go b/controllers/spec/function_test.go index ea1ca0b4..e05397a8 100644 --- a/controllers/spec/function_test.go +++ b/controllers/spec/function_test.go @@ -32,6 +32,7 @@ import ( "gotest.tools/assert" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" ) func TestCreateFunctionDetailsForStatefulFunction(t *testing.T) { @@ -109,6 +110,113 @@ func makeFunctionSamplePackageURL(functionName string) *v1alpha1.Function { return f } +func makeSinkSample(sinkName string) *v1alpha1.Sink { + replicas := int32(1) + trueVal := true + return &v1alpha1.Sink{ + TypeMeta: metav1.TypeMeta{ + Kind: "Sink", + APIVersion: "compute.functionmesh.io/v1alpha1", + }, + ObjectMeta: *makeSampleObjectMeta(sinkName), + Spec: v1alpha1.SinkSpec{ + Name: sinkName, + ClassName: "org.apache.pulsar.io.elasticsearch.ElasticSearchSink", + Tenant: "public", + Namespace: "default", + ClusterName: TestClusterName, + Input: v1alpha1.InputConf{ + Topics: []string{ + "persistent://public/default/input", + }, + TypeClassName: "java.lang.String", + }, + Replicas: &replicas, + AutoAck: &trueVal, + Messaging: v1alpha1.Messaging{ + Pulsar: &v1alpha1.PulsarMessaging{ + PulsarConfig: TestClusterName, + }, + }, + Runtime: v1alpha1.Runtime{ + Java: &v1alpha1.JavaRuntime{ + Jar: "connectors/pulsar-io-elastic-search.nar", + }, + }, + }, + } +} + +func makeSourceSample(sourceName string) *v1alpha1.Source { + replicas := int32(1) + return &v1alpha1.Source{ + TypeMeta: metav1.TypeMeta{ + Kind: "Source", + APIVersion: "compute.functionmesh.io/v1alpha1", + }, + ObjectMeta: *makeSampleObjectMeta(sourceName), + Spec: v1alpha1.SourceSpec{ + Name: sourceName, + ClassName: "org.apache.pulsar.io.datagenerator.DataGeneratorSource", + Tenant: "public", + Namespace: "default", + ClusterName: TestClusterName, + Output: v1alpha1.OutputConf{ + Topic: "persistent://public/default/output", + TypeClassName: "java.lang.String", + }, + Replicas: &replicas, + Messaging: v1alpha1.Messaging{ + Pulsar: &v1alpha1.PulsarMessaging{ + PulsarConfig: TestClusterName, + }, + }, + Runtime: v1alpha1.Runtime{ + Java: &v1alpha1.JavaRuntime{ + Jar: "connectors/pulsar-io-data-generator.nar", + }, + }, + }, + } +} + +func TestStartupProbeOnFunctionSinkSourceContainers(t *testing.T) { + probe := &corev1.Probe{ + ProbeHandler: corev1.ProbeHandler{ + HTTPGet: &corev1.HTTPGetAction{ + Path: "/healthz", + Port: intstr.FromInt32(MetricsPort.ContainerPort), + }, + }, + PeriodSeconds: 10, + FailureThreshold: 30, + } + + function := makeFunctionSample("startup-function") + function.Spec.Pod.StartupProbe = probe + functionContainer := makeFunctionContainer(function) + assert.DeepEqual(t, functionContainer.StartupProbe, probe) + functionCleanup := MakeFunctionCleanUpJob(function) + assert.Assert(t, functionCleanup.Spec.Template.Spec.Containers[0].StartupProbe == nil, + "cleanup job should not inherit startup probe") + + sink := makeSinkSample("startup-sink") + sink.Spec.Pod.StartupProbe = probe + sinkContainer := makeSinkContainer(sink) + assert.DeepEqual(t, sinkContainer.StartupProbe, probe) + sinkCleanup := MakeSinkCleanUpJob(sink) + assert.Assert(t, sinkCleanup.Spec.Template.Spec.Containers[0].StartupProbe == nil, + "cleanup job should not inherit startup probe") + + source := makeSourceSample("startup-source") + source.Spec.Pod.StartupProbe = probe + sourceContainer := makeSourceContainer(source) + assert.DeepEqual(t, sourceContainer.StartupProbe, probe) + sourceCleanup := MakeSourceCleanUpJob(source) + assert.Assert(t, sourceCleanup.Spec.Template.Spec.Containers[0].StartupProbe == nil, + "cleanup job should not inherit startup probe") +} + func TestInitContainerDownloader(t *testing.T) { utils.EnableInitContainers = true function := makeFunctionSamplePackageURL("test") diff --git a/controllers/spec/sink.go b/controllers/spec/sink.go index b240dd7f..d801df75 100644 --- a/controllers/spec/sink.go +++ b/controllers/spec/sink.go @@ -104,7 +104,8 @@ func makeSinkContainer(sink *v1alpha1.Sink) *corev1.Container { if imagePullPolicy == "" { imagePullPolicy = corev1.PullIfNotPresent } - probe := MakeLivenessProbe(sink.Spec.Pod.Liveness) + livenessProbe := MakeLivenessProbe(sink.Spec.Pod.Liveness) + startupProbe := sink.Spec.Pod.StartupProbe.DeepCopy() allowPrivilegeEscalation := false mounts := makeSinkVolumeMounts(sink, sink.Spec.Pulsar.AuthConfig) mounts = AppendPackageServiceVolumeMounts(mounts, sink.Spec.PulsarPackageService) @@ -128,7 +129,8 @@ func makeSinkContainer(sink *v1alpha1.Sink) *corev1.Container { ImagePullPolicy: imagePullPolicy, EnvFrom: envFrom, VolumeMounts: mounts, - LivenessProbe: probe, + LivenessProbe: livenessProbe, + StartupProbe: startupProbe, SecurityContext: &corev1.SecurityContext{ Capabilities: &corev1.Capabilities{ Drop: []corev1.Capability{"ALL"}, @@ -165,6 +167,7 @@ func MakeSinkCleanUpJob(sink *v1alpha1.Sink) *v1.Job { container := makeSinkContainer(sink) container.Name = CleanupContainerName container.LivenessProbe = nil + container.StartupProbe = nil authConfig := sink.Spec.Pulsar.CleanupAuthConfig if authConfig == nil { authConfig = sink.Spec.Pulsar.AuthConfig diff --git a/controllers/spec/source.go b/controllers/spec/source.go index ed245dd7..52a6908d 100644 --- a/controllers/spec/source.go +++ b/controllers/spec/source.go @@ -99,7 +99,8 @@ func makeSourceContainer(source *v1alpha1.Source) *corev1.Container { if imagePullPolicy == "" { imagePullPolicy = corev1.PullIfNotPresent } - probe := MakeLivenessProbe(source.Spec.Pod.Liveness) + livenessProbe := MakeLivenessProbe(source.Spec.Pod.Liveness) + startupProbe := source.Spec.Pod.StartupProbe.DeepCopy() allowPrivilegeEscalation := false mounts := makeSourceVolumeMounts(source, source.Spec.Pulsar.AuthConfig) mounts = AppendPackageServiceVolumeMounts(mounts, source.Spec.PulsarPackageService) @@ -123,7 +124,8 @@ func makeSourceContainer(source *v1alpha1.Source) *corev1.Container { ImagePullPolicy: imagePullPolicy, EnvFrom: envFrom, VolumeMounts: mounts, - LivenessProbe: probe, + LivenessProbe: livenessProbe, + StartupProbe: startupProbe, SecurityContext: &corev1.SecurityContext{ Capabilities: &corev1.Capabilities{ Drop: []corev1.Capability{"ALL"}, @@ -229,6 +231,7 @@ func MakeSourceCleanUpJob(source *v1alpha1.Source) *v1.Job { } container := makeSourceContainer(source) container.LivenessProbe = nil + container.StartupProbe = nil container.Name = CleanupContainerName authConfig := source.Spec.Pulsar.CleanupAuthConfig if authConfig == nil { diff --git a/manifests/crd.yaml b/manifests/crd.yaml index 586a99fe..834496c7 100644 --- a/manifests/crd.yaml +++ b/manifests/crd.yaml @@ -2345,6 +2345,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer @@ -5890,6 +5970,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer @@ -9891,6 +10051,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer @@ -13639,6 +13879,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer @@ -17549,6 +17869,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer @@ -21629,6 +22029,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer @@ -25456,6 +25936,86 @@ spec: - name type: object type: array + startupProbe: + properties: + exec: + properties: + command: + items: + type: string + type: array + x-kubernetes-list-type: atomic + type: object + failureThreshold: + format: int32 + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + required: + - port + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + x-kubernetes-list-type: atomic + path: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + scheme: + type: string + required: + - port + type: object + initialDelaySeconds: + format: int32 + type: integer + periodSeconds: + format: int32 + type: integer + successThreshold: + format: int32 + type: integer + tcpSocket: + properties: + host: + type: string + port: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + required: + - port + type: object + terminationGracePeriodSeconds: + format: int64 + type: integer + timeoutSeconds: + format: int32 + type: integer + type: object terminationGracePeriodSeconds: format: int64 type: integer