KUBERNETES(1)(kubernetes)

πŸ‘‘ kubeadm init β€” the manual, but make it iconic πŸ‘‘

okay so bestie, welcome to the KUBERNETES(1) manual β€” the kubernetes one, yes, that whole family of pages. This particular page is the kubeadm init glow-up guide, and ngl it's the main character of cluster bootstrapping. πŸ’–

Fun lore drop: Eric Paris wrote this down back in Jan 2015. That man was ahead of his time, fr fr. 🫢


✨ NAME ✨

kubeadm init β€” run this command in order to set up the Kubernetes control plane πŸ’…


🌸 SYNOPSIS 🌸

kubeadm init [OPTIONS]

πŸ¦‹ DESCRIPTION πŸ¦‹

Run this command in order to set up the Kubernetes control plane. That's it, that's the whole vibe. Your control plane goes from zero to serving. ✨

The "init" command executes the following phases β€” and bestie, it's a whole itinerary, we're going on a trip 🧚:

  • preflight β€” Run pre-flight checks
  • certs β€” Certificate generation
    • /ca β€” Generate the self-signed Kubernetes CA to provision identities for other Kubernetes components
    • /apiserver β€” Generate the certificate for serving the Kubernetes API
    • /apiserver-kubelet-client β€” Generate the certificate for the API server to connect to kubelet
    • /front-proxy-ca β€” Generate the self-signed CA to provision identities for front proxy
    • /front-proxy-client β€” Generate the certificate for the front proxy client
    • /etcd-ca β€” Generate the self-signed CA to provision identities for etcd
    • /etcd-server β€” Generate the certificate for serving etcd
    • /etcd-peer β€” Generate the certificate for etcd nodes to communicate with each other
    • /etcd-healthcheck-client β€” Generate the certificate for liveness probes to healthcheck etcd
    • /apiserver-etcd-client β€” Generate the certificate the apiserver uses to access etcd
    • /sa β€” Generate a private key for signing service account tokens along with its public key
  • kubeconfig β€” Generate all kubeconfig files necessary to establish the control plane and the admin kubeconfig file
    • /admin β€” Generate a kubeconfig file for the admin to use and for kubeadm itself
    • /super-admin β€” Generate a kubeconfig file for the super-admin
    • /kubelet β€” Generate a kubeconfig file for the kubelet to use only for cluster bootstrapping purposes
    • /controller-manager β€” Generate a kubeconfig file for the controller manager to use
    • /scheduler β€” Generate a kubeconfig file for the scheduler to use
  • etcd β€” Generate static Pod manifest file for local etcd
    • /local β€” Generate the static Pod manifest file for a local, single-node local etcd instance
  • control-plane β€” Generate all static Pod manifest files necessary to establish the control plane
    • /apiserver β€” Generates the kube-apiserver static Pod manifest
    • /controller-manager β€” Generates the kube-controller-manager static Pod manifest
    • /scheduler β€” Generates the kube-scheduler static Pod manifest
  • kubelet-start β€” Write kubelet settings and (re)start the kubelet
  • wait-control-plane β€” Wait for the control plane to start
  • upload-config β€” Upload the kubeadm and kubelet configuration to a ConfigMap
    • /kubeadm β€” Upload the kubeadm ClusterConfiguration to a ConfigMap
    • /kubelet β€” Upload the kubelet component config to a ConfigMap
  • upload-certs β€” Upload certificates to kubeadm-certs
  • mark-control-plane β€” Mark a node as a control-plane
  • bootstrap-token β€” Generates bootstrap tokens used to join a node to a cluster
  • kubelet-finalize β€” Updates settings relevant to the kubelet after TLS bootstrap
    • /enable-client-cert-rotation β€” Enable kubelet client certificate rotation
  • addon β€” Install required addons for passing conformance tests
    • /coredns β€” Install the CoreDNS addon to a Kubernetes cluster
    • /kube-proxy β€” Install the kube-proxy addon to a Kubernetes cluster
  • show-join-command β€” Show the join command for control-plane and worker node

πŸ’… OPTIONS πŸ’…

The way that every single one of these matters... let's go one by one, no skips, no summaries, we respect the source material here. πŸŽ€

  • --apiserver-advertise-address="" β€” The IP address the API Server will advertise it's listening on. If not set the default network interface will be used.
  • --apiserver-bind-port=6443 β€” Port for the API Server to bind to.
  • --apiserver-cert-extra-sans=[] β€” Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names.
  • --cert-dir="/etc/kubernetes/pki" β€” The path where to save and store the certificates.
  • --certificate-key="" β€” Key used to encrypt the control-plane certificates in the kubeadm-certs Secret. The certificate key is a hex encoded string that is an AES key of size 32 bytes.
  • --config="" β€” Path to a kubeadm configuration file.
  • --control-plane-endpoint="" β€” Specify a stable IP address or DNS name for the control plane.
  • --cri-socket="" β€” Path to the CRI socket to connect. If empty kubeadm will try to auto-detect this value; use this option only if you have more than one CRI installed or if you have non-standard CRI socket.
  • --dry-run=false β€” Don't apply any changes; just output what would be done.
  • --feature-gates="" β€” A set of key=value pairs that describe feature gates for various features. Options are: RootlessControlPlane=true|false (ALPHA - default=false)
  • --ignore-preflight-errors=[] β€” A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.
  • --image-repository="registry.k8s.io" β€” Choose a container registry to pull control plane images from
  • --kubernetes-version="stable-1" β€” Choose a specific Kubernetes version for the control plane.
  • --node-name="" β€” Specify the node name.
  • --patches="" β€” Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "target" can be one of "kube-apiserver", "kube-controller-manager", "kube-scheduler", "etcd", "kubeletconfiguration", "corednsdeployment", "kubeproxydaemonset". "patchtype" can be one of "strategic", "merge" or "json" and they match the patch formats supported by kubectl. The default "patchtype" is "strategic". "extension" must be either "json" or "yaml". "suffix" is an optional string that can be used to determine which patches are applied first alpha-numerically.
  • --pod-network-cidr="" β€” Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node.
  • --service-cidr="10.96.0.0/12" β€” Use alternative range of IP address for service VIPs.
  • --service-dns-domain="cluster.local" β€” Use alternative domain for services, e.g. "myorg.internal".
  • --skip-certificate-key-print=false β€” Don't print the key used to encrypt the control-plane certificates.
  • --skip-phases=[] β€” List of phases to be skipped
  • --skip-token-print=false β€” Skip printing of the default bootstrap token generated by 'kubeadm init'.
  • --token="" β€” The token to use for establishing bidirectional trust between nodes and control-plane nodes. The format is [a-z0-9]{6}.[a-z0-9]{16} - e.g. abcdef.0123456789abcdef
  • --token-ttl=24h0m0s β€” The duration before the token is automatically deleted (e.g. 1s, 2m, 3h). If set to '0', the token will never expire
  • --upload-certs=false β€” Upload control-plane certificates to the kubeadm-certs Secret.

🫢 OPTIONS INHERITED FROM PARENT COMMANDS 🫢

These ones come from the parent command, so they're like... the family traits. You didn't ask for them, but you have them. 😭

  • --rootfs="" β€” The path to the 'real' host root filesystem. This will cause kubeadm to chroot into the provided path.
  • --version=false β€” --version, --version=raw prints version information and quits; --version=vX.Y.Z... sets the reported version

🌈 SEE ALSO 🌈

Go read your sisters, bestie, they're all slaying:


πŸ’œ HISTORY πŸ’œ

January 2015, Originally compiled by Eric Paris (eparis at redhat dot com) based on the kubernetes source material, but hopefully they have been automatically generated since! (iconic origin story tbh πŸŽ€)


And that's a wrap on the kubeadm init page, my love. This came out of the Manuals section, User series, and it's tagged KUBERNETES(1)(kubernetes) β€” so when you see that footer floating around, you know exactly which page you're in. Go build a control plane, you absolute legend. πŸ’–βœ¨πŸ‘‘

πŸ“¦ where this page comes from