Init add liveness probe
Signed-off-by: DavidSpek <vanderspek.david@gmail.com>
This commit is contained in:
		
							parent
							
								
									af084a5a65
								
							
						
					
					
						commit
						db96273ab3
					
				|  | @ -260,6 +260,139 @@ spec: | ||||||
|                     type: array |                     type: array | ||||||
|                     items: |                     items: | ||||||
|                       type: string |                       type: string | ||||||
|  |                   liveness_probe: | ||||||
|  |                     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: '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 | ||||||
|                   master_pod_move_timeout: |                   master_pod_move_timeout: | ||||||
|                     type: string |                     type: string | ||||||
|                     default: "20m" |                     default: "20m" | ||||||
|  |  | ||||||
|  | @ -202,6 +202,140 @@ spec: | ||||||
|                 items: |                 items: | ||||||
|                   type: object |                   type: object | ||||||
|                   x-kubernetes-preserve-unknown-fields: true |                   x-kubernetes-preserve-unknown-fields: true | ||||||
|  |               livenessProbe: | ||||||
|  |                 description: 'Periodic probe of container liveness. Container | ||||||
|  |                   will be restarted if the probe fails. Cannot be updated. More | ||||||
|  |                   info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' | ||||||
|  |                 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: '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 | ||||||
|               init_containers: |               init_containers: | ||||||
|                 type: array |                 type: array | ||||||
|                 description: deprecated |                 description: deprecated | ||||||
|  |  | ||||||
|  | @ -205,6 +205,19 @@ configKubernetes: | ||||||
|   # whether the Spilo container should run with additional permissions other than parent. |   # whether the Spilo container should run with additional permissions other than parent. | ||||||
|   # required by cron which needs setuid |   # required by cron which needs setuid | ||||||
|   spilo_allow_privilege_escalation: true |   spilo_allow_privilege_escalation: true | ||||||
|  | 
 | ||||||
|  |   # liveness probe for the spilo pod | ||||||
|  |   # liveness_probe: | ||||||
|  |   #   httpGet: | ||||||
|  |   #     scheme: HTTP | ||||||
|  |   #     path: /liveness | ||||||
|  |   #     port: 8008 | ||||||
|  |   #   initialDelaySeconds: 10 | ||||||
|  |   #   periodSeconds: 10 | ||||||
|  |   #   timeoutSeconds: 5 | ||||||
|  |   #   successThreshold: 1 | ||||||
|  |   #   failureThreshold: 3 | ||||||
|  | 
 | ||||||
|   # storage resize strategy, available options are: ebs, pvc, off or mixed |   # storage resize strategy, available options are: ebs, pvc, off or mixed | ||||||
|   storage_resize_mode: pvc |   storage_resize_mode: pvc | ||||||
|   # pod toleration assigned to instances of every Postgres cluster |   # pod toleration assigned to instances of every Postgres cluster | ||||||
|  |  | ||||||
|  | @ -85,6 +85,10 @@ These parameters are grouped directly under  the `spec` key in the manifest. | ||||||
|   requires a custom Spilo image. Note the FSGroup of a Pod cannot be changed |   requires a custom Spilo image. Note the FSGroup of a Pod cannot be changed | ||||||
|   without recreating a new Pod. Optional. |   without recreating a new Pod. Optional. | ||||||
| 
 | 
 | ||||||
|  | * **livenessProbe** | ||||||
|  |   Allows for adding a liveness probe to the Spilo container to detect if it's | ||||||
|  |   running properly. | ||||||
|  | 
 | ||||||
| * **enableMasterLoadBalancer** | * **enableMasterLoadBalancer** | ||||||
|   boolean flag to override the operator defaults (set by the |   boolean flag to override the operator defaults (set by the | ||||||
|   `enable_master_load_balancer` parameter) to define whether to enable the load |   `enable_master_load_balancer` parameter) to define whether to enable the load | ||||||
|  |  | ||||||
|  | @ -469,6 +469,10 @@ configuration they are grouped under the `kubernetes` key. | ||||||
|   process. Required by cron which needs setuid. Without this parameter, |   process. Required by cron which needs setuid. Without this parameter, | ||||||
|   certification rotation & backups will not be done. The default is `true`. |   certification rotation & backups will not be done. The default is `true`. | ||||||
| 
 | 
 | ||||||
|  | * **liveness_probe** | ||||||
|  |   Allows for adding a liveness probe to the Spilo container to detect if it's | ||||||
|  |   running properly. | ||||||
|  | 
 | ||||||
