Skip to main content

Learning Resources

The primary external source for this module is the official Kubernetes documentation. The local semester books add selective support for distributed-systems patterns and cloud-native design vocabulary; use them for framing, then use the official docs for exact Kubernetes behavior.

Source Stack

SourceRoleHow to use it in this module
kubernetes.io/docsPrimary external referenceDefault destination for every "what does this field do" question
OCI specificationsPrimary for images and the runtime contractWhen a container starts failing at the runtime layer
CNCF graduated projectsCanonical ecosystem indexPicking a CNI, ingress, policy, or observability stack
kelseyhightower/kubernetes-the-hard-wayExercise-grade control-plane referenceOne-time deep internalization of the control plane by assembling it
Docker docsBuild-side referenceDockerfile authoring, BuildKit, multi-stage, layer caching
Designing Distributed SystemsLocal supportReusable distributed patterns that map cleanly onto Kubernetes controllers, sidecars, and batch jobs
Design Patterns for Cloud Native ApplicationsLocal supportHelpful for API, event, data, and stream-oriented cloud-native tradeoffs
Local The Linux Command Line chunksSelective supportShell, permissions, processes, mounting, networking primitives underneath the k8s abstractions
Local Pro Git chunksSelective supportContent-addressing parallels (Git objects ↔ OCI layers); GitOps foundations

External Resource Map by Cluster

Cluster 1: What a Container Actually Is

NeedExternal resourceWhy
namespace-by-namespace referencenamespaces(7) man pageAuthoritative per-namespace semantics
cgroups v2 referencecgroups(7) man pageComplete controller list and hierarchy model
user namespace mappinguser_namespaces(7) man pageUID/GID remapping and capability scoping
cgroup driver on nodesKubernetes: About cgroup v2Why the kubelet and runtime must agree on the driver
image formatOCI Image SpecSource of truth for manifests, configs, layer media types
layer formatOCI Image Layer Filesystem ChangesetTar format and whiteout semantics
runtime contractOCI Runtime SpecWhat runc actually implements
reference runtime coderunc on GitHubThe actual namespace/cgroup calls
Dockerfile best practicesDocker: Build best practicesMulti-stage, layer ordering, minimal images
build cache behaviorDocker: Build cacheWhy COPY . . placement matters
image signingSigstore / cosignAttaching signatures to images by digest
CRI contractKubernetes: Container Runtime Interface (CRI)The gRPC API between kubelet and runtime
runtime selectionKubernetes: Container RuntimesCRI, containerd, CRI-O, configuration
alternate runtimesKubernetes: RuntimeClassSelecting kata, gVisor, crun per-pod
node-level debug CLIKubernetes: crictlDebug at the CRI boundary

Cluster 2: Kubernetes Foundations

NeedExternal resourceWhy
control plane diagram and rolesCluster ArchitectureDefinitive control-plane / node-component description
full component listKubernetes ComponentsNames, binaries, where each runs
API surfaceThe Kubernetes APIHow groups, versions, and resources are exposed
etcd operationsOperating etcd for KubernetesQuorum, backups, compaction
etcd internalsetcd documentationRaft, revisions, watch streams
scheduling frameworkScheduling FrameworkFilter/score plugin model inside the scheduler
bootstrap from binarieskubernetes-the-hard-wayBest single exercise for internalizing the control plane
Pod semanticsPodsMulti-container Pods, init containers, lifecycle
Pod lifecycle statesPod LifecyclePhases, conditions, probes, restartPolicy
ReplicaSetsReplicaSetsWhat the Deployment actually creates
Deployment fieldsDeploymentsmaxSurge, maxUnavailable, rollback, paused state
probesLiveness, Readiness, and Startup ProbesThe most common cause of false CrashLoopBackOff
pod disruption budgetsPod DisruptionsWhat actual HA looks like for a Deployment
controllers and reconciliationControllersThe official statement of the loop
server-side applyServer-Side ApplyField ownership and conflict resolution
CRDs / operatorsCustom Resources, Operator PatternExtending the system with the same reconcile shape
writing controllersKubebuilder BookCanonical walkthrough for implementing a controller

Cluster 3: Networking and Services

NeedExternal resourceWhy
network modelCluster NetworkingThe canonical four-rule model and CNI landscape
CNI plugin invocationNetwork PluginsHow the kubelet calls a CNI binary
CNI contractCNI SpecificationADD/DEL/CHECK contract for any plugin
network policyNetwork PoliciesDefault-deny patterns and selectors
modern CNI (eBPF)Cilium docseBPF-based datapath, identity-aware policy, observability
BGP CNICalico docsL3 routing and robust NetworkPolicy enforcement
Services referenceServiceTypes, EndpointSlices, session affinity
EndpointSlice APIEndpointSlicesWhat kube-proxy actually watches
DNS behaviorDNS for Services and PodsNaming scheme, search domains, PTR records
CoreDNSCoreDNS docsPlugin-based DNS; the kubernetes plugin
kube-proxy modesVirtual IPs and Service Proxiesiptables vs ipvs vs nftables tradeoffs
Service traffic policyService Internal Traffic PolicyexternalTrafficPolicy: Local tradeoffs
Ingress APIIngressFull Ingress field reference
Gateway APIGateway APIGateway, GatewayClass, HTTPRoute semantics
Gateway API SIGgateway-api.sigs.k8s.ioVersioned specification with conformance
NGINX ingressIngress-NGINX docsAnnotations, TLS, deployment
automated TLScert-manager docsLet's Encrypt and private CA issuers
service meshIstio: Traffic ManagementWhen a mesh is worth its complexity

