Deploy an app to GKE using Google Cloud Deploy
This page shows you how to use Google Cloud Deploy to deliver a sample application
image named echoserver
to a sequence of two Google Kubernetes Engine clusters.
In this quickstart, you'll do the following:
Create the two clusters.
Create a Skaffold configuration and a Kubernetes manifest to specify the (pre-built) container image to deploy.
Define your Google Cloud Deploy delivery pipeline and deployment targets, which point to the two clusters.
You can define your targets in the same file as the delivery pipeline or in a different file or files. For simplicity in this quickstart, you'll put them in the same file.
Instantiate your delivery pipeline by creating a release, which automatically deploys to the first target.
Promote the release to the second target.
View both rollouts in Google Cloud console.
Before you begin
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Cloud project. Learn how to check if billing is enabled on a project.
-
Enable the Google Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs.
- Install and initialize the Google Cloud CLI.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Cloud project. Learn how to check if billing is enabled on a project.
-
Enable the Google Cloud Deploy, Cloud Build, GKE, and Cloud Storage APIs.
- Install and initialize the Google Cloud CLI.
- Make sure the default Compute Engine service account has sufficient permissions.
The service account might already have the necessary permissions. These steps are included for projects that disable automatic role grants for default service accounts.
- Add the
clouddeploy.jobRunner
role:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner"
- Add the Kubernetes developer permissions:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer"
If you have trouble adding either of these roles, contact your project administrator.
Create your Google Kubernetes Engine clusters
Create two clusters: qsdev
and qsprod
, with default settings. The clusters'
Kubernetes API endpoints must be network-reachable from the public internet.
GKE clusters are externally accessible by default.
gcloud container clusters create-auto quickstart-cluster-qsdev --project=PROJECT_ID --region=us-central1 && gcloud container clusters create-auto quickstart-cluster-qsprod --project=PROJECT_ID --region=us-central1
Prepare your Skaffold configuration and Kubernetes manifest
Google Cloud Deploy uses Skaffold to provide the details for what to deploy and how to deploy it properly for your separate targets.
In this quickstart, you create a skaffold.yaml
file, which identifies the
Kubernetes manifest to be used to deploy the sample app.
Open a terminal window.
Create a new directory, named
deploy-quickstart
and navigate into it.mkdir deploy-quickstart cd deploy-quickstart
Create a file named
skaffold.yaml
with the following contents:apiVersion: skaffold/v2beta16 kind: Config deploy: kubectl: manifests: - k8s-*
Create a file named
k8s-pod.yaml
, with the following contents:apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: echoserver image: my-app-image
Create your delivery pipeline and targets
You can define your pipeline and targets in one file or in separate files. In this quickstart, you create a single file.
In the
deploy-quickstart
directory, create a new file:clouddeploy.yaml
, with the following contents:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: qsdev profiles: [] - targetId: qsprod profiles: [] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsdev description: development cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsdev --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod description: production cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod
Register your pipeline and targets with the Google Cloud Deploy service:
gcloud deploy apply --file clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
You now have a pipeline, with targets, ready to deploy your application to your first target.
Confirm your pipeline and targets:
In the Google Cloud console, navigate to the Google Cloud Deploy Delivery pipelines page to view of list of your available delivery pipelines.
Open the Delivery pipelines page
The delivery pipeline you just created is shown, and the two targets are listed in the Targets column.
Create a release
A release is the central Google Cloud Deploy resource representing the changes being deployed. The delivery pipeline defines the lifecycle of that release. See Google Cloud Deploy service architecture for details about that lifecycle.
Run the following command from the deploy-quickstart
directory to create a
release
resource that represents the container image to deploy:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-demo-app-1 \
--images=my-app-image=k8s.gcr.io/echoserver:1.4
Because this release is the first one (being deploying into the first target in
the progression), Google Cloud Deploy automatically creates a rollout
resource too. The application is automatically deployed into the first target in
the progression.
Promote the release
From the Delivery pipelines page, click the
my-demo-app-1
pipeline.Open the Delivery pipelines page
The Delivery pipeline details page shows a graphical representation of your delivery pipeline's progress. In this case, it shows that the release was deployed to the
qsdev
target.On the first target in the delivery pipeline visualization, click Promote.
The Promote release dialog is shown. It shows the details of the target you're promoting to.
Click Promote.
The release is now queued for deployment into
qsprod
. When deployment is complete, the delivery pipeline visualization shows it as deployed:
View the results in Google Cloud console
In the Google Cloud console, navigate to the Google Cloud Deploy Delivery pipelines page to view your my-demo-app-1 delivery pipeline.
Click the name of your deliver pipeline "my-demo-app-1".
The pipeline visualization shows the app's progress through the pipeline.
And your release is listed on the Releases tab under Delivery pipeline details.
Click the release name,
test-release-001
.Your rollouts appear under Rollouts. You can click a rollout to view its details, including the deployment log.
Clean up
To avoid incurring charges to your Google Cloud account for the resources used on this page, follow these steps.
Delete the
qsdev
cluster:gcloud container clusters delete quickstart-cluster-qsdev --region=us-central1 --project=PROJECT_ID
Delete the
qsprod
cluster:gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
Delete the delivery pipeline:
gcloud deploy delivery-pipelines delete my-demo-app-1 --force --region=us-central1 --project=PROJECT_ID
This command deletes the delivery pipeline itself, plus all
release
androllout
resources Google Cloud Deploy created for that pipeline.Delete the Cloud Storage buckets that Google Cloud Deploy created.
One ends with
_clouddeploy
, and the other is[region].deploy-artifacts.[project].appspot.com
.
That's it, you completed this quickstart!