Nodes
kube1
10.99.0.30
control-plane
kube2
10.99.0.31
worker
kube3
10.99.0.32
worker
| Property | Value |
|---|---|
| OS | Oracle Linux Server 10.0 |
| Kubernetes | v1.31.14 |
| Container runtime | ContainerD |
| CNI | Flannel |
| CPU per node | 4 cores |
| Memory per node | 7Gi |
| Architecture | amd64 |
| Uptime | 237+ days |
Control-plane taint: kube1 has the default control-plane taint (
node-role.kubernetes.io/control-plane). Regular pods don't schedule there unless you explicitly add a toleration. All workloads run on kube2 and kube3.Cluster components
| Component | Purpose | Namespace |
|---|---|---|
| CoreDNS | Cluster DNS resolution | kube-system |
| kube-proxy | Network rules on each node | kube-system |
| kube-flannel | Pod network CNI (VXLAN overlay) | kube-flannel |
| MetalLB | LoadBalancer IP assignment (Layer 2) | metallb-system |
| NFS provisioner | Dynamic PV provisioning from NFS | nfs-provisioner |
| local-path | Simple hostPath storage class | local-path-storage |
| Longhorn | Distributed block storage | longhorn-system |
| Wazuh agent | SIEM — runs on all nodes via DaemonSet | default |
| Kubernetes dashboard | Web UI for cluster management | kubernetes-dashboard |
Storage classes
Three storage classes available, each with different characteristics:
| Class | Provisioner | Best for |
|---|---|---|
| local-path (default) | rancher.io/local-path | Single-node dev workloads |
| longhorn | driver.longhorn.io | Replicated block storage, HA workloads |
| nfs-client | nfs-subdir-external-provisioner | ReadWriteMany — shared across pods |
Static NFS PVs: When binding a PV directly by
volumeName, set storageClassName: "" on both PV and PVC. This bypasses StorageClass matching entirely and prevents "storageClassName does not match" errors when multiple classes exist.Namespaces
| Namespace | What runs there |
|---|---|
| wordpress6 | WordPress + MySQL (the migrated legacy site) |
| cluster-dashboard | Live cluster reference dashboard |
| mfa2fa-docs | This documentation site |
| redis | Redis master + replica StatefulSet |
| default | Tomcat base, demo-nginx, Kafka manager, Wazuh agents |
| dev | Tomcat webapp dev environment |
| prod | Tomcat webapp prod environment |
| metallb-system | MetalLB controller + speaker DaemonSet |
| kube-flannel | Flannel CNI DaemonSet |
| kube-system | CoreDNS, kube-proxy, etcd, API server |
Useful cluster commands
# Full cluster overview kubectl get all --all-namespaces # Node status and details kubectl get nodes -o wide kubectl describe node kube2 # Check resource usage per node (requires metrics-server) kubectl top nodes # Check all LoadBalancer services and their IPs kubectl get svc -A | grep LoadBalancer # Check all PVs and PVCs kubectl get pv kubectl get pvc -A # Check storage classes kubectl get storageclass # etcd health (run on kube1) 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 \ endpoint health