{"id":17397902,"url":"https://github.com/willgarcia/rotc","last_synced_at":"2026-02-05T05:01:56.801Z","repository":{"id":42237152,"uuid":"254219119","full_name":"willgarcia/rotc","owner":"willgarcia","description":"Docker/Kubernetes workshop","archived":false,"fork":false,"pushed_at":"2022-12-14T04:19:31.000Z","size":11467,"stargazers_count":7,"open_issues_count":12,"forks_count":10,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-10T21:27:12.839Z","etag":null,"topics":["aks-kubernetes-cluster","docker","docker-compose","gke-cluster","grafana","helm","kubernetes","prometheus"],"latest_commit_sha":null,"homepage":"https://willgarcia.github.io/rotc/","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/willgarcia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-08T22:57:39.000Z","updated_at":"2025-03-18T08:57:09.000Z","dependencies_parsed_at":"2023-01-28T16:45:33.990Z","dependency_job_id":null,"html_url":"https://github.com/willgarcia/rotc","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/willgarcia/rotc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willgarcia%2Frotc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willgarcia%2Frotc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willgarcia%2Frotc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willgarcia%2Frotc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/willgarcia","download_url":"https://codeload.github.com/willgarcia/rotc/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willgarcia%2Frotc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29113188,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T03:44:17.043Z","status":"ssl_error","status_checked_at":"2026-02-05T03:44:12.077Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["aks-kubernetes-cluster","docker","docker-compose","gke-cluster","grafana","helm","kubernetes","prometheus"],"created_at":"2024-10-16T14:39:39.789Z","updated_at":"2026-02-05T05:01:56.783Z","avatar_url":"https://github.com/willgarcia.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kubernetes\n\n## Structure\n* `exercise/`: exercise - attendees\n* `solution/`: exercise's solution, solution scripts - attendees\n* `.build/`: instruction / build scripts - trainers only\n* `demo/`: demos - trainers only\n\n[Build tasks to provision Kubernetes in AWS/GCP/Azure](./.build/README.md)\n\n## References\n\n* `docker` CLI reference: \u003chttps://docs.docker.com/engine/reference/commandline/docker/\u003e\n* `docker-compose` CLI reference: \u003chttps://docs.docker.com/compose/reference/\u003e\n* `kubectl` CLI reference: \u003chttps://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#expose\u003e \n* `kubectl` Cheat sheet: \u003chttps://kubernetes.io/docs/reference/kubectl/cheatsheet/\u003e\n\nSample app from Jérôme Petazzoni - code under [Apache License 2.0](https://github.com/jpetazzo/container.training/blob/master/LICENSE)\n\n## Table of contents\n\n   * [01-01-01 Docker](./01-docker/01-docker/EXERCISE-01.md#01-01-01-docker)\n      * [Start](./01-docker/01-docker/EXERCISE-01.md#start)\n      * [Building Docker Images](./01-docker/01-docker/EXERCISE-01.md#building-docker-images)\n         * [Dockerfile](./01-docker/01-docker/EXERCISE-01.md#dockerfile)\n            * [Note](./01-docker/01-docker/EXERCISE-01.md#note)\n      * [Next steps](./01-docker/01-docker/EXERCISE-01.md#next-steps)\n\n   * [01-01-02 Docker](./01-docker/01-docker/EXERCISE-02.md#01-01-02-docker)\n      * [Tagging and Publishing a Docker Image](./01-docker/01-docker/EXERCISE-02.md#tagging-and-publishing-a-docker-image)\n         * [Tag the Docker images](./01-docker/01-docker/EXERCISE-02.md#tag-the-docker-images)\n         * [Authenticate to the Docker Hub registry](./01-docker/01-docker/EXERCISE-02.md#authenticate-to-the-docker-hub-registry)\n         * [Publish the Docker image](./01-docker/01-docker/EXERCISE-02.md#publish-the-docker-image)\n      * [Next steps](./01-docker/01-docker/EXERCISE-02.md#next-steps)\n\n   * [01-01-03 Docker](./01-docker/01-docker/EXERCISE-03.md#01-01-03-docker)\n      * [Running Docker Containers](./01-docker/01-docker/EXERCISE-03.md#running-docker-containers)\n         * [Remove local Docker images](./01-docker/01-docker/EXERCISE-03.md#remove-local-docker-images)\n         * [Start the twkoins_webui service container](./01-docker/01-docker/EXERCISE-03.md#start-the-twkoins_webui-service-container)\n      * [Cleanup](./01-docker/01-docker/EXERCISE-03.md#cleanup)\n\n   * [01-02 Docker Compose](./01-docker/02-compose/README.md#01-02-docker-compose)\n      * [Start](./01-docker/02-compose/README.md#start)\n      * [Create a Compose file](./01-docker/02-compose/README.md#create-a-compose-file)\n      * [Container DNS names](./01-docker/02-compose/README.md#container-dns-names)\n      * [Scaling our app](./01-docker/02-compose/README.md#scaling-our-app)\n      * [Docker Compose Limitations](./01-docker/02-compose/README.md#docker-compose-limitations)\n      * [Cleanup](./01-docker/02-compose/README.md#cleanup)\n\n   * [02-01 Kubectl](./02-k8s/02-01-kubectl/README.md#02-01-kubectl)\n      * [Setup](./02-k8s/02-01-kubectl/README.md#setup)\n         * [GCP](./02-k8s/02-01-kubectl/README.md#gcp)\n         * [Azure](./02-k8s/02-01-kubectl/README.md#azure)\n      * [Start](./02-k8s/02-01-kubectl/README.md#start)\n         * [Access to the cluster API](./02-k8s/02-01-kubectl/README.md#access-to-the-cluster-api)\n         * [Helpful links](./02-k8s/02-01-kubectl/README.md#helpful-links)\n      * [Getting used to the kubectl CLI](./02-k8s/02-01-kubectl/README.md#getting-used-to-the-kubectl-cli)\n         * [Listing the nodes of the cluster](./02-k8s/02-01-kubectl/README.md#listing-the-nodes-of-the-cluster)\n         * [Listing the pods of the cluster](./02-k8s/02-01-kubectl/README.md#listing-the-pods-of-the-cluster)\n         * [Links](./02-k8s/02-01-kubectl/README.md#links)\n\n   * [02-02 Kubernetes namespaces](./02-k8s/02-02-ns/README.md#02-02-kubernetes-namespaces)\n      * [Create a namespace](./02-k8s/02-02-ns/README.md#create-a-namespace)\n\n   * [02-03 Kubernetes pods](./02-k8s/02-03-pods/README.md#02-03-kubernetes-pods)\n      * [Start](./02-k8s/02-03-pods/README.md#start)\n      * [Create a pod](./02-k8s/02-03-pods/README.md#create-a-pod)\n         * [References](./02-k8s/02-03-pods/README.md#references)\n      * [Show all events occurring in the pod](./02-k8s/02-03-pods/README.md#show-all-events-occurring-in-the-pod)\n      * [Access the logs of a pod](./02-k8s/02-03-pods/README.md#access-the-logs-of-a-pod)\n      * [Troubleshoot containers running in a pod](./02-k8s/02-03-pods/README.md#troubleshoot-containers-running-in-a-pod)\n      * [Displaying logs from multiple containers (optional part)](./02-k8s/02-03-pods/README.md#displaying-logs-from-multiple-containers-optional-part)\n      * [Delete a pod](./02-k8s/02-03-pods/README.md#delete-a-pod)\n\n   * [02-04 Kubernetes replica set](./02-k8s/02-04-replicaset/README.md#02-04-kubernetes-replica-set)\n      * [Create a replica set](./02-k8s/02-04-replicaset/README.md#create-a-replica-set)\n      * [Scaling our application to multiple instances](./02-k8s/02-04-replicaset/README.md#scaling-our-application-to-multiple-instances)\n      * [Delete a pod in the replicaset](./02-k8s/02-04-replicaset/README.md#delete-a-pod-in-the-replicaset)\n      * [Delete the replicaset](./02-k8s/02-04-replicaset/README.md#delete-the-replicaset)\n\n   * [02-05-01 Kubernetes Deployment and Service](./02-k8s/02-05-deployment-svc/01-README.md#02-05-01-kubernetes-deployment-and-service)\n      * [Pre-requisites](./02-k8s/02-05-deployment-svc/01-README.md#pre-requisites)\n         * [kubectl](./02-k8s/02-05-deployment-svc/01-README.md#kubectl)\n         * [Kubernetes cluster](./02-k8s/02-05-deployment-svc/01-README.md#kubernetes-cluster)\n      * [Create a namespace](./02-k8s/02-05-deployment-svc/01-README.md#create-a-namespace)\n\n   * [02-05-02 Kubernetes Deployment and Service](./02-k8s/02-05-deployment-svc/02-README.md#02-05-02-kubernetes-deployment-and-service)\n      * [Create a deployment](./02-k8s/02-05-deployment-svc/02-README.md#create-a-deployment)\n\n   * [02-05-03 Kubernetes Deployment and Service](./02-k8s/02-05-deployment-svc/03-README.md#02-05-03-kubernetes-deployment-and-service)\n      * [External access to the pod - how to create a basic service](./02-k8s/02-05-deployment-svc/03-README.md#external-access-to-the-pod---how-to-create-a-basic-service)\n\n   * [03-01 Kubernetes ConfigMaps](./03-k8s-deploy/03-01-configs/README.md#03-01-kubernetes-configmaps)\n      * [Start](./03-k8s-deploy/03-01-configs/README.md#start)\n         * [ConfigMaps](./03-k8s-deploy/03-01-configs/README.md#configmaps)\n      * [Cleanup](./03-k8s-deploy/03-01-configs/README.md#cleanup)\n\n   * [03-02 Kubernetes Secrets](./03-k8s-deploy/03-02-secrets/README.md#03-02-kubernetes-secrets)\n      * [Start](./03-k8s-deploy/03-02-secrets/README.md#start)\n         * [Secret maps](./03-k8s-deploy/03-02-secrets/README.md#secret-maps)\n      * [Secrets are encoded, but not encrypted](./03-k8s-deploy/03-02-secrets/README.md#secrets-are-encoded-but-not-encrypted)\n      * [Cleanup](./03-k8s-deploy/03-02-secrets/README.md#cleanup)\n\n   * [03-03 Ingress](./03-k8s-deploy/03-03-ingress/README.md#03-03-ingress)\n      * [Ingress rules](./03-k8s-deploy/03-03-ingress/README.md#ingress-rules)\n         * [Nginx ingress controller, path-based routing](./03-k8s-deploy/03-03-ingress/README.md#nginx-ingress-controller-path-based-routing)\n         * [Nginx ingress controller, using a domain name](./03-k8s-deploy/03-03-ingress/README.md#nginx-ingress-controller-using-a-domain-name)\n         * [Nginx ingress controller, one domain name, two services](./03-k8s-deploy/03-03-ingress/README.md#nginx-ingress-controller-one-domain-name-two-services)\n\n   * [03-04 Helm charts](./03-k8s-deploy/03-04-helm/README.md#03-04-helm-charts)\n      * [Start](./03-k8s-deploy/03-04-helm/README.md#start)\n      * [Helm charts](./03-k8s-deploy/03-04-helm/README.md#helm-charts)\n      * [Install the Helm CLI](./03-k8s-deploy/03-04-helm/README.md#install-the-helm-cli)\n         * [Windows](./03-k8s-deploy/03-04-helm/README.md#windows)\n         * [MacOS](./03-k8s-deploy/03-04-helm/README.md#macos)\n      * [Installing a Helm chart from a public repository](./03-k8s-deploy/03-04-helm/README.md#installing-a-helm-chart-from-a-public-repository)\n      * [Why use Helm charts?](./03-k8s-deploy/03-04-helm/README.md#why-use-helm-charts)\n      * [What is in a Helm chart?](./03-k8s-deploy/03-04-helm/README.md#what-is-in-a-helm-chart)\n      * [Search for a Helm chart in a private repository](./03-k8s-deploy/03-04-helm/README.md#search-for-a-helm-chart-in-a-private-repository)\n      * [Run a Helm chart](./03-k8s-deploy/03-04-helm/README.md#run-a-helm-chart)\n      * [Upgrade and rollback a Helm chart](./03-k8s-deploy/03-04-helm/README.md#upgrade-and-rollback-a-helm-chart)\n      * [Cleanup](./03-k8s-deploy/03-04-helm/README.md#cleanup)\n\n   * [03-05 Kustomize](./03-k8s-deploy/03-05-kustomize/README.md#03-05-kustomize)\n\n   * [04-01 Metrics collection and visualisation](./04-observability/04-01-prometheus/README.md#04-01-metrics-collection-and-visualisation)\n      * [Start](./04-observability/04-01-prometheus/README.md#start)\n      * [Application instrumentation with Prometheus](./04-observability/04-01-prometheus/README.md#application-instrumentation-with-prometheus)\n         * [Adding metrics to a NodeJS application](./04-observability/04-01-prometheus/README.md#adding-metrics-to-a-nodejs-application)\n         * [Collecting application metrics with Prometheus in Kubernetes](./04-observability/04-01-prometheus/README.md#collecting-application-metrics-with-prometheus-in-kubernetes)\n         * [Visualise metrics in the Prometheus expression browser](./04-observability/04-01-prometheus/README.md#visualise-metrics-in-the-prometheus-expression-browser)\n         * [Grafana application dashboard](./04-observability/04-01-prometheus/README.md#grafana-application-dashboard)\n         * [Resources](./04-observability/04-01-prometheus/README.md#resources)\n      * [Cleanup](./04-observability/04-01-prometheus/README.md#cleanup)\n\n   * [05-01 Azure Kubernetes Service (AKS) cluster](./05-k8s-azure/05-01-azure-aks/README.md#05-01-azure-kubernetes-service-aks-cluster)\n      * [Start](./05-k8s-azure/05-01-azure-aks/README.md#start)\n      * [Kubernetes context and kubeconfig file](./05-k8s-azure/05-01-azure-aks/README.md#kubernetes-context-and-kubeconfig-file)\n\n   * [05-02 Azure Function Core Tools](./05-k8s-azure/05-02-azure-func/README.md#05-02-azure-function-core-tools)\n      * [Start](./05-k8s-azure/05-02-azure-func/README.md#start)\n      * [Cross platform development with func](./05-k8s-azure/05-02-azure-func/README.md#cross-platform-development-with-func)\n      * [Cleanup](./05-k8s-azure/05-02-azure-func/README.md#cleanup)\n\n   * [06-01 Feature toggling](./06-k8s-servicemesh/06-01-featuretoggles/README.md#06-01-feature-toggling)\n      * [Exercise 1](./06-k8s-servicemesh/06-01-featuretoggles/README.md#exercise-1)\n         * [Kiali](./06-k8s-servicemesh/06-01-featuretoggles/README.md#kiali)\n      * [Exercise 2](./06-k8s-servicemesh/06-01-featuretoggles/README.md#exercise-2)\n         * [Clean up](./06-k8s-servicemesh/06-01-featuretoggles/README.md#clean-up)\n\n   * [06-02 Traffic Shifting](./06-k8s-servicemesh/06-02-trafficshifting/README.md#06-02-traffic-shifting)\n      * [Exercise](./06-k8s-servicemesh/06-02-trafficshifting/README.md#exercise)\n         * [Kiali](./06-k8s-servicemesh/06-02-trafficshifting/README.md#kiali)\n         * [Clean up](./06-k8s-servicemesh/06-02-trafficshifting/README.md#clean-up)\n\n   * [06-03 Fault Injection](./06-k8s-servicemesh/06-03-faultinjection/README.md#06-03-fault-injection)\n      * [Setup](./06-k8s-servicemesh/06-03-faultinjection/README.md#setup)\n   * [Exercise 1](./06-k8s-servicemesh/06-03-faultinjection/README.md#exercise-1)\n      * [Injecting a HTTP delay fault](./06-k8s-servicemesh/06-03-faultinjection/README.md#injecting-a-http-delay-fault)\n         * [Configure the rule](./06-k8s-servicemesh/06-03-faultinjection/README.md#configure-the-rule)\n         * [Testing the delay configuration](./06-k8s-servicemesh/06-03-faultinjection/README.md#testing-the-delay-configuration)\n         * [What happened?](./06-k8s-servicemesh/06-03-faultinjection/README.md#what-happened)\n         * [Fixing the bug](./06-k8s-servicemesh/06-03-faultinjection/README.md#fixing-the-bug)\n   * [Exercise 2](./06-k8s-servicemesh/06-03-faultinjection/README.md#exercise-2)\n      * [Injecting a HTTP abort fault](./06-k8s-servicemesh/06-03-faultinjection/README.md#injecting-a-http-abort-fault)\n         * [Configure the rule](./06-k8s-servicemesh/06-03-faultinjection/README.md#configure-the-rule-1)\n         * [Testing the abort configuration](./06-k8s-servicemesh/06-03-faultinjection/README.md#testing-the-abort-configuration)\n      * [Clean up](./06-k8s-servicemesh/06-03-faultinjection/README.md#clean-up)\n\n   * [06-04 Canary Deployments with Flagger](./06-k8s-servicemesh/06-04-flaggercanary/README.md#06-04-canary-deployments-with-flagger)\n      * [Setup](./06-k8s-servicemesh/06-04-flaggercanary/README.md#setup)\n      * [Flagger Canary](./06-k8s-servicemesh/06-04-flaggercanary/README.md#flagger-canary)\n\n   * [06-05 Observability](./06-k8s-servicemesh/06-05-observability/README.md#06-05-observability)\n      * [Setup](./06-k8s-servicemesh/06-05-observability/README.md#setup)\n      * [Prometheus](./06-k8s-servicemesh/06-05-observability/README.md#prometheus)\n      * [Grafana](./06-k8s-servicemesh/06-05-observability/README.md#grafana)\n      * [Jaeger](./06-k8s-servicemesh/06-05-observability/README.md#jaeger)\n      * [With Kiali](./06-k8s-servicemesh/06-05-observability/README.md#with-kiali)\n         * [Setup](./06-k8s-servicemesh/06-05-observability/README.md#setup-1)\n         * [Understanding the Graph](./06-k8s-servicemesh/06-05-observability/README.md#understanding-the-graph)\n         * [Workloads](./06-k8s-servicemesh/06-05-observability/README.md#workloads)\n         * [Services](./06-k8s-servicemesh/06-05-observability/README.md#services)\n\n   * [06-00-01 Service mesh features](./06-k8s-servicemesh/README.md#06-00-01-service-mesh-features)\n      * [Getting started](./06-k8s-servicemesh/README.md#getting-started)\n\n   * [06-00-02 Service Mesh Workshop](./06-k8s-servicemesh/workshop-README.md#06-00-02-service-mesh-workshop)\n      * [Pre-Workshop Setup](./06-k8s-servicemesh/workshop-README.md#pre-workshop-setup)\n         * [Creating the Cluster](./06-k8s-servicemesh/workshop-README.md#creating-the-cluster)\n         * [Installing Istio](./06-k8s-servicemesh/workshop-README.md#installing-istio)\n         * [Kiali](./06-k8s-servicemesh/workshop-README.md#kiali)\n   * [Exercises](./06-k8s-servicemesh/workshop-README.md#exercises)\n      * [Feature Toggles](./06-k8s-servicemesh/workshop-README.md#feature-toggles)\n      * [Exercise 1.1](./06-k8s-servicemesh/workshop-README.md#exercise-11)\n         * [Kiali](./06-k8s-servicemesh/workshop-README.md#kiali-1)\n      * [Exercise 1.2](./06-k8s-servicemesh/workshop-README.md#exercise-12)\n         * [Clean up](./06-k8s-servicemesh/workshop-README.md#clean-up)\n      * [Traffic Shifting](./06-k8s-servicemesh/workshop-README.md#traffic-shifting)\n      * [Exercise 2.1](./06-k8s-servicemesh/workshop-README.md#exercise-21)\n      * [Exercise 2.2](./06-k8s-servicemesh/workshop-README.md#exercise-22)\n      * [Exercise 2.3](./06-k8s-servicemesh/workshop-README.md#exercise-23)\n         * [Clean up](./06-k8s-servicemesh/workshop-README.md#clean-up-1)\n      * [Fault Injection](./06-k8s-servicemesh/workshop-README.md#fault-injection)\n      * [Exercise 3.1](./06-k8s-servicemesh/workshop-README.md#exercise-31)\n         * [Injecting a HTTP delay fault](./06-k8s-servicemesh/workshop-README.md#injecting-a-http-delay-fault)\n         * [Configure the rule](./06-k8s-servicemesh/workshop-README.md#configure-the-rule)\n         * [Testing the delay configuration](./06-k8s-servicemesh/workshop-README.md#testing-the-delay-configuration)\n         * [What happened?](./06-k8s-servicemesh/workshop-README.md#what-happened)\n         * [Fixing the bug](./06-k8s-servicemesh/workshop-README.md#fixing-the-bug)\n   * [Exercise 3.2](./06-k8s-servicemesh/workshop-README.md#exercise-32)\n      * [Injecting a HTTP abort fault](./06-k8s-servicemesh/workshop-README.md#injecting-a-http-abort-fault)\n         * [Configure the rule](./06-k8s-servicemesh/workshop-README.md#configure-the-rule-1)\n         * [Testing the abort configuration](./06-k8s-servicemesh/workshop-README.md#testing-the-abort-configuration)\n         * [Clean up](./06-k8s-servicemesh/workshop-README.md#clean-up-2)\n      * [Canary Deployments with Flagger](./06-k8s-servicemesh/workshop-README.md#canary-deployments-with-flagger)\n      * [Setup](./06-k8s-servicemesh/workshop-README.md#setup)\n      * [Flagger Canary](./06-k8s-servicemesh/workshop-README.md#flagger-canary)\n   * [Final Cleanup](./06-k8s-servicemesh/workshop-README.md#final-cleanup)\n\nCreated by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillgarcia%2Frotc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwillgarcia%2Frotc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillgarcia%2Frotc/lists"}