Cloud provider gcp
cloud-provider-gcp contains several projects used to run Kubernetes in Google Cloud
This repository implements the [cloud provider](https://github.com/kubernetes/cloud-provider) interface for [Google Cloud Platform (GCP)](https://cloud.google.com/). It provides components for Kubernetes clusters running on GCP and is maintained primarily by the Kubernetes team at Google. The project is written primarily in Go, distributed under the Apache License 2.0 license, first published in 2018. Key topics include: cloud-providers, google, google-cloud.
cloud-provider-gcp
Introduction
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 get started with the GCP CCM, see the kOps Quickstart.
For local development, use make help to see all available commands.
Components
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.
Testing
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.
Publishing cloud-controller-manager image
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.
shLOCATION=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 publish
If 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.
Docker Commands
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.
Cross-compiling
Platform-specific release tarballs can be built using the following commands.
To build all release artifacts for all platforms, run:
shmake release-tars
This command builds the release tarball for Windows (kubernetes-node-windows-amd64.tar.gz):
shmake release-tars-windows-amd64
This command builds the release tarballs for Linux (kubernetes-server-linux-amd64.tar.gz and kubernetes-node-linux-amd64.tar.gz):
shmake release-tars-linux-amd64
Dependency management
Dependencies are managed using Go modules (go mod subcommands).
Working within GOPATH
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
Add a new dependency
shgo get github.com/new/dependency && make update-vendor
Update an existing dependency
shgo get -u github.com/existing/dependency && make update-vendor
Update all dependencies
shgo get -u && make update-vendor
Note that this most likely won't work due to cross-dependency issues or repos
not implementing modules correctly.
Contributors
Showing top 12 contributors by commit count.
