From b8f5f87ef0dc76979e70a2ceaff2f2e605ac7292 Mon Sep 17 00:00:00 2001 From: Jonathan King Date: Fri, 18 Oct 2024 09:52:25 -0400 Subject: [PATCH 1/3] pgupgrade: Use different service for postgres old (PROJQUAY-6672) - Use a different service for the old postgres deployment during the upgrade process - This ensures that the service will not point to the terminating deployment --- .../base/clair-pg-old.deployment.yaml | 8 ++++---- .../base/clair-pg-old.service.yaml | 17 +++++++++++++++++ .../base/clair-pg-upgrade.job.yaml | 10 +++++----- pkg/kustomize/secrets.go | 1 + 4 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 kustomize/components/clairpgupgrade/base/clair-pg-old.service.yaml diff --git a/kustomize/components/clairpgupgrade/base/clair-pg-old.deployment.yaml b/kustomize/components/clairpgupgrade/base/clair-pg-old.deployment.yaml index 46aa2da32..5514631de 100644 --- a/kustomize/components/clairpgupgrade/base/clair-pg-old.deployment.yaml +++ b/kustomize/components/clairpgupgrade/base/clair-pg-old.deployment.yaml @@ -3,20 +3,20 @@ kind: Deployment metadata: name: clair-postgres-old labels: - quay-component: clair-postgres + quay-component: clair-postgres-old annotations: - quay-component: clair-postgres + quay-component: clair-postgres-old spec: replicas: 1 strategy: type: Recreate selector: matchLabels: - quay-component: clair-postgres + quay-component: clair-postgres-old template: metadata: labels: - quay-component: clair-postgres + quay-component: clair-postgres-old spec: terminationGracePeriodSeconds: 180 serviceAccountName: clair-postgres diff --git a/kustomize/components/clairpgupgrade/base/clair-pg-old.service.yaml b/kustomize/components/clairpgupgrade/base/clair-pg-old.service.yaml new file mode 100644 index 000000000..865d42331 --- /dev/null +++ b/kustomize/components/clairpgupgrade/base/clair-pg-old.service.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: clair-postgres-old + labels: + quay-component: clair-postgres-old + annotations: + quay-component: clair-postgres-old +spec: + type: ClusterIP + ports: + - port: 5432 + protocol: TCP + name: postgres + targetPort: 5432 + selector: + quay-component: clair-postgres-old diff --git a/kustomize/components/clairpgupgrade/base/clair-pg-upgrade.job.yaml b/kustomize/components/clairpgupgrade/base/clair-pg-upgrade.job.yaml index 41f1278f2..19be19445 100644 --- a/kustomize/components/clairpgupgrade/base/clair-pg-upgrade.job.yaml +++ b/kustomize/components/clairpgupgrade/base/clair-pg-upgrade.job.yaml @@ -31,7 +31,7 @@ spec: valueFrom: secretKeyRef: name: clair-config-secret - key: clair-db-host + key: clair-db-old-host - name: POSTGRESQL_MIGRATION_ADMIN_PASSWORD value: postgres - name: POSTGRESQL_SHARED_BUFFERS @@ -49,9 +49,9 @@ spec: cpu: 500m memory: 2Gi command: - - "/bin/sh" - - "-c" + - "/bin/sh" + - "-c" args: - - > - run-postgresql --version || (echo "postgres migration command failed, cleaning up..." && rm -rf /var/lib/pgsql/data/* && exit 1) + - > + run-postgresql --version || (echo "postgres migration command failed, cleaning up..." && rm -rf /var/lib/pgsql/data/* && exit 1) backoffLimit: 50 diff --git a/pkg/kustomize/secrets.go b/pkg/kustomize/secrets.go index fd5314ce4..ba22668df 100644 --- a/pkg/kustomize/secrets.go +++ b/pkg/kustomize/secrets.go @@ -377,6 +377,7 @@ func componentConfigFilesFor(log logr.Logger, qctx *quaycontext.QuayRegistryCont cfgFiles["config.yaml"] = cfg cfgFiles["01_user_config.yaml"] = configFiles["clair-config.yaml"] cfgFiles["clair-db-host"] = []byte(strings.TrimSpace(strings.Join([]string{quay.GetName(), "clair-postgres"}, "-"))) + cfgFiles["clair-db-old-host"] = []byte(strings.TrimSpace(strings.Join([]string{quay.GetName(), "clair-postgres-old"}, "-"))) return cfgFiles, nil default: From b6bfa381ec31be53c3eb06f922b1ce3417a24035 Mon Sep 17 00:00:00 2001 From: Brandon Caton Date: Tue, 22 Oct 2024 13:47:48 -0400 Subject: [PATCH 2/3] adding service to kustomization file (#988) --- kustomize/components/clairpgupgrade/base/kustomization.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/kustomize/components/clairpgupgrade/base/kustomization.yaml b/kustomize/components/clairpgupgrade/base/kustomization.yaml index d4fe25137..27bdd79a2 100644 --- a/kustomize/components/clairpgupgrade/base/kustomization.yaml +++ b/kustomize/components/clairpgupgrade/base/kustomization.yaml @@ -4,5 +4,6 @@ resources: - ./clair-pg-upgrade.job.yaml - ./clair-pg-old.persistentvolumeclaim.yaml - ./clair-pg-old.deployment.yaml + - ./clair-pg-old.service.yaml patchesStrategicMerge: - ./clair-pg.deployment.patch.yaml From 784344beda5fba6da35ce72b9d48fbcc9ec46df6 Mon Sep 17 00:00:00 2001 From: Jonathan King Date: Tue, 22 Oct 2024 14:10:46 -0400 Subject: [PATCH 3/3] cleanup old clair-postgres-service --- controllers/quay/quayregistry_controller.go | 28 +++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/controllers/quay/quayregistry_controller.go b/controllers/quay/quayregistry_controller.go index 75fadd2a8..2008af692 100644 --- a/controllers/quay/quayregistry_controller.go +++ b/controllers/quay/quayregistry_controller.go @@ -278,6 +278,34 @@ func (r *QuayRegistryReconciler) checkPostgresUpgradeStatus( r.Log.Error(err, fmt.Sprintf("%s deployment could not be deleted", oldPostgresDeploymentName)) } + oldPostgresServiceName := fmt.Sprintf("%s-%s", quay.GetName(), "clair-postgres-old") + oldPostgresService := &corev1.Service{} + if err := r.Client.Get( + ctx, + types.NamespacedName{ + Name: oldPostgresServiceName, + Namespace: quay.GetNamespace(), + }, + oldPostgresService, + ); err != nil { + r.Log.Info(fmt.Sprintf("%s service not found, skipping", oldPostgresServiceName)) + continue + } + + // Remove owner reference from old service + obj, err = v1.RemoveOwnerReference(quay, oldPostgresService) + if err != nil { + log.Error(err, "could not remove owner reference from old postgres service") + } + + // Delete old postgres deployment + if err := r.Client.Delete( + ctx, + obj, + ); err != nil { + r.Log.Error(err, fmt.Sprintf("%s service could not be deleted", oldPostgresServiceName)) + } + // Remove owner reference from old pvc so user can delete when ready var oldPostgresPVCName string if jobName == clairPostgresUpgradeJobName {