| * **additional_pod_capabilities** | * **additional_pod_capabilities** | ||||||
|   list of additional capabilities to be added to the postgres container's |   list of additional capabilities to be added to the postgres container's | ||||||
|   SecurityContext (e.g. SYS_NICE etc.). Please, make sure first that the |   SecurityContext (e.g. SYS_NICE etc.). Please, make sure first that the | ||||||
|  |  | ||||||
|  | @ -152,6 +152,16 @@ data: | ||||||
|   # spilo_runasgroup: 103 |   # spilo_runasgroup: 103 | ||||||
|   # spilo_fsgroup: 103 |   # spilo_fsgroup: 103 | ||||||
|   spilo_privileged: "false" |   spilo_privileged: "false" | ||||||
|  |   # liveness_probe: |- | ||||||
|  |   #   httpGet: | ||||||
|  |   #     scheme: HTTP | ||||||
|  |   #     path: /liveness | ||||||
|  |   #     port: 8008 | ||||||
|  |   #   initialDelaySeconds: 10 | ||||||
|  |   #   periodSeconds: 10 | ||||||
|  |   #   timeoutSeconds: 5 | ||||||
|  |   #   successThreshold: 1 | ||||||
|  |   #   failureThreshold: 3 | ||||||
|   storage_resize_mode: "pvc" |   storage_resize_mode: "pvc" | ||||||
|   super_username: postgres |   super_username: postgres | ||||||
|   # target_major_version: "15" |   # target_major_version: "15" | ||||||
|  |  | ||||||
|  | @ -258,6 +258,139 @@ spec: | ||||||
|                     type: array |                     type: array | ||||||
|                     items: |                     items: | ||||||
|                       type: string |                       type: string | ||||||
|  |                   liveness_probe: | ||||||
|  |                     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: '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 | ||||||
|                   master_pod_move_timeout: |                   master_pod_move_timeout: | ||||||
|                     type: string |                     type: string | ||||||
|                     default: "20m" |                     default: "20m" | ||||||
|  |  | ||||||
|  | @ -78,6 +78,16 @@ configuration: | ||||||
|     # inherited_labels: |     # inherited_labels: | ||||||
|     # - application |     # - application | ||||||
|     # - environment |     # - environment | ||||||
|  |     # liveness_probe: | ||||||
|  |     #   httpGet: | ||||||
|  |     #     scheme: HTTP | ||||||
|  |     #     path: /liveness | ||||||
|  |     #     port: 8008 | ||||||
|  |     #   initialDelaySeconds: 10 | ||||||
|  |     #   periodSeconds: 10 | ||||||
|  |     #   timeoutSeconds: 5 | ||||||
|  |     #   successThreshold: 1 | ||||||
|  |     #   failureThreshold: 3 | ||||||
|     master_pod_move_timeout: 20m |     master_pod_move_timeout: 20m | ||||||
|     # node_readiness_label: |     # node_readiness_label: | ||||||
|     #   status: ready |     #   status: ready | ||||||
|  |  | ||||||
|  | @ -200,6 +200,140 @@ spec: | ||||||
|                 items: |                 items: | ||||||
|                   type: object |                   type: object | ||||||
|                   x-kubernetes-preserve-unknown-fields: true |                   x-kubernetes-preserve-unknown-fields: true | ||||||
|  |               livenessProbe: | ||||||
|  |                 description: 'Periodic probe of container liveness. Container | ||||||
|  |                   will be restarted if the probe fails. Cannot be updated. More | ||||||
|  |                   info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes' | ||||||
|  |                 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: '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 | ||||||
|               init_containers: |               init_containers: | ||||||
|                 type: array |                 type: array | ||||||
|                 description: deprecated |                 description: deprecated | ||||||
|  |  | ||||||
|  | @ -102,6 +102,7 @@ type KubernetesMetaConfiguration struct { | ||||||
| 	PodManagementPolicy                      string              `json:"pod_management_policy,omitempty"` | 	PodManagementPolicy                      string              `json:"pod_management_policy,omitempty"` | ||||||
| 	EnableReadinessProbe                     bool                `json:"enable_readiness_probe,omitempty"` | 	EnableReadinessProbe                     bool                `json:"enable_readiness_probe,omitempty"` | ||||||
| 	EnableCrossNamespaceSecret               bool                `json:"enable_cross_namespace_secret,omitempty"` | 	EnableCrossNamespaceSecret               bool                `json:"enable_cross_namespace_secret,omitempty"` | ||||||
|  | 	LivenessProbe                            *v1.Probe           `json:"liveness_probe,omitempty"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // PostgresPodResourcesDefaults defines the spec of default resources
 | // PostgresPodResourcesDefaults defines the spec of default resources
 | ||||||
|  |  | ||||||
|  | @ -87,6 +87,7 @@ type PostgresSpec struct { | ||||||
| 	AdditionalVolumes         []AdditionalVolume `json:"additionalVolumes,omitempty"` | 	AdditionalVolumes         []AdditionalVolume `json:"additionalVolumes,omitempty"` | ||||||
| 	Streams                   []Stream           `json:"streams,omitempty"` | 	Streams                   []Stream           `json:"streams,omitempty"` | ||||||
| 	Env                       []v1.EnvVar        `json:"env,omitempty"` | 	Env                       []v1.EnvVar        `json:"env,omitempty"` | ||||||
|  | 	LivenessProbe             *v1.Probe          `json:"livenessProbe,omitempty"` | ||||||
| 
 | 
 | ||||||
| 	// deprecated json tags
 | 	// deprecated json tags
 | ||||||
| 	InitContainersOld       []v1.Container `json:"init_containers,omitempty"` | 	InitContainersOld       []v1.Container `json:"init_containers,omitempty"` | ||||||
|  |  | ||||||
|  | @ -1207,6 +1207,19 @@ func generateSpiloReadinessProbe() *v1.Probe { | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func generateSpiloLivenessProbe(probe, defaultProbe *v1.Probe) *v1.Probe { | ||||||
|  | 
 | ||||||
|  | 	if probe != nil { | ||||||
|  | 		return probe | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if defaultProbe != nil { | ||||||
|  | 		return defaultProbe | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*appsv1.StatefulSet, error) { | func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*appsv1.StatefulSet, error) { | ||||||
| 
 | 
 | ||||||
| 	var ( | 	var ( | ||||||
|  | @ -1326,6 +1339,8 @@ func (c *Cluster) generateStatefulSet(spec *acidv1.PostgresSpec) (*appsv1.Statef | ||||||
| 		spiloContainer.ReadinessProbe = generateSpiloReadinessProbe() | 		spiloContainer.ReadinessProbe = generateSpiloReadinessProbe() | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	spiloContainer.LivenessProbe = generateSpiloLivenessProbe(spec.LivenessProbe, c.OpConfig.LivenessProbe) | ||||||
|  | 
 | ||||||
| 	// generate container specs for sidecars specified in the cluster manifest
 | 	// generate container specs for sidecars specified in the cluster manifest
 | ||||||
| 	clusterSpecificSidecars := []v1.Container{} | 	clusterSpecificSidecars := []v1.Container{} | ||||||
| 	if spec.Sidecars != nil && len(spec.Sidecars) > 0 { | 	if spec.Sidecars != nil && len(spec.Sidecars) > 0 { | ||||||
|  |  | ||||||
|  | @ -125,6 +125,7 @@ func (c *Controller) importConfigurationFromCRD(fromCRD *acidv1.OperatorConfigur | ||||||
| 	result.PodAntiAffinityTopologyKey = util.Coalesce(fromCRD.Kubernetes.PodAntiAffinityTopologyKey, "kubernetes.io/hostname") | 	result.PodAntiAffinityTopologyKey = util.Coalesce(fromCRD.Kubernetes.PodAntiAffinityTopologyKey, "kubernetes.io/hostname") | ||||||
| 	result.PodAntiAffinityPreferredDuringScheduling = fromCRD.Kubernetes.PodAntiAffinityPreferredDuringScheduling | 	result.PodAntiAffinityPreferredDuringScheduling = fromCRD.Kubernetes.PodAntiAffinityPreferredDuringScheduling | ||||||
| 	result.PodToleration = fromCRD.Kubernetes.PodToleration | 	result.PodToleration = fromCRD.Kubernetes.PodToleration | ||||||
|  | 	result.LivenessProbe = fromCRD.Kubernetes.LivenessProbe | ||||||
| 
 | 
 | ||||||
| 	// Postgres Pod resources
 | 	// Postgres Pod resources
 | ||||||
| 	result.DefaultCPURequest = util.Coalesce(fromCRD.PostgresPodResources.DefaultCPURequest, "100m") | 	result.DefaultCPURequest = util.Coalesce(fromCRD.PostgresPodResources.DefaultCPURequest, "100m") | ||||||
|  |  | ||||||
|  | @ -245,6 +245,7 @@ type Config struct { | ||||||
| 	TargetMajorVersion                       string            `name:"target_major_version" default:"15"` | 	TargetMajorVersion                       string            `name:"target_major_version" default:"15"` | ||||||
| 	PatroniAPICheckInterval                  time.Duration     `name:"patroni_api_check_interval" default:"1s"` | 	PatroniAPICheckInterval                  time.Duration     `name:"patroni_api_check_interval" default:"1s"` | ||||||
| 	PatroniAPICheckTimeout                   time.Duration     `name:"patroni_api_check_timeout" default:"5s"` | 	PatroniAPICheckTimeout                   time.Duration     `name:"patroni_api_check_timeout" default:"5s"` | ||||||
|  | 	LivenessProbe                            *v1.Probe         `json:"liveness_probe,omitempty"` | ||||||
| 	EnablePatroniFailsafeMode                *bool             `name:"enable_patroni_failsafe_mode" default:"false"` | 	EnablePatroniFailsafeMode                *bool             `name:"enable_patroni_failsafe_mode" default:"false"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue