From 6324cd405fcc3eacd598c7b2e2822f2e4136a49d Mon Sep 17 00:00:00 2001 From: Joseph Lewis III Date: Sat, 1 Mar 2025 21:58:09 -0800 Subject: [PATCH] Added review for Kubernetes Skill Tree --- Kubernetes Skill Tree/CHANGELOG.md | 101 +++ ...SkillTree - kubernetes - Peer Review 1.svg | 683 ++++++++++++++++++ 2 files changed, 784 insertions(+) create mode 100644 Kubernetes Skill Tree/CHANGELOG.md create mode 100644 Kubernetes Skill Tree/MakerSkillTree - kubernetes - Peer Review 1.svg diff --git a/Kubernetes Skill Tree/CHANGELOG.md b/Kubernetes Skill Tree/CHANGELOG.md new file mode 100644 index 0000000..219b253 --- /dev/null +++ b/Kubernetes Skill Tree/CHANGELOG.md @@ -0,0 +1,101 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). + +## Peer Review 1 [Unreleased] + +### Added + +* More steps to create familiarity with commonly used parts of the sprawling `kubectl` command. +* Steps to bringing your own application to Kubernetes: + * "Use an image from a private container repository" + * "Create a container from your app" +* Introduction to additional tools: + * "Try an alternative to kubectl like K9s" + * "Install the Kubernetes Dashboard" +* Milestones for beginner/intermediate/advanced use cases: + * Beginner: "Deploy apps for your personal use" + * Intermediate: "Run apps for a club on a cluster" + * Advanced: "Host apps on the Internet from your cluster" +* Places to get more information: + * "Explore kubectl's "Troubleshooting" section" + * "Explore the Kubernetes Reference Guide" + * "Explore the Kubernetes Tutorials" +* More gradual exposure to different concepts: + * "Set up health check probes on your workloads" for the different kinds of health checks + * "Set up two workloads that communicate" for in-cluster DNS + * "Deploy a stateless app" the first major step after a Hello, World Pod is deploying + something that doesn't need to store data. + * "Expose a Deployment using a Service" step to show that Deployments and Pods work similarly. + * "Create a multi-container Pod" for sidecars + * "Use headless Services for service discovery" for service discovery + * "Deploy a non-HTTP workload e.g. FTP server" for TCP networking, which is more primitive + * "Optimize your workload container sizes" for cost savings and performance + * "Set up ServiceAccounts for your workloads" for security and cluster sharing + * "Share your cluster with a second person" for practical RBAC + * "Configure a Deployment for high availability updates" for proper use of Deployments +* Different options to get Kubernetes clusters: + * "Deploy a cluster in the cloud" this is what most people do. + * "Set up a cluster from scratch on Raspberry Pis" a common approach for hobbyists with lots of info and + varying degrees of difficulty depending on how deep into it you want to go. +* Basic operations needs: + * Learn how to backup and restore your cluster + * Make your cluster reproducible with Terraform + +### Changed + +* "Create a basic Pod" to "Deploy a 'Hello, World!'' Pod" because it's not obvious what "basic" means. +* "Secure sensitive data with Secrets" to "Use a Secret to distribute credentials" because Secrets don't + provide much security. +* Merged "Set resource requests for Pods" and "Set resource limits for Pods" to + "Set resource requests and limits for workloads" because it's the same topic. +* "Perform rolling updates and rollbacks" to "Roll back a change to a Deployment" rolling updates are the default, + but being able to undo a mistake is very important. +* Merged "Control Pod scheduling tolerations" and "Configure Pod affinity and anti-affinity" into + "Control scheduling with tolerations and affinity" because they're similar topics. +* Replaced "Set up Persistent Volumes and Claims" and "Create StatefulSets for stateful applications" with " + Deploy Wordpress and MySQL with Persistent Volumes" to focus on an outcome. This wil point you at the Kubernetes.io + tutorial for stateful workloads. +* Consolidated topics related to operators and CRDs into: "Develop your own operator and CRDs". This is a niche skill, + but it's good to know it's possible. +* Consolidated multiple service mesh/advanced networking related solutions to "Deploy a service mesh to your cluster" +* Consolidated multiple monitoring items to: "Set up cluster-wide logging and monitoring" and + "Set up alerting for unhealthy workloads". Logging/monitoring are usually the same tool and useful by themselves. +* Many small wording changes to improve cohesion. + +### Removed + +* "Use Kubectl to manage resources" because it has high overlap with the other skills. +* Duplicate "Expose a Pod using a Service" +* "Apply network policies to control traffic between Pods" because only some configurations support this out of the box, + it silently fails otherwise which would be frustrating for a beginner. +* Skills that focus on specific parts of deploying your own cluster, these align better with a platform engineer role + than a hobbyist. Some of these are now covered by deploying a cluster on a Raspberry Pi: + * "Set up a container runtime e.g. Containerd, CRI-0" + * "Set up ingress for external access e.g. NGINX, Traefik" + * "Set up a multi-node cluster with kubeadm" + * "Set up a cluster using Kubeadm" + * "Use Cluster API" + * "Use Kubernetes on Bare Metal" + * "Use persistent volume provisioners" + * "Install and configure a networking solution e.g. Calico, Flannel" +* Removed multiple items related to storage, these should be covered enough to get by with the stateful application tile: + * "Use external storage solutions with Kubernetes" + * "Configure storage class" + * "Implement storage solutions with CSI drivers" +* Removed multiple skills that start to matter when you have lots of people or large clusters: + * "Optimize costs within Kubernetes" partially covered by optimizing workloads + * "Use OPA for policies" + * "Perform cluster performance tuning" + * "Implement GitOps practices" partially covered elsewhere + * "Create a blue-green deployment" not best practice in Kubernetes + * "Create a canary deployment" already covered with Deployments + +### Fixed + +* Various capitalization issues. + * `Kind` to `kind` to match their website + * `MiniKube` to `minikube` to match their website + * Capitalized Kubernetes types except namespace to be consistent with kubernetes.io \ No newline at end of file diff --git a/Kubernetes Skill Tree/MakerSkillTree - kubernetes - Peer Review 1.svg b/Kubernetes Skill Tree/MakerSkillTree - kubernetes - Peer Review 1.svg new file mode 100644 index 0000000..ceebec1 --- /dev/null +++ b/Kubernetes Skill Tree/MakerSkillTree - kubernetes - Peer Review 1.svg @@ -0,0 +1,683 @@ +JTdCJTIydGl0bGUlMjIlM0ElMjJrdWJlcm5ldGVzJTIyJTJDJTIyY3JlZGl0cyUyMiUzQSUyMkF1dG9zY2FsZSUyMGElMjBEZXBsb3ltZW50JTIyJTJDJTIyaXRlbXMlMjIlM0ElN0IlMjIwJTIyJTNBJTIySW5zdGFsbCUyMGFuZCUyMGNvbmZpZ3VyZSUyMGt1YmVjdGwlMjIlMkMlMjIxJTIyJTNBJTIyRmlsdGVyJTIwcmVzb3VyY2VzJTIwdXNpbmclMjBzZWxlY3RvcnMlMjIlMkMlMjIyJTIyJTNBJTIyTWFuYWdlJTIwcmVzb3VyY2UlMjB1c2FnZSUyMGZvciUyMHdvcmtsb2FkcyUyMiUyQyUyMjMlMjIlM0ElMjJSdW4lMjBhJTIwd29ya2xvYWQlMjBvbiUyMGV2ZXJ5JTIwTm9kZSUyMHdpdGglMjBhJTIwRGFlbW9uU2V0JTIyJTJDJTIyNCUyMiUzQSUyMlNldCUyMHVwJTIwYSUyMENJJTJGQ0QlMjBwaXBlbGluZSUyMHRoYXQlMjBkZXBsb3lzJTIwdG8lMjB0aGUlMjBjbHVzdGVyJTIyJTJDJTIyNSUyMiUzQSUyMlNldCUyMHVwJTIwYSUyMGNsdXN0ZXIlMjBmcm9tJTIwc2NyYXRjaCUyMG9uJTIwUmFzcGJlcnJ5JTIwUGlzJTIyJTJDJTIyNiUyMiUzQSUyMk1hbnVhbGx5JTIwdXBncmFkZSUyMGElMjBjbHVzdGVyJTIyJTJDJTIyNyUyMiUzQSUyMk1vbml0b3IlMjB5b3VyJTIwY2x1c3RlcidzJTIwaGVhbHRoJTIyJTJDJTIyOCUyMiUzQSUyMkNvbnRyaWJ1dGUlMjB0byUyMHRoZSUyMEt1YmVybmV0ZXMlMjBjb21tdW5pdHklMjIlMkMlMjI5JTIyJTNBJTIyRGVwbG95JTIwYSUyMGxvY2FsJTIwS3ViZXJuZXRlcyUyMGNsdXN0ZXIlMjBlLmcuJTIwbWluaWt1YmUlMkMlMjBraW5kJTIyJTJDJTIyMTAlMjIlM0ElMjJBcHBseSUyMGxhYmVscyUyMHRvJTIwb3JnYW5pemUlMjByZXNvdXJjZXMlMjIlMkMlMjIxMSUyMiUzQSUyMkV4cGxvcmUlMjB0aGUlMjBLdWJlcm5ldGVzJTIwVHV0b3JpYWxzJTIyJTJDJTIyMTIlMjIlM0ElMjJVc2UlMjBhbiUyMGltYWdlJTIwZnJvbSUyMGElMjBwcml2YXRlJTIwY29udGFpbmVyJTIwcmVwb3NpdG9yeSUyMiUyQyUyMjEzJTIyJTNBJTIyQnJpbmclMjB5b3VyJTIwb3duJTIwdG9vbHMlMjB3aXRoJTIwJTYwa3ViZWN0bCUyMGRlYnVnJTYwJTIyJTJDJTIyMTQlMjIlM0ElMjJUcnklMjBhbiUyMGFsdGVybmF0aXZlJTIwdG8lMjBrdWJlY3RsJTIwbGlrZSUyMEs5cyUyMiUyQyUyMjE1JTIyJTNBJTIyRXhwbG9yZSUyMHRoZSUyMEt1YmVybmV0ZXMlMjBSZWZlcmVuY2UlMjBHdWlkZSUyMiUyQyUyMjE2JTIyJTNBJTIyVXNlJTIwS3ViZXJuZXRlcyUyMEFQSSUyMGRpcmVjdGx5JTIyJTJDJTIyMTclMjIlM0ElMjJVc2UlMjBoZWFkbGVzcyUyMFNlcnZpY2VzJTIwZm9yJTIwc2VydmljZSUyMGRpc2NvdmVyeSUyMiUyQyUyMjE4JTIyJTNBJTIyQ29uZmlndXJlJTIweW91ciUyMGNsdXN0ZXIlMjBmb3IlMjBoaWdoJTIwYXZhaWxhYmlsaXR5JTIyJTJDJTIyMTklMjIlM0ElMjJDaGVjayUyMFBvZCUyMGxvZ3MlMjIlMkMlMjIyMCUyMiUzQSUyMkV4cG9zZSUyMGFuJTIwYXBwJTIwdXNpbmclMjBhJTIwU2VydmljZSUyMiUyQyUyMjIxJTIyJTNBJTIyQ29ubmVjdCUyMHRvJTIwYSUyMFBvZCUyMHdpdGglMjAlNjBrdWJlY3RsJTIwcG9ydC1mb3J3YXJkJTYwJTIyJTJDJTIyMjIlMjIlM0ElMjJEZXBsb3klMjBhcHBzJTIwZm9yJTIweW91ciUyMHBlcnNvbmFsJTIwdXNlJTIyJTJDJTIyMjMlMjIlM0ElMjJTZXQlMjB1cCUyMGFuJTIwSW5ncmVzcyUyMGZvciUyMEhUVFAlMjByb3V0aW5nJTIyJTJDJTIyMjQlMjIlM0ElMjJDb250cm9sJTIwc2NoZWR1bGluZyUyMHdpdGglMjB0b2xlcmF0aW9ucyUyMGFuZCUyMGFmZmluaXR5JTIyJTJDJTIyMjUlMjIlM0ElMjJSdW4lMjBhcHBzJTIwZm9yJTIwYSUyMGNsdWIlMjBvbiUyMGElMjBjbHVzdGVyJTIyJTJDJTIyMjYlMjIlM0ElMjJIb3N0JTIwYXBwcyUyMG9uJTIwdGhlJTIwSW50ZXJuZXQlMjBmcm9tJTIweW91ciUyMGNsdXN0ZXIlMjIlMkMlMjIyNyUyMiUzQSUyMkxlYXJuJTIwaG93JTIwdG8lMjBiYWNrdXAlMjBhbmQlMjByZXN0b3JlJTIweW91ciUyMGNsdXN0ZXIlMjIlMkMlMjIyOCUyMiUzQSUyMkRlcGxveSUyMGElMjBzZXJ2aWNlJTIwbWVzaCUyMHRvJTIweW91ciUyMGNsdXN0ZXIlMjIlMkMlMjIyOSUyMiUzQSUyMkRlcGxveSUyMGElMjAlNUMlMjJIZWxsbyUyQyUyMFdvcmxkISU1QyUyMiUyMFBvZCUyMiUyQyUyMjMwJTIyJTNBJTIyVXNlJTIwYSUyMFNlY3JldCUyMHRvJTIwZGlzdHJpYnV0ZSUyMGNyZWRlbnRpYWxzJTIyJTJDJTIyMzElMjIlM0ElMjJSb2xsJTIwYmFjayUyMGElMjBjaGFuZ2UlMjB0byUyMGElMjBEZXBsb3ltZW50JTIyJTJDJTIyMzIlMjIlM0ElMjJFeHBsb3JlJTIwa3ViZWN0bCdzJTIwJTVDJTIyVHJvdWJsZXNob290aW5nJTVDJTIyJTIwc2VjdGlvbiUyMiUyQyUyMjMzJTIyJTNBJTIyQ29uZmlndXJlJTIwYSUyMERlcGxveW1lbnQlMjBmb3IlMjBoaWdoJTIwYXZhaWxhYmlsaXR5JTIwdXBkYXRlcyUyMiUyQyUyMjM0JTIyJTNBJTIyQ3JlYXRlJTIwYSUyMEhlbG0lMjBjaGFydCUyMGZvciUyMHlvdXIlMjBvd24lMjBhcHAlMjIlMkMlMjIzNSUyMiUzQSUyMk9wdGltaXplJTIweW91ciUyMHdvcmtsb2FkJTIwY29udGFpbmVyJTIwc2l6ZXMlMjIlMkMlMjIzNiUyMiUzQSUyMlVzZSUyMCU2MGt1YmVjdGwlMjBldmVudHMlNjAlMjB0byUyMGludmVzdGlnYXRlJTIwY2hhbmdlcyUyMiUyQyUyMjM3JTIyJTNBJTIyTWFrZSUyMHlvdXIlMjBjbHVzdGVyJTIwcmVwcm9kdWNpYmxlJTIwd2l0aCUyMFRlcnJhZm9ybSUyMiUyQyUyMjM4JTIyJTNBJTIyT3B0aW1pemUlMjByZXNvdXJjZSUyMHVzYWdlJTIwb2YlMjB5b3VyJTIwd29ya2xvYWRzJTIyJTJDJTIyMzklMjIlM0ElMjJFeHBsb3JlJTIweW91ciUyMGNsdXN0ZXIlMjB3aXRoJTIwJTYwa3ViZWN0bCUyMGdldCUyMGFsbCU2MCUyMiUyQyUyMjQwJTIyJTNBJTIyRGVwbG95JTIwYSUyMHN0YXRlbGVzcyUyMGFwcCUyMiUyQyUyMjQxJTIyJTNBJTIyRGVwbG95JTIwV29yZHByZXNzJTIwYW5kJTIwTXlTUUwlMjB3aXRoJTIwUGVyc2lzdGVudCUyMFZvbHVtZXMlMjIlMkMlMjI0MiUyMiUzQSUyMlNldCUyMHVwJTIwaGVhbHRoJTIwY2hlY2tzJTIwZm9yJTIweW91ciUyMHdvcmtsb2FkcyUyMiUyQyUyMjQzJTIyJTNBJTIyQ3JlYXRlJTIwYSUyMGNvbnRhaW5lciUyMGZvciUyMHlvdXIlMjBvd24lMjBhcHAlMjIlMkMlMjI0NCUyMiUzQSUyMlNjaGVkdWxlJTIwYSUyMHRhc2slMjB3aXRoJTIwYSUyMENyb25Kb2JzJTIyJTJDJTIyNDUlMjIlM0ElMjJTZXQlMjB1cCUyMFNlcnZpY2VBY2NvdW50cyUyMGZvciUyMHlvdXIlMjB3b3JrbG9hZHMlMjIlMkMlMjI0NiUyMiUzQSUyMkNvbmZpZ3VyZSUyMFJvbGUtQmFzZWQlMjBBY2Nlc3MlMjBDb250cm9sJTIwKFJCQUMpJTIyJTJDJTIyNDclMjIlM0ElMjJDcmVhdGUlMjB5b3VyJTIwb3duJTIwY3VzdG9tJTIwYWRtaXNzaW9uJTIwY29udHJvbGxlciUyMiUyQyUyMjQ4JTIyJTNBJTIyRGV2ZWxvcCUyMHlvdXIlMjBvd24lMjBvcGVyYXRvciUyMGFuZCUyMENSRHMlMjIlMkMlMjI0OSUyMiUzQSUyMkxvZyUyMGludG8lMjBhJTIwUG9kJTIwd2l0aCUyMCU2MGt1YmVjdGwlMjBleGVjJTYwJTIyJTJDJTIyNTAlMjIlM0ElMjJFeHBvc2UlMjBhJTIwUG9kJTIwdXNpbmclMjBhJTIwU2VydmljZSUyMiUyQyUyMjUxJTIyJTNBJTIyU2NhbGUlMjBhJTIwd29ya2xvYWQlMjBtYW51YWxseSUyMiUyQyUyMjUyJTIyJTNBJTIyU2V0JTIwdXAlMjB0d28lMjB3b3JrbG9hZHMlMjB0aGF0JTIwY29tbXVuaWNhdGUlMjIlMkMlMjI1MyUyMiUzQSUyMkluc3RhbGwlMjBhbiUyMGFwcCUyMHVzaW5nJTIwSGVsbSUyMiUyQyUyMjU0JTIyJTNBJTIySW5zdGFsbCUyMHRoZSUyMEt1YmVybmV0ZXMlMjBEYXNoYm9hcmQlMjIlMkMlMjI1NSUyMiUzQSUyMkRlcGxveSUyMGElMjBjbHVzdGVyJTIwaW4lMjB0aGUlMjBjbG91ZCUyMiUyQyUyMjU2JTIyJTNBJTIyU2V0JTIwdXAlMjBjbHVzdGVyLXdpZGUlMjBsb2dnaW5nJTIwYW5kJTIwbW9uaXRvcmluZyUyMiUyQyUyMjU3JTIyJTNBJTIyU2hhcmUlMjB5b3VyJTIwY2x1c3RlciUyMHdpdGglMjBhJTIwc2Vjb25kJTIwcGVyc29uJTIyJTJDJTIyNTglMjIlM0ElMjJFbmZvcmNlJTIwc2VjdXJpdHklMjB1c2luZyUyMFBvZCUyMFNlY3VyaXR5JTIwQWRtaXNzaW9uJTIyJTJDJTIyNTklMjIlM0ElMjJDcmVhdGUlMjBhbmQlMjBvcmdhbml6ZSUyMG5hbWVzcGFjZXMlMjIlMkMlMjI2MCUyMiUzQSUyMkVkaXQlMjBhJTIwcmVzb3VyY2UlMjB3aXRoJTIwJTYwa3ViZWN0bCUyMGVkaXQlNjAlMjIlMkMlMjI2MSUyMiUzQSUyMk1hbmFnZSUyMGNvbmZpZ3VyYXRpb24lMjBkYXRhJTIwd2l0aCUyMENvbmZpZ01hcHMlMjIlMkMlMjI2MiUyMiUzQSUyMkF1dG9zY2FsZSUyMGElMjB3b3JrbG9hZCUyMiUyQyUyMjYzJTIyJTNBJTIyQ3JlYXRlJTIwYSUyMG11bHRpLWNvbnRhaW5lciUyMFBvZCUyMiUyQyUyMjY0JTIyJTNBJTIyRGVwbG95JTIwYSUyMG5vbi1IVFRQJTIwd29ya2xvYWQlMjBlLmcuJTIwRlRQJTIwc2VydmVyJTIyJTJDJTIyNjUlMjIlM0ElMjJDcmVhdGUlMjBhJTIwSm9iJTIwdG8lMjBydW4lMjBhJTIwb25lLW9mZiUyMHRhc2slMjIlMkMlMjI2NiUyMiUzQSUyMlNldCUyMHVwJTIwYWxlcnRpbmclMjBmb3IlMjB1bmhlYWx0aHklMjB3b3JrbG9hZHMlMjIlMkMlMjI2NyUyMiUzQSUyMkxlYXJuJTIwYWJvdXQlMjB0aGUlMjBhcmNoaXRlY3R1cmUlMjBvZiUyMEt1YmVybmV0ZXMlMjIlN0QlN0Q= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Icons by Icons8.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Use for individuals or as a group by picking a colour each and coloring in a part of the box. Everyone’s journey is different and you can + + + interpret the goals flexibly. The aim is to inspire you to learn and try new things. Not everything needs to be completed. + + + + CC BY-NC-SA 4.0 + + github.com/sjpiper145/MakerSkillTree + + + + + + + + + + Total Score + + + 1 tile = 1 point + + +Install and configure kubectlFilter resources using selectorsManage resource usage for workloadsRun a workload on every Node with a DaemonSetSet up a CI/CD pipeline that deploys to the clusterSet up a cluster from scratch on Raspberry PisManually upgrade a clusterMonitor your cluster's healthContribute to the Kubernetes communityDeploy a local Kubernetes cluster e.g. minikube, kindApply labels to organize resourcesExplore the Kubernetes TutorialsUse an image from a private container repositoryBring your own tools with `kubectl debug`Try an alternative to kubectl like K9sExplore the Kubernetes Reference GuideUse Kubernetes API directlyUse headless Services for service discoveryConfigure your cluster for high availabilityCheck Pod logsExpose an app using a ServiceConnect to a Pod with `kubectl port-forward`Deploy apps for your personal useSet up an Ingress for HTTP routingControl scheduling with tolerations and affinityRun apps for a club on a clusterHost apps on the Internet from your clusterLearn how to backup and restore your clusterDeploy a service mesh to your clusterDeploy a "Hello, World!" PodUse a Secret to distribute credentialsRoll back a change to a DeploymentExplore kubectl's "Troubleshooting" sectionConfigure a Deployment for high availability updatesCreate a Helm chart for your own appOptimize your workload container sizesUse `kubectl events` to investigate changesMake your cluster reproducible with TerraformOptimize resource usage of your workloadsExplore your cluster with `kubectl get all`Deploy a stateless appDeploy Wordpress and MySQL with Persistent VolumesSet up health checks for your workloadsCreate a container for your own appSchedule a task with a CronJobsSet up ServiceAccounts for your workloadsConfigure Role-Based Access Control (RBAC)Create your own custom admission controllerDevelop your own operator and CRDsLog into a Pod with `kubectl exec`Expose a Pod using a ServiceScale a workload manuallySet up two workloads that communicateInstall an app using HelmInstall the Kubernetes DashboardDeploy a cluster in the cloudSet up cluster-wide logging and monitoringShare your cluster with a second personEnforce security using Pod Security AdmissionCreate and organize namespacesEdit a resource with `kubectl edit`Manage configuration data with ConfigMapsAutoscale a workloadCreate a multi-container PodDeploy a non-HTTP workload e.g. FTP serverCreate a Job to run a one-off taskSet up alerting for unhealthy workloadsLearn about the architecture of Kuberneteskubernetes \ No newline at end of file