Skip to content
☁️ Challenges Your Kubernetes Skills And Knowledge
Shell Ruby Go Makefile Emacs Lisp Dockerfile
Branch: master
Clone or download
Pull request Compare This branch is 4 commits behind dennyzhang:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
challenges-k8s-crd @ 1c64b0f
challenges-k8s-logging @ 72ec0bd
challenges-k8s-monitoring @ ed63a2a
challenges-k8s-storage @ 4ab8043
kubernetes-scripts @ e09231b
prepare-k8s-cka @ 6ff9775

1 Deep Dive Into Kubernetes

1.1 Kubernetes Topics

github tag #denny-kubernetes

1.2 Kubernetes BootCamp

linkedin github slack

PRs Welcome

File me Issues or star this repo.

See more Kubernetes from Denny: #denny-kubernetes

1.2.1 Scenario-101: 1-Node K8S Deployment I

  • 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.

1.2.2 Scenario-102: 1-Node K8S Deployment II

  • 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.

1.2.3 Scenario-103: 1-Node K8S Deployment III

  • 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)

1.2.4 Scenario-201: 3-Nodes K8S Deployment I

  • 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.

1.2.5 Scenario-202: 3-Nodes K8S Deployment II

  • 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)

1.2.6 Scenario-203: 3-Nodes K8S Deployment II

  • 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.

1.2.7 Scenario-301: Use helm To Deploy Service I

  • Objective: Know the basic usage of helm
  • Requirements:
1. Use helm to deploy a mysql service with single instance
2. Customize the deployment

1.2.8 Scenario-302: Use helm To Deploy Service II

  • 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)

1.2.9 Scenario-303: Use helm To Deploy Service III

  • Objective: HA deployemnt with helm
  • Requirements:
1. Create a wordpress Chart by yourself
2. Deploy a HA wordpress service with your helm chart

1.2.10 Scenario-304: Use helm To Deploy Service IV

  • Objective: Deploy elasticsearch cluster with 5 instances
  • Requirements:
1. Create an elasticsearch cluster
2. Scale the env to 5 instances

1.2.11 Scenario-401: Deploy a stateful service I

  • 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.

1.2.12 Scenario-402: Deploy a stateful service II

  • 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

1.2.13 Scenario-501: Day2 Mission: Setup Prometheus monitoring

  • Objective: Setup k8s monitoring
  • Requirements:
1. Setup prometheus monitoring for infra level
2. Setup prometheus monitoring for application level

1.2.14 Scenario-502: Day2 Mission: Prometheus Operator

  • Objective: Learn more about k8s operator concept
  • Requirements:
1. Enable prometheus operator
2. AIOps: Use operator to respond to repetitive issues from monitoring system

1.3 More Resources

License: Code is licensed under MIT License.

  • More resources: run services on k8s cluster
Kubernetes Example
kubernetes kubernetes
Creating a Custom Cluster from Scratch
kubernetes examples in GitHub From Google
Configuration Best Practices
  • More resources: k8s cluster itself
Bootstrap Kubernetes the hard way on Google Cloud Platform. No scripts.
Simple VM based Kubernetes cluster setup
You can’t perform that action at this time.