Compare commits

...

26 Commits

Author SHA1 Message Date
Kubernetes Prow Robot 552925f112 Merge pull request #35229 from sethmccombs/merged-main-dev-1.25
Merge main into dev-1.25 branch: July 21st
2022-07-27 09:30:29 -07:00
Seth McCombs 88784d31b8 Merge remote-tracking branch 'upstream/main' into dev-1.25 2022-07-21 13:48:12 -07:00
Kubernetes Prow Robot b61dfcd181 Merge pull request #35121 from saschagrunert/dev-1.25
Improve 'Seccomp defaulting' feature name
2022-07-19 01:26:05 -07:00
Sascha Grunert 641a8e2c0c Improve 'Seccomp defaulting' feature name
We're now rephrasing those two paragraphs to avoid confusing readers.

Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
2022-07-19 09:03:20 +02:00
Kubernetes Prow Robot 27658d9a9b Merge pull request #35047 from chetak123/dev-1.25
Remove list of container runtimes tested with v1.24
2022-07-17 05:15:19 -07:00
Kubernetes Prow Robot 6effba1cae Merge pull request #34640 from saschagrunert/seccomp-default-beta
Graduate SeccompDefault feature to beta
2022-07-16 06:52:53 -07:00
Ayushman Mishra 5246ba43a9 Remove list of container runtimes tested with v1.24 2022-07-15 12:23:27 +05:30
Kubernetes Prow Robot f61e010b89 Merge pull request #34966 from krol3/merged-main-dev-1.25
Sync main branch into dev-1.25
2022-07-13 07:37:38 -07:00
Kubernetes Prow Robot 40fd3b8281 Merge pull request #34259 from neolit123/1.25-add-kubeletconfig-patches
kubeadm: document the option to use kubeletconfiguration patches
2022-07-11 08:31:48 -07:00
Kubernetes Prow Robot 1ed3e1f88f Merge pull request #34159 from neolit123/1.25-update-unversioned-kubelet-config-map-fg-info
kubeadm: update unversioned kubelet config map fg info
2022-07-10 18:31:47 -07:00
Kubernetes Prow Robot c61bd66b64 Merge pull request #34163 from neolit123/1.25-kubeadm-update-registry-k8s-io
update kubeadm pages to use registry.k8s.io
2022-07-08 18:39:46 -07:00
Kubernetes Prow Robot 6f990d1c06 Merge pull request #34836 from cathchu/merged-main-dev-1.25
Merged main dev 1.25: July 5th
2022-07-05 21:06:50 -07:00
Catherine Chu 80069422a7 Merge remote-tracking branch 'upstream/main' into dev-1.25 2022-07-05 15:43:08 -07:00
Sascha Grunert 5d66e4b0d2 Graduate SeccompDefault feature to beta
We now update the documentation to reflect the current state of the
feature.

Refers to: https://github.com/kubernetes/enhancements/issues/2413

Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
Co-authored-by: Tim Bannister <tim@scalefactory.com>
Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
2022-06-29 15:31:48 +02:00
Kubernetes Prow Robot 0d218fc6be Merge pull request #34539 from didicodes/merged-main-dev-1.25
Merged main into dev-1.25
2022-06-28 14:05:34 -07:00
Lubomir I. Ivanov 92e5fc8f69 Update content/en/docs/setup/production-environment/tools/kubeadm/kubelet-integration.md
Co-authored-by: Rey Lejano <rlejano@gmail.com>
2022-06-28 00:03:45 +03:00
Kubernetes Prow Robot eddcffeccd Merge pull request #33834 from neolit123/1.25-cleanup-kubeadm-master-taint
kubeadm: apply changes around "master" taint for 1.25
2022-06-23 18:39:20 -07:00
Edidiong Asikpo d1847d5a4d Merge remote-tracking branch 'upstream/main' into dev-1.25 2022-06-23 18:39:26 +01:00
Kubernetes Prow Robot fdc9cc8041 Merge pull request #34292 from kcmartin/config-toml-1.25
update config.toml for 1.25 release
2022-06-14 22:59:17 -07:00
Kristin Martin cac34962eb Remove 1.20 params block 2022-06-14 18:30:22 -07:00
Kristin Martin 355413fc4b update config.toml for 1.25 release 2022-06-14 16:03:26 -07:00
Lubomir I. Ivanov fefcf46922 kubeadm: document the option to use kubeletconfiguration patches
The 'kubeletconfiguration' patch target is a new one in 1.25.
It allows to apply instance-specific configuration to
kubelets in a kubeadm cluster by patching the base KubeletConfiguration
object that is shared by all nodes.
2022-06-13 15:43:44 +03:00
Lubomir I. Ivanov 90dc4e70a6 kubeadm-init.md: adjust info for UnversionedKubeletConfigMap
The feature gate goes GA in 1.25 and becomes locked by
default to "enabled".
2022-06-13 14:53:28 +03:00
Lubomir I. Ivanov edb74f1dec update kubeadm pages to use registry.k8s.io
k8s.gcr.io is a deprecated in favor of registry.k8s.io.
The kubeadm code in k/k was already changed to use the
new domain name.
2022-06-07 17:01:01 +03:00
Lubomir I. Ivanov ed9ea9c4f2 kubeadm: apply changes around "master" taint for 1.25
The "master" taint is no longer applied on control plane
nodes by kubeadm 1.25.