Cluster 4: Configuration and State

NeedExternal resourceWhy
ConfigMap referenceConfigMapsField reference and projection options
ConfigMap usage walkthroughConfigure a Pod to Use a ConfigMapenvFrom / volumes / keyRef side by side
Secret referenceSecretsTypes, encryption, good practices
etcd encryptionEncrypt Secret Data at RestEncryptionConfiguration setup and key rotation
projected volumesProjected VolumesComposing ConfigMap/Secret/ServiceAccountToken/DownwardAPI
external secret syncExternal Secrets OperatorSync from Vault / AWS / Azure / GCP
secret projectionSecrets Store CSI DriverMount external secrets without cluster Secrets
Vault on k8sHashiCorp Vault: Kubernetes integrationAgent injector, dynamic credentials
Volume catalogVolumesEvery built-in volume type
PV/PVC lifecyclePersistent VolumesReclaim policies, binding, resizing
dynamic provisioningStorage ClassesParameters, provisioners, volumeBindingMode
volume snapshotsVolume SnapshotsCSI-based snapshot and clone workflows
CSI contractCSI specificationgRPC contract between k8s and storage backends
CSI sidecarsKubernetes CSI Developer Docsexternal-provisioner, external-attacher, node plugin architecture
stateful workloadsStatefulSetsIdentity, update strategies, retention policies
headless ServicesHeadless ServicesThe DNS behavior StatefulSets depend on
Postgres operatorCloudNativePGProduction-grade example of a StatefulSet-wrapping operator
Kafka operatorStrimziKafka on Kubernetes via per-broker StatefulSets

Cluster 5: Operating a Cluster

NeedExternal resourceWhy
resource modelResource Management for Pods and ContainersCPU/memory semantics, units, QoS derivation
QoS walkthroughConfigure QoS for PodsHow QoS classes are computed and used
memory walkthroughAssign Memory ResourcesHands-on including OOMKilled behavior
autoscalingHorizontal Pod AutoscalingHPA algorithm, stabilization, policies
HPA walkthroughHPA walkthroughVerify HPA against synthetic load
VPAVertical Pod Autoscaler (GitHub)Rightsizing requests/limits automatically
event-driven autoscalingKEDAQueue-depth and Prometheus-based scaling, scale-to-zero
node autoscalingKarpenterAWS-focused cluster autoscaler that plays with HPA
policy levelsPod Security Standardsprivileged / baseline / restricted definitions
policy admissionPod Security AdmissionHow namespace labels drive warn/audit/enforce
security contextsConfigure a Security ContextField-by-field securityContext reference
access controlRBAC AuthorizationRole vs ClusterRole, binding rules, aggregation
authorization chainAuthorization overviewRBAC + Node + Webhook authorizers
API request flowControlling Access to the APITransport -> authn -> authz -> admission
policy-as-code (Rego)OPA GatekeeperConstraintTemplates for custom admission rules
policy-as-code (YAML)KyvernoYAML-native validate/mutate/generate
troubleshootingTroubleshooting ApplicationsThe official debug task guide
pod debugDebugging Running Podskubectl debug and ephemeral containers
metrics pipelineResource Metrics PipelineWhat kubectl top actually queries
kubectl referencekubectl ReferenceFlags, output formats, plugins
metrics stackkube-prometheusPrometheus + Grafana + alerts as a Helm/kustomize bundle
converging telemetryOpenTelemetry on KubernetesUnified logs/metrics/traces pipeline

Local Book Chunks (use sparingly -- foundation for k8s abstractions)

ConceptChunkWhy it helps
namespaces / cgroupsTLCL: How a process worksPID namespace view starts here
cgroup limits in practiceTLCL: top / interruptingCPU/memory semantics underneath kubectl top
pod termination / probesTLCL: kill / signalsSIGTERM -> SIGKILL + terminationGracePeriodSeconds
securityContext UIDsTLCL: owners / group membersThe model runAsUser / fsGroup sit inside
file-mode of projected volumesTLCL: read/write/executeSecret/ConfigMap file modes map here
capabilities / sudo / setuidTLCL: sudo / chgrpThe capability semantics you drop in a Pod
env-var injectionTLCL: environmentenvFrom and env.valueFrom semantics
volumes / mountsTLCL: mounting devicesEvery CSI mount ends here
CNI / pod networkingTLCL: ip / network monitoringRoutes and interfaces on the node
Service debuggingTLCL: netstat / remote hostsReading listeners and DNAT rules
OCI content-addressingPro Git: Git objectsSame model: content-addressed blobs
OCI tree / manifestsPro Git: Tree objectsHow digest references make trees verifiable
registry deduplicationPro Git: PackfilesSame idea registries use across images
spec vs status vs observedPro Git: Snapshots not differencesThe three-states mental model transfers to k8s
etcd as source of truthPro Git: Commit objects / object storageresourceVersion is a revision number, etcd is .git/objects

Use Rules

  • When a concept page is enough, do not chase the official page for extra depth.
  • When you do open kubernetes.io, open a specific heading, not the whole section.
  • Prefer official docs over third-party blogs for Kubernetes-specific behavior; cluster semantics change version to version.
  • For Kubernetes API examples pinned to a version, use kubectl explain <resource>.<field> on your cluster in preference to search.
  • Use local book chunks only for kernel/process/permission/networking primitives or content-addressing intuition. Container and Kubernetes internals belong on kubernetes.io and OCI; do not substitute book chapters for cluster documentation.