Skip to content

Commit 9583c1b

Browse files
benjaminjbgkech
authored andcommitted
Add default container annotation (#4031)
* Add default container annotation Since K8s 1.21, the kubectl.kubernetes.io/default-container annotation can be added to set a default container, removing the need for a -c flag or eliminating the message about defaulting Note: the `-c` flag can still be used to refer to a different, non-default container. Issues: [PGO-1941]
1 parent e461276 commit 9583c1b

12 files changed

Lines changed: 76 additions & 10 deletions

File tree

internal/controller/pgupgrade/jobs.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"k8s.io/apimachinery/pkg/labels"
1717

1818
"github.com/percona/percona-postgresql-operator/internal/initialize"
19+
"github.com/percona/percona-postgresql-operator/internal/naming"
1920
"github.com/percona/percona-postgresql-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
2021
)
2122

@@ -129,7 +130,6 @@ func (r *PGUpgradeReconciler) generateUpgradeJob(
129130
job.Namespace = upgrade.Namespace
130131
job.Name = pgUpgradeJob(upgrade).Name
131132

132-
job.Annotations = upgrade.Spec.Metadata.GetAnnotationsOrNil()
133133
job.Labels = Merge(upgrade.Spec.Metadata.GetLabelsOrNil(),
134134
commonLabels(pgUpgrade, upgrade), //FIXME role pgupgrade
135135
map[string]string{
@@ -145,6 +145,11 @@ func (r *PGUpgradeReconciler) generateUpgradeJob(
145145
}
146146
}
147147

148+
job.Annotations = Merge(upgrade.Spec.Metadata.GetAnnotationsOrNil(),
149+
map[string]string{
150+
naming.DefaultContainerAnnotation: database.Name,
151+
})
152+
148153
// Copy the pod template from the startup instance StatefulSet. This includes
149154
// the service account, volumes, DNS policies, and scheduling constraints.
150155
startup.Spec.Template.DeepCopyInto(&job.Spec.Template)
@@ -247,7 +252,6 @@ func (r *PGUpgradeReconciler) generateRemoveDataJob(
247252
job.Namespace = upgrade.Namespace
248253
job.Name = upgrade.Name + "-" + sts.Name
249254

250-
job.Annotations = upgrade.Spec.Metadata.GetAnnotationsOrNil()
251255
job.Labels = labels.Merge(upgrade.Spec.Metadata.GetLabelsOrNil(),
252256
commonLabels(removeData, upgrade)) //FIXME role removedata
253257

@@ -260,6 +264,11 @@ func (r *PGUpgradeReconciler) generateRemoveDataJob(
260264
}
261265
}
262266

267+
job.Annotations = Merge(upgrade.Spec.Metadata.GetAnnotationsOrNil(),
268+
map[string]string{
269+
naming.DefaultContainerAnnotation: database.Name,
270+
})
271+
263272
// Copy the pod template from the sts instance StatefulSet. This includes
264273
// the service account, volumes, DNS policies, and scheduling constraints.
265274
sts.Spec.Template.DeepCopyInto(&job.Spec.Template)

internal/controller/pgupgrade/jobs_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ func TestGenerateUpgradeJob(t *testing.T) {
6262
apiVersion: batch/v1
6363
kind: Job
6464
metadata:
65+
annotations:
66+
kubectl.kubernetes.io/default-container: database
6567
creationTimestamp: null
6668
labels:
6769
postgres-operator.crunchydata.com/cluster: pg5
@@ -81,6 +83,8 @@ spec:
8183
backoffLimit: 0
8284
template:
8385
metadata:
86+
annotations:
87+
kubectl.kubernetes.io/default-container: database
8488
creationTimestamp: null
8589
labels:
8690
postgres-operator.crunchydata.com/cluster: pg5
@@ -193,6 +197,8 @@ func TestGenerateRemoveDataJob(t *testing.T) {
193197
apiVersion: batch/v1
194198
kind: Job
195199
metadata:
200+
annotations:
201+
kubectl.kubernetes.io/default-container: database
196202
creationTimestamp: null
197203
labels:
198204
postgres-operator.crunchydata.com/cluster: pg5
@@ -211,6 +217,8 @@ spec:
211217
backoffLimit: 0
212218
template:
213219
metadata:
220+
annotations:
221+
kubectl.kubernetes.io/default-container: database
214222
creationTimestamp: null
215223
labels:
216224
postgres-operator.crunchydata.com/cluster: pg5

internal/controller/postgrescluster/instance.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,6 +1276,9 @@ func generateInstanceStatefulSetIntent(_ context.Context,
12761276
sts.Spec.Template.Annotations = naming.Merge(
12771277
cluster.Spec.Metadata.GetAnnotationsOrNil(),
12781278
spec.Metadata.GetAnnotationsOrNil(),
1279+
map[string]string{
1280+
naming.DefaultContainerAnnotation: naming.ContainerDatabase,
1281+
},
12791282
)
12801283
sts.Spec.Template.Labels = naming.Merge(
12811284
cluster.Spec.Metadata.GetLabelsOrNil(),

internal/controller/postgrescluster/pgadmin.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,11 @@ func (r *Reconciler) reconcilePGAdminStatefulSet(
261261
}
262262
sts.Spec.Template.Annotations = naming.Merge(
263263
cluster.Spec.Metadata.GetAnnotationsOrNil(),
264-
cluster.Spec.UserInterface.PGAdmin.Metadata.GetAnnotationsOrNil())
264+
cluster.Spec.UserInterface.PGAdmin.Metadata.GetAnnotationsOrNil(),
265+
map[string]string{
266+
naming.DefaultContainerAnnotation: naming.ContainerPGAdmin,
267+
},
268+
)
265269
sts.Spec.Template.Labels = naming.Merge(
266270
cluster.Spec.Metadata.GetLabelsOrNil(),
267271
cluster.Spec.UserInterface.PGAdmin.Metadata.GetLabelsOrNil(),

internal/controller/postgrescluster/pgadmin_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,8 @@ func TestReconcilePGAdminStatefulSet(t *testing.T) {
520520
template.Spec.Volumes = nil
521521

522522
assert.Assert(t, cmp.MarshalMatches(template.ObjectMeta, `
523+
annotations:
524+
kubectl.kubernetes.io/default-container: pgadmin
523525
creationTimestamp: null
524526
labels:
525527
app.kubernetes.io/instance: test-cluster
@@ -640,6 +642,7 @@ terminationGracePeriodSeconds: 30
640642
assert.Assert(t, cmp.MarshalMatches(template.ObjectMeta, `
641643
annotations:
642644
annotation1: annotationvalue
645+
kubectl.kubernetes.io/default-container: pgadmin
643646
creationTimestamp: null
644647
labels:
645648
app.kubernetes.io/instance: custom-cluster

internal/controller/postgrescluster/pgbackrest.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,11 @@ func (r *Reconciler) generateRepoHostIntent(ctx context.Context, postgresCluster
575575

576576
annotations := naming.Merge(
577577
postgresCluster.Spec.Metadata.GetAnnotationsOrNil(),
578-
postgresCluster.Spec.Backups.PGBackRest.Metadata.GetAnnotationsOrNil())
578+
postgresCluster.Spec.Backups.PGBackRest.Metadata.GetAnnotationsOrNil(),
579+
map[string]string{
580+
naming.DefaultContainerAnnotation: naming.PGBackRestRepoContainerName,
581+
},
582+
)
579583
labels := naming.Merge(
580584
postgresCluster.Spec.Metadata.GetLabelsOrNil(),
581585
postgresCluster.Spec.Backups.PGBackRest.Metadata.GetLabelsOrNil(),
@@ -818,6 +822,14 @@ func generateBackupJobSpecIntent(ctx context.Context, postgresCluster *v1beta1.P
818822
container.Resources = postgresCluster.Spec.Backups.PGBackRest.Jobs.Resources
819823
}
820824

825+
if annotations != nil {
826+
annotations[naming.DefaultContainerAnnotation] = naming.PGBackRestRepoContainerName
827+
} else {
828+
annotations = map[string]string{
829+
naming.DefaultContainerAnnotation: naming.PGBackRestRepoContainerName,
830+
}
831+
}
832+
821833
jobSpec := &batchv1.JobSpec{
822834
Template: corev1.PodTemplateSpec{
823835
ObjectMeta: metav1.ObjectMeta{Labels: labels, Annotations: annotations},
@@ -1301,7 +1313,10 @@ func (r *Reconciler) generateRestoreJobIntent(cluster *v1beta1.PostgresCluster,
13011313
annotations := naming.Merge(
13021314
cluster.Spec.Metadata.GetAnnotationsOrNil(),
13031315
cluster.Spec.Backups.PGBackRest.Metadata.GetAnnotationsOrNil(),
1304-
map[string]string{naming.PGBackRestConfigHash: configHash})
1316+
map[string]string{
1317+
naming.PGBackRestConfigHash: configHash,
1318+
naming.DefaultContainerAnnotation: naming.PGBackRestRestoreContainerName,
1319+
})
13051320
labels := naming.Merge(
13061321
cluster.Spec.Metadata.GetLabelsOrNil(),
13071322
cluster.Spec.Backups.PGBackRest.Metadata.GetLabelsOrNil(),

internal/controller/postgrescluster/pgbouncer.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,11 @@ func (r *Reconciler) generatePGBouncerDeployment(
385385
}
386386
deploy.Spec.Template.Annotations = naming.Merge(
387387
cluster.Spec.Metadata.GetAnnotationsOrNil(),
388-
cluster.Spec.Proxy.PGBouncer.Metadata.GetAnnotationsOrNil())
388+
cluster.Spec.Proxy.PGBouncer.Metadata.GetAnnotationsOrNil(),
389+
map[string]string{
390+
naming.DefaultContainerAnnotation: naming.ContainerPGBouncer,
391+
},
392+
)
389393
deploy.Spec.Template.Labels = naming.Merge(
390394
cluster.Spec.Metadata.GetLabelsOrNil(),
391395
cluster.Spec.Proxy.PGBouncer.Metadata.GetLabelsOrNil(),

internal/controller/postgrescluster/pgbouncer_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,7 @@ namespace: ns3
456456
// Annotations present in the pod template.
457457
assert.DeepEqual(t, deploy.Spec.Template.Annotations, map[string]string{
458458
"a": "v1",
459+
"kubectl.kubernetes.io/default-container": "pgbouncer",
459460
})
460461

461462
// Labels present in the pod template.

internal/controller/postgrescluster/volumes.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,9 @@ func (r *Reconciler) reconcileMovePGDataDir(ctx context.Context,
476476

477477
jobSpec := &batchv1.JobSpec{
478478
Template: corev1.PodTemplateSpec{
479-
ObjectMeta: metav1.ObjectMeta{Labels: labels},
479+
ObjectMeta: metav1.ObjectMeta{Labels: labels, Annotations: map[string]string{
480+
naming.DefaultContainerAnnotation: naming.ContainerJobMovePGDataDir,
481+
}},
480482
Spec: corev1.PodSpec{
481483
Tolerations: cluster.Spec.DataSource.Volumes.PGDataVolume.Tolerations, // K8SPG-479
482484
// Set the image pull secrets, if any exist.
@@ -594,7 +596,9 @@ func (r *Reconciler) reconcileMoveWALDir(ctx context.Context,
594596

595597
jobSpec := &batchv1.JobSpec{
596598
Template: corev1.PodTemplateSpec{
597-
ObjectMeta: metav1.ObjectMeta{Labels: labels},
599+
ObjectMeta: metav1.ObjectMeta{Labels: labels, Annotations: map[string]string{
600+
naming.DefaultContainerAnnotation: naming.ContainerJobMovePGWALDir,
601+
}},
598602
Spec: corev1.PodSpec{
599603
Tolerations: cluster.Spec.DataSource.Volumes.PGWALVolume.Tolerations, // K8SPG-479
600604
// Set the image pull secrets, if any exist.
@@ -717,7 +721,9 @@ func (r *Reconciler) reconcileMoveRepoDir(ctx context.Context,
717721

718722
jobSpec := &batchv1.JobSpec{
719723
Template: corev1.PodTemplateSpec{
720-
ObjectMeta: metav1.ObjectMeta{Labels: labels},
724+
ObjectMeta: metav1.ObjectMeta{Labels: labels, Annotations: map[string]string{
725+
naming.DefaultContainerAnnotation: naming.ContainerJobMovePGBackRestRepoDir,
726+
}},
721727
Spec: corev1.PodSpec{
722728
Tolerations: cluster.Spec.DataSource.Volumes.PGBackRestVolume.Tolerations, // K8SPG-479
723729
// Set the image pull secrets, if any exist.

internal/controller/standalone_pgadmin/statefulset.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,12 @@ func statefulset(
7474
sts.Spec.Selector = &metav1.LabelSelector{
7575
MatchLabels: naming.StandalonePGAdminLabels(pgadmin.Name),
7676
}
77-
sts.Spec.Template.Annotations = pgadmin.Spec.Metadata.GetAnnotationsOrNil()
77+
sts.Spec.Template.Annotations = naming.Merge(
78+
pgadmin.Spec.Metadata.GetAnnotationsOrNil(),
79+
map[string]string{
80+
naming.DefaultContainerAnnotation: naming.ContainerPGAdmin,
81+
},
82+
)
7883
sts.Spec.Template.Labels = naming.Merge(
7984
pgadmin.Spec.Metadata.GetLabelsOrNil(),
8085
naming.StandalonePGAdminDataLabels(pgadmin.Name),

0 commit comments

Comments
 (0)