File me tickets or star the repo.
Similar Challenges: https://www.dennyzhang.com/battle
Challenges Your Kubernetes Skills And Knowledge
- Scenarios
- Scenario-101: 1-Node K8S Deployment I
- Scenario-102: 1-Node K8S Deployment II
- Scenario-103: 1-Node K8S Deployment III
- Scenario-201: 3-Nodes K8S Deployment I
- Scenario-202: 3-Nodes K8S Deployment II
- Scenario-203: 3-Nodes K8S Deployment II
- Scenario-301: Use helm To Deploy Service I
- Scenario-302: Use helm To Deploy Service II
- Scenario-303: Use helm To Deploy Service III
- Scenario-401: Deploy a stateful service I
- Scenario-402: Deploy a stateful service II
- Highlights
- Contributors: Give People Credits
- License
- Objective: Get familiar with K8S concept. Here K8S stands for Kubernetes.
- Requirements:
1. Start one node of k8s in your laptop. Mac or Linux
2. Start a nginx webserver with one instance
3. Scale nginx service into 2 instances.
4. Get familiar with k8s dashboard. Find pods from GUI, check nginx log.
- See kubernetes.yaml
- Main Tech: minikube, nginx, dashboard
- See more: Scenario-101
- Objective: Single node deployment for stateful service
- Requirements:
1. Use yaml to start one mysql server service with 1 instance.
2. Use yaml to start one mysql client service with 2 instances.
3. Delete the db server instance, make sure a new one will be created automatically.
4. When db server is recreated, make sure no data loss.
- See kubernetes.yaml
- Main Tech: minikube, mysql, volume
- See more: Scenario-102
- Objective: Advanced k8s deployment for one single db service
- Requirements:
1. Suppose your k8s/minikube have multiple cluster, how you can segrate them? (Hint: namespace)
2. When we initialize mysql via yaml, avoid store mysql root password in plain text. (Hint: secrets)
3. Make sure we can create no more than 1 pods for DB server. (Hint: ResourceQuota)
- See kubernetes.yaml
- Main Tech: minikube, mysql, volume, Job
- See more: Scenario-103
- Objective: Know how to deployment k8s cluster env
- Requirements:
1. Deploy 3 nodes k8s env in your virtualbox.
One as controller, the other two as worker
2. Deploy k8s web UI, which is missing by default.
- Main Tech:
- See more: Scenario-201
- Objective: Improve service availability by choosing service type wisely.
- Requirements:
1. Deploy 3 nodes k8s. One controller, others as workers
2. Create a nginx service with 6 instances.
3. Make sure nginx requests will be balanced across 6 instances.
(Hint: ClusterIP + Ingress, or External Loadbalancer)
- Main Tech:
- See more: Scenario-202
- TODO
- Objective: k8s cluster env with stateful service
- Requirements:
1. Deploy 3 nodes k8s. One controller, others as workers
2. Create an elasticsearch service with 4 instances.
2 as master, 2 as data.
3. Create a nightly job to backup elasticsearch cluster. (Hint: Cron Jobs)
4. If any es instance has crashed, get alerts.
- Main Tech:
- See more: Scenario-203
- TODO
- Objective: Know the basic usage of helm
- Requirements:
1. Use helm to deploy a mysql service with single instance
2. Customize the deployment
- Main Tech: minikube, helm, volume
- See more: Scenario-301
- Objective: Advanced usage of helm
- Requirements:
1. Deploy a single instance wordpress service with helm
2. Scale frontend to 2 instance (Hint: kubectl scale)
3. Enforce daily db backup (Hint: CronJob)
- Main Tech: minikube, helm, volume
- See more: Scenario-302
- Objective: HA deployemnt with helm
- Requirements:
1. Create a wordpress Chart by yourself
2. Deploy a HA wordpress service with your helm chart
- Main Tech: helm, volume
- See more: Scenario-303
- TODO
- Objective: Deploy Jenkins in k8s
- Requirements:
1. Deploy Jenkins service by helm.
2. Make sure JENKINS_HOME directory persist
3. Install slack and git Jenkins plugins during helm install
4. Enable Jenkins slave agents during helm install
5. Start 2 Jenkins masters.
- Main Tech:
- See more: Scenario-401
- TODO
- Objective: Deploy Jenkins in k8s
- Requirements:
1. Deploy Jenkins service by helm. 2 Jenkins master and 2 Jenkins agents
2. Add health check for Jenkins agents (Hint: livenessProbe)
3. Use nginx as an ingress for Jenkins master
4. Simulate Jenkins slave crash events, and confirm service is fine
5. Simulate Jenkins master crash events, and confirm service is fine
- Main Tech:
- See more: Scenario-402
- TODO
- More resources: run services on k8s cluster
http://containertutorials.com/get_started_kubernetes/k8s_example.html
Kubernetes Example
https://kubernetes.io/docs/tutorials/
kubernetes kubernetes
https://kubernetes.io/docs/getting-started-guides/scratch/
Creating a Custom Cluster from Scratch
https://github.com/kubernetes/examples
kubernetes examples in GitHub From Google
https://kubernetes.io/docs/concepts/configuration/overview/
Configuration Best Practices
- More resources: k8s cluster itself
https://github.com/kelseyhightower/kubernetes-the-hard-way
Bootstrap Kubernetes the hard way on Google Cloud Platform. No scripts.
https://github.com/davidkbainbridge/k8s-playground
Simple VM based Kubernetes cluster setup
Below are folks who have contributed via GitHub!
- Code is licensed under MIT License.