Challenges & cheat sheets
Hands-on challenges to sharpen your skills and quick-reference cheat sheets for the tools you use every day.
Debug a CrashLoopBackOff
A pod is stuck in CrashLoopBackOff. The container is running a Python Flask app on port 8080 but the Deployment specifies containerPort 80. Find and fix the issue.
Show hint →
Fix a broken Terraform state
A team member manually deleted an S3 bucket that Terraform manages. Running terraform plan now shows it wants to create a new bucket with the same name. Fix the state without destroying other resources.
Show hint →
Slow PostgreSQL query
A query joining users and orders is taking 2.3 seconds on a table with 500k rows. EXPLAIN shows a sequential scan on the orders table. The WHERE clause filters on created_at. Fix it.
Show hint →
Zero-downtime K8s upgrade
You need to upgrade an EKS cluster from 1.28 to 1.30 with zero downtime. There are 15 services running across 3 node groups. Describe your approach including pre-checks, node group rotation, and rollback plan.
Show hint →
More challenges coming weekly. Got one to suggest? Get in touch →
kubectl get pods -AList all pods in all namespaceskubectl get pods -n <ns> -o widePods with node and IP infokubectl describe pod <name>Detailed pod info and eventskubectl logs <pod> -fStream pod logskubectl logs <pod> -c <container>Logs from specific containerkubectl exec -it <pod> -- /bin/shShell into a running podkubectl apply -f <file>.yamlApply a manifestkubectl delete -f <file>.yamlDelete resources from manifestkubectl rollout status deploy/<name>Watch a rolloutkubectl rollout undo deploy/<name>Rollback a deploymentkubectl scale deploy/<name> --replicas=3Scale a deploymentkubectl top pods -ACPU and memory usage per podkubectl get events --sort-by=.lastTimestampRecent cluster eventskubectl port-forward svc/<svc> 8080:80Forward a service port locallykubectl drain <node> --ignore-daemonsetsSafely drain a nodekubectl cordon <node>Mark node as unschedulablekubectl get nodes -o wideNode list with IPs and roleskubectl get secret <name> -o jsonpath='{.data.*}' | base64 -dDecode a secret valueterraform initInitialize working directoryterraform planShow execution planterraform plan -out=tfplanSave plan to fileterraform apply tfplanApply a saved planterraform apply -auto-approveApply without confirmationterraform destroyDestroy all managed infrastructureterraform fmt -recursiveFormat all .tf filesterraform validateValidate configuration syntaxterraform state listList all resources in stateterraform state show <resource>Show details of a state resourceterraform state rm <resource>Remove resource from state (not cloud)terraform import <resource> <id>Import existing resource into stateterraform outputShow output valuesterraform workspace listList workspacesterraform workspace new <name>Create a new workspaceterraform taint <resource>Mark resource for recreationterraform graph | dot -Tpng > graph.pngVisualize dependency graphaws sts get-caller-identityShow current IAM identityaws configure listShow active credentials and regionaws ec2 describe-instances --query "Reservations[].Instances[].[InstanceId,State.Name,Tags[?Key=='Name'].Value|[0]]" --output tableList EC2 instances as tableaws s3 ls s3://<bucket> --recursive --human-readableList S3 bucket contentsaws s3 sync ./local s3://<bucket>/Sync local folder to S3aws eks update-kubeconfig --name <cluster> --region <region>Add EKS cluster to kubeconfigaws logs tail <log-group> --followStream CloudWatch logsaws ssm start-session --target <instance-id>SSM session without SSHaws iam list-attached-user-policies --user-name <user>List policies for IAM useraws secretsmanager get-secret-value --secret-id <name>Retrieve a secretaws rds describe-db-instances --query "DBInstances[].[DBInstanceIdentifier,DBInstanceStatus]" --output tableList RDS instancesaws cloudformation describe-stacks --query "Stacks[].StackName"List CloudFormation stacks