diff --git a/api/v1/cosmosfullnode_types.go b/api/v1/cosmosfullnode_types.go index 24d13e2c..a471103d 100644 --- a/api/v1/cosmosfullnode_types.go +++ b/api/v1/cosmosfullnode_types.go @@ -727,6 +727,11 @@ type ServiceSpec struct { // +optional P2PTemplate ServiceOverridesSpec `json:"p2pTemplate"` + // Disables the health check requiring the instance to be + // in-sync with the chain before the pod is marked as ready. + // +optional + DisableSyncReadiness *bool `json:"disableSyncReadiness"` + // Overrides for the single RPC service. // +optional RPCTemplate ServiceOverridesSpec `json:"rpcTemplate"` diff --git a/api/v1/zz_generated.deepcopy.go b/api/v1/zz_generated.deepcopy.go index d4f5a544..6dbc5b36 100644 --- a/api/v1/zz_generated.deepcopy.go +++ b/api/v1/zz_generated.deepcopy.go @@ -771,6 +771,11 @@ func (in *ServiceSpec) DeepCopyInto(out *ServiceSpec) { **out = **in } in.P2PTemplate.DeepCopyInto(&out.P2PTemplate) + if in.DisableSyncReadiness != nil { + in, out := &in.DisableSyncReadiness, &out.DisableSyncReadiness + *out = new(bool) + **out = **in + } in.RPCTemplate.DeepCopyInto(&out.RPCTemplate) } diff --git a/internal/fullnode/pod_builder.go b/internal/fullnode/pod_builder.go index f2a08e6d..4ab08c00 100644 --- a/internal/fullnode/pod_builder.go +++ b/internal/fullnode/pod_builder.go @@ -90,27 +90,30 @@ func NewPodBuilder(crd *cosmosv1.CosmosFullNode) PodBuilder { ImagePullPolicy: tpl.ImagePullPolicy, WorkingDir: workDir, }, - // healthcheck sidecar - { - Name: "healthcheck", - // Available images: https://github.com/orgs/strangelove-ventures/packages?repo_name=cosmos-operator - // IMPORTANT: Must use v0.6.2 or later. - Image: "ghcr.io/strangelove-ventures/cosmos-operator:" + version.DockerTag(), - Command: []string{"/manager", "healthcheck"}, - Ports: []corev1.ContainerPort{{ContainerPort: healthCheckPort, Protocol: corev1.ProtocolTCP}}, - Resources: corev1.ResourceRequirements{ - Requests: corev1.ResourceList{ - corev1.ResourceCPU: resource.MustParse("5m"), - corev1.ResourceMemory: resource.MustParse("16Mi"), - }, - }, - ReadinessProbe: probes[1], - ImagePullPolicy: tpl.ImagePullPolicy, - }, }, }, } + if crd.Spec.Service.DisableSyncReadiness == nil || !*crd.Spec.Service.DisableSyncReadiness { + // healthcheck sidecar + pod.Spec.Containers = append(pod.Spec.Containers, corev1.Container{ + Name: "sync-healthcheck", + // Available images: https://github.com/orgs/strangelove-ventures/packages?repo_name=cosmos-operator + // IMPORTANT: Must use v0.6.2 or later. + Image: "ghcr.io/strangelove-ventures/cosmos-operator:" + version.DockerTag(), + Command: []string{"/manager", "healthcheck"}, + Ports: []corev1.ContainerPort{{ContainerPort: healthCheckPort, Protocol: corev1.ProtocolTCP}}, + Resources: corev1.ResourceRequirements{ + Requests: corev1.ResourceList{ + corev1.ResourceCPU: resource.MustParse("5m"), + corev1.ResourceMemory: resource.MustParse("16Mi"), + }, + }, + ReadinessProbe: probes[1], + ImagePullPolicy: tpl.ImagePullPolicy, + }) + } + if len(crd.Spec.ChainSpec.Versions) > 0 { // version check sidecar, runs on inverval in case the instance is halting for upgrade. pod.Spec.Containers = append(pod.Spec.Containers, corev1.Container{ @@ -159,19 +162,23 @@ func podReadinessProbes(crd *cosmosv1.CosmosFullNode) []*corev1.Probe { FailureThreshold: 5, } - sidecarProbe := &corev1.Probe{ - ProbeHandler: corev1.ProbeHandler{ - HTTPGet: &corev1.HTTPGetAction{ - Path: "/", - Port: intstr.FromInt(healthCheckPort), - Scheme: corev1.URISchemeHTTP, + var sidecarProbe *corev1.Probe + + if crd.Spec.Service.DisableSyncReadiness == nil || !*crd.Spec.Service.DisableSyncReadiness { + sidecarProbe = &corev1.Probe{ + ProbeHandler: corev1.ProbeHandler{ + HTTPGet: &corev1.HTTPGetAction{ + Path: "/", + Port: intstr.FromInt(healthCheckPort), + Scheme: corev1.URISchemeHTTP, + }, }, - }, - InitialDelaySeconds: 1, - TimeoutSeconds: 10, - PeriodSeconds: 10, - SuccessThreshold: 1, - FailureThreshold: 3, + InitialDelaySeconds: 1, + TimeoutSeconds: 10, + PeriodSeconds: 10, + SuccessThreshold: 1, + FailureThreshold: 3, + } } return []*corev1.Probe{mainProbe, sidecarProbe}