Skip to content

Commit

Permalink
Merge pull request artemiscloud#145 from andytaylor/probes
Browse files Browse the repository at this point in the history
artemiscloud#144 - expose Liveness and Readiness probes
  • Loading branch information
gaohoward committed Feb 22, 2022
2 parents 6e03371 + 18dd58f commit 006994f
Show file tree
Hide file tree
Showing 8 changed files with 868 additions and 111 deletions.
4 changes: 3 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ IMG ?= $(OPERATOR_IMAGE_REPO):$(OPERATOR_VERSION)
# ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary.
ENVTEST_K8S_VERSION = 1.22

TEST_ARGS = ""

# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
ifeq (,$(shell go env GOBIN))
GOBIN=$(shell go env GOPATH)/bin
Expand Down Expand Up @@ -94,7 +96,7 @@ vet: ## Run go vet against code.
go vet -composites=false ./...

test: manifests generate fmt vet envtest ## Run tests.
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test ./... -coverprofile cover.out
KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test ./... $(TEST_ARGS) -coverprofile cover.out

##@ Build

Expand Down
18 changes: 4 additions & 14 deletions api/v1beta1/activemqartemis_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,24 +208,14 @@ type DeploymentPlanType struct {
ManagementRBACEnabled bool `json:"managementRBACEnabled,omitempty"`
ExtraMounts ExtraMountsType `json:"extraMounts,omitempty"`
// Whether broker is clustered
Clustered *bool `json:"clustered,omitempty"`
PodSecurity PodSecurityType `json:"podSecurity,omitempty"`
LivenessProbe LivenessProbeType `json:"livenessProbe,omitempty"`
ReadinessProbe ReadinessProbeType `json:"readinessProbe,omitempty"`
Clustered *bool `json:"clustered,omitempty"`
PodSecurity PodSecurityType `json:"podSecurity,omitempty"`
LivenessProbe corev1.Probe `json:"livenessProbe,omitempty"`
ReadinessProbe corev1.Probe `json:"readinessProbe,omitempty"`
// Whether or not to install the artemis metrics plugin
EnableMetricsPlugin *bool `json:"enableMetricsPlugin,omitempty"`
}

type LivenessProbeType struct {
// Liveness Probe timeoutSeconds for broker container
TimeoutSeconds *int32 `json:"timeoutSeconds,omitempty"`
}

type ReadinessProbeType struct {
// Readiness Probe timeoutSeconds for broker container
TimeoutSeconds *int32 `json:"timeoutSeconds,omitempty"`
}

