This the multi-page printable view of this section. Click here to print.
Setup tools
- 1: Kubeadm
- 1.1: Kubeadm Generated
- 1.1.1:
- 1.1.2:
- 1.1.3:
- 1.1.4:
- 1.1.5:
- 1.1.6:
- 1.1.7:
- 1.1.8:
- 1.1.9:
- 1.1.10:
- 1.1.11:
- 1.1.12:
- 1.1.13:
- 1.1.14:
- 1.1.15:
- 1.1.16:
- 1.1.17:
- 1.1.18:
- 1.1.19:
- 1.1.20:
- 1.1.21:
- 1.1.22:
- 1.1.23:
- 1.1.24:
- 1.1.25:
- 1.1.26:
- 1.1.27:
- 1.1.28:
- 1.1.29:
- 1.1.30:
- 1.1.31:
- 1.1.32:
- 1.1.33:
- 1.1.34:
- 1.1.35:
- 1.1.36:
- 1.1.37:
- 1.1.38:
- 1.1.39:
- 1.1.40:
- 1.1.41:
- 1.1.42:
- 1.1.43:
- 1.1.44:
- 1.1.45:
- 1.1.46:
- 1.1.47:
- 1.1.48:
- 1.1.49:
- 1.1.50:
- 1.1.51:
- 1.1.52:
- 1.1.53:
- 1.1.54:
- 1.1.55:
- 1.1.56:
- 1.1.57:
- 1.1.58:
- 1.1.59:
- 1.1.60:
- 1.1.61:
- 1.1.62:
- 1.1.63:
- 1.1.64:
- 1.1.65:
- 1.1.66:
- 1.1.67:
- 1.1.68:
- 1.1.69:
- 1.1.70:
- 1.1.71:
- 1.1.72:
- 1.1.73:
- 1.1.74:
- 1.1.75:
- 1.1.76:
- 1.1.77:
- 1.1.78:
- 1.1.79:
- 1.1.80:
- 1.1.81:
- 1.1.82:
- 1.1.83:
- 1.1.84:
- 1.1.85:
- 1.1.86:
- 1.1.87:
- 1.1.88:
- 1.1.89:
- 1.1.90:
- 1.1.91:
- 1.1.92:
- 1.1.93:
- 1.1.94:
- 1.1.95:
- 1.1.96:
- 1.1.97:
- 1.1.98:
- 1.1.99:
- 1.1.100:
- 1.1.101:
- 1.1.102:
- 1.1.103:
- 1.1.104:
- 1.1.105:
- 1.1.106:
- 1.1.107:
- 1.1.108:
- 1.1.109:
- 1.1.110:
- 1.1.111:
- 1.1.112:
- 1.1.113:
- 1.1.114:
- 1.1.115:
- 1.1.116:
- 1.2: kubeadm init
- 1.3: kubeadm join
- 1.4: kubeadm upgrade
- 1.5: kubeadm config
- 1.6: kubeadm reset
- 1.7: kubeadm token
- 1.8: kubeadm version
- 1.9: kubeadm alpha
- 1.10: kubeadm certs
- 1.11: kubeadm init phase
- 1.12: kubeadm join phase
- 1.13: kubeadm reset phase
- 1.14: kubeadm upgrade phase
- 1.15: Implementation details
1 - Kubeadm
Kubeadm is a tool built to provide kubeadm init
and kubeadm join
as best-practice "fast paths" for creating Kubernetes clusters.
kubeadm performs the actions necessary to get a minimum viable cluster up and running. By design, it cares only about bootstrapping, not about provisioning machines. Likewise, installing various nice-to-have addons, like the Kubernetes Dashboard, monitoring solutions, and cloud-specific addons, is not in scope.
Instead, we expect higher-level and more tailored tooling to be built on top of kubeadm, and ideally, using kubeadm as the basis of all deployments will make it easier to create conformant clusters.
How to install
To install kubeadm, see the installation guide.
What's next
- kubeadm init to bootstrap a Kubernetes control-plane node
- kubeadm join to bootstrap a Kubernetes worker node and join it to the cluster
- kubeadm upgrade to upgrade a Kubernetes cluster to a newer version
- kubeadm config if you initialized your cluster using kubeadm v1.7.x or lower, to configure your cluster for
kubeadm upgrade
- kubeadm token to manage tokens for
kubeadm join
- kubeadm reset to revert any changes made to this host by
kubeadm init
orkubeadm join
- kubeadm version to print the kubeadm version
- kubeadm alpha to preview a set of features made available for gathering feedback from the community
1.1 - Kubeadm Generated
1.1.1 -
Synopsis
┌──────────────────────────────────────────────────────────┐
│ KUBEADM │
│ Easily bootstrap a secure Kubernetes cluster │
│ │
│ Please give us feedback at: │
│ https://github.com/kubernetes/kubeadm/issues │
└──────────────────────────────────────────────────────────┘
Example usage:
Create a two-machine cluster with one control-plane node
(which controls the cluster), and one worker node
(where your workloads, like Pods and Deployments run).
┌──────────────────────────────────────────────────────────┐
│ On the first machine: │
├──────────────────────────────────────────────────────────┤
│ control-plane# kubeadm init │
└──────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────┐
│ On the second machine: │
├──────────────────────────────────────────────────────────┤
│ worker# kubeadm join <arguments-returned-from-init> │
└──────────────────────────────────────────────────────────┘
You can then repeat the second step on as many other machines as you like.
Options
-h, --help | |
help for kubeadm | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.2 -
Synopsis
Kubeadm experimental sub-commands
Options
-h, --help | |
help for alpha |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.3 -
Synopsis
Kubeconfig file utilities.
Alpha Disclaimer: this command is currently alpha.
Options
-h, --help | |
help for kubeconfig |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.4 -
Synopsis
Output a kubeconfig file for an additional user.
Alpha Disclaimer: this command is currently alpha.
kubeadm alpha kubeconfig user [flags]
Examples
# Output a kubeconfig file for an additional user named foo using a kubeadm config file bar
kubeadm alpha kubeconfig user --client-name=foo --config=bar
Options
--client-name string | |
The name of user. It will be used as the CN if client certificates are created | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for user | |
--org stringSlice | |
The orgnizations of the client certificate. It will be used as the O if client certificates are created | |
--token string | |
The token that should be used as the authentication mechanism for this kubeconfig, instead of client certificates |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.5 -
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
Options
-h, --help | |
help for kubelet |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.6 -
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
Options
-h, --help | |
help for config |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.7 -
Synopsis
Enable or update dynamic kubelet configuration for a Node, against the kubelet-config-1.X ConfigMap in the cluster, where X is the minor version of the desired kubelet version.
WARNING: This feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it may have surprising side-effects at this stage.
Alpha Disclaimer: this command is currently alpha.
kubeadm alpha kubelet config enable-dynamic [flags]
Examples
# Enable dynamic kubelet configuration for a Node.
kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version 1.18.0
WARNING: This feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it
may have surprising side-effects at this stage.
Options
-h, --help | |
help for enable-dynamic | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--kubelet-version string | |
The desired version for the kubelet | |
--node-name string | |
Name of the node that should enable the dynamic kubelet configuration |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.8 -
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
Options
-h, --help | |
help for selfhosting |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.9 -
Synopsis
Convert static Pod files for control plane components into self-hosted DaemonSets configured via the Kubernetes API.
See the documentation for self-hosting limitations.
Alpha Disclaimer: this command is currently alpha.
kubeadm alpha selfhosting pivot [flags]
Examples
# Convert a static Pod-hosted control plane into a self-hosted one.
kubeadm alpha phase self-hosting convert-from-staticpods
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where certificates are stored | |
--config string | |
Path to a kubeadm configuration file. | |
-f, --force | |
Pivot the cluster without prompting for confirmation | |
-h, --help | |
help for pivot | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
-s, --store-certs-in-secrets | |
Enable storing certs in secrets |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.10 -
Synopsis
Commands related to handling kubernetes certificates
Options
-h, --help | |
help for certs |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.11 -
Synopsis
This command will print out a secure randomly-generated certificate key that can be used with the "init" command.
You can also use "kubeadm init --upload-certs" without specifying a certificate key and it will generate and print one for you.
kubeadm certs certificate-key [flags]
Options
-h, --help | |
help for certificate-key |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.12 -
Synopsis
Checks expiration for the certificates in the local PKI managed by kubeadm.
kubeadm certs check-expiration [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for check-expiration | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.13 -
Synopsis
Generates keys and certificate signing requests (CSRs) for all the certificates required to run the control plane. This command also generates partial kubeconfig files with private key data in the "users > user > client-key-data" field, and for each kubeconfig file an accompanying ".csr" file is created.
This command is designed for use in Kubeadm External CA Mode. It generates CSRs which you can then submit to your external certificate authority for signing.
The PEM encoded signed certificates should then be saved alongside the key files, using ".crt" as the file extension, or in the case of kubeconfig files, the PEM encoded signed certificate should be base64 encoded and added to the kubeconfig file in the "users > user > client-certificate-data" field.
kubeadm certs generate-csr [flags]
Examples
# The following command will generate keys and CSRs for all control-plane certificates and kubeconfig files:
kubeadm alpha certs generate-csr --kubeconfig-dir /tmp/etc-k8s --cert-dir /tmp/etc-k8s/pki
Options
--cert-dir string | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for generate-csr | |
--kubeconfig-dir string Default: "/etc/kubernetes" | |
The path where to save the kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.14 -
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm certs renew [flags]
Options
-h, --help | |
help for renew |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.15 -
Synopsis
Renew the certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew admin.conf [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for admin.conf | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.16 -
Synopsis
Renew all known certificates necessary to run the control plane. Renewals are run unconditionally, regardless of expiration date. Renewals can also be run individually for more control.
kubeadm certs renew all [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for all | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.17 -
Synopsis
Renew the certificate the apiserver uses to access etcd.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew apiserver-etcd-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for apiserver-etcd-client | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.18 -
Synopsis
Renew the certificate for the API server to connect to kubelet.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew apiserver-kubelet-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for apiserver-kubelet-client | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.19 -
Synopsis
Renew the certificate for serving the Kubernetes API.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew apiserver [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for apiserver | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.20 -
Synopsis
Renew the certificate embedded in the kubeconfig file for the controller manager to use.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew controller-manager.conf [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for controller-manager.conf | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.21 -
Synopsis
Renew the certificate for liveness probes to healthcheck etcd.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew etcd-healthcheck-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for etcd-healthcheck-client | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.22 -
Synopsis
Renew the certificate for etcd nodes to communicate with each other.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew etcd-peer [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for etcd-peer | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.23 -
Synopsis
Renew the certificate for serving etcd.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew etcd-server [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for etcd-server | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.24 -
Synopsis
Renew the certificate for the front proxy client.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew front-proxy-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for front-proxy-client | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.25 -
Synopsis
Renew the certificate embedded in the kubeconfig file for the scheduler manager to use.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew scheduler.conf [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for scheduler.conf | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.26 -
Synopsis
Output shell completion code for the specified shell (bash or zsh). The shell code must be evaluated to provide interactive completion of kubeadm commands. This can be done by sourcing it from the .bash_profile.
Note: this requires the bash-completion framework.
To install it on Mac use homebrew: $ brew install bash-completion Once installed, bash_completion must be evaluated. This can be done by adding the following line to the .bash_profile $ source $(brew --prefix)/etc/bash_completion
If bash-completion is not installed on Linux, please install the 'bash-completion' package via your distribution's package manager.
Note for zsh users: [1] zsh completions are only supported in versions of zsh >= 5.2
kubeadm completion SHELL [flags]
Examples
# Install bash completion on a Mac using homebrew
brew install bash-completion
printf "\n# Bash completion support\nsource $(brew --prefix)/etc/bash_completion\n" >> $HOME/.bash_profile
source $HOME/.bash_profile
# Load the kubeadm completion code for bash into the current shell
source <(kubeadm completion bash)
# Write bash completion code to a file and source it from .bash_profile
kubeadm completion bash > ~/.kube/kubeadm_completion.bash.inc
printf "\n# Kubeadm shell completion\nsource '$HOME/.kube/kubeadm_completion.bash.inc'\n" >> $HOME/.bash_profile
source $HOME/.bash_profile
# Load the kubeadm completion code for zsh[1] into the current shell
source <(kubeadm completion zsh)
Options
-h, --help | |
help for completion |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.27 -
Synopsis
There is a ConfigMap in the kube-system namespace called "kubeadm-config" that kubeadm uses to store internal configuration about the cluster. kubeadm CLI v1.8.0+ automatically creates this ConfigMap with the config used with 'kubeadm init', but if you initialized your cluster using kubeadm v1.7.x or lower, you must use the 'config upload' command to create this ConfigMap. This is required so that 'kubeadm upgrade' can configure your upgraded cluster correctly.
kubeadm config [flags]
Options
-h, --help | |
help for config | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.28 -
Synopsis
Interact with container images used by kubeadm
kubeadm config images [flags]
Options
-h, --help | |
help for images |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.29 -
Synopsis
Print a list of images kubeadm will use. The configuration file is used in case any images or image repositories are customized
kubeadm config images list [flags]
Options
--allow-missing-template-keys Default: true | |
If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. | |
--config string | |
Path to a kubeadm configuration file. | |
-o, --experimental-output string Default: "text" | |
Output format. One of: text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for list | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.30 -
Synopsis
Pull images used by kubeadm
kubeadm config images pull [flags]
Options
--config string | |
Path to a kubeadm configuration file. | |
--cri-socket string | |
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. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for pull | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.31 -
Synopsis
This command lets you convert configuration objects of older versions to the latest supported version, locally in the CLI tool without ever touching anything in the cluster. In this version of kubeadm, the following API versions are supported:
- kubeadm.k8s.io/v1beta2
Further, kubeadm can only write out config of version "kubeadm.k8s.io/v1beta2", but read both types. So regardless of what version you pass to the --old-config parameter here, the API object will be read, deserialized, defaulted, converted, validated, and re-serialized when written to stdout or --new-config if specified.
In other words, the output of this command is what kubeadm actually would read internally if you submitted this file to "kubeadm init"
kubeadm config migrate [flags]
Options
-h, --help | |
help for migrate | |
--new-config string | |
Path to the resulting equivalent kubeadm config file using the new API version. Optional, if not specified output will be sent to STDOUT. | |
--old-config string | |
Path to the kubeadm config file that is using an old API version and should be converted. This flag is mandatory. |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.32 -
Synopsis
This command prints configurations for subcommands provided. For details, see: https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2
kubeadm config print [flags]
Options
-h, --help | |
help for print |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.33 -
Synopsis
This command prints objects such as the default init configuration that is used for 'kubeadm init'.
Note that sensitive values like the Bootstrap Token fields are replaced with placeholder values like {"abcdef.0123456789abcdef" "" "nil" <nil> [] []} in order to pass validation but not perform the real computation for creating a token.
kubeadm config print init-defaults [flags]
Options
--component-configs stringSlice | |
A comma-separated list for component config API objects to print the default values for. Available values: [KubeProxyConfiguration KubeletConfiguration]. If this flag is not set, no component configs will be printed. | |
-h, --help | |
help for init-defaults |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.34 -
Synopsis
This command prints objects such as the default join configuration that is used for 'kubeadm join'.
Note that sensitive values like the Bootstrap Token fields are replaced with placeholder values like {"abcdef.0123456789abcdef" "" "nil" <nil> [] []} in order to pass validation but not perform the real computation for creating a token.
kubeadm config print join-defaults [flags]
Options
--component-configs stringSlice | |
A comma-separated list for component config API objects to print the default values for. Available values: [KubeProxyConfiguration KubeletConfiguration]. If this flag is not set, no component configs will be printed. | |
-h, --help | |
help for join-defaults |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.35 -
Synopsis
Using this command, you can view the ConfigMap in the cluster where the configuration for kubeadm is located.
The configuration is located in the "kube-system" namespace in the "kubeadm-config" ConfigMap.
kubeadm config view [flags]
Options
-h, --help | |
help for view |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.36 -
Synopsis
Run this command in order to set up the Kubernetes control plane
The "init" command executes the following phases:
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
/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
kubelet-start Write kubelet settings and (re)start the kubelet
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
etcd Generate static Pod manifest file for local etcd
/local Generate the static Pod manifest file for a local, single-node local etcd instance
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
/experimental-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
kubeadm init [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--apiserver-cert-extra-sans stringSlice | |
Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--certificate-key string | |
Key used to encrypt the control-plane certificates in the kubeadm-certs Secret. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
--cri-socket string | |
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 | |
Don't apply any changes; just output what would be done. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for init | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--node-name string | |
Specify the node name. | |
--pod-network-cidr string | |
Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node. | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. | |
--service-dns-domain string Default: "cluster.local" | |
Use alternative domain for services, e.g. "myorg.internal". | |
--skip-certificate-key-print | |
Don't print the key used to encrypt the control-plane certificates. | |
--skip-phases stringSlice | |
List of phases to be skipped | |
--skip-token-print | |
Skip printing of the default bootstrap token generated by 'kubeadm init'. | |
--token string | |
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 duration Default: 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 | |
Upload control-plane certificates to the kubeadm-certs Secret. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.37 -
Synopsis
Use this command to invoke single phase of the init workflow
Options
-h, --help | |
help for phase |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.38 -
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase addon [flags]
Options
-h, --help | |
help for addon |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.39 -
Synopsis
Install all the addons
kubeadm init phase addon all [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for all | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--pod-network-cidr string | |
Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node. | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. | |
--service-dns-domain string Default: "cluster.local" | |
Use alternative domain for services, e.g. "myorg.internal". |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.40 -
Synopsis
Install the CoreDNS addon components via the API server. Please note that although the DNS server is deployed, it will not be scheduled until CNI is installed.
kubeadm init phase addon coredns [flags]
Options
--config string | |
Path to a kubeadm configuration file. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for coredns | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. | |
--service-dns-domain string Default: "cluster.local" | |
Use alternative domain for services, e.g. "myorg.internal". |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.41 -
Synopsis
Install the kube-proxy addon components via the API server.
kubeadm init phase addon kube-proxy [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for kube-proxy | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--pod-network-cidr string | |
Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.42 -
Synopsis
Bootstrap tokens are used for establishing bidirectional trust between a node joining the cluster and a control-plane node.
This command makes all the configurations required to make bootstrap tokens works and then creates an initial token.
kubeadm init phase bootstrap-token [flags]
Examples
# Make all the bootstrap token configurations and create an initial token, functionally
# equivalent to what generated by kubeadm init.
kubeadm init phase bootstrap-token
Options
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for bootstrap-token | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--skip-token-print | |
Skip printing of the default bootstrap token generated by 'kubeadm init'. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.43 -
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase certs [flags]
Options
-h, --help | |
help for certs |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.44 -
Synopsis
Generate all certificates
kubeadm init phase certs all [flags]
Options
--apiserver-advertise-address string | |
The IP address the API Server will advertise it's listening on. If not set the default network interface will be used. | |
--apiserver-cert-extra-sans stringSlice | |
Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for all | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. | |
--service-dns-domain string Default: "cluster.local" | |
Use alternative domain for services, e.g. "myorg.internal". |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.45 -
Synopsis
Generate the certificate the apiserver uses to access etcd, and save them into apiserver-etcd-client.cert and apiserver-etcd-client.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs apiserver-etcd-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for apiserver-etcd-client | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.46 -
Synopsis
Generate the certificate for the API server to connect to kubelet, and save them into apiserver-kubelet-client.cert and apiserver-kubelet-client.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs apiserver-kubelet-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for apiserver-kubelet-client | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.47 -
Synopsis
Generate the certificate for serving the Kubernetes API, and save them into apiserver.cert and apiserver.key files.
Default SANs are kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, 10.96.0.1, 127.0.0.1
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs apiserver [flags]
Options
--apiserver-advertise-address string | |
The IP address the API Server will advertise it's listening on. If not set the default network interface will be used. | |
--apiserver-cert-extra-sans stringSlice | |
Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for apiserver | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. | |
--service-dns-domain string Default: "cluster.local" | |
Use alternative domain for services, e.g. "myorg.internal". |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.48 -
Synopsis
Generate the self-signed Kubernetes CA to provision identities for other Kubernetes components, and save them into ca.cert and ca.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs ca [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for ca | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.49 -
Synopsis
Generate the self-signed CA to provision identities for etcd, and save them into etcd/ca.cert and etcd/ca.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs etcd-ca [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for etcd-ca | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.50 -
Synopsis
Generate the certificate for liveness probes to healthcheck etcd, and save them into etcd/healthcheck-client.cert and etcd/healthcheck-client.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs etcd-healthcheck-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for etcd-healthcheck-client | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.51 -
Synopsis
Generate the certificate for etcd nodes to communicate with each other, and save them into etcd/peer.cert and etcd/peer.key files.
Default SANs are localhost, 127.0.0.1, 127.0.0.1, ::1
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs etcd-peer [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for etcd-peer | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.52 -
Synopsis
Generate the certificate for serving etcd, and save them into etcd/server.cert and etcd/server.key files.
Default SANs are localhost, 127.0.0.1, 127.0.0.1, ::1
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs etcd-server [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for etcd-server | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.53 -
Synopsis
Generate the self-signed CA to provision identities for front proxy, and save them into front-proxy-ca.cert and front-proxy-ca.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs front-proxy-ca [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for front-proxy-ca | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.54 -
Synopsis
Generate the certificate for the front proxy client, and save them into front-proxy-client.cert and front-proxy-client.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs front-proxy-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for front-proxy-client | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.55 -
Synopsis
Generate the private key for signing service account tokens along with its public key, and save them into sa.key and sa.pub files. If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs sa [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
-h, --help | |
help for sa |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.56 -
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase control-plane [flags]
Options
-h, --help | |
help for control-plane |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.57 -
Synopsis
Generate all static Pod manifest files
kubeadm init phase control-plane all [flags]
Examples
# Generates all static Pod manifest files for control plane components,
# functionally equivalent to what is generated by kubeadm init.
kubeadm init phase control-plane all
# Generates all static Pod manifest files using options read from a configuration file.
kubeadm init phase control-plane all --config config.yaml
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--apiserver-extra-args mapStringString | |
A set of extra flags to pass to the API Server or override default ones in form of <flagname>=<value> | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
--controller-manager-extra-args mapStringString | |
A set of extra flags to pass to the Controller Manager or override default ones in form of <flagname>=<value> | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for all | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--pod-network-cidr string | |
Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node. | |
--scheduler-extra-args mapStringString | |
A set of extra flags to pass to the Scheduler or override default ones in form of <flagname>=<value> | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.58 -
Synopsis
Generates the kube-apiserver static Pod manifest
kubeadm init phase control-plane apiserver [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--apiserver-extra-args mapStringString | |
A set of extra flags to pass to the API Server or override default ones in form of <flagname>=<value> | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for apiserver | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.59 -
Synopsis
Generates the kube-controller-manager static Pod manifest
kubeadm init phase control-plane controller-manager [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--controller-manager-extra-args mapStringString | |
A set of extra flags to pass to the Controller Manager or override default ones in form of <flagname>=<value> | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for controller-manager | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--pod-network-cidr string | |
Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.60 -
Synopsis
Generates the kube-scheduler static Pod manifest
kubeadm init phase control-plane scheduler [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for scheduler | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--scheduler-extra-args mapStringString | |
A set of extra flags to pass to the Scheduler or override default ones in form of <flagname>=<value> |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.61 -
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase etcd [flags]
Options
-h, --help | |
help for etcd |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.62 -
Synopsis
Generate the static Pod manifest file for a local, single-node local etcd instance
kubeadm init phase etcd local [flags]
Examples
# Generates the static Pod manifest file for etcd, functionally
# equivalent to what is generated by kubeadm init.
kubeadm init phase etcd local
# Generates the static Pod manifest file for etcd using options
# read from a configuration file.
kubeadm init phase etcd local --config config.yaml
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for local | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.63 -
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase kubeconfig [flags]
Options
-h, --help | |
help for kubeconfig |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.64 -
Synopsis
Generate the kubeconfig file for the admin and for kubeadm itself, and save it to admin.conf file.
kubeadm init phase kubeconfig admin [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for admin | |
--kubeconfig-dir string Default: "/etc/kubernetes" | |
The path where to save the kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.65 -
Synopsis
Generate all kubeconfig files
kubeadm init phase kubeconfig all [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for all | |
--kubeconfig-dir string Default: "/etc/kubernetes" | |
The path where to save the kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.66 -
Synopsis
Generate the kubeconfig file for the controller manager to use and save it to controller-manager.conf file
kubeadm init phase kubeconfig controller-manager [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for controller-manager | |
--kubeconfig-dir string Default: "/etc/kubernetes" | |
The path where to save the kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.67 -
Synopsis
Generate the kubeconfig file for the kubelet to use and save it to kubelet.conf file.
Please note that this should only be used for cluster bootstrapping purposes. After your control plane is up, you should request all kubelet credentials from the CSR API.
kubeadm init phase kubeconfig kubelet [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for kubelet | |
--kubeconfig-dir string Default: "/etc/kubernetes" | |
The path where to save the kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.68 -
Synopsis
Generate the kubeconfig file for the scheduler to use and save it to scheduler.conf file.
kubeadm init phase kubeconfig scheduler [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for scheduler | |
--kubeconfig-dir string Default: "/etc/kubernetes" | |
The path where to save the kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.69 -
Synopsis
Updates settings relevant to the kubelet after TLS bootstrap
kubeadm init phase kubelet-finalize [flags]
Examples
# Updates settings relevant to the kubelet after TLS bootstrap"
kubeadm init phase kubelet-finalize all --config
Options
-h, --help | |
help for kubelet-finalize |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.70 -
Synopsis
Run all kubelet-finalize phases
kubeadm init phase kubelet-finalize all [flags]
Examples
# Updates settings relevant to the kubelet after TLS bootstrap"
kubeadm init phase kubelet-finalize all --config
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for all |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.71 -
Synopsis
Enable kubelet client certificate rotation
kubeadm init phase kubelet-finalize experimental-cert-rotation [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for experimental-cert-rotation |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.72 -
Synopsis
Write a file with KubeletConfiguration and an environment file with node specific kubelet settings, and then (re)start kubelet.
kubeadm init phase kubelet-start [flags]
Examples
# Writes a dynamic environment file with kubelet flags from a InitConfiguration file.
kubeadm init phase kubelet-start --config config.yaml
Options
--config string | |
Path to a kubeadm configuration file. | |
--cri-socket string | |
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. | |
-h, --help | |
help for kubelet-start | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.73 -
Synopsis
Mark a node as a control-plane
kubeadm init phase mark-control-plane [flags]
Examples
# Applies control-plane label and taint to the current node, functionally equivalent to what executed by kubeadm init.
kubeadm init phase mark-control-plane --config config.yml
# Applies control-plane label and taint to a specific node
kubeadm init phase mark-control-plane --node-name myNode
Options
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for mark-control-plane | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.74 -
Synopsis
Run pre-flight checks for kubeadm init.
kubeadm init phase preflight [flags]
Examples
# Run pre-flight checks for kubeadm init using a config file.
kubeadm init phase preflight --config kubeadm-config.yml
Options
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for preflight | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.75 -
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase upload-certs [flags]
Options
--certificate-key string | |
Key used to encrypt the control-plane certificates in the kubeadm-certs Secret. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for upload-certs | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--skip-certificate-key-print | |
Don't print the key used to encrypt the control-plane certificates. | |
--upload-certs | |
Upload control-plane certificates to the kubeadm-certs Secret. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.76 -
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase upload-config [flags]
Options
-h, --help | |
help for upload-config |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.77 -
Synopsis
Upload all configuration to a config map
kubeadm init phase upload-config all [flags]
Options
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for all | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.78 -
Synopsis
Upload the kubeadm ClusterConfiguration to a ConfigMap called kubeadm-config in the kube-system namespace. This enables correct configuration of system components and a seamless user experience when upgrading.
Alternatively, you can use kubeadm config.
kubeadm init phase upload-config kubeadm [flags]
Examples
# upload the configuration of your cluster
kubeadm init phase upload-config --config=myConfig.yaml
Options
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for kubeadm | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.79 -
Synopsis
Upload kubelet configuration extracted from the kubeadm InitConfiguration object to a ConfigMap of the form kubelet-config-1.X in the cluster, where X is the minor version of the current (API Server) Kubernetes version.
kubeadm init phase upload-config kubelet [flags]
Examples
# Upload the kubelet configuration from the kubeadm Config file to a ConfigMap in the cluster.
kubeadm init phase upload-config kubelet --config kubeadm.yaml
Options
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for kubelet | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.80 -
Synopsis
When joining a kubeadm initialized cluster, we need to establish bidirectional trust. This is split into discovery (having the Node trust the Kubernetes Control Plane) and TLS bootstrap (having the Kubernetes Control Plane trust the Node).
There are 2 main schemes for discovery. The first is to use a shared token along with the IP address of the API server. The second is to provide a file - a subset of the standard kubeconfig file. This file can be a local file or downloaded via an HTTPS URL. The forms are kubeadm join --discovery-token abcdef.1234567890abcdef 1.2.3.4:6443, kubeadm join --discovery-file path/to/file.conf, or kubeadm join --discovery-file https://url/file.conf. Only one form can be used. If the discovery information is loaded from a URL, HTTPS must be used. Also, in that case the host installed CA bundle is used to verify the connection.
If you use a shared token for discovery, you should also pass the --discovery-token-ca-cert-hash flag to validate the public key of the root certificate authority (CA) presented by the Kubernetes Control Plane. The value of this flag is specified as "<hash-type>:<hex-encoded-value>", where the supported hash type is "sha256". The hash is calculated over the bytes of the Subject Public Key Info (SPKI) object (as in RFC7469). This value is available in the output of "kubeadm init" or can be calculated using standard tools. The --discovery-token-ca-cert-hash flag may be repeated multiple times to allow more than one public key.
If you cannot know the CA public key hash ahead of time, you can pass the --discovery-token-unsafe-skip-ca-verification flag to disable this verification. This weakens the kubeadm security model since other nodes can potentially impersonate the Kubernetes Control Plane.
The TLS bootstrap mechanism is also driven via a shared token. This is used to temporarily authenticate with the Kubernetes Control Plane to submit a certificate signing request (CSR) for a locally created key pair. By default, kubeadm will set up the Kubernetes Control Plane to automatically approve these signing requests. This token is passed in with the --tls-bootstrap-token abcdef.1234567890abcdef flag.
Often times the same token is used for both parts. In this case, the --token flag can be used instead of specifying each token individually.
The "join [api-server-endpoint]" command executes the following phases:
preflight Run join pre-flight checks
control-plane-prepare Prepare the machine for serving a control plane
/download-certs [EXPERIMENTAL] Download certificates shared among control-plane nodes from the kubeadm-certs Secret
/certs Generate the certificates for the new control plane components
/kubeconfig Generate the kubeconfig for the new control plane components
/control-plane Generate the manifests for the new control plane components
kubelet-start Write kubelet settings, certificates and (re)start the kubelet
control-plane-join Join a machine as a control plane instance
/etcd Add a new local etcd member
/update-status Register the new control-plane node into the ClusterStatus maintained in the kubeadm-config ConfigMap
/mark-control-plane Mark a node as a control-plane
kubeadm join [api-server-endpoint] [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, 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 int32 Default: 6443 | |
If the node should host a new control plane instance, the port for the API Server to bind to. | |
--certificate-key string | |
Use this key to decrypt the certificate secrets uploaded by init. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--cri-socket string | |
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. | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for join | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--node-name string | |
Specify the node name. | |
--skip-phases stringSlice | |
List of phases to be skipped | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.81 -
Synopsis
Use this command to invoke single phase of the join workflow
Options
-h, --help | |
help for phase |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.82 -
Synopsis
Join a machine as a control plane instance
kubeadm join phase control-plane-join [flags]
Examples
# Joins a machine as a control plane instance
kubeadm join phase control-plane-join all
Options
-h, --help | |
help for control-plane-join |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.83 -
Synopsis
Join a machine as a control plane instance
kubeadm join phase control-plane-join all [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, the IP address the API Server will advertise it's listening on. If not set the default network interface will be used. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
-h, --help | |
help for all | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.84 -
Synopsis
Add a new local etcd member
kubeadm join phase control-plane-join etcd [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, the IP address the API Server will advertise it's listening on. If not set the default network interface will be used. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for etcd | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.85 -
Synopsis
Mark a node as a control-plane
kubeadm join phase control-plane-join mark-control-plane [flags]
Options
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
-h, --help | |
help for mark-control-plane | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.86 -
Synopsis
Register the new control-plane node into the ClusterStatus maintained in the kubeadm-config ConfigMap
kubeadm join phase control-plane-join update-status [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, the IP address the API Server will advertise it's listening on. If not set the default network interface will be used. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
-h, --help | |
help for update-status | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.87 -
Synopsis
Prepare the machine for serving a control plane
kubeadm join phase control-plane-prepare [flags]
Examples
# Prepares the machine for serving a control plane
kubeadm join phase control-plane-prepare all
Options
-h, --help | |
help for control-plane-prepare |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.88 -
Synopsis
Prepare the machine for serving a control plane
kubeadm join phase control-plane-prepare all [api-server-endpoint] [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, 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 int32 Default: 6443 | |
If the node should host a new control plane instance, the port for the API Server to bind to. | |
--certificate-key string | |
Use this key to decrypt the certificate secrets uploaded by init. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for all | |
--node-name string | |
Specify the node name. | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.89 -
Synopsis
Generate the certificates for the new control plane components
kubeadm join phase control-plane-prepare certs [api-server-endpoint] [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, the IP address the API Server will advertise it's listening on. If not set the default network interface will be used. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
-h, --help | |
help for certs | |
--node-name string | |
Specify the node name. | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.90 -
Synopsis
Generate the manifests for the new control plane components
kubeadm join phase control-plane-prepare control-plane [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, 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 int32 Default: 6443 | |
If the node should host a new control plane instance, the port for the API Server to bind to. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for control-plane |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.91 -
Synopsis
[EXPERIMENTAL] Download certificates shared among control-plane nodes from the kubeadm-certs Secret
kubeadm join phase control-plane-prepare download-certs [api-server-endpoint] [flags]
Options
--certificate-key string | |
Use this key to decrypt the certificate secrets uploaded by init. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
-h, --help | |
help for download-certs | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.92 -
Synopsis
Generate the kubeconfig for the new control plane components
kubeadm join phase control-plane-prepare kubeconfig [api-server-endpoint] [flags]
Options
--certificate-key string | |
Use this key to decrypt the certificate secrets uploaded by init. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
-h, --help | |
help for kubeconfig | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.93 -
Synopsis
Write a file with KubeletConfiguration and an environment file with node specific kubelet settings, and then (re)start kubelet.
kubeadm join phase kubelet-start [api-server-endpoint] [flags]
Options
--config string | |
Path to kubeadm config file. | |
--cri-socket string | |
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. | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
-h, --help | |
help for kubelet-start | |
--node-name string | |
Specify the node name. | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.94 -
Synopsis
Run pre-flight checks for kubeadm join.
kubeadm join phase preflight [api-server-endpoint] [flags]
Examples
# Run join pre-flight checks using a config file.
kubeadm join phase preflight --config kubeadm-config.yml
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, 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 int32 Default: 6443 | |
If the node should host a new control plane instance, the port for the API Server to bind to. | |
--certificate-key string | |
Use this key to decrypt the certificate secrets uploaded by init. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--cri-socket string | |
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. | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
-h, --help | |
help for preflight | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--node-name string | |
Specify the node name. | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.95 -
Synopsis
Performs a best effort revert of changes made to this host by 'kubeadm init' or 'kubeadm join'
The "reset" command executes the following phases:
preflight Run reset pre-flight checks
update-cluster-status Remove this node from the ClusterStatus object.
remove-etcd-member Remove a local etcd member.
cleanup-node Run cleanup node.
kubeadm reset [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path to the directory where the certificates are stored. If specified, clean this directory. | |
--cri-socket string | |
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. | |
-f, --force | |
Reset the node without prompting for confirmation. | |
-h, --help | |
help for reset | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--skip-phases stringSlice | |
List of phases to be skipped |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.96 -
Synopsis
Use this command to invoke single phase of the reset workflow
Options
-h, --help | |
help for phase |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.97 -
Synopsis
Run cleanup node.
kubeadm reset phase cleanup-node [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path to the directory where the certificates are stored. If specified, clean this directory. | |
--cri-socket string | |
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. | |
-h, --help | |
help for cleanup-node |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.98 -
Synopsis
Run pre-flight checks for kubeadm reset.
kubeadm reset phase preflight [flags]
Options
-f, --force | |
Reset the node without prompting for confirmation. | |
-h, --help | |
help for preflight | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.99 -
Synopsis
Remove a local etcd member for a control plane node.
kubeadm reset phase remove-etcd-member [flags]
Options
-h, --help | |
help for remove-etcd-member | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.100 -
Synopsis
Remove this node from the ClusterStatus object if the node is a control plane node.
kubeadm reset phase update-cluster-status [flags]
Options
-h, --help | |
help for update-cluster-status |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.101 -
Synopsis
This command manages bootstrap tokens. It is optional and needed only for advanced use cases.
In short, bootstrap tokens are used for establishing bidirectional trust between a client and a server. A bootstrap token can be used when a client (for example a node that is about to join the cluster) needs to trust the server it is talking to. Then a bootstrap token with the "signing" usage can be used. bootstrap tokens can also function as a way to allow short-lived authentication to the API Server (the token serves as a way for the API Server to trust the client), for example for doing the TLS Bootstrap.
What is a bootstrap token more exactly?
- It is a Secret in the kube-system namespace of type "bootstrap.kubernetes.io/token".
- A bootstrap token must be of the form "[a-z0-9]{6}.[a-z0-9]{16}". The former part is the public token ID, while the latter is the Token Secret and it must be kept private at all circumstances!
- The name of the Secret must be named "bootstrap-token-(token-id)".
You can read more about bootstrap tokens here: https://kubernetes.io/docs/admin/bootstrap-tokens/
kubeadm token [flags]
Options
--dry-run | |
Whether to enable dry-run mode or not | |
-h, --help | |
help for token | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.102 -
Synopsis
This command will create a bootstrap token for you. You can specify the usages for this token, the "time to live" and an optional human friendly description.
The [token] is the actual token to write. This should be a securely generated random token of the form "[a-z0-9]{6}.[a-z0-9]{16}". If no [token] is given, kubeadm will generate a random token instead.
kubeadm token create [token]
Options
--certificate-key string | |
When used together with '--print-join-command', print the full 'kubeadm join' flag needed to join the cluster as a control-plane. To create a new certificate key you must use 'kubeadm init phase upload-certs --upload-certs'. | |
--config string | |
Path to a kubeadm configuration file. | |
--description string | |
A human friendly description of how this token is used. | |
--groups stringSlice Default: [system:bootstrappers:kubeadm:default-node-token] | |
Extra groups that this token will authenticate as when used for authentication. Must match "\\Asystem:bootstrappers:[a-z0-9:-]{0,255}[a-z0-9]\\z" | |
-h, --help | |
help for create | |
--print-join-command | |
Instead of printing only the token, print the full 'kubeadm join' flag needed to join the cluster using the token. | |
--ttl duration Default: 24h0m0s | |
The duration before the token is automatically deleted (e.g. 1s, 2m, 3h). If set to '0', the token will never expire | |
--usages stringSlice Default: [signing,authentication] | |
Describes the ways in which this token can be used. You can pass --usages multiple times or provide a comma separated list of options. Valid options: [signing,authentication] |
Options inherited from parent commands
--dry-run | |
Whether to enable dry-run mode or not | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.103 -
Synopsis
This command will delete a list of bootstrap tokens for you.
The [token-value] is the full Token of the form "[a-z0-9]{6}.[a-z0-9]{16}" or the Token ID of the form "[a-z0-9]{6}" to delete.
kubeadm token delete [token-value] ...
Options
-h, --help | |
help for delete |
Options inherited from parent commands
--dry-run | |
Whether to enable dry-run mode or not | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.104 -
Synopsis
This command will print out a randomly-generated bootstrap token that can be used with the "init" and "join" commands.
You don't have to use this command in order to generate a token. You can do so yourself as long as it is in the format "[a-z0-9]{6}.[a-z0-9]{16}". This command is provided for convenience to generate tokens in the given format.
You can also use "kubeadm init" without specifying a token and it will generate and print one for you.
kubeadm token generate [flags]
Options
-h, --help | |
help for generate |
Options inherited from parent commands
--dry-run | |
Whether to enable dry-run mode or not | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.105 -
Synopsis
This command will list all bootstrap tokens for you.
kubeadm token list [flags]
Options
--allow-missing-template-keys Default: true | |
If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. | |
-o, --experimental-output string Default: "text" | |
Output format. One of: text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file. | |
-h, --help | |
help for list |
Options inherited from parent commands
--dry-run | |
Whether to enable dry-run mode or not | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.106 -
Synopsis
Upgrade your cluster smoothly to a newer version with this command
kubeadm upgrade [flags]
Options
-h, --help | |
help for upgrade |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.107 -
Synopsis
Upgrade your Kubernetes cluster to the specified version
kubeadm upgrade apply [version]
Options
--allow-experimental-upgrades | |
Show unstable versions of Kubernetes as an upgrade alternative and allow upgrading to an alpha/beta/release candidate versions of Kubernetes. | |
--allow-release-candidate-upgrades | |
Show release candidate versions of Kubernetes as an upgrade alternative and allow upgrading to a release candidate versions of Kubernetes. | |
--certificate-renewal Default: true | |
Perform the renewal of certificates used by component changed during upgrades. | |
--config string | |
Path to a kubeadm configuration file. | |
--dry-run | |
Do not change any state, just output what actions would be performed. | |
--etcd-upgrade Default: true | |
Perform the upgrade of etcd. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-f, --force | |
Force upgrading although some requirements might not be met. This also implies non-interactive mode. | |
-h, --help | |
help for apply | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--print-config | |
Specifies whether the configuration file that will be used in the upgrade should be printed or not. | |
-y, --yes | |
Perform the upgrade and do not prompt for confirmation (non-interactive mode). |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.108 -
Synopsis
Show what differences would be applied to existing static pod manifests. See also: kubeadm upgrade apply --dry-run
kubeadm upgrade diff [version] [flags]
Options
--api-server-manifest string Default: "/etc/kubernetes/manifests/kube-apiserver.yaml" | |
path to API server manifest | |
--config string | |
Path to a kubeadm configuration file. | |
-c, --context-lines int Default: 3 | |
How many lines of context in the diff | |
--controller-manager-manifest string Default: "/etc/kubernetes/manifests/kube-controller-manager.yaml" | |
path to controller manifest | |
-h, --help | |
help for diff | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--scheduler-manifest string Default: "/etc/kubernetes/manifests/kube-scheduler.yaml" | |
path to scheduler manifest |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.109 -
Synopsis
Upgrade commands for a node in the cluster
The "node" command executes the following phases:
preflight Run upgrade node pre-flight checks
control-plane Upgrade the control plane instance deployed on this node, if any
kubelet-config Upgrade the kubelet configuration for this node
kubeadm upgrade node [flags]
Options
--certificate-renewal Default: true | |
Perform the renewal of certificates used by component changed during upgrades. | |
--dry-run | |
Do not change any state, just output the actions that would be performed. | |
--etcd-upgrade Default: true | |
Perform the upgrade of etcd. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for node | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--skip-phases stringSlice | |
List of phases to be skipped |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.110 -
Synopsis
Use this command to invoke single phase of the node workflow
Options
-h, --help | |
help for phase |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.111 -
Synopsis
Upgrade the control plane instance deployed on this node, if any
kubeadm upgrade node phase control-plane [flags]
Options
--certificate-renewal Default: true | |
Perform the renewal of certificates used by component changed during upgrades. | |
--dry-run | |
Do not change any state, just output the actions that would be performed. | |
--etcd-upgrade Default: true | |
Perform the upgrade of etcd. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for control-plane | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.112 -
Synopsis
Download the kubelet configuration from a ConfigMap of the form "kubelet-config-1.X" in the cluster, where X is the minor version of the kubelet. kubeadm uses the KuberneteVersion field in the kubeadm-config ConfigMap to determine what the desired kubelet version is.
kubeadm upgrade node phase kubelet-config [flags]
Options
--dry-run | |
Do not change any state, just output the actions that would be performed. | |
-h, --help | |
help for kubelet-config | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.113 -
Synopsis
Run pre-flight checks for kubeadm upgrade node.
kubeadm upgrade node phase preflight [flags]
Options
-h, --help | |
help for preflight | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.114 -
Synopsis
Check which versions are available to upgrade to and validate whether your current cluster is upgradeable. To skip the internet check, pass in the optional [version] parameter
kubeadm upgrade plan [version] [flags]
Options
--allow-experimental-upgrades | |
Show unstable versions of Kubernetes as an upgrade alternative and allow upgrading to an alpha/beta/release candidate versions of Kubernetes. | |
--allow-release-candidate-upgrades | |
Show release candidate versions of Kubernetes as an upgrade alternative and allow upgrading to a release candidate versions of Kubernetes. | |
--config string | |
Path to a kubeadm configuration file. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for plan | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--print-config | |
Specifies whether the configuration file that will be used in the upgrade should be printed or not. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.115 -
Synopsis
Print the version of kubeadm
kubeadm version [flags]
Options
-h, --help | |
help for version | |
-o, --output string | |
Output format; available options are 'yaml', 'json' and 'short' |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.1.116 -
All files in this directory are auto-generated from other repos. Do not edit them manually. You must edit them in their upstream repo.
1.2 - kubeadm init
This command initializes a Kubernetes control-plane node.
Synopsis
Run this command in order to set up the Kubernetes control plane
The "init" command executes the following phases:
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
/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
kubelet-start Write kubelet settings and (re)start the kubelet
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
etcd Generate static Pod manifest file for local etcd
/local Generate the static Pod manifest file for a local, single-node local etcd instance
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
/experimental-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
kubeadm init [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--apiserver-cert-extra-sans stringSlice | |
Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--certificate-key string | |
Key used to encrypt the control-plane certificates in the kubeadm-certs Secret. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
--cri-socket string | |
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 | |
Don't apply any changes; just output what would be done. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for init | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--node-name string | |
Specify the node name. | |
--pod-network-cidr string | |
Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node. | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. | |
--service-dns-domain string Default: "cluster.local" | |
Use alternative domain for services, e.g. "myorg.internal". | |
--skip-certificate-key-print | |
Don't print the key used to encrypt the control-plane certificates. | |
--skip-phases stringSlice | |
List of phases to be skipped | |
--skip-token-print | |
Skip printing of the default bootstrap token generated by 'kubeadm init'. | |
--token string | |
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 duration Default: 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 | |
Upload control-plane certificates to the kubeadm-certs Secret. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Init workflow
kubeadm init
bootstraps a Kubernetes control-plane node by executing the
following steps:
Runs a series of pre-flight checks to validate the system state before making changes. Some checks only trigger warnings, others are considered errors and will exit kubeadm until the problem is corrected or the user specifies
--ignore-preflight-errors=<list-of-errors>
.Generates a self-signed CA to set up identities for each component in the cluster. The user can provide their own CA cert and/or key by dropping it in the cert directory configured via
--cert-dir
(/etc/kubernetes/pki
by default). The APIServer certs will have additional SAN entries for any--apiserver-cert-extra-sans
arguments, lowercased if necessary.Writes kubeconfig files in
/etc/kubernetes/
for the kubelet, the controller-manager and the scheduler to use to connect to the API server, each with its own identity, as well as an additional kubeconfig file for administration namedadmin.conf
.Generates static Pod manifests for the API server, controller-manager and scheduler. In case an external etcd is not provided, an additional static Pod manifest is generated for etcd.
Static Pod manifests are written to
/etc/kubernetes/manifests
; the kubelet watches this directory for Pods to create on startup.Once control plane Pods are up and running, the
kubeadm init
sequence can continue.Apply labels and taints to the control-plane node so that no additional workloads will run there.
Generates the token that additional nodes can use to register themselves with a control-plane in the future. Optionally, the user can provide a token via
--token
, as described in the kubeadm token docs.Makes all the necessary configurations for allowing node joining with the Bootstrap Tokens and TLS Bootstrap mechanism:
Write a ConfigMap for making available all the information required for joining, and set up related RBAC access rules.
Let Bootstrap Tokens access the CSR signing API.
Configure auto-approval for new CSR requests.
See kubeadm join for additional info.
Installs a DNS server (CoreDNS) and the kube-proxy addon components via the API server. In Kubernetes version 1.11 and later CoreDNS is the default DNS server. To install kube-dns instead of CoreDNS, the DNS addon has to be configured in the kubeadm
ClusterConfiguration
. For more information about the configuration see the sectionUsing kubeadm init with a configuration file
below. Please note that although the DNS server is deployed, it will not be scheduled until CNI is installed.Warning: kube-dns usage with kubeadm is deprecated as of v1.18 and will be removed in a future release.
Using init phases with kubeadm
Kubeadm allows you to create a control-plane node in phases using the kubeadm init phase
command.
To view the ordered list of phases and sub-phases you can call kubeadm init --help
. The list will be located at the top of the help screen and each phase will have a description next to it.
Note that by calling kubeadm init
all of the phases and sub-phases will be executed in this exact order.
Some phases have unique flags, so if you want to have a look at the list of available options add --help
, for example:
sudo kubeadm init phase control-plane controller-manager --help
You can also use --help
to see the list of sub-phases for a certain parent phase:
sudo kubeadm init phase control-plane --help
kubeadm init
also exposes a flag called --skip-phases
that can be used to skip certain phases. The flag accepts a list of phase names and the names can be taken from the above ordered list.
An example:
sudo kubeadm init phase control-plane all --config=configfile.yaml
sudo kubeadm init phase etcd local --config=configfile.yaml
# you can now modify the control plane and etcd manifest files
sudo kubeadm init --skip-phases=control-plane,etcd --config=configfile.yaml
What this example would do is write the manifest files for the control plane and etcd in /etc/kubernetes/manifests
based on the configuration in configfile.yaml
. This allows you to modify the files and then skip these phases using --skip-phases
. By calling the last command you will create a control plane node with the custom manifest files.
Using kubeadm init with a configuration file
Caution: The config file is still considered beta and may change in future versions.
It's possible to configure kubeadm init
with a configuration file instead of command
line flags, and some more advanced features may only be available as
configuration file options. This file is passed using the --config
flag and it must
contain a ClusterConfiguration
structure and optionally more structures separated by ---\n
Mixing --config
with others flags may not be allowed in some cases.
The default configuration can be printed out using the kubeadm config print command.
If your configuration is not using the latest version it is recommended that you migrate using the kubeadm config migrate command.
For more information on the fields and usage of the configuration you can navigate to our API reference page and pick a version from the list.
Adding kube-proxy parameters
For information about kube-proxy parameters in the kubeadm configuration see:
For information about enabling IPVS mode with kubeadm see:
Passing custom flags to control plane components
For information about passing flags to control plane components see:
Using custom images
By default, kubeadm pulls images from k8s.gcr.io
. If the
requested Kubernetes version is a CI label (such as ci/latest
)
gcr.io/kubernetes-ci-images
is used.
You can override this behavior by using kubeadm with a configuration file. Allowed customization are:
- To provide an alternative
imageRepository
to be used instead ofk8s.gcr.io
. - To set
useHyperKubeImage
totrue
to use the HyperKube image. - To provide a specific
imageRepository
andimageTag
for etcd or DNS add-on.
Please note that the configuration field kubernetesVersion
or the command line flag
--kubernetes-version
affect the version of the images.
Uploading control-plane certificates to the cluster
By adding the flag --upload-certs
to kubeadm init
you can temporary upload
the control-plane certificates to a Secret in the cluster. Please note that this Secret
will expire automatically after 2 hours. The certificates are encrypted using
a 32byte key that can be specified using --certificate-key
. The same key can be used
to download the certificates when additional control-plane nodes are joining, by passing
--control-plane
and --certificate-key
to kubeadm join
.
The following phase command can be used to re-upload the certificates after expiration:
kubeadm init phase upload-certs --upload-certs --certificate-key=SOME_VALUE --config=SOME_YAML_FILE
If the flag --certificate-key
is not passed to kubeadm init
and
kubeadm init phase upload-certs
a new key will be generated automatically.
The following command can be used to generate a new key on demand:
kubeadm certs certificate-key
Certificate management with kubeadm
For detailed information on certificate management with kubeadm see Certificate Management with kubeadm. The document includes information about using external CA, custom certificates and certificate renewal.
Managing the kubeadm drop-in file for the kubelet
The kubeadm
package ships with a configuration file for running the kubelet
by systemd
. Note that the kubeadm CLI never touches this drop-in file. This drop-in file is part of the kubeadm DEB/RPM package.
For further information, see Managing the kubeadm drop-in file for systemd.
Use kubeadm with CRI runtimes
By default kubeadm attempts to detect your container runtime. For more details on this detection, see the kubeadm CRI installation guide.
Setting the node name
By default, kubeadm
assigns a node name based on a machine's host address. You can override this setting with the --node-name
flag.
The flag passes the appropriate --hostname-override
value to the kubelet.
Be aware that overriding the hostname can interfere with cloud providers.
Running kubeadm without an internet connection
For running kubeadm without an internet connection you have to pre-pull the required control-plane images.
You can list and pull the images using the kubeadm config images
sub-command:
kubeadm config images list
kubeadm config images pull
All images that kubeadm requires such as k8s.gcr.io/kube-*
, k8s.gcr.io/etcd
and k8s.gcr.io/pause
support multiple architectures.
Automating kubeadm
Rather than copying the token you obtained from kubeadm init
to each node, as
in the basic kubeadm tutorial, you can parallelize the
token distribution for easier automation. To implement this automation, you must
know the IP address that the control-plane node will have after it is started,
or use a DNS name or an address of a load balancer.
Generate a token. This token must have the form
<6 character string>.<16 character string>
. More formally, it must match the regex:[a-z0-9]{6}\.[a-z0-9]{16}
.kubeadm can generate a token for you:
kubeadm token generate
Start both the control-plane node and the worker nodes concurrently with this token. As they come up they should find each other and form the cluster. The same
--token
argument can be used on bothkubeadm init
andkubeadm join
.Similar can be done for
--certificate-key
when joining additional control-plane nodes. The key can be generated using:kubeadm certs certificate-key
Once the cluster is up, you can grab the admin credentials from the control-plane node
at /etc/kubernetes/admin.conf
and use that to talk to the cluster.
Note that this style of bootstrap has some relaxed security guarantees because
it does not allow the root CA hash to be validated with
--discovery-token-ca-cert-hash
(since it's not generated when the nodes are
provisioned). For details, see the kubeadm join.
What's next
- kubeadm init phase to understand more about
kubeadm init
phases - kubeadm join to bootstrap a Kubernetes worker node and join it to the cluster
- kubeadm upgrade to upgrade a Kubernetes cluster to a newer version
- kubeadm reset to revert any changes made to this host by
kubeadm init
orkubeadm join
1.3 - kubeadm join
This command initializes a Kubernetes worker node and joins it to the cluster.
Synopsis
When joining a kubeadm initialized cluster, we need to establish bidirectional trust. This is split into discovery (having the Node trust the Kubernetes Control Plane) and TLS bootstrap (having the Kubernetes Control Plane trust the Node).
There are 2 main schemes for discovery. The first is to use a shared token along with the IP address of the API server. The second is to provide a file - a subset of the standard kubeconfig file. This file can be a local file or downloaded via an HTTPS URL. The forms are kubeadm join --discovery-token abcdef.1234567890abcdef 1.2.3.4:6443, kubeadm join --discovery-file path/to/file.conf, or kubeadm join --discovery-file https://url/file.conf. Only one form can be used. If the discovery information is loaded from a URL, HTTPS must be used. Also, in that case the host installed CA bundle is used to verify the connection.
If you use a shared token for discovery, you should also pass the --discovery-token-ca-cert-hash flag to validate the public key of the root certificate authority (CA) presented by the Kubernetes Control Plane. The value of this flag is specified as "<hash-type>:<hex-encoded-value>", where the supported hash type is "sha256". The hash is calculated over the bytes of the Subject Public Key Info (SPKI) object (as in RFC7469). This value is available in the output of "kubeadm init" or can be calculated using standard tools. The --discovery-token-ca-cert-hash flag may be repeated multiple times to allow more than one public key.
If you cannot know the CA public key hash ahead of time, you can pass the --discovery-token-unsafe-skip-ca-verification flag to disable this verification. This weakens the kubeadm security model since other nodes can potentially impersonate the Kubernetes Control Plane.
The TLS bootstrap mechanism is also driven via a shared token. This is used to temporarily authenticate with the Kubernetes Control Plane to submit a certificate signing request (CSR) for a locally created key pair. By default, kubeadm will set up the Kubernetes Control Plane to automatically approve these signing requests. This token is passed in with the --tls-bootstrap-token abcdef.1234567890abcdef flag.
Often times the same token is used for both parts. In this case, the --token flag can be used instead of specifying each token individually.
The "join [api-server-endpoint]" command executes the following phases:
preflight Run join pre-flight checks
control-plane-prepare Prepare the machine for serving a control plane
/download-certs [EXPERIMENTAL] Download certificates shared among control-plane nodes from the kubeadm-certs Secret
/certs Generate the certificates for the new control plane components
/kubeconfig Generate the kubeconfig for the new control plane components
/control-plane Generate the manifests for the new control plane components
kubelet-start Write kubelet settings, certificates and (re)start the kubelet
control-plane-join Join a machine as a control plane instance
/etcd Add a new local etcd member
/update-status Register the new control-plane node into the ClusterStatus maintained in the kubeadm-config ConfigMap
/mark-control-plane Mark a node as a control-plane
kubeadm join [api-server-endpoint] [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, 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 int32 Default: 6443 | |
If the node should host a new control plane instance, the port for the API Server to bind to. | |
--certificate-key string | |
Use this key to decrypt the certificate secrets uploaded by init. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--cri-socket string | |
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. | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for join | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--node-name string | |
Specify the node name. | |
--skip-phases stringSlice | |
List of phases to be skipped | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
The join workflow
kubeadm join
bootstraps a Kubernetes worker node or a control-plane node and adds it to the cluster.
This action consists of the following steps for worker nodes:
kubeadm downloads necessary cluster information from the API server. By default, it uses the bootstrap token and the CA key hash to verify the authenticity of that data. The root CA can also be discovered directly via a file or URL.
Once the cluster information is known, kubelet can start the TLS bootstrapping process.
The TLS bootstrap uses the shared token to temporarily authenticate with the Kubernetes API server to submit a certificate signing request (CSR); by default the control plane signs this CSR request automatically.
Finally, kubeadm configures the local kubelet to connect to the API server with the definitive identity assigned to the node.
For control-plane nodes additional steps are performed:
Downloading certificates shared among control-plane nodes from the cluster (if explicitly requested by the user).
Generating control-plane component manifests, certificates and kubeconfig.
Adding new local etcd member.
Adding this node to the ClusterStatus of the kubeadm cluster.
Using join phases with kubeadm
Kubeadm allows you join a node to the cluster in phases using kubeadm join phase
.
To view the ordered list of phases and sub-phases you can call kubeadm join --help
. The list will be located
at the top of the help screen and each phase will have a description next to it.
Note that by calling kubeadm join
all of the phases and sub-phases will be executed in this exact order.
Some phases have unique flags, so if you want to have a look at the list of available options add --help
, for example:
kubeadm join phase kubelet-start --help
Similar to the kubeadm init phase
command, kubeadm join phase
allows you to skip a list of phases using the --skip-phases
flag.
For example:
sudo kubeadm join --skip-phases=preflight --config=config.yaml
Discovering what cluster CA to trust
The kubeadm discovery has several options, each with security tradeoffs. The right method for your environment depends on how you provision nodes and the security expectations you have about your network and node lifecycles.
Token-based discovery with CA pinning
This is the default mode in kubeadm. In this mode, kubeadm downloads the cluster configuration (including root CA) and validates it using the token as well as validating that the root CA public key matches the provided hash and that the API server certificate is valid under the root CA.
The CA key hash has the format sha256:<hex_encoded_hash>
. By default, the hash value is returned in the kubeadm join
command printed at the end of kubeadm init
or in the output of kubeadm token create --print-join-command
. It is in a standard format (see RFC7469) and can also be calculated by 3rd party tools or provisioning systems. For example, using the OpenSSL CLI:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
Example kubeadm join
commands:
For worker nodes:
kubeadm join --discovery-token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234..cdef 1.2.3.4:6443
For control-plane nodes:
kubeadm join --discovery-token abcdef.1234567890abcdef --discovery-token-ca-cert-hash sha256:1234..cdef --control-plane 1.2.3.4:6443
You can also call join
for a control-plane node with --certificate-key
to copy certificates to this node,
if the kubeadm init
command was called with --upload-certs
.
Advantages:
Allows bootstrapping nodes to securely discover a root of trust for the control-plane node even if other worker nodes or the network are compromised.
Convenient to execute manually since all of the information required fits into a single
kubeadm join
command.
Disadvantages:
- The CA hash is not normally known until the control-plane node has been provisioned, which can make it more difficult to build automated provisioning tools that use kubeadm. By generating your CA in beforehand, you may workaround this limitation.
Token-based discovery without CA pinning
This mode relies only on the symmetric token to sign
(HMAC-SHA256) the discovery information that establishes the root of trust for
the control-plane. To use the mode the joining nodes must skip the hash validation of the
CA public key, using --discovery-token-unsafe-skip-ca-verification
. You should consider
using one of the other modes if possible.
Example kubeadm join
command:
kubeadm join --token abcdef.1234567890abcdef --discovery-token-unsafe-skip-ca-verification 1.2.3.4:6443
Advantages:
Still protects against many network-level attacks.
The token can be generated ahead of time and shared with the control-plane node and worker nodes, which can then bootstrap in parallel without coordination. This allows it to be used in many provisioning scenarios.
Disadvantages:
- If an attacker is able to steal a bootstrap token via some vulnerability, they can use that token (along with network-level access) to impersonate the control-plane node to other bootstrapping nodes. This may or may not be an appropriate tradeoff in your environment.
File or HTTPS-based discovery
This provides an out-of-band way to establish a root of trust between the control-plane node and bootstrapping nodes. Consider using this mode if you are building automated provisioning using kubeadm. The format of the discovery file is a regular Kubernetes kubeconfig file.
In case the discovery file does not contain credentials, the TLS discovery token will be used.
Example kubeadm join
commands:
kubeadm join --discovery-file path/to/file.conf
(local file)kubeadm join --discovery-file https://url/file.conf
(remote HTTPS URL)
Advantages:
- Allows bootstrapping nodes to securely discover a root of trust for the control-plane node even if the network or other worker nodes are compromised.
Disadvantages:
- Requires that you have some way to carry the discovery information from the control-plane node to the bootstrapping nodes. If the discovery file contains credentials you must keep it secret and transfer it over a secure channel. This might be possible with your cloud provider or provisioning tool.
Securing your installation even more
The defaults for kubeadm may not work for everyone. This section documents how to tighten up a kubeadm installation at the cost of some usability.
Turning off auto-approval of node client certificates
By default, there is a CSR auto-approver enabled that basically approves any client certificate request for a kubelet when a Bootstrap Token was used when authenticating. If you don't want the cluster to automatically approve kubelet client certs, you can turn it off by executing this command:
kubectl delete clusterrolebinding kubeadm:node-autoapprove-bootstrap
After that, kubeadm join
will block until the admin has manually approved the CSR in flight:
kubectl get csr
The output is similar to this:
NAME AGE REQUESTOR CONDITION
node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ 18s system:bootstrap:878f07 Pending
kubectl certificate approve node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ
The output is similar to this:
certificatesigningrequest "node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ" approved
kubectl get csr
The output is similar to this:
NAME AGE REQUESTOR CONDITION
node-csr-c69HXe7aYcqkS1bKmH4faEnHAWxn6i2bHZ2mD04jZyQ 1m system:bootstrap:878f07 Approved,Issued
This forces the workflow that kubeadm join
will only succeed if kubectl certificate approve
has been run.
Turning off public access to the cluster-info ConfigMap
In order to achieve the joining flow using the token as the only piece of validation information, a
ConfigMap with some data needed for validation of the control-plane node's identity is exposed publicly by
default. While there is no private data in this ConfigMap, some users might wish to turn
it off regardless. Doing so will disable the ability to use the --discovery-token
flag of the
kubeadm join
flow. Here are the steps to do so:
- Fetch the
cluster-info
file from the API Server:
kubectl -n kube-public get cm cluster-info -o yaml | grep "kubeconfig:" -A11 | grep "apiVersion" -A10 | sed "s/ //" | tee cluster-info.yaml
The output is similar to this:
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority-data: <ca-cert>
server: https://<ip>:<port>
name: ""
contexts: []
current-context: ""
preferences: {}
users: []
Use the
cluster-info.yaml
file as an argument tokubeadm join --discovery-file
.Turn off public access to the
cluster-info
ConfigMap:
kubectl -n kube-public delete rolebinding kubeadm:bootstrap-signer-clusterinfo
These commands should be run after kubeadm init
but before kubeadm join
.
Using kubeadm join with a configuration file
Caution: The config file is still considered beta and may change in future versions.
It's possible to configure kubeadm join
with a configuration file instead of command
line flags, and some more advanced features may only be available as
configuration file options. This file is passed using the --config
flag and it must
contain a JoinConfiguration
structure. Mixing --config
with others flags may not be
allowed in some cases.
The default configuration can be printed out using the kubeadm config print command.
If your configuration is not using the latest version it is recommended that you migrate using the kubeadm config migrate command.
For more information on the fields and usage of the configuration you can navigate to our API reference page and pick a version from the list.
What's next
- kubeadm init to bootstrap a Kubernetes control-plane node
- kubeadm token to manage tokens for
kubeadm join
- kubeadm reset to revert any changes made to this host by
kubeadm init
orkubeadm join
1.4 - kubeadm upgrade
kubeadm upgrade
is a user-friendly command that wraps complex upgrading logic
behind one command, with support for both planning an upgrade and actually performing it.
kubeadm upgrade guidance
The steps for performing a upgrade using kubeadm are outlined in this document. For older versions of kubeadm, please refer to older documentation sets of the Kubernetes website.
You can use kubeadm upgrade diff
to see the changes that would be applied to static pod manifests.
To use kube-dns with upgrades in Kubernetes v1.13.0 and later please follow this guide.
In Kubernetes v1.15.0 and later, kubeadm upgrade apply
and kubeadm upgrade node
will also
automatically renew the kubeadm managed certificates on this node, including those stored in kubeconfig files.
To opt-out, it is possible to pass the flag --certificate-renewal=false
. For more details about certificate
renewal see the certificate management documentation.
Note: The commandskubeadm upgrade apply
andkubeadm upgrade plan
have a legacy--config
flag which makes it possible to reconfigure the cluster, while performing planning or upgrade of that particular control-plane node. Please be aware that the upgrade workflow was not designed for this scenario and there are reports of unexpected results.
kubeadm upgrade plan
Synopsis
Check which versions are available to upgrade to and validate whether your current cluster is upgradeable. To skip the internet check, pass in the optional [version] parameter
kubeadm upgrade plan [version] [flags]
Options
--allow-experimental-upgrades | |
Show unstable versions of Kubernetes as an upgrade alternative and allow upgrading to an alpha/beta/release candidate versions of Kubernetes. | |
--allow-release-candidate-upgrades | |
Show release candidate versions of Kubernetes as an upgrade alternative and allow upgrading to a release candidate versions of Kubernetes. | |
--config string | |
Path to a kubeadm configuration file. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for plan | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--print-config | |
Specifies whether the configuration file that will be used in the upgrade should be printed or not. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm upgrade apply
Synopsis
Upgrade your Kubernetes cluster to the specified version
kubeadm upgrade apply [version]
Options
--allow-experimental-upgrades | |
Show unstable versions of Kubernetes as an upgrade alternative and allow upgrading to an alpha/beta/release candidate versions of Kubernetes. | |
--allow-release-candidate-upgrades | |
Show release candidate versions of Kubernetes as an upgrade alternative and allow upgrading to a release candidate versions of Kubernetes. | |
--certificate-renewal Default: true | |
Perform the renewal of certificates used by component changed during upgrades. | |
--config string | |
Path to a kubeadm configuration file. | |
--dry-run | |
Do not change any state, just output what actions would be performed. | |
--etcd-upgrade Default: true | |
Perform the upgrade of etcd. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-f, --force | |
Force upgrading although some requirements might not be met. This also implies non-interactive mode. | |
-h, --help | |
help for apply | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--print-config | |
Specifies whether the configuration file that will be used in the upgrade should be printed or not. | |
-y, --yes | |
Perform the upgrade and do not prompt for confirmation (non-interactive mode). |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm upgrade diff
Synopsis
Show what differences would be applied to existing static pod manifests. See also: kubeadm upgrade apply --dry-run
kubeadm upgrade diff [version] [flags]
Options
--api-server-manifest string Default: "/etc/kubernetes/manifests/kube-apiserver.yaml" | |
path to API server manifest | |
--config string | |
Path to a kubeadm configuration file. | |
-c, --context-lines int Default: 3 | |
How many lines of context in the diff | |
--controller-manager-manifest string Default: "/etc/kubernetes/manifests/kube-controller-manager.yaml" | |
path to controller manifest | |
-h, --help | |
help for diff | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--scheduler-manifest string Default: "/etc/kubernetes/manifests/kube-scheduler.yaml" | |
path to scheduler manifest |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm upgrade node
Synopsis
Upgrade commands for a node in the cluster
The "node" command executes the following phases:
preflight Run upgrade node pre-flight checks
control-plane Upgrade the control plane instance deployed on this node, if any
kubelet-config Upgrade the kubelet configuration for this node
kubeadm upgrade node [flags]
Options
--certificate-renewal Default: true | |
Perform the renewal of certificates used by component changed during upgrades. | |
--dry-run | |
Do not change any state, just output the actions that would be performed. | |
--etcd-upgrade Default: true | |
Perform the upgrade of etcd. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for node | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--skip-phases stringSlice | |
List of phases to be skipped |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
What's next
- kubeadm config if you initialized your cluster using kubeadm v1.7.x or lower, to configure your cluster for
kubeadm upgrade
1.5 - kubeadm config
During kubeadm init
, kubeadm uploads the ClusterConfiguration
object to your cluster
in a ConfigMap called kubeadm-config
in the kube-system
namespace. This configuration is then read during
kubeadm join
, kubeadm reset
and kubeadm upgrade
. To view this ConfigMap call kubeadm config view
.
You can use kubeadm config print
to print the default configuration and kubeadm config migrate
to
convert your old configuration files to a newer version. kubeadm config images list
and
kubeadm config images pull
can be used to list and pull the images that kubeadm requires.
For more information navigate to Using kubeadm init with a configuration file or Using kubeadm join with a configuration file.
In Kubernetes v1.13.0 and later to list/pull kube-dns images instead of the CoreDNS image
the --config
method described here
has to be used.
kubeadm config view
Synopsis
Using this command, you can view the ConfigMap in the cluster where the configuration for kubeadm is located.
The configuration is located in the "kube-system" namespace in the "kubeadm-config" ConfigMap.
kubeadm config view [flags]
Options
-h, --help | |
help for view |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm config print init-defaults
Synopsis
This command prints objects such as the default init configuration that is used for 'kubeadm init'.
Note that sensitive values like the Bootstrap Token fields are replaced with placeholder values like {"abcdef.0123456789abcdef" "" "nil" <nil> [] []} in order to pass validation but not perform the real computation for creating a token.
kubeadm config print init-defaults [flags]
Options
--component-configs stringSlice | |
A comma-separated list for component config API objects to print the default values for. Available values: [KubeProxyConfiguration KubeletConfiguration]. If this flag is not set, no component configs will be printed. | |
-h, --help | |
help for init-defaults |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm config print join-defaults
Synopsis
This command prints objects such as the default join configuration that is used for 'kubeadm join'.
Note that sensitive values like the Bootstrap Token fields are replaced with placeholder values like {"abcdef.0123456789abcdef" "" "nil" <nil> [] []} in order to pass validation but not perform the real computation for creating a token.
kubeadm config print join-defaults [flags]
Options
--component-configs stringSlice | |
A comma-separated list for component config API objects to print the default values for. Available values: [KubeProxyConfiguration KubeletConfiguration]. If this flag is not set, no component configs will be printed. | |
-h, --help | |
help for join-defaults |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm config migrate
Synopsis
This command lets you convert configuration objects of older versions to the latest supported version, locally in the CLI tool without ever touching anything in the cluster. In this version of kubeadm, the following API versions are supported:
- kubeadm.k8s.io/v1beta2
Further, kubeadm can only write out config of version "kubeadm.k8s.io/v1beta2", but read both types. So regardless of what version you pass to the --old-config parameter here, the API object will be read, deserialized, defaulted, converted, validated, and re-serialized when written to stdout or --new-config if specified.
In other words, the output of this command is what kubeadm actually would read internally if you submitted this file to "kubeadm init"
kubeadm config migrate [flags]
Options
-h, --help | |
help for migrate | |
--new-config string | |
Path to the resulting equivalent kubeadm config file using the new API version. Optional, if not specified output will be sent to STDOUT. | |
--old-config string | |
Path to the kubeadm config file that is using an old API version and should be converted. This flag is mandatory. |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm config images list
Synopsis
Print a list of images kubeadm will use. The configuration file is used in case any images or image repositories are customized
kubeadm config images list [flags]
Options
--allow-missing-template-keys Default: true | |
If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. | |
--config string | |
Path to a kubeadm configuration file. | |
-o, --experimental-output string Default: "text" | |
Output format. One of: text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for list | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm config images pull
Synopsis
Pull images used by kubeadm
kubeadm config images pull [flags]
Options
--config string | |
Path to a kubeadm configuration file. | |
--cri-socket string | |
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. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for pull | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
What's next
- kubeadm upgrade to upgrade a Kubernetes cluster to a newer version
1.6 - kubeadm reset
Performs a best effort revert of changes made by kubeadm init
or kubeadm join
.
Synopsis
Performs a best effort revert of changes made to this host by 'kubeadm init' or 'kubeadm join'
The "reset" command executes the following phases:
preflight Run reset pre-flight checks
update-cluster-status Remove this node from the ClusterStatus object.
remove-etcd-member Remove a local etcd member.
cleanup-node Run cleanup node.
kubeadm reset [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path to the directory where the certificates are stored. If specified, clean this directory. | |
--cri-socket string | |
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. | |
-f, --force | |
Reset the node without prompting for confirmation. | |
-h, --help | |
help for reset | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--skip-phases stringSlice | |
List of phases to be skipped |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Reset workflow
kubeadm reset
is responsible for cleaning up a node local file system from files that were created using
the kubeadm init
or kubeadm join
commands. For control-plane nodes reset
also removes the local stacked
etcd member of this node from the etcd cluster and also removes this node's information from the kubeadm
ClusterStatus
object. ClusterStatus
is a kubeadm managed Kubernetes API object that holds a list of kube-apiserver endpoints.
kubeadm reset phase
can be used to execute the separate phases of the above workflow.
To skip a list of phases you can use the --skip-phases
flag, which works in a similar way to
the kubeadm join
and kubeadm init
phase runners.
External etcd clean up
kubeadm reset
will not delete any etcd data if external etcd is used. This means that if you run kubeadm init
again using the same etcd endpoints, you will see state from previous clusters.
To wipe etcd data it is recommended you use a client like etcdctl, such as:
etcdctl del "" --prefix
See the etcd documentation for more information.
What's next
- kubeadm init to bootstrap a Kubernetes control-plane node
- kubeadm join to bootstrap a Kubernetes worker node and join it to the cluster
1.7 - kubeadm token
Bootstrap tokens are used for establishing bidirectional trust between a node joining the cluster and a control-plane node, as described in authenticating with bootstrap tokens.
kubeadm init
creates an initial token with a 24-hour TTL. The following commands allow you to manage
such a token and also to create and manage new ones.
kubeadm token create
Synopsis
This command will create a bootstrap token for you. You can specify the usages for this token, the "time to live" and an optional human friendly description.
The [token] is the actual token to write. This should be a securely generated random token of the form "[a-z0-9]{6}.[a-z0-9]{16}". If no [token] is given, kubeadm will generate a random token instead.
kubeadm token create [token]
Options
--certificate-key string | |
When used together with '--print-join-command', print the full 'kubeadm join' flag needed to join the cluster as a control-plane. To create a new certificate key you must use 'kubeadm init phase upload-certs --upload-certs'. | |
--config string | |
Path to a kubeadm configuration file. | |
--description string | |
A human friendly description of how this token is used. | |
--groups stringSlice Default: [system:bootstrappers:kubeadm:default-node-token] | |
Extra groups that this token will authenticate as when used for authentication. Must match "\\Asystem:bootstrappers:[a-z0-9:-]{0,255}[a-z0-9]\\z" | |
-h, --help | |
help for create | |
--print-join-command | |
Instead of printing only the token, print the full 'kubeadm join' flag needed to join the cluster using the token. | |
--ttl duration Default: 24h0m0s | |
The duration before the token is automatically deleted (e.g. 1s, 2m, 3h). If set to '0', the token will never expire | |
--usages stringSlice Default: [signing,authentication] | |
Describes the ways in which this token can be used. You can pass --usages multiple times or provide a comma separated list of options. Valid options: [signing,authentication] |
Options inherited from parent commands
--dry-run | |
Whether to enable dry-run mode or not | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm token delete
Synopsis
This command will delete a list of bootstrap tokens for you.
The [token-value] is the full Token of the form "[a-z0-9]{6}.[a-z0-9]{16}" or the Token ID of the form "[a-z0-9]{6}" to delete.
kubeadm token delete [token-value] ...
Options
-h, --help | |
help for delete |
Options inherited from parent commands
--dry-run | |
Whether to enable dry-run mode or not | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm token generate
Synopsis
This command will print out a randomly-generated bootstrap token that can be used with the "init" and "join" commands.
You don't have to use this command in order to generate a token. You can do so yourself as long as it is in the format "[a-z0-9]{6}.[a-z0-9]{16}". This command is provided for convenience to generate tokens in the given format.
You can also use "kubeadm init" without specifying a token and it will generate and print one for you.
kubeadm token generate [flags]
Options
-h, --help | |
help for generate |
Options inherited from parent commands
--dry-run | |
Whether to enable dry-run mode or not | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm token list
Synopsis
This command will list all bootstrap tokens for you.
kubeadm token list [flags]
Options
--allow-missing-template-keys Default: true | |
If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats. | |
-o, --experimental-output string Default: "text" | |
Output format. One of: text|json|yaml|go-template|go-template-file|template|templatefile|jsonpath|jsonpath-as-json|jsonpath-file. | |
-h, --help | |
help for list |
Options inherited from parent commands
--dry-run | |
Whether to enable dry-run mode or not | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
What's next
- kubeadm join to bootstrap a Kubernetes worker node and join it to the cluster
1.8 - kubeadm version
This command prints the version of kubeadm.
Synopsis
Print the version of kubeadm
kubeadm version [flags]
Options
-h, --help | |
help for version | |
-o, --output string | |
Output format; available options are 'yaml', 'json' and 'short' |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
1.9 - kubeadm alpha
Caution:kubeadm alpha
provides a preview of a set of features made available for gathering feedback from the community. Please try it out and give us feedback!
kubeadm alpha kubeconfig user
The user
subcommand can be used for the creation of kubeconfig files for additional users.
Synopsis
Kubeconfig file utilities.
Alpha Disclaimer: this command is currently alpha.
Options
-h, --help | |
help for kubeconfig |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Output a kubeconfig file for an additional user.
Alpha Disclaimer: this command is currently alpha.
kubeadm alpha kubeconfig user [flags]
Examples
# Output a kubeconfig file for an additional user named foo using a kubeadm config file bar
kubeadm alpha kubeconfig user --client-name=foo --config=bar
Options
--client-name string | |
The name of user. It will be used as the CN if client certificates are created | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for user | |
--org stringSlice | |
The orgnizations of the client certificate. It will be used as the O if client certificates are created | |
--token string | |
The token that should be used as the authentication mechanism for this kubeconfig, instead of client certificates |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm alpha kubelet config
Use the following command to enable the DynamicKubeletConfiguration feature.
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
Options
-h, --help | |
help for kubelet |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Enable or update dynamic kubelet configuration for a Node, against the kubelet-config-1.X ConfigMap in the cluster, where X is the minor version of the desired kubelet version.
WARNING: This feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it may have surprising side-effects at this stage.
Alpha Disclaimer: this command is currently alpha.
kubeadm alpha kubelet config enable-dynamic [flags]
Examples
# Enable dynamic kubelet configuration for a Node.
kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version 1.18.0
WARNING: This feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it
may have surprising side-effects at this stage.
Options
-h, --help | |
help for enable-dynamic | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--kubelet-version string | |
The desired version for the kubelet | |
--node-name string | |
Name of the node that should enable the dynamic kubelet configuration |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm alpha selfhosting pivot
The subcommand pivot
can be used to convert a static Pod-hosted control plane into a self-hosted one.
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
Options
-h, --help | |
help for selfhosting |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Convert static Pod files for control plane components into self-hosted DaemonSets configured via the Kubernetes API.
See the documentation for self-hosting limitations.
Alpha Disclaimer: this command is currently alpha.
kubeadm alpha selfhosting pivot [flags]
Examples
# Convert a static Pod-hosted control plane into a self-hosted one.
kubeadm alpha phase self-hosting convert-from-staticpods
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where certificates are stored | |
--config string | |
Path to a kubeadm configuration file. | |
-f, --force | |
Pivot the cluster without prompting for confirmation | |
-h, --help | |
help for pivot | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
-s, --store-certs-in-secrets | |
Enable storing certs in secrets |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
What's next
- kubeadm init to bootstrap a Kubernetes control-plane node
- kubeadm join to connect a node to the cluster
- kubeadm reset to revert any changes made to this host by
kubeadm init
orkubeadm join
1.10 - kubeadm certs
kubeadm certs
provides utilities for managing certificates.
For more details on how these commands can be used, see
Certificate Management with kubeadm.
kubeadm certs
A collection of operations for operating Kubernetes certificates.
Synopsis
Commands related to handling kubernetes certificates
Options
-h, --help | |
help for certs |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm certs renew
You can renew all Kubernetes certificates using the all
subcommand or renew them selectively.
For more details see Manual certificate renewal.
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm certs renew [flags]
Options
-h, --help | |
help for renew |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Renew all known certificates necessary to run the control plane. Renewals are run unconditionally, regardless of expiration date. Renewals can also be run individually for more control.
kubeadm certs renew all [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for all | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Renew the certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew admin.conf [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for admin.conf | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Renew the certificate the apiserver uses to access etcd.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew apiserver-etcd-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for apiserver-etcd-client | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Renew the certificate for the API server to connect to kubelet.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew apiserver-kubelet-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for apiserver-kubelet-client | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Renew the certificate for serving the Kubernetes API.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew apiserver [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for apiserver | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Renew the certificate embedded in the kubeconfig file for the controller manager to use.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew controller-manager.conf [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for controller-manager.conf | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Renew the certificate for liveness probes to healthcheck etcd.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew etcd-healthcheck-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for etcd-healthcheck-client | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Renew the certificate for etcd nodes to communicate with each other.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew etcd-peer [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for etcd-peer | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Renew the certificate for serving etcd.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew etcd-server [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for etcd-server | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Renew the certificate for the front proxy client.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew front-proxy-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for front-proxy-client | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Renew the certificate embedded in the kubeconfig file for the scheduler manager to use.
Renewals run unconditionally, regardless of certificate expiration date; extra attributes such as SANs will be based on the existing file/certificates, there is no need to resupply them.
Renewal by default tries to use the certificate authority in the local PKI managed by kubeadm; as alternative it is possible to use K8s certificate API for certificate renewal, or as a last option, to generate a CSR request.
After renewal, in order to make changes effective, is required to restart control-plane components and eventually re-distribute the renewed certificate in case the file is used elsewhere.
kubeadm certs renew scheduler.conf [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
--csr-dir string | |
The path to output the CSRs and private keys to | |
--csr-only | |
Create CSRs instead of generating certificates | |
-h, --help | |
help for scheduler.conf | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm certs certificate-key
This command can be used to generate a new control-plane certificate key.
The key can be passed as --certificate-key
to kubeadm init
and kubeadm join
to enable the automatic copy of certificates when joining additional control-plane nodes.
Synopsis
This command will print out a secure randomly-generated certificate key that can be used with the "init" command.
You can also use "kubeadm init --upload-certs" without specifying a certificate key and it will generate and print one for you.
kubeadm certs certificate-key [flags]
Options
-h, --help | |
help for certificate-key |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm certs check-expiration
This command checks expiration for the certificates in the local PKI managed by kubeadm. For more details see Check certificate expiration.
Synopsis
Checks expiration for the certificates in the local PKI managed by kubeadm.
kubeadm certs check-expiration [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for check-expiration | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm certs generate-csr
This command can be used to generate keys and CSRs for all control-plane certificates and kubeconfig files. The user can then sign the CSRs with a CA of their choice.
Synopsis
Generates keys and certificate signing requests (CSRs) for all the certificates required to run the control plane. This command also generates partial kubeconfig files with private key data in the "users > user > client-key-data" field, and for each kubeconfig file an accompanying ".csr" file is created.
This command is designed for use in Kubeadm External CA Mode. It generates CSRs which you can then submit to your external certificate authority for signing.
The PEM encoded signed certificates should then be saved alongside the key files, using ".crt" as the file extension, or in the case of kubeconfig files, the PEM encoded signed certificate should be base64 encoded and added to the kubeconfig file in the "users > user > client-certificate-data" field.
kubeadm certs generate-csr [flags]
Examples
# The following command will generate keys and CSRs for all control-plane certificates and kubeconfig files:
kubeadm alpha certs generate-csr --kubeconfig-dir /tmp/etc-k8s --cert-dir /tmp/etc-k8s/pki
Options
--cert-dir string | |
The path where to save the certificates | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for generate-csr | |
--kubeconfig-dir string Default: "/etc/kubernetes" | |
The path where to save the kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
What's next
- kubeadm init to bootstrap a Kubernetes control-plane node
- kubeadm join to connect a node to the cluster
- kubeadm reset to revert any changes made to this host by
kubeadm init
orkubeadm join
1.11 - kubeadm init phase
kubeadm init phase
enables you to invoke atomic steps of the bootstrap process.
Hence, you can let kubeadm do some of the work and you can fill in the gaps
if you wish to apply customization.
kubeadm init phase
is consistent with the kubeadm init workflow,
and behind the scene both use the same code.
kubeadm init phase preflight
Using this command you can execute preflight checks on a control-plane node.
Synopsis
Run pre-flight checks for kubeadm init.
kubeadm init phase preflight [flags]
Examples
# Run pre-flight checks for kubeadm init using a config file.
kubeadm init phase preflight --config kubeadm-config.yml
Options
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for preflight | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm init phase kubelet-start
This phase will write the kubelet configuration file and environment file and then start the kubelet.
Synopsis
Write a file with KubeletConfiguration and an environment file with node specific kubelet settings, and then (re)start kubelet.
kubeadm init phase kubelet-start [flags]
Examples
# Writes a dynamic environment file with kubelet flags from a InitConfiguration file.
kubeadm init phase kubelet-start --config config.yaml
Options
--config string | |
Path to a kubeadm configuration file. | |
--cri-socket string | |
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. | |
-h, --help | |
help for kubelet-start | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm init phase certs
Can be used to create all required certificates by kubeadm.
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase certs [flags]
Options
-h, --help | |
help for certs |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate all certificates
kubeadm init phase certs all [flags]
Options
--apiserver-advertise-address string | |
The IP address the API Server will advertise it's listening on. If not set the default network interface will be used. | |
--apiserver-cert-extra-sans stringSlice | |
Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for all | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. | |
--service-dns-domain string Default: "cluster.local" | |
Use alternative domain for services, e.g. "myorg.internal". |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the self-signed Kubernetes CA to provision identities for other Kubernetes components, and save them into ca.cert and ca.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs ca [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for ca | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the certificate for serving the Kubernetes API, and save them into apiserver.cert and apiserver.key files.
Default SANs are kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, 10.96.0.1, 127.0.0.1
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs apiserver [flags]
Options
--apiserver-advertise-address string | |
The IP address the API Server will advertise it's listening on. If not set the default network interface will be used. | |
--apiserver-cert-extra-sans stringSlice | |
Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for apiserver | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. | |
--service-dns-domain string Default: "cluster.local" | |
Use alternative domain for services, e.g. "myorg.internal". |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the certificate for the API server to connect to kubelet, and save them into apiserver-kubelet-client.cert and apiserver-kubelet-client.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs apiserver-kubelet-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for apiserver-kubelet-client | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the self-signed CA to provision identities for front proxy, and save them into front-proxy-ca.cert and front-proxy-ca.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs front-proxy-ca [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for front-proxy-ca | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the certificate for the front proxy client, and save them into front-proxy-client.cert and front-proxy-client.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs front-proxy-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for front-proxy-client | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the self-signed CA to provision identities for etcd, and save them into etcd/ca.cert and etcd/ca.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs etcd-ca [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for etcd-ca | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the certificate for serving etcd, and save them into etcd/server.cert and etcd/server.key files.
Default SANs are localhost, 127.0.0.1, 127.0.0.1, ::1
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs etcd-server [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for etcd-server | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the certificate for etcd nodes to communicate with each other, and save them into etcd/peer.cert and etcd/peer.key files.
Default SANs are localhost, 127.0.0.1, 127.0.0.1, ::1
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs etcd-peer [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for etcd-peer | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the certificate for liveness probes to healthcheck etcd, and save them into etcd/healthcheck-client.cert and etcd/healthcheck-client.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs etcd-healthcheck-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for etcd-healthcheck-client | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the certificate the apiserver uses to access etcd, and save them into apiserver-etcd-client.cert and apiserver-etcd-client.key files.
If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs apiserver-etcd-client [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for apiserver-etcd-client | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the private key for signing service account tokens along with its public key, and save them into sa.key and sa.pub files. If both files already exist, kubeadm skips the generation step and existing files will be used.
Alpha Disclaimer: this command is currently alpha.
kubeadm init phase certs sa [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
-h, --help | |
help for sa |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm init phase kubeconfig
You can create all required kubeconfig files by calling the all
subcommand or call them individually.
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase kubeconfig [flags]
Options
-h, --help | |
help for kubeconfig |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate all kubeconfig files
kubeadm init phase kubeconfig all [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for all | |
--kubeconfig-dir string Default: "/etc/kubernetes" | |
The path where to save the kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the kubeconfig file for the admin and for kubeadm itself, and save it to admin.conf file.
kubeadm init phase kubeconfig admin [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for admin | |
--kubeconfig-dir string Default: "/etc/kubernetes" | |
The path where to save the kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the kubeconfig file for the kubelet to use and save it to kubelet.conf file.
Please note that this should only be used for cluster bootstrapping purposes. After your control plane is up, you should request all kubelet credentials from the CSR API.
kubeadm init phase kubeconfig kubelet [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for kubelet | |
--kubeconfig-dir string Default: "/etc/kubernetes" | |
The path where to save the kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the kubeconfig file for the controller manager to use and save it to controller-manager.conf file
kubeadm init phase kubeconfig controller-manager [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for controller-manager | |
--kubeconfig-dir string Default: "/etc/kubernetes" | |
The path where to save the kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the kubeconfig file for the scheduler to use and save it to scheduler.conf file.
kubeadm init phase kubeconfig scheduler [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for scheduler | |
--kubeconfig-dir string Default: "/etc/kubernetes" | |
The path where to save the kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm init phase control-plane
Using this phase you can create all required static Pod files for the control plane components.
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase control-plane [flags]
Options
-h, --help | |
help for control-plane |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate all static Pod manifest files
kubeadm init phase control-plane all [flags]
Examples
# Generates all static Pod manifest files for control plane components,
# functionally equivalent to what is generated by kubeadm init.
kubeadm init phase control-plane all
# Generates all static Pod manifest files using options read from a configuration file.
kubeadm init phase control-plane all --config config.yaml
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--apiserver-extra-args mapStringString | |
A set of extra flags to pass to the API Server or override default ones in form of <flagname>=<value> | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
--controller-manager-extra-args mapStringString | |
A set of extra flags to pass to the Controller Manager or override default ones in form of <flagname>=<value> | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for all | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--pod-network-cidr string | |
Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node. | |
--scheduler-extra-args mapStringString | |
A set of extra flags to pass to the Scheduler or override default ones in form of <flagname>=<value> | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generates the kube-apiserver static Pod manifest
kubeadm init phase control-plane apiserver [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--apiserver-extra-args mapStringString | |
A set of extra flags to pass to the API Server or override default ones in form of <flagname>=<value> | |
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for apiserver | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generates the kube-controller-manager static Pod manifest
kubeadm init phase control-plane controller-manager [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--controller-manager-extra-args mapStringString | |
A set of extra flags to pass to the Controller Manager or override default ones in form of <flagname>=<value> | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for controller-manager | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--pod-network-cidr string | |
Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generates the kube-scheduler static Pod manifest
kubeadm init phase control-plane scheduler [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for scheduler | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--scheduler-extra-args mapStringString | |
A set of extra flags to pass to the Scheduler or override default ones in form of <flagname>=<value> |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm init phase etcd
Use the following phase to create a local etcd instance based on a static Pod file.
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase etcd [flags]
Options
-h, --help | |
help for etcd |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the static Pod manifest file for a local, single-node local etcd instance
kubeadm init phase etcd local [flags]
Examples
# Generates the static Pod manifest file for etcd, functionally
# equivalent to what is generated by kubeadm init.
kubeadm init phase etcd local
# Generates the static Pod manifest file for etcd using options
# read from a configuration file.
kubeadm init phase etcd local --config config.yaml
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for local | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm init phase upload-config
You can use this command to upload the kubeadm configuration to your cluster. Alternatively, you can use kubeadm config.
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase upload-config [flags]
Options
-h, --help | |
help for upload-config |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Upload all configuration to a config map
kubeadm init phase upload-config all [flags]
Options
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for all | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Upload the kubeadm ClusterConfiguration to a ConfigMap called kubeadm-config in the kube-system namespace. This enables correct configuration of system components and a seamless user experience when upgrading.
Alternatively, you can use kubeadm config.
kubeadm init phase upload-config kubeadm [flags]
Examples
# upload the configuration of your cluster
kubeadm init phase upload-config --config=myConfig.yaml
Options
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for kubeadm | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Upload kubelet configuration extracted from the kubeadm InitConfiguration object to a ConfigMap of the form kubelet-config-1.X in the cluster, where X is the minor version of the current (API Server) Kubernetes version.
kubeadm init phase upload-config kubelet [flags]
Examples
# Upload the kubelet configuration from the kubeadm Config file to a ConfigMap in the cluster.
kubeadm init phase upload-config kubelet --config kubeadm.yaml
Options
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for kubelet | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm init phase upload-certs
Use the following phase to upload control-plane certificates to the cluster. By default the certs and encryption key expire after two hours.
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase upload-certs [flags]
Options
--certificate-key string | |
Key used to encrypt the control-plane certificates in the kubeadm-certs Secret. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for upload-certs | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--skip-certificate-key-print | |
Don't print the key used to encrypt the control-plane certificates. | |
--upload-certs | |
Upload control-plane certificates to the kubeadm-certs Secret. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm init phase mark-control-plane
Use the following phase to label and taint the node with the node-role.kubernetes.io/master=""
key-value pair.
Synopsis
Mark a node as a control-plane
kubeadm init phase mark-control-plane [flags]
Examples
# Applies control-plane label and taint to the current node, functionally equivalent to what executed by kubeadm init.
kubeadm init phase mark-control-plane --config config.yml
# Applies control-plane label and taint to a specific node
kubeadm init phase mark-control-plane --node-name myNode
Options
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for mark-control-plane | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm init phase bootstrap-token
Use the following phase to configure bootstrap tokens.
Synopsis
Bootstrap tokens are used for establishing bidirectional trust between a node joining the cluster and a control-plane node.
This command makes all the configurations required to make bootstrap tokens works and then creates an initial token.
kubeadm init phase bootstrap-token [flags]
Examples
# Make all the bootstrap token configurations and create an initial token, functionally
# equivalent to what generated by kubeadm init.
kubeadm init phase bootstrap-token
Options
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for bootstrap-token | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--skip-token-print | |
Skip printing of the default bootstrap token generated by 'kubeadm init'. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm init phase kubelet-finialize
Use the following phase to update settings relevant to the kubelet after TLS
bootstrap. You can use the all
subcommand to run all kubelet-finalize
phases.
Synopsis
Updates settings relevant to the kubelet after TLS bootstrap
kubeadm init phase kubelet-finalize [flags]
Examples
# Updates settings relevant to the kubelet after TLS bootstrap"
kubeadm init phase kubelet-finalize all --config
Options
-h, --help | |
help for kubelet-finalize |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Run all kubelet-finalize phases
kubeadm init phase kubelet-finalize all [flags]
Examples
# Updates settings relevant to the kubelet after TLS bootstrap"
kubeadm init phase kubelet-finalize all --config
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for all |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Enable kubelet client certificate rotation
kubeadm init phase kubelet-finalize experimental-cert-rotation [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path where to save and store the certificates. | |
--config string | |
Path to a kubeadm configuration file. | |
-h, --help | |
help for experimental-cert-rotation |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm init phase addon
You can install all the available addons with the all
subcommand, or
install them selectively.
Synopsis
This command is not meant to be run on its own. See list of available subcommands.
kubeadm init phase addon [flags]
Options
-h, --help | |
help for addon |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Install all the addons
kubeadm init phase addon all [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for all | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--pod-network-cidr string | |
Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node. | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. | |
--service-dns-domain string Default: "cluster.local" | |
Use alternative domain for services, e.g. "myorg.internal". |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Install the CoreDNS addon components via the API server. Please note that although the DNS server is deployed, it will not be scheduled until CNI is installed.
kubeadm init phase addon coredns [flags]
Options
--config string | |
Path to a kubeadm configuration file. | |
--feature-gates string | |
A set of key=value pairs that describe feature gates for various features. Options are: IPv6DualStack=true|false (ALPHA - default=false) PublicKeysECDSA=true|false (ALPHA - default=false) | |
-h, --help | |
help for coredns | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--service-cidr string Default: "10.96.0.0/12" | |
Use alternative range of IP address for service VIPs. | |
--service-dns-domain string Default: "cluster.local" | |
Use alternative domain for services, e.g. "myorg.internal". |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Install the kube-proxy addon components via the API server.
kubeadm init phase addon kube-proxy [flags]
Options
--apiserver-advertise-address string | |
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 int32 Default: 6443 | |
Port for the API Server to bind to. | |
--config string | |
Path to a kubeadm configuration file. | |
--control-plane-endpoint string | |
Specify a stable IP address or DNS name for the control plane. | |
-h, --help | |
help for kube-proxy | |
--image-repository string Default: "k8s.gcr.io" | |
Choose a container registry to pull control plane images from | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. | |
--kubernetes-version string Default: "stable-1" | |
Choose a specific Kubernetes version for the control plane. | |
--pod-network-cidr string | |
Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
To use kube-dns instead of CoreDNS you have to pass a configuration file:
# for installing a DNS addon only
kubeadm init phase addon coredns --config=someconfig.yaml
The file has to contain a dns
field inClusterConfiguration
and also a type for the addon - kube-dns
(default value is CoreDNS
).
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
dns:
type: "kube-dns"
Please note that kube-dns usage with kubeadm is deprecated as of v1.18 and will be removed in a future release.
For more details on each field in the v1beta2
configuration you can navigate to our
[API reference pages.] (https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2)
What's next
- kubeadm init to bootstrap a Kubernetes control-plane node
- kubeadm join to connect a node to the cluster
- kubeadm reset to revert any changes made to this host by
kubeadm init
orkubeadm join
- kubeadm alpha to try experimental functionality
1.12 - kubeadm join phase
kubeadm join phase
enables you to invoke atomic steps of the join process.
Hence, you can let kubeadm do some of the work and you can fill in the gaps
if you wish to apply customization.
kubeadm join phase
is consistent with the kubeadm join workflow,
and behind the scene both use the same code.
kubeadm join phase
Synopsis
Use this command to invoke single phase of the join workflow
Options
-h, --help | |
help for phase |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm join phase preflight
Using this phase you can execute preflight checks on a joining node.
Synopsis
Run pre-flight checks for kubeadm join.
kubeadm join phase preflight [api-server-endpoint] [flags]
Examples
# Run join pre-flight checks using a config file.
kubeadm join phase preflight --config kubeadm-config.yml
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, 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 int32 Default: 6443 | |
If the node should host a new control plane instance, the port for the API Server to bind to. | |
--certificate-key string | |
Use this key to decrypt the certificate secrets uploaded by init. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--cri-socket string | |
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. | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
-h, --help | |
help for preflight | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. | |
--node-name string | |
Specify the node name. | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm join phase control-plane-prepare
Using this phase you can prepare a node for serving a control-plane.
Synopsis
Prepare the machine for serving a control plane
kubeadm join phase control-plane-prepare [flags]
Examples
# Prepares the machine for serving a control plane
kubeadm join phase control-plane-prepare all
Options
-h, --help | |
help for control-plane-prepare |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Prepare the machine for serving a control plane
kubeadm join phase control-plane-prepare all [api-server-endpoint] [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, 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 int32 Default: 6443 | |
If the node should host a new control plane instance, the port for the API Server to bind to. | |
--certificate-key string | |
Use this key to decrypt the certificate secrets uploaded by init. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for all | |
--node-name string | |
Specify the node name. | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
[EXPERIMENTAL] Download certificates shared among control-plane nodes from the kubeadm-certs Secret
kubeadm join phase control-plane-prepare download-certs [api-server-endpoint] [flags]
Options
--certificate-key string | |
Use this key to decrypt the certificate secrets uploaded by init. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
-h, --help | |
help for download-certs | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the certificates for the new control plane components
kubeadm join phase control-plane-prepare certs [api-server-endpoint] [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, the IP address the API Server will advertise it's listening on. If not set the default network interface will be used. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
-h, --help | |
help for certs | |
--node-name string | |
Specify the node name. | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the kubeconfig for the new control plane components
kubeadm join phase control-plane-prepare kubeconfig [api-server-endpoint] [flags]
Options
--certificate-key string | |
Use this key to decrypt the certificate secrets uploaded by init. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
-h, --help | |
help for kubeconfig | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Generate the manifests for the new control plane components
kubeadm join phase control-plane-prepare control-plane [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, 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 int32 Default: 6443 | |
If the node should host a new control plane instance, the port for the API Server to bind to. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for control-plane |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm join phase kubelet-start
Using this phase you can write the kubelet settings, certificates and (re)start the kubelet.
Synopsis
Write a file with KubeletConfiguration and an environment file with node specific kubelet settings, and then (re)start kubelet.
kubeadm join phase kubelet-start [api-server-endpoint] [flags]
Options
--config string | |
Path to kubeadm config file. | |
--cri-socket string | |
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. | |
--discovery-file string | |
For file-based discovery, a file or URL from which to load cluster information. | |
--discovery-token string | |
For token-based discovery, the token used to validate cluster information fetched from the API server. | |
--discovery-token-ca-cert-hash stringSlice | |
For token-based discovery, validate that the root CA public key matches this hash (format: "<type>:<value>"). | |
--discovery-token-unsafe-skip-ca-verification | |
For token-based discovery, allow joining without --discovery-token-ca-cert-hash pinning. | |
-h, --help | |
help for kubelet-start | |
--node-name string | |
Specify the node name. | |
--tls-bootstrap-token string | |
Specify the token used to temporarily authenticate with the Kubernetes Control Plane while joining the node. | |
--token string | |
Use this token for both discovery-token and tls-bootstrap-token when those values are not provided. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm join phase control-plane-join
Using this phase you can join a node as a control-plane instance.
Synopsis
Join a machine as a control plane instance
kubeadm join phase control-plane-join [flags]
Examples
# Joins a machine as a control plane instance
kubeadm join phase control-plane-join all
Options
-h, --help | |
help for control-plane-join |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Join a machine as a control plane instance
kubeadm join phase control-plane-join all [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, the IP address the API Server will advertise it's listening on. If not set the default network interface will be used. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
-h, --help | |
help for all | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Add a new local etcd member
kubeadm join phase control-plane-join etcd [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, the IP address the API Server will advertise it's listening on. If not set the default network interface will be used. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for etcd | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Register the new control-plane node into the ClusterStatus maintained in the kubeadm-config ConfigMap
kubeadm join phase control-plane-join update-status [flags]
Options
--apiserver-advertise-address string | |
If the node should host a new control plane instance, the IP address the API Server will advertise it's listening on. If not set the default network interface will be used. | |
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
-h, --help | |
help for update-status | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Mark a node as a control-plane
kubeadm join phase control-plane-join mark-control-plane [flags]
Options
--config string | |
Path to kubeadm config file. | |
--control-plane | |
Create a new control plane instance on this node | |
-h, --help | |
help for mark-control-plane | |
--node-name string | |
Specify the node name. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
What's next
- kubeadm init to bootstrap a Kubernetes control-plane node
- kubeadm join to connect a node to the cluster
- kubeadm reset to revert any changes made to this host by
kubeadm init
orkubeadm join
- kubeadm alpha to try experimental functionality
1.13 - kubeadm reset phase
kubeadm reset phase
enables you to invoke atomic steps of the node reset process.
Hence, you can let kubeadm do some of the work and you can fill in the gaps
if you wish to apply customization.
kubeadm reset phase
is consistent with the kubeadm reset workflow,
and behind the scene both use the same code.
kubeadm reset phase
Synopsis
Use this command to invoke single phase of the reset workflow
Options
-h, --help | |
help for phase |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm reset phase preflight
Using this phase you can execute preflight checks on a node that is being reset.
Synopsis
Run pre-flight checks for kubeadm reset.
kubeadm reset phase preflight [flags]
Options
-f, --force | |
Reset the node without prompting for confirmation. | |
-h, --help | |
help for preflight | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm reset phase update-cluster-status
Using this phase you can remove this control-plane node from the ClusterStatus object.
Synopsis
Remove this node from the ClusterStatus object if the node is a control plane node.
kubeadm reset phase update-cluster-status [flags]
Options
-h, --help | |
help for update-cluster-status |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm reset phase remove-etcd-member
Using this phase you can remove this control-plane node's etcd member from the etcd cluster.
Synopsis
Remove a local etcd member for a control plane node.
kubeadm reset phase remove-etcd-member [flags]
Options
-h, --help | |
help for remove-etcd-member | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
kubeadm reset phase cleanup-node
Using this phase you can perform cleanup on this node.
Synopsis
Run cleanup node.
kubeadm reset phase cleanup-node [flags]
Options
--cert-dir string Default: "/etc/kubernetes/pki" | |
The path to the directory where the certificates are stored. If specified, clean this directory. | |
--cri-socket string | |
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. | |
-h, --help | |
help for cleanup-node |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
What's next
- kubeadm init to bootstrap a Kubernetes control-plane node
- kubeadm join to connect a node to the cluster
- kubeadm reset to revert any changes made to this host by
kubeadm init
orkubeadm join
- kubeadm alpha to try experimental functionality
1.14 - kubeadm upgrade phase
In v1.15.0, kubeadm introduced preliminary support for kubeadm upgrade node
phases.
Phases for other kubeadm upgrade
sub-commands such as apply
, could be added in the
following releases.
kubeadm upgrade node phase
Using this phase you can choose to execute the separate steps of the upgrade of
secondary control-plane or worker nodes. Please note that kubeadm upgrade apply
still has to
be called on a primary control-plane node.
Synopsis
Use this command to invoke single phase of the node workflow
Options
-h, --help | |
help for phase |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Run pre-flight checks for kubeadm upgrade node.
kubeadm upgrade node phase preflight [flags]
Options
-h, --help | |
help for preflight | |
--ignore-preflight-errors stringSlice | |
A list of checks whose errors will be shown as warnings. Example: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Upgrade the control plane instance deployed on this node, if any
kubeadm upgrade node phase control-plane [flags]
Options
--certificate-renewal Default: true | |
Perform the renewal of certificates used by component changed during upgrades. | |
--dry-run | |
Do not change any state, just output the actions that would be performed. | |
--etcd-upgrade Default: true | |
Perform the upgrade of etcd. | |
--experimental-patches string | |
Path to a directory that contains files named "target[suffix][+patchtype].extension". For example, "kube-apiserver0+merge.yaml" or just "etcd.json". "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. | |
-h, --help | |
help for control-plane | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
Synopsis
Download the kubelet configuration from a ConfigMap of the form "kubelet-config-1.X" in the cluster, where X is the minor version of the kubelet. kubeadm uses the KuberneteVersion field in the kubeadm-config ConfigMap to determine what the desired kubelet version is.
kubeadm upgrade node phase kubelet-config [flags]
Options
--dry-run | |
Do not change any state, just output the actions that would be performed. | |
-h, --help | |
help for kubelet-config | |
--kubeconfig string Default: "/etc/kubernetes/admin.conf" | |
The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations can be searched for an existing kubeconfig file. |
Options inherited from parent commands
--rootfs string | |
[EXPERIMENTAL] The path to the 'real' host root filesystem. |
What's next
- kubeadm init to bootstrap a Kubernetes control-plane node
- kubeadm join to connect a node to the cluster
- kubeadm reset to revert any changes made to this host by
kubeadm init
orkubeadm join
- kubeadm upgrade to upgrade a kubeadm node
- kubeadm alpha to try experimental functionality
1.15 - Implementation details
Kubernetes v1.10 [stable]
kubeadm init
and kubeadm join
together provides a nice user experience for creating a best-practice but bare Kubernetes cluster from scratch.
However, it might not be obvious how kubeadm does that.
This document provides additional details on what happen under the hood, with the aim of sharing knowledge on Kubernetes cluster best practices.
Core design principles
The cluster that kubeadm init
and kubeadm join
set up should be:
- Secure: It should adopt latest best-practices like:
- enforcing RBAC
- using the Node Authorizer
- using secure communication between the control plane components
- using secure communication between the API server and the kubelets
- lock-down the kubelet API
- locking down access to the API for system components like the kube-proxy and CoreDNS
- locking down what a Bootstrap Token can access
- User-friendly: The user should not have to run anything more than a couple of commands:
kubeadm init
export KUBECONFIG=/etc/kubernetes/admin.conf
kubectl apply -f <network-of-choice.yaml>
kubeadm join --token <token> <endpoint>:<port>
- Extendable:
- It should not favor any particular network provider. Configuring the cluster network is out-of-scope
- It should provide the possibility to use a config file for customizing various parameters
Constants and well-known values and paths
In order to reduce complexity and to simplify development of higher level tools that build on top of kubeadm, it uses a limited set of constant values for well-known paths and file names.
The Kubernetes directory /etc/kubernetes
is a constant in the application, since it is clearly the given path
in a majority of cases, and the most intuitive location; other constants paths and file names are:
/etc/kubernetes/manifests
as the path where kubelet should look for static Pod manifests. Names of static Pod manifests are:etcd.yaml
kube-apiserver.yaml
kube-controller-manager.yaml
kube-scheduler.yaml
/etc/kubernetes/
as the path where kubeconfig files with identities for control plane components are stored. Names of kubeconfig files are:kubelet.conf
(bootstrap-kubelet.conf
during TLS bootstrap)controller-manager.conf
scheduler.conf
admin.conf
for the cluster admin and kubeadm itself
- Names of certificates and key files :
ca.crt
,ca.key
for the Kubernetes certificate authorityapiserver.crt
,apiserver.key
for the API server certificateapiserver-kubelet-client.crt
,apiserver-kubelet-client.key
for the client certificate used by the API server to connect to the kubelets securelysa.pub
,sa.key
for the key used by the controller manager when signing ServiceAccountfront-proxy-ca.crt
,front-proxy-ca.key
for the front proxy certificate authorityfront-proxy-client.crt
,front-proxy-client.key
for the front proxy client
kubeadm init workflow internal design
The kubeadm init
internal workflow consists of a sequence of atomic work tasks to perform,
as described in kubeadm init
.
The kubeadm init phase
command allows users to invoke each task individually, and ultimately offers a reusable and composable
API/toolbox that can be used by other Kubernetes bootstrap tools, by any IT automation tool or by an advanced user
for creating custom clusters.
Preflight checks
Kubeadm executes a set of preflight checks before starting the init, with the aim to verify preconditions and avoid common cluster startup problems.
The user can skip specific preflight checks or all of them with the --ignore-preflight-errors
option.
- [warning] If the Kubernetes version to use (specified with the
--kubernetes-version
flag) is at least one minor version higher than the kubeadm CLI version. - Kubernetes system requirements:
- if running on linux:
- [error] if Kernel is older than the minimum required version
- [error] if required cgroups subsystem aren't in set up
- if using docker:
- [warning/error] if Docker service does not exist, if it is disabled, if it is not active.
- [error] if Docker endpoint does not exist or does not work
- [warning] if docker version is not in the list of validated docker versions
- If using other cri engine:
- [error] if crictl socket does not answer
- if running on linux:
- [error] if user is not root
- [error] if the machine hostname is not a valid DNS subdomain
- [warning] if the host name cannot be reached via network lookup
- [error] if kubelet version is lower that the minimum kubelet version supported by kubeadm (current minor -1)
- [error] if kubelet version is at least one minor higher than the required controlplane version (unsupported version skew)
- [warning] if kubelet service does not exist or if it is disabled
- [warning] if firewalld is active
- [error] if API server bindPort or ports 10250/10251/10252 are used
- [Error] if
/etc/kubernetes/manifest
folder already exists and it is not empty - [Error] if
/proc/sys/net/bridge/bridge-nf-call-iptables
file does not exist/does not contain 1 - [Error] if advertise address is ipv6 and
/proc/sys/net/bridge/bridge-nf-call-ip6tables
does not exist/does not contain 1. - [Error] if swap is on
- [Error] if
conntrack
,ip
,iptables
,mount
,nsenter
commands are not present in the command path - [warning] if
ebtables
,ethtool
,socat
,tc
,touch
,crictl
commands are not present in the command path - [warning] if extra arg flags for API server, controller manager, scheduler contains some invalid options
- [warning] if connection to https://API.AdvertiseAddress:API.BindPort goes through proxy
- [warning] if connection to services subnet goes through proxy (only first address checked)
- [warning] if connection to Pods subnet goes through proxy (only first address checked)
- If external etcd is provided:
- [Error] if etcd version is older than the minimum required version
- [Error] if etcd certificates or keys are specified, but not provided
- If external etcd is NOT provided (and thus local etcd will be installed):
- [Error] if ports 2379 is used
- [Error] if Etcd.DataDir folder already exists and it is not empty
- If authorization mode is ABAC:
- [Error] if abac_policy.json does not exist
- If authorization mode is WebHook
- [Error] if webhook_authz.conf does not exist
Please note that:
- Preflight checks can be invoked individually with the
kubeadm init phase preflight
command
Generate the necessary certificates
Kubeadm generates certificate and private key pairs for different purposes:
- A self signed certificate authority for the Kubernetes cluster saved into
ca.crt
file andca.key
private key file - A serving certificate for the API server, generated using
ca.crt
as the CA, and saved intoapiserver.crt
file with its private keyapiserver.key
. This certificate should contain following alternative names:- The Kubernetes service's internal clusterIP (the first address in the services CIDR, e.g.
10.96.0.1
if service subnet is10.96.0.0/12
) - Kubernetes DNS names, e.g.
kubernetes.default.svc.cluster.local
if--service-dns-domain
flag value iscluster.local
, plus default DNS nameskubernetes.default.svc
,kubernetes.default
,kubernetes
- The node-name
- The
--apiserver-advertise-address
- Additional alternative names specified by the user
- The Kubernetes service's internal clusterIP (the first address in the services CIDR, e.g.
- A client certificate for the API server to connect to the kubelets securely, generated using
ca.crt
as the CA and saved intoapiserver-kubelet-client.crt
file with its private keyapiserver-kubelet-client.key
. This certificate should be in thesystem:masters
organization - A private key for signing ServiceAccount Tokens saved into
sa.key
file along with its public keysa.pub
- A certificate authority for the front proxy saved into
front-proxy-ca.crt
file with its keyfront-proxy-ca.key
- A client cert for the front proxy client, generate using
front-proxy-ca.crt
as the CA and saved intofront-proxy-client.crt
file with its private keyfront-proxy-client.key
Certificates are stored by default in /etc/kubernetes/pki
, but this directory is configurable using the --cert-dir
flag.
Please note that:
- If a given certificate and private key pair both exist, and its content is evaluated compliant with the above specs, the existing files will
be used and the generation phase for the given certificate skipped. This means the user can, for example, copy an existing CA to
/etc/kubernetes/pki/ca.{crt,key}
, and then kubeadm will use those files for signing the rest of the certs. See also using custom certificates - Only for the CA, it is possible to provide the
ca.crt
file but not theca.key
file, if all other certificates and kubeconfig files already are in place kubeadm recognize this condition and activates the ExternalCA , which also implies thecsrsigner
controller in controller-manager won't be started - If kubeadm is running in external CA mode; all the certificates must be provided by the user, because kubeadm cannot generate them by itself
- In case of kubeadm is executed in the
--dry-run
mode, certificates files are written in a temporary folder - Certificate generation can be invoked individually with the
kubeadm init phase certs all
command
Generate kubeconfig files for control plane components
Kubeadm generates kubeconfig files with identities for control plane components:
- A kubeconfig file for the kubelet to use during TLS bootstrap - /etc/kubernetes/bootstrap-kubelet.conf. Inside this file there is a bootstrap-token or embedded client certificates for authenticating this node with the cluster.
This client cert should:
- Be in the
system:nodes
organization, as required by the Node Authorization module - Have the Common Name (CN)
system:node:<hostname-lowercased>
- Be in the
- A kubeconfig file for controller-manager,
/etc/kubernetes/controller-manager.conf
; inside this file is embedded a client certificate with controller-manager identity. This client cert should have the CNsystem:kube-controller-manager
, as defined by default RBAC core components roles - A kubeconfig file for scheduler,
/etc/kubernetes/scheduler.conf
; inside this file is embedded a client certificate with scheduler identity. This client cert should have the CNsystem:kube-scheduler
, as defined by default RBAC core components roles
Additionally, a kubeconfig file for kubeadm itself and the admin is generated and saved into the /etc/kubernetes/admin.conf
file.
The "admin" here is defined as the actual person(s) that is administering the cluster and wants to have full control (root) over the cluster.
The embedded client certificate for admin should be in the system:masters
organization, as defined by default
RBAC user facing role bindings. It should also include a
CN. Kubeadm uses the kubernetes-admin
CN.
Please note that:
ca.crt
certificate is embedded in all the kubeconfig files.- If a given kubeconfig file exists, and its content is evaluated compliant with the above specs, the existing file will be used and the generation phase for the given kubeconfig skipped
- If kubeadm is running in ExternalCA mode, all the required kubeconfig must be provided by the user as well, because kubeadm cannot generate any of them by itself
- In case of kubeadm is executed in the
--dry-run
mode, kubeconfig files are written in a temporary folder - Kubeconfig files generation can be invoked individually with the
kubeadm init phase kubeconfig all
command
Generate static Pod manifests for control plane components
Kubeadm writes static Pod manifest files for control plane components to /etc/kubernetes/manifests
. The kubelet watches this directory for Pods to create on startup.
Static Pod manifest share a set of common properties:
- All static Pods are deployed on
kube-system
namespace - All static Pods get
tier:control-plane
andcomponent:{component-name}
labels - All static Pods use the
system-node-critical
priority class hostNetwork: true
is set on all static Pods to allow control plane startup before a network is configured; as a consequence:- The
address
that the controller-manager and the scheduler use to refer the API server is127.0.0.1
- If using a local etcd server,
etcd-servers
address will be set to127.0.0.1:2379
- The
- Leader election is enabled for both the controller-manager and the scheduler
- Controller-manager and the scheduler will reference kubeconfig files with their respective, unique identities
- All static Pods get any extra flags specified by the user as described in passing custom arguments to control plane components
- All static Pods get any extra Volumes specified by the user (Host path)
Please note that:
- All images will be pulled from k8s.gcr.io by default. See using custom images for customizing the image repository
- In case of kubeadm is executed in the
--dry-run
mode, static Pods files are written in a temporary folder - Static Pod manifest generation for control plane components can be invoked individually with the
kubeadm init phase control-plane all
command
API server
The static Pod manifest for the API server is affected by following parameters provided by the users:
- The
apiserver-advertise-address
andapiserver-bind-port
to bind to; if not provided, those value defaults to the IP address of the default network interface on the machine and port 6443 - The
service-cluster-ip-range
to use for services - If an external etcd server is specified, the
etcd-servers
address and related TLS settings (etcd-cafile
,etcd-certfile
,etcd-keyfile
); if an external etcd server is not be provided, a local etcd will be used (via host network) - If a cloud provider is specified, the corresponding
--cloud-provider
is configured, together with the--cloud-config
path if such file exists (this is experimental, alpha and will be removed in a future version)
Other API server flags that are set unconditionally are:
--insecure-port=0
to avoid insecure connections to the api server--enable-bootstrap-token-auth=true
to enable theBootstrapTokenAuthenticator
authentication module. See TLS Bootstrapping for more details--allow-privileged
totrue
(required e.g. by kube proxy)--requestheader-client-ca-file
tofront-proxy-ca.crt
--enable-admission-plugins
to:NamespaceLifecycle
e.g. to avoid deletion of system reserved namespacesLimitRanger
andResourceQuota
to enforce limits on namespacesServiceAccount
to enforce service account automationPersistentVolumeLabel
attaches region or zone labels to PersistentVolumes as defined by the cloud provider (This admission controller is deprecated and will be removed in a future version. It is not deployed by kubeadm by default with v1.9 onwards when not explicitly opting into usinggce
oraws
as cloud providers)DefaultStorageClass
to enforce default storage class onPersistentVolumeClaim
objectsDefaultTolerationSeconds
NodeRestriction
to limit what a kubelet can modify (e.g. only pods on this node)
--kubelet-preferred-address-types
toInternalIP,ExternalIP,Hostname;
this makeskubectl logs
and other API server-kubelet communication work in environments where the hostnames of the nodes aren't resolvable- Flags for using certificates generated in previous steps:
--client-ca-file
toca.crt
--tls-cert-file
toapiserver.crt
--tls-private-key-file
toapiserver.key
--kubelet-client-certificate
toapiserver-kubelet-client.crt
--kubelet-client-key
toapiserver-kubelet-client.key
--service-account-key-file
tosa.pub
--requestheader-client-ca-file
tofront-proxy-ca.crt
--proxy-client-cert-file
tofront-proxy-client.crt
--proxy-client-key-file
tofront-proxy-client.key
- Other flags for securing the front proxy (API Aggregation) communications:
--requestheader-username-headers=X-Remote-User
--requestheader-group-headers=X-Remote-Group
--requestheader-extra-headers-prefix=X-Remote-Extra-
--requestheader-allowed-names=front-proxy-client
Controller manager
The static Pod manifest for the API server is affected by following parameters provided by the users:
- If kubeadm is invoked specifying a
--pod-network-cidr
, the subnet manager feature required for some CNI network plugins is enabled by setting:--allocate-node-cidrs=true
--cluster-cidr
and--node-cidr-mask-size
flags according to the given CIDR
- If a cloud provider is specified, the corresponding
--cloud-provider
is specified, together with the--cloud-config
path if such configuration file exists (this is experimental, alpha and will be removed in a future version)
Other flags that are set unconditionally are:
--controllers
enabling all the default controllers plusBootstrapSigner
andTokenCleaner
controllers for TLS bootstrap. See TLS Bootstrapping for more details--use-service-account-credentials
totrue
- Flags for using certificates generated in previous steps:
--root-ca-file
toca.crt
--cluster-signing-cert-file
toca.crt
, if External CA mode is disabled, otherwise to""
--cluster-signing-key-file
toca.key
, if External CA mode is disabled, otherwise to""
--service-account-private-key-file
tosa.key
Scheduler
The static Pod manifest for the scheduler is not affected by parameters provided by the users.
Generate static Pod manifest for local etcd
If the user specified an external etcd this step will be skipped, otherwise kubeadm generates a static Pod manifest file for creating a local etcd instance running in a Pod with following attributes:
- listen on
localhost:2379
and useHostNetwork=true
- make a
hostPath
mount out from thedataDir
to the host's filesystem - Any extra flags specified by the user
Please note that:
- The etcd image will be pulled from
k8s.gcr.io
by default. See using custom images for customizing the image repository - in case of kubeadm is executed in the
--dry-run
mode, the etcd static Pod manifest is written in a temporary folder - Static Pod manifest generation for local etcd can be invoked individually with the
kubeadm init phase etcd local
command
Optional Dynamic Kubelet Configuration
To use this functionality call kubeadm alpha kubelet config enable-dynamic
. It writes the kubelet init configuration
into /var/lib/kubelet/config/init/kubelet
file.
The init configuration is used for starting the kubelet on this specific node, providing an alternative for the kubelet drop-in file; such configuration will be replaced by the kubelet base configuration as described in following steps. See set kubelet parameters via a config file for additional information.
Please note that:
- To make dynamic kubelet configuration work, flag
--dynamic-config-dir=/var/lib/kubelet/config/dynamic
should be specified in/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
- The kubelet configuration can be changed by passing a
KubeletConfiguration
object tokubeadm init
orkubeadm join
by using a configuration file--config some-file.yaml
. TheKubeletConfiguration
object can be separated from other objects such asInitConfiguration
using the---
separator. For more details have a look at thekubeadm config print-default
command.
For more details about the KubeletConfiguration
struct, take a look at the
KubeletConfiguration
reference.
Wait for the control plane to come up
kubeadm waits (upto 4m0s) until localhost:6443/healthz
(kube-apiserver liveness) returns ok
. However in order to detect
deadlock conditions, kubeadm fails fast if localhost:10255/healthz
(kubelet liveness) or
localhost:10255/healthz/syncloop
(kubelet readiness) don't return ok
within 40s and 60s respectively.
kubeadm relies on the kubelet to pull the control plane images and run them properly as static Pods. After the control plane is up, kubeadm completes the tasks described in following paragraphs.
(optional) Write base kubelet configuration
Kubernetes v1.11 [beta]
If kubeadm is invoked with --feature-gates=DynamicKubeletConfig
:
- Write the kubelet base configuration into the
kubelet-base-config-v1.9
ConfigMap in thekube-system
namespace - Creates RBAC rules for granting read access to that ConfigMap to all bootstrap tokens and all kubelet instances
(that is
system:bootstrappers:kubeadm:default-node-token
andsystem:nodes
groups) - Enable the dynamic kubelet configuration feature for the initial control-plane node by pointing
Node.spec.configSource
to the newly-created ConfigMap
Save the kubeadm ClusterConfiguration in a ConfigMap for later reference
kubeadm saves the configuration passed to kubeadm init
in a ConfigMap named kubeadm-config
under kube-system
namespace.
This will ensure that kubeadm actions executed in future (e.g kubeadm upgrade
) will be able to determine the actual/current cluster
state and make new decisions based on that data.
Please note that:
- Before saving the ClusterConfiguration, sensitive information like the token is stripped from the configuration
- Upload of control plane node configuration can be invoked individually with the
kubeadm init phase upload-config
command
Mark the node as control-plane
As soon as the control plane is available, kubeadm executes following actions:
- Labels the node as control-plane with
node-role.kubernetes.io/master=""
- Taints the node with
node-role.kubernetes.io/master:NoSchedule
Please note that:
- Mark control-plane phase phase can be invoked individually with the
kubeadm init phase mark-control-plane
command
Configure TLS-Bootstrapping for node joining
Kubeadm uses Authenticating with Bootstrap Tokens for joining new nodes to an existing cluster; for more details see also design proposal.
kubeadm init
ensures that everything is properly configured for this process, and this includes following steps as well as
setting API server and controller flags as already described in previous paragraphs.
Please note that:
- TLS bootstrapping for nodes can be configured with the
kubeadm init phase bootstrap-token
command, executing all the configuration steps described in following paragraphs; alternatively, each step can be invoked individually
Create a bootstrap token
kubeadm init
create a first bootstrap token, either generated automatically or provided by the user with the --token
flag; as documented
in bootstrap token specification, token should be saved as secrets with name bootstrap-token-<token-id>
under kube-system
namespace.
Please note that:
- The default token created by
kubeadm init
will be used to validate temporary user during TLS bootstrap process; those users will be member ofsystem:bootstrappers:kubeadm:default-node-token
group - The token has a limited validity, default 24 hours (the interval may be changed with the
—token-ttl
flag) - Additional tokens can be created with the
kubeadm token
command, that provide as well other useful functions for token management
Allow joining nodes to call CSR API
Kubeadm ensures that users in system:bootstrappers:kubeadm:default-node-token
group are able to access the certificate signing API.
This is implemented by creating a ClusterRoleBinding named kubeadm:kubelet-bootstrap
between the group above and the default
RBAC role system:node-bootstrapper
.
Setup auto approval for new bootstrap tokens
Kubeadm ensures that the Bootstrap Token will get its CSR request automatically approved by the csrapprover controller.
This is implemented by creating ClusterRoleBinding named kubeadm:node-autoapprove-bootstrap
between
the system:bootstrappers:kubeadm:default-node-token
group and the default role system:certificates.k8s.io:certificatesigningrequests:nodeclient
.
The role system:certificates.k8s.io:certificatesigningrequests:nodeclient
should be created as well, granting
POST permission to /apis/certificates.k8s.io/certificatesigningrequests/nodeclient
.
Setup nodes certificate rotation with auto approval
Kubeadm ensures that certificate rotation is enabled for nodes, and that new certificate request for nodes will get its CSR request automatically approved by the csrapprover controller.
This is implemented by creating ClusterRoleBinding named kubeadm:node-autoapprove-certificate-rotation
between the system:nodes
group
and the default role system:certificates.k8s.io:certificatesigningrequests:selfnodeclient
.
Create the public cluster-info ConfigMap
This phase creates the cluster-info
ConfigMap in the kube-public
namespace.
Additionally it creates a Role and a RoleBinding granting access to the ConfigMap for unauthenticated users
(i.e. users in RBAC group system:unauthenticated
).
Please note that:
- The access to the
cluster-info
ConfigMap is not rate-limited. This may or may not be a problem if you expose your cluster's API server to the internet; worst-case scenario here is a DoS attack where an attacker uses all the in-flight requests the kube-apiserver can handle to serving thecluster-info
ConfigMap.
Install addons
Kubeadm installs the internal DNS server and the kube-proxy addon components via the API server. Please note that:
- This phase can be invoked individually with the
kubeadm init phase addon all
command.
proxy
A ServiceAccount for kube-proxy
is created in the kube-system
namespace; then kube-proxy is deployed as a DaemonSet:
- The credentials (
ca.crt
andtoken
) to the control plane come from the ServiceAccount - The location (URL) of the API server comes from a ConfigMap
- The
kube-proxy
ServiceAccount is bound to the privileges in thesystem:node-proxier
ClusterRole
DNS
- In Kubernetes version 1.18 kube-dns usage with kubeadm is deprecated and will be removed in a future release
- The CoreDNS service is named
kube-dns
. This is done to prevent any interruption in service when the user is switching the cluster DNS from kube-dns to CoreDNS or vice-versa the--config
method described here - A ServiceAccount for CoreDNS/kube-dns is created in the
kube-system
namespace. - The
kube-dns
ServiceAccount is bound to the privileges in thesystem:kube-dns
ClusterRole
kubeadm join phases internal design
Similarly to kubeadm init
, also kubeadm join
internal workflow consists of a sequence of atomic work tasks to perform.
This is split into discovery (having the Node trust the Kubernetes Master) and TLS bootstrap (having the Kubernetes Master trust the Node).
see Authenticating with Bootstrap Tokens or the corresponding design proposal.
Preflight checks
kubeadm
executes a set of preflight checks before starting the join, with the aim to verify preconditions and avoid common
cluster startup problems.
Please note that:
kubeadm join
preflight checks are basically a subsetkubeadm init
preflight checks- Starting from 1.9, kubeadm provides better support for CRI-generic functionality; in that case, docker specific controls are skipped or replaced by similar controls for crictl.
- Starting from 1.9, kubeadm provides support for joining nodes running on Windows; in that case, linux specific controls are skipped.
- In any case the user can skip specific preflight checks (or eventually all preflight checks) with the
--ignore-preflight-errors
option.
Discovery cluster-info
There are 2 main schemes for discovery. The first is to use a shared token along with the IP address of the API server. The second is to provide a file (that is a subset of the standard kubeconfig file).
Shared token discovery
If kubeadm join
is invoked with --discovery-token
, token discovery is used; in this case the node basically retrieves
the cluster CA certificates from the cluster-info
ConfigMap in the kube-public
namespace.
In order to prevent "man in the middle" attacks, several steps are taken:
- First, the CA certificate is retrieved via insecure connection (this is possible because
kubeadm init
granted access tocluster-info
users forsystem:unauthenticated
) - Then the CA certificate goes trough following validation steps:
- Basic validation: using the token ID against a JWT signature
- Pub key validation: using provided
--discovery-token-ca-cert-hash
. This value is available in the output ofkubeadm init
or can be calculated using standard tools (the hash is calculated over the bytes of the Subject Public Key Info (SPKI) object as in RFC7469). The--discovery-token-ca-cert-hash flag
may be repeated multiple times to allow more than one public key. - As a additional validation, the CA certificate is retrieved via secure connection and then compared with the CA retrieved initially
Please note that:
- Pub key validation can be skipped passing
--discovery-token-unsafe-skip-ca-verification
flag; This weakens the kubeadm security model since others can potentially impersonate the Kubernetes Master.
File/https discovery
If kubeadm join
is invoked with --discovery-file
, file discovery is used; this file can be a local file or downloaded via an HTTPS URL; in case of HTTPS, the host installed CA bundle is used to verify the connection.
With file discovery, the cluster CA certificates is provided into the file itself; in fact, the discovery file is a kubeconfig
file with only server
and certificate-authority-data
attributes set, as described in kubeadm join
reference doc;
when the connection with the cluster is established, kubeadm try to access the cluster-info
ConfigMap, and if available, uses it.
TLS Bootstrap
Once the cluster info are known, the file bootstrap-kubelet.conf
is written, thus allowing kubelet to do TLS Bootstrapping.
The TLS bootstrap mechanism uses the shared token to temporarily authenticate with the Kubernetes API server to submit a certificate signing request (CSR) for a locally created key pair.
The request is then automatically approved and the operation completes saving ca.crt
file and kubelet.conf
file to be used
by kubelet for joining the cluster, whilebootstrap-kubelet.conf
is deleted.
Please note that:
- The temporary authentication is validated against the token saved during the
kubeadm init
process (or with additional tokens created withkubeadm token
) - The temporary authentication resolve to a user member of
system:bootstrappers:kubeadm:default-node-token
group which was granted access to CSR api during thekubeadm init
process - The automatic CSR approval is managed by the csrapprover controller, according with configuration done the
kubeadm init
process
(optional) Write init kubelet configuration
Kubernetes v1.11 [beta]
If kubeadm is invoked with --feature-gates=DynamicKubeletConfig
:
- Read the kubelet base configuration from the
kubelet-base-config-v1.x
ConfigMap in thekube-system
namespace using the Bootstrap Token credentials, and write it to disk as kubelet init configuration file/var/lib/kubelet/config/init/kubelet
- As soon as kubelet starts with the Node's own credential (
/etc/kubernetes/kubelet.conf
), update current node configuration specifying that the source for the node/kubelet configuration is the above ConfigMap.
Please note that:
- To make dynamic kubelet configuration work, flag
--dynamic-config-dir=/var/lib/kubelet/config/dynamic
should be specified in/etc/systemd/system/kubelet.service.d/10-kubeadm.conf