Service Upgrade
Changing CoreDNS service type¶
Since Kubernetes API doesn't allow to change service type. Helm chart provides default label k8gb-migrated-svc,
when set during helm upgrade, old service deleted by helm upgrade hook in automatic manner. Here is the label pattern for service deletion app.kubernetes.io/name=coredns,k8gb-migrated-svc!=true
Legacy API migration validation¶
For manual acceptance checks of legacy GSLB migration (k8gb.absa.oss -> k8gb.io), including pre-merge and post-merge upgrade validation cases, see Legacy GSLB Migration Manual Acceptance Tests.
Controlled legacy migration model¶
To reduce upgrade blast radius, legacy migration is controlled explicitly per legacy object:
- Legacy API (
k8gb.absa.oss/v1beta1) remains supported during transition. - Legacy reconcile behavior remains active before migration.
- Once
k8gb.io/migration-requested=trueis set, legacy runtime reconcile is paused for that object to avoid dual-writer conflicts during transition. - Legacy objects emit deprecation warning events.
- Migration starts only when label
k8gb.io/migration-requested=trueis set. - Migration completion is marked by
k8gb.io/migrated-to-k8gb-io=true. - New features are implemented only in canonical
k8gb.io/v1beta1.
Reconcile decision table¶
| Legacy labels on object | Legacy reconcile mode | Migration action | Expected operator behavior |
|---|---|---|---|
| no migration labels | full legacy reconcile | none | continue normal operation; plan migration |
k8gb.io/migration-requested=true, not migrated |
migration transition mode (legacy runtime paused) | execute one-way migration | switch edits to canonical k8gb.io object; avoids dual writers |
k8gb.io/migrated-to-k8gb-io=true |
compatibility/read-only | none | treat legacy object as compatibility artifact |
| both labels set | compatibility/read-only | none | optional cleanup of request label |
Multi-Service host health policy¶
For canonical k8gb.io/v1beta1 GSLBs, spec.serviceHealthPolicy controls how a host backed by multiple Kubernetes Services is evaluated:
Anyis the default. The host is healthy when at least one referenced Service exists and has ready endpoints.Allrequires every referenced Service to exist and have ready endpoints.
Upgrade note: omitted values are treated as Any. For existing multi-Service hosts, this can change mixed-health behavior from the historical order-dependent status calculation, where the last processed Service could make the host unhealthy. If a host should publish local targets only when all backing Services are ready, migrate the GSLB to canonical k8gb.io/v1beta1 if needed and set spec.serviceHealthPolicy: All.