This repository implements the cloud provider interface for Google Cloud Platform (GCP). It provides components for Kubernetes clusters running on GCP and is maintained primarily by the Kubernetes team at Google.
To see all available commands in this repository, run make help.
This repository contains the following components, located in cmd/:
- Cloud Controller Manager (
cloud-controller-manager): The GCP Cloud Controller Manager (CCM) is responsible for running cloud-provider-dependent controllers (e.g. node health, routing, load balancing, etc.) for Kubernetes clusters running in GCP. - GCP Auth Provider (
auth-provider-gcp): A GCP Container Runtime Interface (CRI) plugin for fetching credentials for kubelet to pull images from Google Container Registry (GCR) and Artifact Registry (AR) when needed for pods. - GKE Auth Plugin (
gke-gcloud-auth-plugin): A client-go credential plugin that provides Google Cloud access tokens tokubectland other Kubernetes clients for authenticating to GKE clusters, e.g. ingcloud container clusters get-credentials.
This repository includes several testing commands you can run locally during development:
make test: Runs the standard Go unit tests.make verify: Runs all verification scripts (format, lint, etc.).make run-e2e-test: Runs the E2E test suite on a provisional kOps cluster.
Create an Artifact Registry repository for the CCM image.
Then use make publish to build and push the cloud-controller-manager Docker image. For example, the following command will build and push the image to us-central1-docker.pkg.dev/my-project/my-repo/cloud-controller-manager:v0.
Change the location, project, and repo names to match yours.
LOCATION=us-central1 PROJECT=my-project REPO=my-repo
gcloud auth configure-docker ${LOCATION}-docker.pkg.dev
IMAGE_REPO=${LOCATION}-docker.pkg.dev/${PROJECT}/${REPO} IMAGE_TAG=v0 make publishIf IMAGE_REPO is not set, the script will exit with an error. If IMAGE_TAG is not set, it defaults to a unique value combining the current git commit SHA and the build date.
Note: To push images to Google Artifact Registry, you must first authenticate Docker by running the following command:
gcloud auth configure-docker ${LOCATION}-docker.pkg.dev
-
make publish: Builds thecloud-controller-managerDocker image (including multi-architecture support) and pushes it to the container registry specified by theIMAGE_REPOenvironment variable. -
make bundle: Builds thecloud-controller-managerDocker image and saves it as a.tarfile locally, along with creating a.docker_tagfile. This is useful for offline distribution or loading. -
make clean-builder: Removes thedocker buildxbuilder used for multi-platform Docker builds. This command is useful to reset the builder environment if the builder encounters an error or becomes corrupted. It can also be used to free up resources when the builder is no longer needed.
Platform-specific release tarballs can be built using the following commands.
To build all release artifacts for all platforms, run:
make release-tarsThis command builds the release tarball for Windows (kubernetes-node-windows-amd64.tar.gz):
make release-tars-windows-amd64This command builds the release tarballs for Linux (kubernetes-server-linux-amd64.tar.gz and kubernetes-node-linux-amd64.tar.gz):
make release-tars-linux-amd64Dependencies are managed using Go modules (go mod subcommands).
If you work within GOPATH, go mod will error out unless you do one of:
- move repo outside of GOPATH (it should "just work")
- set env var
GO111MODULE=on
go get github.com/new/dependency && make update-vendorgo get -u github.com/existing/dependency && make update-vendorgo get -u && make update-vendorNote that this most likely won't work due to cross-dependency issues or repos not implementing modules correctly.