Remove mentions of the taint from the documentation:
- implementation details
- create a kubeadm cluster
- known labels / taints
2022-05-19 22:13:09 +03:00
Nate W 9213f0775f Tracking commit for v1.25 docs 2022-05-03 17:13:38 -07:00
13 changed files with 97 additions and 110 deletions
+19 -19
View File
@@ -139,10 +139,10 @@ time_format_default = "January 02, 2006 at 3:04 PM PST"
description = "Production-Grade Container Orchestration" description = "Production-Grade Container Orchestration"
showedit = true showedit = true
latest = "v1.24" latest = "v1.25"
fullversion = "v1.24.0" fullversion = "v1.25.0"
version = "v1.24" version = "v1.25"
githubbranch = "main" githubbranch = "main"
docsbranch = "main" docsbranch = "main"
deprecated = false deprecated = false
@@ -179,40 +179,40 @@ js = [
] ]
[[params.versions]] [[params.versions]]
fullversion = "v1.24.0" fullversion = "v1.25.0"
version = "v1.24" version = "v1.25"
githubbranch = "v1.24.0" githubbranch = "v1.25.0"
docsbranch = "main" docsbranch = "main"
url = "https://kubernetes.io" url = "https://kubernetes.io"
[[params.versions]] [[params.versions]]
fullversion = "v1.23.6" fullversion = "v1.24.2"
version = "v1.24"
githubbranch = "v1.24.2"
docsbranch = "release-1.24"
url = "https://v1-24.docs.kubernetes.io"
[[params.versions]]
fullversion = "v1.23.8"
version = "v1.23" version = "v1.23"
githubbranch = "v1.23.6" githubbranch = "v1.23.8"
docsbranch = "release-1.23" docsbranch = "release-1.23"
url = "https://v1-23.docs.kubernetes.io" url = "https://v1-23.docs.kubernetes.io"
[[params.versions]] [[params.versions]]
fullversion = "v1.22.9" fullversion = "v1.22.11"
version = "v1.22" version = "v1.22"
githubbranch = "v1.22.9" githubbranch = "v1.22.11"
docsbranch = "release-1.22" docsbranch = "release-1.22"
url = "https://v1-22.docs.kubernetes.io" url = "https://v1-22.docs.kubernetes.io"
[[params.versions]] [[params.versions]]
fullversion = "v1.21.12" fullversion = "v1.21.14"
version = "v1.21" version = "v1.21"
githubbranch = "v1.21.12" githubbranch = "v1.21.14"
docsbranch = "release-1.21" docsbranch = "release-1.21"
url = "https://v1-21.docs.kubernetes.io" url = "https://v1-21.docs.kubernetes.io"
[[params.versions]]
fullversion = "v1.20.15"
version = "v1.20"
githubbranch = "v1.20.15"
docsbranch = "release-1.20"
url = "https://v1-20.docs.kubernetes.io"
# User interface configuration # User interface configuration
[params.ui] [params.ui]
# Enable to show the side bar menu in its compact state. # Enable to show the side bar menu in its compact state.
@@ -178,7 +178,8 @@ different Kubernetes components.
| `RemainingItemCount` | `true` | Beta | 1.16 | | | `RemainingItemCount` | `true` | Beta | 1.16 | |
| `RotateKubeletServerCertificate` | `false` | Alpha | 1.7 | 1.11 | | `RotateKubeletServerCertificate` | `false` | Alpha | 1.7 | 1.11 |
| `RotateKubeletServerCertificate` | `true` | Beta | 1.12 | | | `RotateKubeletServerCertificate` | `true` | Beta | 1.12 | |
| `SeccompDefault` | `false` | Alpha | 1.22 | | | `SeccompDefault` | `false` | Alpha | 1.22 | 1.24 |
| `SeccompDefault` | `true` | Beta | 1.25 | |
| `ServerSideFieldValidation` | `false` | Alpha | 1.23 | - | | `ServerSideFieldValidation` | `false` | Alpha | 1.23 | - |
| `ServiceInternalTrafficPolicy` | `false` | Alpha | 1.21 | 1.21 | | `ServiceInternalTrafficPolicy` | `false` | Alpha | 1.21 | 1.21 |
| `ServiceInternalTrafficPolicy` | `true` | Beta | 1.22 | | | `ServiceInternalTrafficPolicy` | `true` | Beta | 1.22 | |
@@ -511,9 +511,9 @@ The kubelet checks D-value of the size of `/proc/sys/kernel/pid_max` and the PID
Example: `node.kubernetes.io/out-of-service:NoExecute` Example: `node.kubernetes.io/out-of-service:NoExecute`
A user can manually add the taint to a Node marking it out-of-service. If the `NodeOutOfServiceVolumeDetach` A user can manually add the taint to a Node marking it out-of-service. If the `NodeOutOfServiceVolumeDetach`
[feature gate](/docs/reference/command-line-tools-reference/feature-gates/) is enabled on [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) is enabled on
`kube-controller-manager`, and a Node is marked out-of-service with this taint, the pods on the node will be forcefully deleted if there are no matching tolerations on it and volume detach operations for the pods terminating on the node will happen immediately. This allows the Pods on the out-of-service node to recover quickly on a different node. `kube-controller-manager`, and a Node is marked out-of-service with this taint, the pods on the node will be forcefully deleted if there are no matching tolerations on it and volume detach operations for the pods terminating on the node will happen immediately. This allows the Pods on the out-of-service node to recover quickly on a different node.
{{< caution >}} {{< caution >}}
Refer to Refer to
@@ -645,7 +645,7 @@ This determines whether a user can modify the mode of the source volume when a
{{< glossary_tooltip text="PersistentVolumeClaim" term_id="persistent-volume-claim" >}} is being {{< glossary_tooltip text="PersistentVolumeClaim" term_id="persistent-volume-claim" >}} is being
created from a VolumeSnapshot. created from a VolumeSnapshot.
Refer to [Converting the volume mode of a Snapshot](/docs/concepts/storage/volume-snapshots/#convert-volume-mode) Refer to [Converting the volume mode of a Snapshot](/docs/concepts/storage/volume-snapshots/#convert-volume-mode)
and the [Kubernetes CSI Developer Documentation](https://kubernetes-csi.github.io/docs/) for more information. and the [Kubernetes CSI Developer Documentation](https://kubernetes-csi.github.io/docs/) for more information.
## Annotations used for audit ## Annotations used for audit
@@ -713,14 +713,3 @@ Used on: Node
Example: `node-role.kubernetes.io/control-plane:NoSchedule` Example: `node-role.kubernetes.io/control-plane:NoSchedule`
Taint that kubeadm applies on control plane nodes to allow only critical workloads to schedule on them. Taint that kubeadm applies on control plane nodes to allow only critical workloads to schedule on them.
### node-role.kubernetes.io/master
Used on: Node
Example: `node-role.kubernetes.io/master:NoSchedule`
Taint that kubeadm applies on control plane nodes to allow only critical workloads to schedule on them.
{{< note >}} Starting in v1.20, this taint is deprecated in favor of `node-role.kubernetes.io/control-plane`
and will be removed in v1.25.{{< /note >}}
@@ -199,7 +199,7 @@ Static Pod manifest share a set of common properties:
Please note that: Please note that:
1. All images will be pulled from k8s.gcr.io by default. See [using custom images](/docs/reference/setup-tools/kubeadm/kubeadm-init/#custom-images) for customizing the image repository 1. All images will be pulled from registry.k8s.io by default. See [using custom images](/docs/reference/setup-tools/kubeadm/kubeadm-init/#custom-images) for customizing the image repository
2. In case of kubeadm is executed in the `--dry-run` mode, static Pods files are written in a temporary folder 2. In case of kubeadm is executed in the `--dry-run` mode, static Pods files are written in a temporary folder
3. Static Pod manifest generation for control plane components can be invoked individually with the [`kubeadm init phase control-plane all`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-control-plane) command 3. Static Pod manifest generation for control plane components can be invoked individually with the [`kubeadm init phase control-plane all`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-control-plane) command
@@ -289,7 +289,7 @@ a local etcd instance running in a Pod with following attributes:
Please note that: Please note that:
1. The etcd image will be pulled from `k8s.gcr.io` by default. See [using custom images](/docs/reference/setup-tools/kubeadm/kubeadm-init/#custom-images) for customizing the image repository 1. The etcd image will be pulled from `registry.k8s.io` by default. See [using custom images](/docs/reference/setup-tools/kubeadm/kubeadm-init/#custom-images) for customizing the image repository
2. in case of kubeadm is executed in the `--dry-run` mode, the etcd static Pod manifest is written in a temporary folder 2. in case of kubeadm is executed in the `--dry-run` mode, the etcd static Pod manifest is written in a temporary folder
3. Static Pod manifest generation for local etcd can be invoked individually with the [`kubeadm init phase etcd local`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-etcd) command 3. Static Pod manifest generation for local etcd can be invoked individually with the [`kubeadm init phase etcd local`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-etcd) command
@@ -319,12 +319,10 @@ Please note that:
As soon as the control plane is available, kubeadm executes following actions: As soon as the control plane is available, kubeadm executes following actions:
- Labels the node as control-plane with `node-role.kubernetes.io/control-plane=""` - Labels the node as control-plane with `node-role.kubernetes.io/control-plane=""`
- Taints the node with `node-role.kubernetes.io/master:NoSchedule` and `node-role.kubernetes.io/control-plane:NoSchedule` - Taints the node with `node-role.kubernetes.io/control-plane:NoSchedule`
Please note that: Please note that the phase to mark the control-plane phase phase can be invoked
individually with the [`kubeadm init phase mark-control-plane`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-mark-control-plane) command.
1. The `node-role.kubernetes.io/master` taint is deprecated and will be removed in kubeadm version 1.25
1. Mark control-plane phase phase can be invoked individually with the [`kubeadm init phase mark-control-plane`](/docs/reference/setup-tools/kubeadm/kubeadm-init-phase/#cmd-phase-mark-control-plane) command
### Configure TLS-Bootstrapping for node joining ### Configure TLS-Bootstrapping for node joining
@@ -155,15 +155,15 @@ directly to kubeadm is not supported. Instead, it is possible to pass them by
List of feature gates: List of feature gates:
{{< table caption="kubeadm feature gates" >}} {{< table caption="kubeadm feature gates" >}}
Feature | Default | Alpha | Beta Feature | Default | Alpha | Beta | GA
:-------|:--------|:------|:----- :-------|:--------|:------|:-----|:----
`PublicKeysECDSA` | `false` | 1.19 | - `PublicKeysECDSA` | `false` | 1.19 | - | -
`RootlessControlPlane` | `false` | 1.22 | - `RootlessControlPlane` | `false` | 1.22 | - | -
`UnversionedKubeletConfigMap` | `true` | 1.22 | 1.23 `UnversionedKubeletConfigMap` | `true` | 1.22 | 1.23 | 1.25
{{< /table >}} {{< /table >}}
{{< note >}} {{< note >}}
Once a feature gate goes GA it is removed from this list as its value becomes locked to `true` by default. Once a feature gate goes GA its value becomes locked to `true` by default.
{{< /note >}} {{< /note >}}
Feature gate descriptions: Feature gate descriptions:
@@ -189,10 +189,6 @@ or `kubeadm upgrade apply`), kubeadm respects the value of `UnversionedKubeletCo
(during `kubeadm join`, `kubeadm reset`, `kubeadm upgrade ...`), kubeadm attempts to use unversioned ConfigMap name first; (during `kubeadm join`, `kubeadm reset`, `kubeadm upgrade ...`), kubeadm attempts to use unversioned ConfigMap name first;
if that does not succeed, kubeadm falls back to using the legacy (versioned) name for that ConfigMap. if that does not succeed, kubeadm falls back to using the legacy (versioned) name for that ConfigMap.
{{< note >}}
Setting `UnversionedKubeletConfigMap` to `false` is supported but **deprecated**.
{{< /note >}}
### Adding kube-proxy parameters {#kube-proxy} ### Adding kube-proxy parameters {#kube-proxy}
For information about kube-proxy parameters in the kubeadm configuration see: For information about kube-proxy parameters in the kubeadm configuration see:
@@ -220,11 +216,11 @@ kubeadm config images pull
You can pass `--config` to the above commands with a [kubeadm configuration file](#config-file) You can pass `--config` to the above commands with a [kubeadm configuration file](#config-file)
to control the `kubernetesVersion` and `imageRepository` fields. to control the `kubernetesVersion` and `imageRepository` fields.
All default `k8s.gcr.io` images that kubeadm requires support multiple architectures. All default `registry.k8s.io` images that kubeadm requires support multiple architectures.
### Using custom images {#custom-images} ### Using custom images {#custom-images}
By default, kubeadm pulls images from `k8s.gcr.io`. If the By default, kubeadm pulls images from `registry.k8s.io`. If the
requested Kubernetes version is a CI label (such as `ci/latest`) requested Kubernetes version is a CI label (such as `ci/latest`)
`gcr.io/k8s-staging-ci-images` is used. `gcr.io/k8s-staging-ci-images` is used.
@@ -233,18 +229,18 @@ Allowed customization are:
* To provide `kubernetesVersion` which affects the version of the images. * To provide `kubernetesVersion` which affects the version of the images.
* To provide an alternative `imageRepository` to be used instead of * To provide an alternative `imageRepository` to be used instead of
`k8s.gcr.io`. `registry.k8s.io`.
* To provide a specific `imageRepository` and `imageTag` for etcd or CoreDNS. * To provide a specific `imageRepository` and `imageTag` for etcd or CoreDNS.
Image paths between the default `k8s.gcr.io` and a custom repository specified using Image paths between the default `registry.k8s.io` and a custom repository specified using
`imageRepository` may differ for backwards compatibility reasons. For example, `imageRepository` may differ for backwards compatibility reasons. For example,
one image might have a subpath at `k8s.gcr.io/subpath/image`, but be defaulted one image might have a subpath at `registry.k8s.io/subpath/image`, but be defaulted
to `my.customrepository.io/image` when using a custom repository. to `my.customrepository.io/image` when using a custom repository.
To ensure you push the images to your custom repository in paths that kubeadm To ensure you push the images to your custom repository in paths that kubeadm
can consume, you must: can consume, you must:
* Pull images from the defaults paths at `k8s.gcr.io` using `kubeadm config images {list|pull}`. * Pull images from the defaults paths at `registry.k8s.io` using `kubeadm config images {list|pull}`.
* Push images to the paths from `kubeadm config images list --config=config.yaml`, * Push images to the paths from `kubeadm config images list --config=config.yaml`,
where `config.yaml` contains the custom `imageRepository`, and/or `imageTag` where `config.yaml` contains the custom `imageRepository`, and/or `imageTag`
for etcd and CoreDNS. for etcd and CoreDNS.
@@ -134,13 +134,13 @@ etcd:
election-timeout: 1000 election-timeout: 1000
``` ```
## Customizing the control plane with patches {#patches} ## Customizing with patches {#patches}
{{< feature-state for_k8s_version="v1.22" state="beta" >}} {{< feature-state for_k8s_version="v1.22" state="beta" >}}
Kubeadm allows you to pass a directory with patch files to `InitConfiguration` and `JoinConfiguration` Kubeadm allows you to pass a directory with patch files to `InitConfiguration` and `JoinConfiguration`
on individual nodes. These patches can be used as the last customization step before the control on individual nodes. These patches can be used as the last customization step before component configuration
plane component manifests are written to disk. is written to disk.
You can pass this file to `kubeadm init` with `--config <YOUR CONFIG YAML>`: You can pass this file to `kubeadm init` with `--config <YOUR CONFIG YAML>`:
@@ -168,7 +168,8 @@ patches:
The directory must contain files named `target[suffix][+patchtype].extension`. The directory must contain files named `target[suffix][+patchtype].extension`.
For example, `kube-apiserver0+merge.yaml` or just `etcd.json`. For example, `kube-apiserver0+merge.yaml` or just `etcd.json`.
- `target` can be one of `kube-apiserver`, `kube-controller-manager`, `kube-scheduler` and `etcd`. - `target` can be one of `kube-apiserver`, `kube-controller-manager`, `kube-scheduler`, `etcd`
and `kubeletconfiguration`.
- `patchtype` can be one of `strategic`, `merge` or `json` and these must match the patching formats - `patchtype` can be one of `strategic`, `merge` or `json` and these must match the patching formats
[supported by kubectl](/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch). [supported by kubectl](/docs/tasks/manage-kubernetes-objects/update-api-object-kubectl-patch).
The default `patchtype` is `strategic`. The default `patchtype` is `strategic`.
@@ -183,20 +184,22 @@ flag, which must point to the same directory. `kubeadm upgrade` currently does n
API structure that can be used for the same purpose. API structure that can be used for the same purpose.
{{< /note >}} {{< /note >}}
## Customizing the kubelet ## Customizing the kubelet {#kubelet}
To customize the kubelet you can add a `KubeletConfiguration` next to the `ClusterConfiguration` or To customize the kubelet you can add a [`KubeletConfiguration`](/docs/reference/config-api/kubelet-config.v1beta1/)
`InitConfiguration` separated by `---` within the same configuration file. This file can then be passed to `kubeadm init`. next to the `ClusterConfiguration` or `InitConfiguration` separated by `---` within the same configuration file.
This file can then be passed to `kubeadm init` and kubeadm will apply the same base `KubeletConfiguration`
to all nodes in the cluster.
{{< note >}} For applying instance-specific configuration over the base `KubeletConfiguration` you can use the
kubeadm applies the same `KubeletConfiguration` to all nodes in the cluster. To apply node [`kubeletconfiguration` patch target](#patches).
specific settings you can use kubelet flags as overrides by passing them in the `nodeRegistration.kubeletExtraArgs`
field supported by both `InitConfiguration` and `JoinConfiguration`. Some kubelet flags are deprecated,
so check their status in the [kubelet reference documentation](/docs/reference/command-line-tools-reference/kubelet)
before using them.
{{< /note >}}
For more details see [Configuring each kubelet in your cluster using kubeadm](/docs/setup/production-environment/tools/kubeadm/kubelet-integration) Alternatively, you can use kubelet flags as overrides by passing them in the
`nodeRegistration.kubeletExtraArgs` field supported by both `InitConfiguration` and `JoinConfiguration`.
Some kubelet flags are deprecated, so check their status in the
[kubelet reference documentation](/docs/reference/command-line-tools-reference/kubelet) before using them.
For additional details see [Configuring each kubelet in your cluster using kubeadm](/docs/setup/production-environment/tools/kubeadm/kubelet-integration)
## Customizing kube-proxy ## Customizing kube-proxy
@@ -88,7 +88,7 @@ After you initialize your control-plane, the kubelet runs normally.
### Preparing the required container images ### Preparing the required container images
This step is optional and only applies in case you wish `kubeadm init` and `kubeadm join` This step is optional and only applies in case you wish `kubeadm init` and `kubeadm join`
to not download the default container images which are hosted at `k8s.gcr.io`. to not download the default container images which are hosted at `registry.k8s.io`.
Kubeadm has commands that can help you pre-pull the required images Kubeadm has commands that can help you pre-pull the required images
when creating a cluster without an internet connection on its nodes. when creating a cluster without an internet connection on its nodes.
@@ -305,7 +305,7 @@ reasons. If you want to be able to schedule Pods on the control plane nodes,
for example for a single machine Kubernetes cluster, run: for example for a single machine Kubernetes cluster, run:
```bash ```bash
kubectl taint nodes --all node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master- kubectl taint nodes --all node-role.kubernetes.io/control-plane-
``` ```
The output will look something like: The output will look something like:
@@ -315,14 +315,9 @@ node "test-01" untainted
... ...
``` ```
This will remove the `node-role.kubernetes.io/control-plane` and This will remove the `node-role.kubernetes.io/control-plane:NoSchedule` taint
`node-role.kubernetes.io/master` taints from any nodes that have them, from any nodes that have it, including the control plane nodes, meaning that the
including the control plane nodes, meaning that the scheduler will then be able scheduler will then be able to schedule Pods everywhere.
to schedule Pods everywhere.
{{< note >}}
The `node-role.kubernetes.io/master` taint is deprecated and kubeadm will stop using it in version 1.25.
{{< /note >}}
### Joining your nodes {#join-nodes} ### Joining your nodes {#join-nodes}
@@ -97,7 +97,7 @@ _See [External etcd topology](/docs/setup/production-environment/tools/kubeadm/h
### Container images ### Container images
Each host should have access read and fetch images from the Kubernetes container image registry, `k8s.gcr.io`. Each host should have access read and fetch images from the Kubernetes container image registry, `registry.k8s.io`.
If you want to deploy a highly-available cluster where the hosts do not have access to pull images, this is possible. You must ensure by some other means that the correct container images are already available on the relevant hosts. If you want to deploy a highly-available cluster where the hosts do not have access to pull images, this is possible. You must ensure by some other means that the correct container images are already available on the relevant hosts.
### Command line interface {#kubectl} ### Command line interface {#kubectl}
@@ -226,8 +226,8 @@ option. Your cluster requirements may need a different configuration.
As stated in the command output, the certificate key gives access to cluster sensitive data, keep it secret! As stated in the command output, the certificate key gives access to cluster sensitive data, keep it secret!
{{< /caution >}} {{< /caution >}}
1. Apply the CNI plugin of your choice: 1. Apply the CNI plugin of your choice:
[Follow these instructions](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network) [Follow these instructions](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network)
to install the CNI provider. Make sure the configuration corresponds to the Pod CIDR specified in the to install the CNI provider. Make sure the configuration corresponds to the Pod CIDR specified in the
kubeadm configuration file (if applicable). kubeadm configuration file (if applicable).
@@ -87,20 +87,21 @@ networking, or other host-specific parameters. The following list provides a few
- To specify the container runtime you must set its endpoint with the - To specify the container runtime you must set its endpoint with the
`--container-runtime-endpoint=<path>` flag. `--container-runtime-endpoint=<path>` flag.
You can specify these flags by configuring an individual kubelet's configuration in your service manager, The recommended way of applying such instance-specific configuration is by using
such as systemd. [`KubeletConfiguration` patches](/docs/setup/production-environment/tools/kubeadm/control-plane-flags#patches).
## Configure kubelets using kubeadm ## Configure kubelets using kubeadm
It is possible to configure the kubelet that kubeadm will start if a custom `KubeletConfiguration` It is possible to configure the kubelet that kubeadm will start if a custom
[`KubeletConfiguration`](/docs/reference/config-api/kubelet-config.v1beta1/)
API object is passed with a configuration file like so `kubeadm ... --config some-config-file.yaml`. API object is passed with a configuration file like so `kubeadm ... --config some-config-file.yaml`.
By calling `kubeadm config print init-defaults --component-configs KubeletConfiguration` you can By calling `kubeadm config print init-defaults --component-configs KubeletConfiguration` you can
see all the default values for this structure. see all the default values for this structure.
Also have a look at the It is also possible to apply instance-specific patches over the base `KubeletConfiguration`.
[reference for the KubeletConfiguration](/docs/reference/config-api/kubelet-config.v1beta1/) Have a look at [Customizing the kubelet](/docs/setup/production-environment/tools/kubeadm/control-plane-flags#customizing-the-kubelet)
for more information on the individual fields. for more details.
### Workflow when using `kubeadm init` ### Workflow when using `kubeadm init`
@@ -31,7 +31,7 @@ etcd cluster of three members that can be used by kubeadm during cluster creatio
the kubeadm config file. the kubeadm config file.
* Each host must have systemd and a bash compatible shell installed. * Each host must have systemd and a bash compatible shell installed.
* Each host must [have a container runtime, kubelet, and kubeadm installed](/docs/setup/production-environment/tools/kubeadm/install-kubeadm/). * Each host must [have a container runtime, kubelet, and kubeadm installed](/docs/setup/production-environment/tools/kubeadm/install-kubeadm/).
* Each host should have access to the Kubernetes container image registry (`k8s.gcr.io`) or list/pull the required etcd image using * Each host should have access to the Kubernetes container image registry (`registry.k8s.io`) or list/pull the required etcd image using
`kubeadm config images list/pull`. This guide will setup etcd instances as `kubeadm config images list/pull`. This guide will setup etcd instances as
[static pods](/docs/tasks/configure-pod-container/static-pod/) managed by a kubelet. [static pods](/docs/tasks/configure-pod-container/static-pod/) managed by a kubelet.
* Some infrastructure to copy files between hosts. For example `ssh` and `scp` * Some infrastructure to copy files between hosts. For example `ssh` and `scp`
@@ -276,7 +276,7 @@ on Kubernetes dual-stack support see [Dual-stack support with kubeadm](/docs/set
```sh ```sh
docker run --rm -it \ docker run --rm -it \
--net host \ --net host \
-v /etc/kubernetes:/etc/kubernetes k8s.gcr.io/etcd:${ETCD_TAG} etcdctl \ -v /etc/kubernetes:/etc/kubernetes registry.k8s.io/etcd:${ETCD_TAG} etcdctl \
--cert /etc/kubernetes/pki/etcd/peer.crt \ --cert /etc/kubernetes/pki/etcd/peer.crt \
--key /etc/kubernetes/pki/etcd/peer.key \ --key /etc/kubernetes/pki/etcd/peer.key \
--cacert /etc/kubernetes/pki/etcd/ca.crt \ --cacert /etc/kubernetes/pki/etcd/ca.crt \
@@ -351,7 +351,7 @@ A known solution is to patch the kube-proxy DaemonSet to allow scheduling it on
nodes regardless of their conditions, keeping it off of other nodes until their initial guarding nodes regardless of their conditions, keeping it off of other nodes until their initial guarding
conditions abate: conditions abate:
``` ```
kubectl -n kube-system patch ds kube-proxy -p='{ "spec": { "template": { "spec": { "tolerations": [ { "key": "CriticalAddonsOnly", "operator": "Exists" }, { "effect": "NoSchedule", "key": "node-role.kubernetes.io/master" }, { "effect": "NoSchedule", "key": "node-role.kubernetes.io/control-plane" } ] } } } }' kubectl -n kube-system patch ds kube-proxy -p='{ "spec": { "template": { "spec": { "tolerations": [ { "key": "CriticalAddonsOnly", "operator": "Exists" }, { "effect": "NoSchedule", "key": "node-role.kubernetes.io/control-plane" } ] } } } }'
``` ```
The tracking issue for this problem is [here](https://github.com/kubernetes/kubeadm/issues/1027). The tracking issue for this problem is [here](https://github.com/kubernetes/kubeadm/issues/1027).
@@ -13,11 +13,6 @@ To avoid CNI plugin-related errors, verify that you are using or upgrading to a
container runtime that has been tested to work correctly with your version of container runtime that has been tested to work correctly with your version of
Kubernetes. Kubernetes.
For example, the following container runtimes are being prepared, or have already been prepared, for Kubernetes v1.24:
* containerd v1.6.4 and later, v1.5.11 and later
* The CRI-O v1.24.0 and later
## About the "Incompatible CNI versions" and "Failed to destroy network for sandbox" errors ## About the "Incompatible CNI versions" and "Failed to destroy network for sandbox" errors
Service issues exist for pod CNI network setup and tear down in containerd Service issues exist for pod CNI network setup and tear down in containerd
+20 -11
View File
@@ -39,7 +39,7 @@ profiles that give only the necessary privileges to your container processes.
In order to complete all steps in this tutorial, you must install In order to complete all steps in this tutorial, you must install
[kind](/docs/tasks/tools/#kind) and [kubectl](/docs/tasks/tools/#kubectl). [kind](/docs/tasks/tools/#kind) and [kubectl](/docs/tasks/tools/#kubectl).
This tutorial shows some examples that are still alpha (since v1.22) and This tutorial shows some examples that are still beta (since v1.25) and
others that use only generally available seccomp functionality. You should others that use only generally available seccomp functionality. You should
make sure that your cluster is make sure that your cluster is
[configured correctly](https://kind.sigs.k8s.io/docs/user/quick-start/#setting-kubernetes-version) [configured correctly](https://kind.sigs.k8s.io/docs/user/quick-start/#setting-kubernetes-version)
@@ -112,7 +112,7 @@ See [Nodes](https://kind.sigs.k8s.io/docs/user/configuration/#nodes) within the
kind documentation about configuration for more details on this. kind documentation about configuration for more details on this.
This tutorial assumes you are using Kubernetes {{< param "version" >}}. This tutorial assumes you are using Kubernetes {{< param "version" >}}.
As an alpha feature, you can configure Kubernetes to use the profile that the As a beta feature, you can configure Kubernetes to use the profile that the
{{< glossary_tooltip text="container runtime" term_id="container-runtime" >}} {{< glossary_tooltip text="container runtime" term_id="container-runtime" >}}
prefers by default, rather than falling back to `Unconfined`. prefers by default, rather than falling back to `Unconfined`.
If you want to try that, see If you want to try that, see
@@ -159,11 +159,12 @@ running within kind.
## Enable the use of `RuntimeDefault` as the default seccomp profile for all workloads ## Enable the use of `RuntimeDefault` as the default seccomp profile for all workloads
{{< feature-state state="alpha" for_k8s_version="v1.22" >}} {{< feature-state state="beta" for_k8s_version="v1.25" >}}
`SeccompDefault` is an optional kubelet To use seccomp profile defaulting, you must run the kubelet with the `SeccompDefault`
[feature gate](/docs/reference/command-line-tools-reference/feature-gates) as [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) enabled
well as corresponding `--seccomp-default` (this is the default). You must also explicitly enable the defaulting behavior for each
node where you want to use this with the corresponding `--seccomp-default`
[command line flag](/docs/reference/command-line-tools-reference/kubelet). [command line flag](/docs/reference/command-line-tools-reference/kubelet).
Both have to be enabled simultaneously to use the feature. Both have to be enabled simultaneously to use the feature.
@@ -196,12 +197,20 @@ If you were introducing this feature into production-like cluster, the Kubernete
recommends that you enable this feature gate on a subset of your nodes and then recommends that you enable this feature gate on a subset of your nodes and then
test workload execution before rolling the change out cluster-wide. test workload execution before rolling the change out cluster-wide.
More detailed information about a possible upgrade and downgrade strategy can be You can find more detailed information about a possible upgrade and downgrade strategy
found in the [related Kubernetes Enhancement Proposal (KEP)](https://github.com/kubernetes/enhancements/tree/a70cc18/keps/sig-node/2413-seccomp-by-default#upgrade--downgrade-strategy). in the related Kubernetes Enhancement Proposal (KEP):
[Enable seccomp by default](https://github.com/kubernetes/enhancements/tree/9a124fd29d1f9ddf2ff455c49a630e3181992c25/keps/sig-node/2413-seccomp-by-default#upgrade--downgrade-strategy).
Since the feature is in alpha state it is disabled per default. To enable it, Kubernetes {{< skew currentVersion >}} lets you configure the seccomp profile
pass the flags `--feature-gates=SeccompDefault=true --seccomp-default` to the that applies when the spec for a Pod doesn't define a specific seccomp profile.
`kubelet` CLI or enable it via the [kubelet configuration This is a beta feature and the corresponding `SeccompDefault` [feature
gate](/docs/reference/command-line-tools-reference/feature-gates/) is enabled by
default. However, you still need to enable this defaulting for each node where
you would like to use it.
If you are running a Kubernetes {{< skew currentVersion >}} cluster and want to
enable the feature, either run the kubelet with the `--seccomp-default` command
line flag, or enable it through the [kubelet configuration
file](/docs/tasks/administer-cluster/kubelet-config-file/). To enable the file](/docs/tasks/administer-cluster/kubelet-config-file/). To enable the
feature gate in [kind](https://kind.sigs.k8s.io), ensure that `kind` provides feature gate in [kind](https://kind.sigs.k8s.io), ensure that `kind` provides
the minimum required Kubernetes version and enables the `SeccompDefault` feature the minimum required Kubernetes version and enables the `SeccompDefault` feature