⎈ k8s knowledge compiler

Running Kubernetes Node Components as a Non-root User [page]deterministic

tasks

This document describes how to run Kubernetes Node components such as kubelet, CRI, OCI, and CNI without root privileges, by using a [user namespace](#gloss:userns).

This technique is also known as _rootless mode_.

> Note: This document describes how to run Kubernetes Node components (and hence pods) as a non-root user.

If you are just looking for how to run a pod as a non-root user, see [SecurityContext](/docs/tasks/configure-pod-container/security-context/).

##

* [Enable Cgroup v2](https://rootlesscontaine.rs/getting-started/common/cgroup2/) * [Enable systemd with user session](https://rootlesscontaine.rs/getting-started/common/login/) * [Configure several sysctl values, depending on host Linux distribution](https://rootlesscontaine.rs/getting-started/common/sysctl/) * [Ensure that your unprivileged user is listed in `/etc/subuid` and `/etc/subgid`](https://rootlesscontaine.rs/getting-started/common/subuid/) * Enable the `KubeletInUserNamespace` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/)

## Running Kubernetes inside Rootless Docker/Podman

### kind

[kind](https://kind.sigs.k8s.io/) supports running Kubernetes inside Rootless Docker or Rootless Podman.

See [Running kind with Rootless Docker](https://kind.sigs.k8s.io/docs/user/rootless/).

### minikube

[minikube](https://minikube.sigs.k8s.io/) also supports running Kubernetes inside Rootless Docker or Rootless Podman.

See the Minikube documentation:

* [Rootless Docker](https://minikube.sigs.k8s.io/docs/drivers/docker/) * [Rootless Podman](https://minikube.sigs.k8s.io/docs/drivers/podman/)

## Running Kubernetes inside Unprivileged Containers

### sysbox

[Sysbox](https://github.com/nestybox/sysbox) is an open-source container runtime (similar to "runc") that supports running system-level workloads such as Docker and Kubernetes inside unprivileged containers isolated with the Linux user namespace.

See [Sysbox Quick Start Guide: Kubernetes-in-Docker](https://github.com/nestybox/sysbox/blob/master/docs/quickstart/kind.md) for more info.

Sysbox supports running Kubernetes inside unprivileged containers without requiring Cgroup v2 and without the `KubeletInUserNamespace` feature gate. It does this by exposing specially crafted `/proc` and `/sys` filesystems inside the container plus several other advanced OS virtualization techniques.

## Running Rootless Kubernetes directly on a host

### K3s

[K3s](https://k3s.io/) experimentally supports rootless mode.

See [Running K3s with Rootless mode](https://rancher.com/docs/k3s/latest/en/advanced/#running-k3s-with-rootless-mode-experimental) for the usage.

### Usernetes [Usernetes](https://github.com/rootless-containers/usernetes) is a reference distribution of Kubernetes that can be installed under `$HOME` directory without the root privilege.

Usernetes supports both containerd and CRI-O as CRI runtimes. Usernetes supports multi-node clusters using Flannel (VXLAN).

See [the Usernetes repo](https://github.com/rootless-containers/usernetes) for the usage.

## Manually deploy a node that runs the kubelet in a user namespace {#userns-the-hard-way}

This section provides hints for running Kubernetes in a user namespace manually.

> Note: This section is intended to be read by developers of Kubernetes distributions, not by end users.

### Creating a user namespace

The first step is to create a [user namespace](#gloss:userns).

If you are trying to run Kubernetes in a user-namespaced container such as Rootless Docker/Podman or LXC/LXD, you are all set, and you can go to the next subsection.

Otherwise you have to create a user namespace by yourself, by calling `unshare(2)` with `CLONE_NEWUSER`.

A user namespace can be also unshared by using command line tools such as:

  • [`unshare(1)`](https://man7.org/linux/man-pages/man1/unshare.1.html)
  • [RootlessKit](https://github.com/rootless-containers/rootlesskit)
  • [become-root](https://github.com/giuseppe/become-root)

After u …(trimmed)

Sources

tasks/administer-cluster/kubelet-in-userns.md · docRunning Kubernetes Node Components as a Non-root User

Related (20)

references user namespaceuser namespace conf=1
part_of {{% heading "prerequisites" %}}describes conf=1
part_of Caveatsdescribes conf=1
part_of {{% heading "seealso" %}}describes conf=1
part_of kinddescribes conf=1
part_of minikubedescribes conf=1
part_of sysboxdescribes conf=1
part_of K3sdescribes conf=1
part_of Usernetesdescribes conf=1
part_of Creating a user namespacedescribes conf=1
part_of Creating a delegated cgroup treedescribes conf=1
part_of Configuring networkdescribes conf=1
part_of Configuring CRIdescribes conf=1
part_of Configuring kubeletdescribes conf=1
part_of Configuring kube-proxydescribes conf=1
api_for Nodedocuments API object conf=1

← all Docs