Skip to content

Commit 29ea863

Browse files
authored
allow empty resources when defaults are empty (#2524)
* allow empty resources when defaults are empty * update codegen * add more unit tests and remove internal resources defaults * a unit test for min limit and raising to request * uncomment defaults in example configmap * simplifying pooler pod generation unit test
1 parent bf5db67 commit 29ea863

File tree

15 files changed

+317
-224
lines changed

15 files changed

+317
-224
lines changed

charts/postgres-operator/crds/operatorconfigurations.yaml

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -365,19 +365,15 @@ spec:
365365
default_cpu_limit:
366366
type: string
367367
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
368-
default: "1"
369368
default_cpu_request:
370369
type: string
371370
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
372-
default: "100m"
373371
default_memory_limit:
374372
type: string
375373
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
376-
default: "500Mi"
377374
default_memory_request:
378375
type: string
379376
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
380-
default: "100Mi"
381377
max_cpu_request:
382378
type: string
383379
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
@@ -387,11 +383,9 @@ spec:
387383
min_cpu_limit:
388384
type: string
389385
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
390-
default: "250m"
391386
min_memory_limit:
392387
type: string
393388
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
394-
default: "250Mi"
395389
timeouts:
396390
type: object
397391
properties:
@@ -672,19 +666,15 @@ spec:
672666
connection_pooler_default_cpu_limit:
673667
type: string
674668
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
675-
default: "1"
676669
connection_pooler_default_cpu_request:
677670
type: string
678671
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
679-
default: "500m"
680672
connection_pooler_default_memory_limit:
681673
type: string
682674
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
683-
default: "100Mi"
684675
connection_pooler_default_memory_request:
685676
type: string
686677
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
687-
default: "100Mi"
688678
patroni:
689679
type: object
690680
properties:

docs/reference/operator_parameters.md

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -549,19 +549,19 @@ CRD-based configuration.
549549

550550
* **default_cpu_request**
551551
CPU request value for the Postgres containers, unless overridden by
552-
cluster-specific settings. The default is `100m`.
552+
cluster-specific settings. Empty string or `0` disables the default.
553553

554554
* **default_memory_request**
555555
memory request value for the Postgres containers, unless overridden by
556-
cluster-specific settings. The default is `100Mi`.
556+
cluster-specific settings. Empty string or `0` disables the default.
557557

558558
* **default_cpu_limit**
559559
CPU limits for the Postgres containers, unless overridden by cluster-specific
560-
settings. The default is `1`.
560+
settings. Empty string or `0` disables the default.
561561

562562
* **default_memory_limit**
563563
memory limits for the Postgres containers, unless overridden by cluster-specific
564-
settings. The default is `500Mi`.
564+
settings. Empty string or `0` disables the default.
565565

566566
* **max_cpu_request**
567567
optional upper boundary for CPU request
@@ -571,11 +571,11 @@ CRD-based configuration.
571571

572572
* **min_cpu_limit**
573573
hard CPU minimum what we consider to be required to properly run Postgres
574-
clusters with Patroni on Kubernetes. The default is `250m`.
574+
clusters with Patroni on Kubernetes.
575575

576576
* **min_memory_limit**
577577
hard memory minimum what we consider to be required to properly run Postgres
578-
clusters with Patroni on Kubernetes. The default is `250Mi`.
578+
clusters with Patroni on Kubernetes.
579579

580580
## Patroni options
581581

@@ -1026,5 +1026,4 @@ operator being able to provide some reasonable defaults.
10261026
**connection_pooler_default_memory_reques**
10271027
**connection_pooler_default_cpu_limit**
10281028
**connection_pooler_default_memory_limit**
1029-
Default resource configuration for connection pooler deployment. The internal
1030-
default for memory request and limit is `100Mi`, for CPU it is `500m` and `1`.
1029+
Default resource configuration for connection pooler deployment.

docs/user.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,9 @@ The minimum limits to properly run the `postgresql` resource are configured to
689689
manifest the operator will raise the limits to the configured minimum values.
690690
If no resources are defined in the manifest they will be obtained from the
691691
configured [default requests](reference/operator_parameters.md#kubernetes-resource-requests).
692+
If neither defaults nor minimum limits are configured the operator will not
693+
specify any resources and it's up to K8s (or your own) admission hooks to
694+
handle it.
692695

693696
### HugePages support
694697

manifests/configmap.yaml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ data:
1313
cluster_history_entries: "1000"
1414
cluster_labels: application:spilo
1515
cluster_name_label: cluster-name
16-
# connection_pooler_default_cpu_limit: "1"
17-
# connection_pooler_default_cpu_request: "500m"
18-
# connection_pooler_default_memory_limit: 100Mi
19-
# connection_pooler_default_memory_request: 100Mi
16+
connection_pooler_default_cpu_limit: "1"
17+
connection_pooler_default_cpu_request: "500m"
18+
connection_pooler_default_memory_limit: 100Mi
19+
connection_pooler_default_memory_request: 100Mi
2020
connection_pooler_image: "registry.opensource.zalan.do/acid/pgbouncer:master-32"
2121
# connection_pooler_max_db_connections: 60
2222
# connection_pooler_mode: "transaction"
@@ -28,10 +28,10 @@ data:
2828
# custom_pod_annotations: "keya:valuea,keyb:valueb"
2929
db_hosted_zone: db.example.com
3030
debug_logging: "true"
31-
# default_cpu_limit: "1"
32-
# default_cpu_request: 100m
33-
# default_memory_limit: 500Mi
34-
# default_memory_request: 100Mi
31+
default_cpu_limit: "1"
32+
default_cpu_request: 100m
33+
default_memory_limit: 500Mi
34+
default_memory_request: 100Mi
3535
# delete_annotation_date_key: delete-date
3636
# delete_annotation_name_key: delete-clustername
3737
docker_image: ghcr.io/zalando/spilo-15:3.0-p1

manifests/operatorconfiguration.crd.yaml

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -363,19 +363,15 @@ spec:
363363
default_cpu_limit:
364364
type: string
365365
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
366-
default: "1"
367366
default_cpu_request:
368367
type: string
369368
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
370-
default: "100m"
371369
default_memory_limit:
372370
type: string
373371
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
374-
default: "500Mi"
375372
default_memory_request:
376373
type: string
377374
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
378-
default: "100Mi"
379375
max_cpu_request:
380376
type: string
381377
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
@@ -385,11 +381,9 @@ spec:
385381
min_cpu_limit:
386382
type: string
387383
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
388-
default: "250m"
389384
min_memory_limit:
390385
type: string
391386
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
392-
default: "250Mi"
393387
timeouts:
394388
type: object
395389
properties:
@@ -670,19 +664,15 @@ spec:
670664
connection_pooler_default_cpu_limit:
671665
type: string
672666
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
673-
default: "1"
674667
connection_pooler_default_cpu_request:
675668
type: string
676669
pattern: '^(\d+m|\d+(\.\d{1,3})?)$'
677-
default: "500m"
678670
connection_pooler_default_memory_limit:
679671
type: string
680672
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
681-
default: "100Mi"
682673
connection_pooler_default_memory_request:
683674
type: string
684675
pattern: '^(\d+(e\d+)?|\d+(\.\d+)?(e\d+)?[EPTGMK]i?)$'
685-
default: "100Mi"
686676
patroni:
687677
type: object
688678
properties:

pkg/apis/acid.zalan.do/v1/postgresql_type.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,10 @@ type PostgresqlParam struct {
153153

154154
// ResourceDescription describes CPU and memory resources defined for a cluster.
155155
type ResourceDescription struct {
156-
CPU string `json:"cpu"`
157-
Memory string `json:"memory"`
158-
HugePages2Mi *string `json:"hugepages-2Mi"`
159-
HugePages1Gi *string `json:"hugepages-1Gi"`
156+
CPU *string `json:"cpu,omitempty"`
157+
Memory *string `json:"memory,omitempty"`
158+
HugePages2Mi *string `json:"hugepages-2Mi,omitempty"`
159+
HugePages1Gi *string `json:"hugepages-1Gi,omitempty"`
160160
}
161161

162162
// Resources describes requests and limits for the cluster resouces.
@@ -260,7 +260,7 @@ type Stream struct {
260260
// StreamTable defines properties of outbox tables for FabricEventStreams
261261
type StreamTable struct {
262262
EventType string `json:"eventType"`
263-
RecoveryEventType string `json:"recoveryEventType"`
263+
RecoveryEventType string `json:"recoveryEventType,omitempty"`
264264
IdColumn *string `json:"idColumn,omitempty"`
265265
PayloadColumn *string `json:"payloadColumn,omitempty"`
266266
}

pkg/apis/acid.zalan.do/v1/util_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ var parseTimeTests = []struct {
2626
{"expect error as minute is out of range", "23:69", metav1.Now(), errors.New(`parsing time "23:69": minute out of range`)},
2727
}
2828

29+
func stringToPointer(str string) *string {
30+
return &str
31+
}
32+
2933
var parseWeekdayTests = []struct {
3034
about string
3135
in string
@@ -301,8 +305,8 @@ var unmarshalCluster = []struct {
301305
Slots: map[string]map[string]string{"permanent_logical_1": {"type": "logical", "database": "foo", "plugin": "pgoutput"}},
302306
},
303307
Resources: &Resources{
304-
ResourceRequests: ResourceDescription{CPU: "10m", Memory: "50Mi"},
305-
ResourceLimits: ResourceDescription{CPU: "300m", Memory: "3000Mi"},
308+
ResourceRequests: ResourceDescription{CPU: stringToPointer("10m"), Memory: stringToPointer("50Mi")},
309+
ResourceLimits: ResourceDescription{CPU: stringToPointer("300m"), Memory: stringToPointer("3000Mi")},
306310
},
307311

308312
TeamID: "acid",

pkg/apis/acid.zalan.do/v1/zz_generated.deepcopy.go

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/cluster/cluster_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,8 @@ func TestStatefulSetAnnotations(t *testing.T) {
161161
spec := acidv1.PostgresSpec{
162162
TeamID: "myapp", NumberOfInstances: 1,
163163
Resources: &acidv1.Resources{
164-
ResourceRequests: acidv1.ResourceDescription{CPU: "1", Memory: "10"},
165-
ResourceLimits: acidv1.ResourceDescription{CPU: "1", Memory: "10"},
164+
ResourceRequests: acidv1.ResourceDescription{CPU: k8sutil.StringToPointer("1"), Memory: k8sutil.StringToPointer("10")},
165+
ResourceLimits: acidv1.ResourceDescription{CPU: k8sutil.StringToPointer("1"), Memory: k8sutil.StringToPointer("10")},
166166
},
167167
Volume: acidv1.Volume{
168168
Size: "1G",
@@ -184,8 +184,8 @@ func TestStatefulSetUpdateWithEnv(t *testing.T) {
184184
oldSpec := &acidv1.PostgresSpec{
185185
TeamID: "myapp", NumberOfInstances: 1,
186186
Resources: &acidv1.Resources{
187-
ResourceRequests: acidv1.ResourceDescription{CPU: "1", Memory: "10"},
188-
ResourceLimits: acidv1.ResourceDescription{CPU: "1", Memory: "10"},
187+
ResourceRequests: acidv1.ResourceDescription{CPU: k8sutil.StringToPointer("1"), Memory: k8sutil.StringToPointer("10")},
188+
ResourceLimits: acidv1.ResourceDescription{CPU: k8sutil.StringToPointer("1"), Memory: k8sutil.StringToPointer("10")},
189189
},
190190
Volume: acidv1.Volume{
191191
Size: "1G",

pkg/cluster/connection_pooler.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -821,12 +821,12 @@ func (c *Cluster) needSyncConnectionPoolerDefaults(Config *Config, spec *acidv1.
821821
func makeDefaultConnectionPoolerResources(config *config.Config) acidv1.Resources {
822822

823823
defaultRequests := acidv1.ResourceDescription{
824-
CPU: config.ConnectionPooler.ConnectionPoolerDefaultCPURequest,
825-
Memory: config.ConnectionPooler.ConnectionPoolerDefaultMemoryRequest,
824+
CPU: &config.ConnectionPooler.ConnectionPoolerDefaultCPURequest,
825+
Memory: &config.ConnectionPooler.ConnectionPoolerDefaultMemoryRequest,
826826
}
827827
defaultLimits := acidv1.ResourceDescription{
828-
CPU: config.ConnectionPooler.ConnectionPoolerDefaultCPULimit,
829-
Memory: config.ConnectionPooler.ConnectionPoolerDefaultMemoryLimit,
828+
CPU: &config.ConnectionPooler.ConnectionPoolerDefaultCPULimit,
829+
Memory: &config.ConnectionPooler.ConnectionPoolerDefaultMemoryLimit,
830830
}
831831

832832
return acidv1.Resources{

0 commit comments

Comments
 (0)