Passing the CKA exam after years of Kubernetes
How I prepared for and passed the Certified Kubernetes Administrator exam, and what I'd do differently knowing what I know now.
How I prepared for and passed the Certified Kubernetes Administrator exam, and what I'd do differently knowing what I know now.
Headlamp, OpenShift Console, or the deprecated Kubernetes Dashboard. Here's how they compare and which one fits your team.
OpenShift switched from OpenShift SDN to OVN-Kubernetes. Here's what changed and what you need to know.
You have 5 charts that all need the same labels, annotations, and helper functions. Copy-paste isn't the answer.
How do your developers log into the OpenShift console? If the answer is kubeadmin, we need to talk.
You need to install a database operator. In vanilla Kubernetes, you'd use Helm. In OpenShift, there's a better way.
Your database migration runs before the app starts. How do you guarantee that in Helm?
Your images don't live in Docker Hub anymore. Where do they go? Inside the cluster, in an internal registry managed by OpenShift.
Your charts shouldn't live in a GitHub repo's releases page. OCI registries solve chart distribution properly.
DeploymentConfig looks like Deployment but it's not. And you should probably stop using it.
Namespaces aren't just for organizing resources. They're your first line of defense against a single team eating the whole cluster.
You need to change a kernel parameter on all your worker nodes. How? OpenShift's MachineConfig is the answer.
Three people, three kubectl apply, one resource. Server-Side Apply finally gives you a real answer to who wins.
Where are your metrics? You didn't install Prometheus. OpenShift did it for you. Here's how to use the built-in monitoring stack.
You can't exec into a crashed container. It's crashed. Here's how kubectl debug gets you out of that hole.
Every team eventually builds their own Helm chart. Here's how to do it right from the start.
kubectl get endpoints shows you one thing. EndpointSlices show you another. Here's why the old model broke and what replaced it.
Your pod won't start. The error says: unable to validate against any security context constraint. Here's what that means and how to fix it.
OpenShift has Routes. Kubernetes has Ingress. Which one should you use? The answer depends on your cluster.
Your app handles 10 requests per second. Traffic doubles. What happens? If you're only using CPU metrics, the answer is probably wrong.
I joined a new project and the onboarding doc said: install oc. Here's what I learned switching from kubectl to OpenShift's CLI.
Everyone talked about dockershim removal. Nobody talked about Pod Security Admission replacing PSP. That's the bigger deal.
Pods die. Their IPs change. How do you find them? Services, and the networking model underneath.
The minimum vim knowledge you need to survive on a Linux server. Editing config files without wanting to throw your keyboard.
Where things live on a Linux system and why. A practical guide to the directory layout.
How Linux authentication works under the hood. PAM modules, configuration files, and common customizations.
You're doing a rolling update. Halfway through, a node dies. How many pods stay running? PDBs decide.
What swap is, when Linux uses it, how much you need, and how to configure swap files and partitions.
Every pod in your cluster can talk to every other pod by default. That's terrifying. Here's how NetworkPolicies fix it.
Runtime kernel tuning with sysctl. Network performance, memory management, and security hardening parameters.
A banking app needs more than CRUD. It needs authentication that actually works, transactions that don't lose money, and an architecture that doesn't collapse when you add features.
Using tmux to manage terminal sessions. Panes, windows, and why your SSH sessions should survive disconnects.
Everything in Node.js is a callback. In Spring Boot, nothing is. The mental model is completely different, and switching was harder than I expected.
CronJobs are GA in Kubernetes 1.21. Here's what that means, and how Jobs and CronJobs actually work.
Keeping Linux clocks accurate with chrony and systemd-timesyncd. Why time matters and how to configure it.
Practical steps to lock down SSH on your Linux server. Key-based auth, disabling root login, and fail2ban basics.
The JWT tutorial worked. Now I needed to build something real, with other people. Here's what happens when theory meets a team project.
I'd been writing frontend JavaScript for a while, but had no idea what happened on the other side of my API calls. Here's how I went from fetch() to actually building the server.
You need exactly one pod on every node. Deployment can't do that. Here's what can.
Installing and configuring Apache. Virtual hosts, .htaccess, modules, and the settings you'll want to change.
Setting up fail2ban to protect SSH and web services. Writing custom filters and understanding ban actions.
By default, every pod in your cluster has API access. RBAC is how you lock that down.
Copying files efficiently with rsync. Local and remote sync, incremental backups, and the flags you'll actually use.
Hardcoded env vars in Deployment specs are a maintenance nightmare. ConfigMaps and Secrets exist for a reason.
Installing, removing, and managing software packages on Ubuntu and Debian. Repositories, pins, and common gotchas.
Your pod restarts and all its data is gone. Persistent Volumes fix that, but the setup is more nuanced than the docs suggest.
Diagnosing OOMKilled pods, setting sensible resource requests and limits, and understanding the QoS class framework.
In 2019, deploying to Kubernetes meant writing YAML. Lots of YAML. Helm 2 tried to fix that, but came with its own baggage.
Writing your first bash scripts. Variables, conditionals, loops, and the patterns you'll actually use on a server.
Setting up Nginx as a static file server and reverse proxy. Configuration basics, virtual hosts, and performance tuning.
Setting up NFS shares between Linux servers. Server configuration, client mounting, and performance tuning.
Adding, modifying, and removing users. How groups work and why /etc/passwd still matters.
A pod is running. But is it ready? Understanding liveness, readiness, and startup probes, plus how init containers set the stage.
Getting free SSL certificates with Let's Encrypt and certbot. Installation, renewal, and troubleshooting.
Starting, stopping, and debugging services with systemctl. Writing basic unit files and understanding targets.
Reading systemd logs with journalctl, configuring rsyslog for remote logging, and managing log rotation.
Finding runaway processes, understanding process states, and managing background jobs.
Checking interfaces, routing, and connections with modern Linux networking tools. Replacing ifconfig and netstat.
Understanding how Linux uses memory. Reading free correctly, using vmstat, and what /proc/meminfo actually tells you.
How Linux file permissions work, what chmod numbers actually mean, and when to use chown vs chgrp.
A hands-on guide to iptables. Covers chains, tables, rule syntax, and real examples for securing a Linux server.
Finding, replacing, and transforming text from the command line. Practical examples for each tool.
Logical Volume Management: resizing partitions without reboots, adding disks on the fly, and snapshots.
How cron works, writing crontab entries, common pitfalls, and when to use alternatives.