Cluster Architecture, Installation & Configuration
The Cluster Architecture, Installation & Configuration domain covers the control plane and node lifecycle: kubeadm-based cluster creation and upgrades, etcd backup and restore, RBAC, and extending the API with CRDs and operators. Expect tasks that require editing YAML and verifying the result from the command line, not multiple-choice recall.
Core rules
- kubeadm upgrades are ordered: upgrade kubeadm, run
kubeadm upgrade plan, apply the control-plane upgrade one node at a time, drain the node, upgrade kubelet and kubectl packages, then uncordon. Never upgrade a worker before its control plane is compatible. - etcd snapshots need the v3 API and the etcd certificates:
etcdctl --endpoints=https://127.0.0.1:2379 --cacert=... --cert=... --key=... snapshot save /backup/etcd.db. - RBAC is additive. A Role or ClusterRole grants verbs on resources; a RoleBinding grants it in one namespace, a ClusterRoleBinding cluster-wide.
kubectl auth can-ichecks effective permissions. - CRDs add new resource types; an operator is a controller that reconciles those custom resources. Installing one does not automatically make its CRDs ready-check
kubectl get crdand the operator pods.
Worked example
Back up etcd, then verify the snapshot. On a kubeadm control-plane node, read the etcd static Pod manifest at /etc/kubernetes/manifests/etcd.yaml to confirm the listen-client URL and certificate paths. Run ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /var/backups/etcd.db, then snapshot status /var/backups/etcd.db. The reasoning: the API server writes to etcd, so the snapshot must use the same endpoint and client credentials; snapshot status proves the file is readable rather than merely present.
Traps
- Restoring etcd while the API server is still running, or restoring to the wrong
--data-dir, can corrupt the cluster. Move static Pod manifests aside, restore, then restore the manifests. kubectl drainneeds--ignore-daemonsetsand often--delete-emptydir-data; forgetting these leaves the node stuck.- A RoleBinding to a ClusterRole is namespace-scoped; do not assume it works in every namespace.
- kubeadm upgrade order mistakes-upgrading kubelet before
kubeadm upgrade apply-produce version skew.