type PodSecurityType struct {
// ServiceAccount Name of the pod
ServiceAccountName *string `json:"serviceAccountName,omitempty"`
Expand Down
40 changes: 0 additions & 40 deletions api/v1beta1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

256 changes: 254 additions & 2 deletions config/crd/bases/broker.amq.io_activemqartemises.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -537,9 +537,135 @@ spec:
description: If aio use ASYNCIO, if nio use NIO for journal IO
type: string
livenessProbe:
description: Probe describes a health check to be performed against
a container to determine whether it is alive or ready to receive
traffic.
properties:
exec:
description: One and only one of the following should be specified.
Exec specifies the action to take.
properties:
command:
description: Command is the command line to execute inside
the container, the working directory for the command is
root ('/') in the container's filesystem. The command
is simply exec'd, it is not run inside a shell, so traditional
shell instructions ('|', etc) won't work. To use a shell,
you need to explicitly call out to that shell. Exit
status of 0 is treated as live/healthy and non-zero
is unhealthy.
items:
type: string
type: array
type: object
failureThreshold:
description: Minimum consecutive failures for the probe to
be considered failed after having succeeded. Defaults to
3. Minimum value is 1.
format: int32
type: integer
httpGet:
description: HTTPGet specifies the http request to perform.
properties:
host:
description: Host name to connect to, defaults to the
pod IP. You probably want to set "Host" in httpHeaders
instead.
type: string
httpHeaders:
description: Custom headers to set in the request. HTTP
allows repeated headers.
items:
description: HTTPHeader describes a custom header to
be used in HTTP probes
properties:
name:
description: The header field name
type: string
value:
description: The header field value
type: string
required:
- name
- value
type: object
type: array
path:
description: Path to access on the HTTP server.
type: string
port:
anyOf:
- type: integer
- type: string
description: Name or number of the port to access on the
container. Number must be in the range 1 to 65535. Name
must be an IANA_SVC_NAME.
x-kubernetes-int-or-string: true
scheme:
description: Scheme to use for connecting to the host.
Defaults to HTTP.
type: string
required:
- port
type: object
initialDelaySeconds:
description: 'Number of seconds after the container has started
before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes'
format: int32
type: integer
periodSeconds:
description: How often (in seconds) to perform the probe.
Default to 10 seconds. Minimum value is 1.
format: int32
type: integer
successThreshold:
description: Minimum consecutive successes for the probe to
be considered successful after having failed. Defaults to
1. Must be 1 for liveness and startup. Minimum value is
1.
format: int32
type: integer
tcpSocket:
description: 'TCPSocket specifies an action involving a TCP
port. TCP hooks not yet supported TODO: implement a realistic
TCP lifecycle hook'
properties:
host:
description: 'Optional: Host name to connect to, defaults
to the pod IP.'
type: string
port:
anyOf:
- type: integer
- type: string
description: Number or name of the port to access on the
container. Number must be in the range 1 to 65535. Name
must be an IANA_SVC_NAME.
x-kubernetes-int-or-string: true
required:
- port
type: object
terminationGracePeriodSeconds:
description: Optional duration in seconds the pod needs to
terminate gracefully upon probe failure. The grace period
is the duration in seconds after the processes running in
the pod are sent a termination signal and the time when
the processes are forcibly halted with a kill signal. Set
this value longer than the expected cleanup time for your
process. If this value is nil, the pod's terminationGracePeriodSeconds
will be used. Otherwise, this value overrides the value
provided by the pod spec. Value must be non-negative integer.
The value zero indicates stop immediately via the kill signal
(no opportunity to shut down). This is a beta field and
requires enabling ProbeTerminationGracePeriod feature gate.
Minimum value is 1. spec.terminationGracePeriodSeconds is
used if unset.
format: int64
type: integer
timeoutSeconds:
description: Liveness Probe timeoutSeconds for broker container
description: 'Number of seconds after which the probe times
out. Defaults to 1 second. Minimum value is 1. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes'
format: int32
type: integer
type: object
Expand All @@ -565,9 +691,135 @@ spec:
type: string
type: object
readinessProbe:
description: Probe describes a health check to be performed against
a container to determine whether it is alive or ready to receive
traffic.
properties:
exec:
description: One and only one of the following should be specified.
Exec specifies the action to take.
properties:
command:
description: Command is the command line to execute inside
the container, the working directory for the command is
root ('/') in the container's filesystem. The command
is simply exec'd, it is not run inside a shell, so traditional
shell instructions ('|', etc) won't work. To use a shell,
you need to explicitly call out to that shell. Exit
status of 0 is treated as live/healthy and non-zero
is unhealthy.
items:
type: string
type: array
type: object
failureThreshold:
description: Minimum consecutive failures for the probe to
be considered failed after having succeeded. Defaults to
3. Minimum value is 1.
format: int32
type: integer
httpGet:
description: HTTPGet specifies the http request to perform.
properties:
host:
description: Host name to connect to, defaults to the
pod IP. You probably want to set "Host" in httpHeaders
instead.
type: string
httpHeaders:
description: Custom headers to set in the request. HTTP
allows repeated headers.
items:
description: HTTPHeader describes a custom header to
be used in HTTP probes
properties:
name:
description: The header field name
type: string
value:
description: The header field value
type: string
required:
- name
- value
type: object
type: array
path:
description: Path to access on the HTTP server.
type: string
port:
anyOf:
- type: integer
- type: string
description: Name or number of the port to access on the
container. Number must be in the range 1 to 65535. Name
must be an IANA_SVC_NAME.
x-kubernetes-int-or-string: true
scheme:
description: Scheme to use for connecting to the host.
Defaults to HTTP.
type: string
required:
- port
type: object
initialDelaySeconds:
description: 'Number of seconds after the container has started
before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes'
format: int32
type: integer
periodSeconds:
description: How often (in seconds) to perform the probe.
Default to 10 seconds. Minimum value is 1.
format: int32
type: integer
successThreshold:
description: Minimum consecutive successes for the probe to
be considered successful after having failed. Defaults to
1. Must be 1 for liveness and startup. Minimum value is
1.
format: int32
type: integer
tcpSocket:
description: 'TCPSocket specifies an action involving a TCP
port. TCP hooks not yet supported TODO: implement a realistic
TCP lifecycle hook'
properties:
host:
description: 'Optional: Host name to connect to, defaults
to the pod IP.'
type: string
port:
anyOf:
- type: integer
- type: string
description: Number or name of the port to access on the
container. Number must be in the range 1 to 65535. Name
must be an IANA_SVC_NAME.
x-kubernetes-int-or-string: true
required:
- port
type: object
terminationGracePeriodSeconds:
description: Optional duration in seconds the pod needs to
terminate gracefully upon probe failure. The grace period
is the duration in seconds after the processes running in
the pod are sent a termination signal and the time when
the processes are forcibly halted with a kill signal. Set
this value longer than the expected cleanup time for your
process. If this value is nil, the pod's terminationGracePeriodSeconds
will be used. Otherwise, this value overrides the value
provided by the pod spec. Value must be non-negative integer.
The value zero indicates stop immediately via the kill signal
(no opportunity to shut down). This is a beta field and
requires enabling ProbeTerminationGracePeriod feature gate.
Minimum value is 1. spec.terminationGracePeriodSeconds is
used if unset.
format: int64
type: integer
timeoutSeconds:
description: Readiness Probe timeoutSeconds for broker container
description: 'Number of seconds after which the probe times
out. Defaults to 1 second. Minimum value is 1. More info:
https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes'
format: int32
type: integer
type: object
Expand Down

0 comments on commit 006994f

Please sign in to comment.