{"id":19748682,"url":"https://github.com/doitintl/gke-fundamentals-workshop","last_synced_at":"2025-10-25T01:14:00.326Z","repository":{"id":43659443,"uuid":"413324429","full_name":"doitintl/gke-fundamentals-workshop","owner":"doitintl","description":null,"archived":false,"fork":false,"pushed_at":"2024-06-05T16:23:24.000Z","size":252,"stargazers_count":25,"open_issues_count":1,"forks_count":20,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-06-05T18:37:46.235Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/doitintl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-04T07:50:52.000Z","updated_at":"2024-06-05T16:23:27.000Z","dependencies_parsed_at":"2024-01-17T15:06:46.028Z","dependency_job_id":"0c9895aa-d0ea-41b9-a3d8-d7baf5042489","html_url":"https://github.com/doitintl/gke-fundamentals-workshop","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doitintl%2Fgke-fundamentals-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doitintl%2Fgke-fundamentals-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doitintl%2Fgke-fundamentals-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doitintl%2Fgke-fundamentals-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/doitintl","download_url":"https://codeload.github.com/doitintl/gke-fundamentals-workshop/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224203937,"owners_count":17273019,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T02:22:56.980Z","updated_at":"2025-10-25T01:13:55.293Z","avatar_url":"https://github.com/doitintl.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GKE Fundamentals\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![GKE/K8s Version](https://img.shields.io/badge/k8s%20version-1.30.5-blue.svg)](#)\n[![GCloud SDK Version](https://img.shields.io/badge/gcloud%20version-496.0.0-blue.svg)](#)\n\n## Introduction\n\nIn this full-day workshop, we will look at some core mechanisms of GKE. We will look at different provisioning models of applications, scaling, monitoring, and command-line-based cluster control. The present subject areas have not yet been fully formulated. There may be changes to the contents and the current schedule. The labs require functional access to a GCP project and a uniform toolset in the local development environment (e.g., kubectl, GCP cloud SDK command-line tools). The lectures on each topic will take about 45 minutes, and the labs will take about 30 minutes each.\n\n## Available Labs\n\n| Lab/Folder                                                                           | Description                                                             |\n| ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- |\n| [01-single-container-pod](./01-single-container-pod)                                 | simple single container pod example for a static web application        |\n| [02-multiple-container-pod](./02-multiple-container-pod)                             | advanced multi-container pod example for our web application            |\n| [03-webapp-deployment](./03-webapp-deployment)                                       | simple deployment abstraction from lab-01 for a static web application  |\n| [04-webapp-deployment-ext-np](./04-webapp-deployment-ext-np)                         | simple nodePort service exposing example for this application           |\n| [05-webapp-deployment-ext-lb](./05-webapp-deployment-ext-lb)                         | simple loadBalancer service exposing example using the same backend-app |\n| [06-webapp-deployment-ext-ingress](./06-webapp-deployment-ext-ingress)               | simple ingress example using gce-based ingress controller               |\n| [07-webapp-deployment-ext-ingress-fanout](./07-webapp-deployment-ext-ingress-fanout) | advanced ingress fan-out example for multiple app-versions              |\n| [08-webapp-deployment-gateway-api](./08-webapp-deployment-gateway-api) | example deployment exposed using Gateway API |\n| [09-workload-identity-pubsub](./09-workload-identity-pubsub) | connect a workload to Pub/Sub using Workload Identity Federation for GKE |\n| [10-config-connector](./10-config-connector) | deploy and configure Config Connector, the use it to provision Pub/Sub resources and connect a workload  |\n| [11-rbac-podlabeler](./11-rbac-podlabeler) | demonstrates RBAC permissions |\n| [12-jobs](./12-jobs) | several examples of Kubernetes Jobs\n| [13-hpa](./13-hpa) | scaling a Deployment using HorizontalPodAutoscaler |\n| [14-pvc-deployment](./14-pvc-deployment) | an example deployment with a PersistentVolumeClaim|\n\n## Core Requirements\n\nFor the use of the local development environment for all GKE/K8s relevant CLI/API calls a certain tool set is required and Linux or macOS as operating system is recommended. If it is not possible to install our stack due to limitations in terms of feasibility/availability in the preparation, you can alternatively use the browser-internal cloud shell of your GCP console.\n\n- `gcloud sdk` [installation](https://cloud.google.com/sdk/docs/install) tutorial\n- `kubectl` [installation](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl#install_kubectl) tutorial\n- `gke-gcloud-auth-plugin` [installation](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl#install_plugin)\n\n## Workshop Cluster Preparation\n\nThe preparation of the GKE cluster is one of the first steps of our workshop and is the basis for all our further activity using the local development environment of all participants. We will pave the way to our first K8s application deployment step by step in the following section, learning some of the basics of using the gcloud SDK CLI and kubectl.\n\n## GCloud SDK Preparation\n\n```bash\ngcloud components update\ngcloud init\n```\n\n## Optional Terminal Preparation\n\n```bash\nalias k='kubectl'\n```\n\n## Workshop Cluster Provisioning\n\nThe following `gcloud` command call initializes the workshop-cluster as a regional Autopilot cluster .\n\n- Please make sure that you are also in the project prepared for this workshop or that your used dev/sandbox project has also been selected via `cloud init`!\n\n- Init your GKE-Cluster with a unique identifier suffix (_and remind your cluster-id_)\n\n  ```bash\n  printf \"%s\\n\" \"[INIT] workshop cluster\"\n  UNIQUE_CLUSTER_KEY=$RANDOM; GCP_PROJECT=$(gcloud config get core/project);\n  gcloud container clusters create-auto workshop-${UNIQUE_CLUSTER_KEY} \\\n  --region europe-west1 \\\n  --release-channel regular \\\n  --logging=SYSTEM,WORKLOAD \\\n  --monitoring=SYSTEM \\\n  --network \"default\" \\\n  --subnetwork default \u0026\u0026 \\\n  printf \"%s\\n\" \"[INIT] test access new cluster using k8s API via kubectl\" \\\n  kubectl get all --all-namespaces \u0026\u0026 kubectl cluster-info \u0026\u0026 \\\n  printf \"\\n%s\\n\\n\" \"[INIT] workshop cluster finally initialized and available by ID -\u003e [ workshop-${UNIQUE_CLUSTER_KEY} ] \u003c-\"\n  ```\n\n## Workshop Cluster cleanup\n\nIn order to delete the cluster and all resources within it, you can run the following command (requires confirmation):\n\n```bash\ngcloud container clusters delete workshop-${UNIQUE_CLUSTER_KEY} --region europe-west1\n```\n\n## Links\n\n- pydevop's [gcloud cheat sheet](https://gist.github.com/pydevops/cffbd3c694d599c6ca18342d3625af97) markdown paper\n\n## License\n\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nSee [LICENSE](LICENSE.md) for full details.\n\n    Licensed to the Apache Software Foundation (ASF) under one\n    or more contributor license agreements.  See the NOTICE file\n    distributed with this work for additional information\n    regarding copyright ownership.  The ASF licenses this file\n    to you under the Apache License, Version 2.0 (the\n    \"License\"); you may not use this file except in compliance\n    with the License.  You may obtain a copy of the License at\n\n      https://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing,\n    software distributed under the License is distributed on an\n    \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n    KIND, either express or implied.  See the License for the\n    specific language governing permissions and limitations\n    under the License.\n\n## Copyright\n\nCopyright © 2021 DoiT International\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoitintl%2Fgke-fundamentals-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoitintl%2Fgke-fundamentals-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoitintl%2Fgke-fundamentals-workshop/lists"}