Bootstrap Kubernetes with kubeadm
Use kubeadm as a reliable cluster bootstrap layer while planning networking, high availability, upgrades, recovery, and ML infrastructure separately.

kubeadm bootstraps a conformant Kubernetes cluster. It initializes control-plane components, establishes certificates and kubeconfig files, and generates the information needed for additional nodes to join.
It is intentionally not a complete infrastructure provisioner or cluster lifecycle service. Production reliability depends on the decisions around it: hosts, networking, load balancing, etcd, upgrades, recovery, security, observability, and workload add-ons.
Decide whether kubeadm fits
The official kubeadm documentation positions it as a building block for creating clusters that follow Kubernetes best practices. It fits teams that need control over the nodes and control plane, including bare-metal, private-cloud, edge, and specialized GPU environments.
That control carries responsibility. If a managed service already satisfies your networking, accelerator, identity, version, and sovereignty needs, operating the control plane yourself may add risk without improving the ML developer experience.
Choose kubeadm when the infrastructure requirement is explicit, the operating team owns the lifecycle, and automation will make clusters repeatable.
Design the cluster before initialization
Resolve these decisions before the first kubeadm init:
- control-plane topology and a stable load-balanced endpoint;
- stacked or external etcd, backup location, and restore procedure;
- supported operating system, kernel, container runtime, and cgroup configuration;
- Pod and Service CIDRs compatible with the chosen CNI and surrounding networks;
- DNS, ingress or Gateway, storage, identity, and certificate management;
- node pools for system services, general workloads, and accelerators;
- Kubernetes version policy and a tested upgrade sequence;
- time synchronization, firewall rules, proxies, and image registry access.
For ML workloads, add GPU driver and device management, topology requirements, shared storage, high-throughput networking, queues, and node labels or taints. These are not provided by kubeadm.
Treat configuration as code
Use the versioned kubeadm configuration API instead of an undocumented collection of flags. The exact API version depends on the Kubernetes release, so generate and validate configuration with the matching kubeadm binary and documentation.
A safe discovery command prints defaults without changing a node:
kubeadm config print init-defaultsStore reviewed cluster configuration alongside provisioning automation. Do not commit join tokens, private keys, or administrator kubeconfig files. Record the Kubernetes package versions and image registry used for each cluster build.
Automation should make host preparation, runtime configuration, package installation, initialization, CNI installation, joining, and post-bootstrap validation repeatable. A handwritten installation that succeeds once is not an operating model.
Build for high availability and recovery
A production control plane needs an endpoint that survives individual node loss and enough control-plane or etcd members to maintain quorum. Spread failure domains where the infrastructure allows it, and understand which components remain shared.
Back up etcd and the material required to restore access. Then rehearse recovery into an isolated environment. A backup that has never been restored is only a hypothesis.
Certificates also have a lifecycle. Monitor expiration, document renewal ownership, and include certificate behavior in upgrades. Keep bootstrap and administrator credentials protected; they provide powerful cluster access.
Add networking before expecting healthy workloads
Nodes can join while ordinary Pods remain unavailable until a compatible CNI is installed. The Pod CIDR, network-plugin configuration, MTU, routing, NetworkPolicy support, and cloud or datacenter firewall rules must agree.
Validate node-to-node Pod traffic, DNS, Service routing, egress, image pulls, and required storage endpoints. Distributed training adds bandwidth, latency, and topology requirements that a basic connectivity check will not reveal.
Use the networking and storage implementations supported by your environment, and document their upgrade order relative to Kubernetes.
Plan upgrades as a recurring operation
kubeadm helps upgrade Kubernetes components, but it does not choose the maintenance window, validate every add-on, drain workloads safely, or confirm application behavior. Follow the supported version-skew policy and move through supported minor-version steps.
Before an upgrade:
- review Kubernetes, runtime, CNI, CSI, GPU, and policy-engine compatibility;
- back up etcd and configuration;
- rehearse the sequence in a representative cluster;
- define workload disruption and rollback criteria;
- upgrade control-plane and worker nodes in the documented order;
- validate platform services and real ML workloads afterward.
Observe queue delays and available accelerator capacity while nodes drain. A technically healthy control plane can still create a severe workload backlog.
Install the ML platform as a separate layer
Once the cluster is stable, Polyaxon adds reproducible operations, tracking, artifacts, scheduling policy, and team workflows. Use platform observability for Polyaxon services and Kubernetes telemetry for the infrastructure below them.
Polyaxon node scheduling and queues can translate heterogeneous node pools into controlled execution policy. Keep platform configuration independent from kubeadm configuration so each layer can evolve and recover on its own.
kubeadm is strongest when its boundary stays clear: it bootstraps Kubernetes. A production ML platform still needs an owned lifecycle around the cluster and a workload layer that makes infrastructure useful to teams.