Skip to content

Fix: gke-deploy respects declared ApiVersion for custom CRDs#1114

Open
64johnlee wants to merge 4 commits into
GoogleCloudPlatform:masterfrom
64johnlee:fix/gke-deploy-apiversion
Open

Fix: gke-deploy respects declared ApiVersion for custom CRDs#1114
64johnlee wants to merge 4 commits into
GoogleCloudPlatform:masterfrom
64johnlee:fix/gke-deploy-apiversion

Conversation

@64johnlee

Copy link
Copy Markdown

Summary

When deploying Kubernetes resources with custom API groups (e.g., Traefik CRDs with apiVersion: traefik.io/v1alpha1), gke-deploy was only extracting the Kind field and discarding the API group. This caused kubectl to resolve to the server's preferred version instead of the declared version, resulting in deployment verification failures for custom resources.

Root Cause

The deployer.Apply() method was calling resource.ObjectKind() which returns only the Kind (e.g., 'Middleware'). When passed to kubectl, this results in kubectl get Middleware instead of kubectl get middleware.traefik.io, causing kubectl to use the server's preferred version instead of the declared version.

Solution

  • Added ObjectGroupVersionKind() function that returns the full 'kind.group' format (e.g., 'middleware.traefik.io')
  • Updated deployer.Apply() to use the full format when calling kubectl for custom resources
  • Core API resources (without groups) continue to use simple kind names

Example

Before (broken):

kubectl get Middleware my-middleware  # May resolve to wrong version

After (fixed):

kubectl get middleware.traefik.io my-middleware  # Respects the declared apiVersion

Changes

  • gke-deploy/core/resource/resource.go — added ObjectGroupVersionKind() function
  • gke-deploy/deployer/deployer.go — use gvk format for kubectl calls

Verification

🤖 Generated with Claude Code

64johnlee and others added 4 commits June 6, 2026 23:17
The google-cloud-sdk installer requires the python command to be available.
The Dockerfile.appengine was installing python3 but not the python package,
which is needed as a symlink/alias for SDK compatibility.

Fixes GoogleCloudPlatform#1056

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The docker builder was installing both docker-compose (v1.29.2, legacy) and
docker-compose-plugin (v2.x+, modern), causing version conflicts and unpredictable
behavior. The legacy v1 package is no longer maintained and should not be used.

This change removes docker-compose and keeps only docker-compose-plugin,
which is actively maintained by Docker and compatible with all supported
Docker versions (19.03, 20.10, 24.0).

Fixes GoogleCloudPlatform#1042

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The gcr.io/cloud-builders/go builder is no longer actively maintained and does
not support current Go versions. This adds a prominent deprecation notice at the
top of the README directing users to migrate to the official golang image, which
is actively maintained by the Docker community.

Fixes GoogleCloudPlatform#1067

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When deploying Kubernetes resources with custom API groups (e.g., Traefik CRDs
with apiVersion: traefik.io/v1alpha1), gke-deploy was only using the Kind field
and discarding the API group. This caused kubectl to resolve to the server's
preferred version instead of the declared version, resulting in deployment
verification failures for custom resources.

Changes:
- Added ObjectGroupVersionKind() function in resource.go that returns the
  full "kind.group" format needed for kubectl commands
- Updated deployer.Apply() to use ObjectGroupVersionKind when calling
  kubectl for custom resources with API groups
- Core API resources (without groups) continue to work unchanged

Fixes GoogleCloudPlatform#962

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@google-cla

google-cla Bot commented Jun 6, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant