Rancher is open source software that combines everything an organization needs to adopt and run containers in production. Built on Kubernetes, Rancher makes it easy for DevOps teams to test, deploy and manage their applications.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Featured resource
-
Read about how to migrate from Rancher v1.6 Cattle to v2.x
Rancher manages all of your Kubernetes clusters everywhere, unifies them under centralized RBAC, monitors them and lets you easily deploy and manage workloads through an intuitive user interface.
Rancher manages all of your Kubernetes clusters everywhere, unifies them under centralized RBAC, monitors them and lets you easily deploy and manage workloads through an intuitive user interface.
Rancher manages all of your Kubernetes clusters everywhere, unifies them under centralized RBAC, monitors them and lets you easily deploy and manage workloads through an intuitive user interface.
RancherOS is the lightest, easiest way to run Docker in production. Engineered from the ground up for security and speed, it runs all system services and user workloads within Docker containers.
-
-
diff --git a/content/k3s/_index.md b/content/k3s/_index.md
deleted file mode 100644
index cff765de06d..00000000000
--- a/content/k3s/_index.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: K3S
-weight: 1
-showBreadcrumb: false
----
diff --git a/content/k3s/latest/_index.md b/content/k3s/latest/_index.md
deleted file mode 100644
index b0a33f90917..00000000000
--- a/content/k3s/latest/_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: K3S
-showBreadcrumb: false
----
diff --git a/content/k3s/latest/en/_index.md b/content/k3s/latest/en/_index.md
deleted file mode 100644
index 4d71be76b38..00000000000
--- a/content/k3s/latest/en/_index.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: "K3s - Lightweight Kubernetes"
-shortTitle: K3s
-name: "menu"
----
-
-Lightweight Kubernetes. Easy to install, half the memory, all in a binary of less than 100 MB.
-
-Great for:
-
-* Edge
-* IoT
-* CI
-* Development
-* ARM
-* Embedding K8s
-* Situations where a PhD in K8s clusterology is infeasible
-
-# What is K3s?
-
-K3s is a fully compliant Kubernetes distribution with the following enhancements:
-
-* Packaged as a single binary.
-* Lightweight storage backend based on sqlite3 as the default storage mechanism. etcd3, MySQL, Postgres also still available.
-* Wrapped in simple launcher that handles a lot of the complexity of TLS and options.
-* Secure by default with reasonable defaults for lightweight environments.
-* Simple but powerful "batteries-included" features have been added, such as: a local storage provider, a service load balancer, a Helm controller, and the Traefik ingress controller.
-* Operation of all Kubernetes control plane components is encapsulated in a single binary and process. This allows K3s to automate and manage complex cluster operations like distributing certificates.
-* External dependencies have been minimized (just a modern kernel and cgroup mounts needed). K3s packages the required dependencies, including:
- * containerd
- * Flannel
- * CoreDNS
- * CNI
- * Host utilities (iptables, socat, etc)
- * Ingress controller (traefik)
- * Embedded service loadbalancer
- * Embedded network policy controller
-
-# What's with the name?
-
-We wanted an installation of Kubernetes that was half the size in terms of memory footprint. Kubernetes is a 10-letter word stylized as K8s. So something half as big as Kubernetes would be a 5-letter word stylized as K3s. There is no long form of K3s and no official pronunciation.
diff --git a/content/k3s/latest/en/advanced/_index.md b/content/k3s/latest/en/advanced/_index.md
deleted file mode 100644
index 554a0e5469a..00000000000
--- a/content/k3s/latest/en/advanced/_index.md
+++ /dev/null
@@ -1,460 +0,0 @@
----
-title: "Advanced Options and Configuration"
-weight: 45
-aliases:
- - /k3s/latest/en/running/
- - /k3s/latest/en/configuration/
----
-
-This section contains advanced information describing the different ways you can run and manage K3s:
-
-- [Certificate rotation](#certificate-rotation)
-- [Auto-deploying manifests](#auto-deploying-manifests)
-- [Using Docker as the container runtime](#using-docker-as-the-container-runtime)
-- [Using etcdctl](#using-etcdctl)
-- [Configuring containerd](#configuring-containerd)
-- [Running K3s with Rootless mode (Experimental)](#running-k3s-with-rootless-mode-experimental)
-- [Node labels and taints](#node-labels-and-taints)
-- [Starting the server with the installation script](#starting-the-server-with-the-installation-script)
-- [Additional preparation for Alpine Linux setup](#additional-preparation-for-alpine-linux-setup)
-- [Additional preparation for (Red Hat/CentOS) Enterprise Linux](#additional-preparation-for-red-hat/centos-enterprise-linux)
-- [Additional preparation for Raspberry Pi OS Setup](#additional-preparation-for-raspberry-pi-os-setup)
-- [Enabling vxlan on Ubuntu 21.10+ on Raspberry Pi](#enabling-vxlan-on-ubuntu-21.10+-on-raspberry-pi)
-- [Running K3d (K3s in Docker) and docker-compose](#running-k3d-k3s-in-docker-and-docker-compose)
-- [SELinux Support](#selinux-support)
-- [Enabling Lazy Pulling of eStargz (Experimental)](#enabling-lazy-pulling-of-estargz-experimental)
-- [Additional Logging Sources](#additional-logging-sources)
-- [Server and agent tokens](#server-and-agent-tokens)
-
-# Certificate Rotation
-
-By default, certificates in K3s expire in 12 months.
-
-If the certificates are expired or have fewer than 90 days remaining before they expire, the certificates are rotated when K3s is restarted.
-
-# Auto-Deploying Manifests
-
-Any file found in `/var/lib/rancher/k3s/server/manifests` will automatically be deployed to Kubernetes in a manner similar to `kubectl apply`, both on startup and when the file is changed on disk. Deleting files out of this directory will not delete the corresponding resources from the cluster.
-
-For information about deploying Helm charts, refer to the section about [Helm.](../helm)
-
-# Using Docker as the Container Runtime
-
-K3s includes and defaults to [containerd,](https://containerd.io/) an industry-standard container runtime.
-
-To use Docker instead of containerd,
-
-1. Install Docker on the K3s node. One of Rancher's [Docker installation scripts](https://github.com/rancher/install-docker) can be used to install Docker:
-
- ```
- curl https://releases.rancher.com/install-docker/19.03.sh | sh
- ```
-
-1. Install K3s using the `--docker` option:
-
- ```
- curl -sfL https://get.k3s.io | sh -s - --docker
- ```
-
-1. Confirm that the cluster is available:
-
- ```
- $ sudo k3s kubectl get pods --all-namespaces
- NAMESPACE NAME READY STATUS RESTARTS AGE
- kube-system local-path-provisioner-6d59f47c7-lncxn 1/1 Running 0 51s
- kube-system metrics-server-7566d596c8-9tnck 1/1 Running 0 51s
- kube-system helm-install-traefik-mbkn9 0/1 Completed 1 51s
- kube-system coredns-8655855d6-rtbnb 1/1 Running 0 51s
- kube-system svclb-traefik-jbmvl 2/2 Running 0 43s
- kube-system traefik-758cd5fc85-2wz97 1/1 Running 0 43s
- ```
-
-1. Confirm that the Docker containers are running:
-
- ```
- $ sudo docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 3e4d34729602 897ce3c5fc8f "entry" About a minute ago Up About a minute k8s_lb-port-443_svclb-traefik-jbmvl_kube-system_d46f10c6-073f-4c7e-8d7a-8e7ac18f9cb0_0
- bffdc9d7a65f rancher/klipper-lb "entry" About a minute ago Up About a minute k8s_lb-port-80_svclb-traefik-jbmvl_kube-system_d46f10c6-073f-4c7e-8d7a-8e7ac18f9cb0_0
- 436b85c5e38d rancher/library-traefik "/traefik --configfi…" About a minute ago Up About a minute k8s_traefik_traefik-758cd5fc85-2wz97_kube-system_07abe831-ffd6-4206-bfa1-7c9ca4fb39e7_0
- de8fded06188 rancher/pause:3.1 "/pause" About a minute ago Up About a minute k8s_POD_svclb-traefik-jbmvl_kube-system_d46f10c6-073f-4c7e-8d7a-8e7ac18f9cb0_0
- 7c6a30aeeb2f rancher/pause:3.1 "/pause" About a minute ago Up About a minute k8s_POD_traefik-758cd5fc85-2wz97_kube-system_07abe831-ffd6-4206-bfa1-7c9ca4fb39e7_0
- ae6c58cab4a7 9d12f9848b99 "local-path-provisio…" About a minute ago Up About a minute k8s_local-path-provisioner_local-path-provisioner-6d59f47c7-lncxn_kube-system_2dbd22bf-6ad9-4bea-a73d-620c90a6c1c1_0
- be1450e1a11e 9dd718864ce6 "/metrics-server" About a minute ago Up About a minute k8s_metrics-server_metrics-server-7566d596c8-9tnck_kube-system_031e74b5-e9ef-47ef-a88d-fbf3f726cbc6_0
- 4454d14e4d3f c4d3d16fe508 "/coredns -conf /etc…" About a minute ago Up About a minute k8s_coredns_coredns-8655855d6-rtbnb_kube-system_d05725df-4fb1-410a-8e82-2b1c8278a6a1_0
- c3675b87f96c rancher/pause:3.1 "/pause" About a minute ago Up About a minute k8s_POD_coredns-8655855d6-rtbnb_kube-system_d05725df-4fb1-410a-8e82-2b1c8278a6a1_0
- 4b1fddbe6ca6 rancher/pause:3.1 "/pause" About a minute ago Up About a minute k8s_POD_local-path-provisioner-6d59f47c7-lncxn_kube-system_2dbd22bf-6ad9-4bea-a73d-620c90a6c1c1_0
- 64d3517d4a95 rancher/pause:3.1 "/pause"
- ```
-
-### Optional: Use crictl with Docker
-
-crictl provides a CLI for CRI-compatible container runtimes.
-
-If you would like to use crictl after installing K3s with the `--docker` option, install crictl using the [official documentation:](https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md)
-
-```
-$ VERSION="v1.17.0"
-$ curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-${VERSION}-linux-amd64.tar.gz --output crictl-${VERSION}-linux-amd64.tar.gz
-$ sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
-crictl
-```
-
-Then start using crictl commands:
-
-```
-$ sudo crictl version
-Version: 0.1.0
-RuntimeName: docker
-RuntimeVersion: 19.03.9
-RuntimeApiVersion: 1.40.0
-$ sudo crictl images
-IMAGE TAG IMAGE ID SIZE
-rancher/coredns-coredns 1.6.3 c4d3d16fe508b 44.3MB
-rancher/klipper-helm v0.2.5 6207e2a3f5225 136MB
-rancher/klipper-lb v0.1.2 897ce3c5fc8ff 6.1MB
-rancher/library-traefik 1.7.19 aa764f7db3051 85.7MB
-rancher/local-path-provisioner v0.0.11 9d12f9848b99f 36.2MB
-rancher/metrics-server v0.3.6 9dd718864ce61 39.9MB
-rancher/pause 3.1 da86e6ba6ca19 742kB
-```
-
-# Using etcdctl
-
-etcdctl provides a CLI for etcd.
-
-If you would like to use etcdctl after installing K3s with embedded etcd, install etcdctl using the [official documentation.](https://etcd.io/docs/latest/install/)
-
-```
-$ VERSION="v3.5.0"
-$ curl -L https://github.com/etcd-io/etcd/releases/download/${VERSION}/etcd-${VERSION}-linux-amd64.tar.gz --output etcdctl-linux-amd64.tar.gz
-$ sudo tar -zxvf etcdctl-linux-amd64.tar.gz --strip-components=1 -C /usr/local/bin etcd-${VERSION}-linux-amd64/etcdctl
-```
-
-Then start using etcdctl commands with the appropriate K3s flags:
-
-```
-$ sudo etcdctl --cacert=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --cert=/var/lib/rancher/k3s/server/tls/etcd/client.crt --key=/var/lib/rancher/k3s/server/tls/etcd/client.key version
-```
-
-# Configuring containerd
-
-K3s will generate config.toml for containerd in `/var/lib/rancher/k3s/agent/etc/containerd/config.toml`.
-
-For advanced customization for this file you can create another file called `config.toml.tmpl` in the same directory and it will be used instead.
-
-The `config.toml.tmpl` will be treated as a Go template file, and the `config.Node` structure is being passed to the template. See [this folder](https://github.com/k3s-io/k3s/blob/master/pkg/agent/templates) for Linux and Windows examples on how to use the structure to customize the configuration file.
-
-
-# Running K3s with Rootless mode (Experimental)
-
-> **Warning:** This feature is experimental.
-
-Rootless mode allows running the entire k3s an unprivileged user, so as to protect the real root on the host from potential container-breakout attacks.
-
-See also https://rootlesscontaine.rs/ to learn about Rootless mode.
-
-### Known Issues with Rootless mode
-
-* **Ports**
-
- When running rootless a new network namespace is created. This means that K3s instance is running with networking fairly detached from the host. The only way to access services run in K3s from the host is to set up port forwards to the K3s network namespace. We have a controller that will automatically bind 6443 and service port below 1024 to the host with an offset of 10000.
-
- That means service port 80 will become 10080 on the host, but 8080 will become 8080 without any offset.
-
- Currently, only `LoadBalancer` services are automatically bound.
-
-* **Cgroups**
-
- Cgroup v1 is not supported. v2 is supported.
-
-* **Multi-node cluster**
-
- Multi-cluster installation is untested and undocumented.
-
-### Running Servers and Agents with Rootless
-* Enable cgroup v2 delegation, see https://rootlesscontaine.rs/getting-started/common/cgroup2/ .
- This step is optional, but highly recommended for enabling CPU and memory resource limtitation.
-
-* Download `k3s-rootless.service` from [`https://github.com/k3s-io/k3s/blob//k3s-rootless.service`](https://github.com/k3s-io/k3s/blob/master/k3s-rootless.service).
- Make sure to use the same version of `k3s-rootless.service` and `k3s`.
-
-* Install `k3s-rootless.service` to `~/.config/systemd/user/k3s-rootless.service`.
- Installing this file as a system-wide service (`/etc/systemd/...`) is not supported.
- Depending on the path of `k3s` binary, you might need to modify the `ExecStart=/usr/local/bin/k3s ...` line of the file.
-
-* Run `systemctl --user daemon-reload`
-
-* Run `systemctl --user enable --now k3s-rootless`
-
-* Run `KUBECONFIG=~/.kube/k3s.yaml kubectl get pods -A`, and make sure the pods are running.
-
-> **Note:** Don't try to run `k3s server --rootless` on a terminal, as it doesn't enable cgroup v2 delegation.
-> If you really need to try it on a terminal, prepend `systemd-run --user -p Delegate=yes --tty` to create a systemd scope.
->
-> i.e., `systemd-run --user -p Delegate=yes --tty k3s server --rootless`
-
-### Troubleshooting
-
-* Run `systemctl --user status k3s-rootless` to check the daemon status
-* Run `journalctl --user -f -u k3s-rootless` to see the daemon log
-* See also https://rootlesscontaine.rs/
-
-# Node Labels and Taints
-
-K3s agents can be configured with the options `--node-label` and `--node-taint` which adds a label and taint to the kubelet. The two options only add labels and/or taints [at registration time,]({{}}/k3s/latest/en/installation/install-options/#node-labels-and-taints-for-agents) so they can only be added once and not changed after that again by running K3s commands.
-
-If you want to change node labels and taints after node registration you should use `kubectl`. Refer to the official Kubernetes documentation for details on how to add [taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) and [node labels.](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes/#add-a-label-to-a-node)
-
-# Starting the Server with the Installation Script
-
-The installation script will auto-detect if your OS is using systemd or openrc and start the service.
-When running with openrc, logs will be created at `/var/log/k3s.log`.
-
-When running with systemd, logs will be created in `/var/log/syslog` and viewed using `journalctl -u k3s`.
-
-An example of installing and auto-starting with the install script:
-
-```bash
-curl -sfL https://get.k3s.io | sh -
-```
-
-When running the server manually you should get an output similar to the following:
-
-```
-$ k3s server
-INFO[2019-01-22T15:16:19.908493986-07:00] Starting k3s dev
-INFO[2019-01-22T15:16:19.908934479-07:00] Running kube-apiserver --allow-privileged=true --authorization-mode Node,RBAC --service-account-signing-key-file /var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range 10.43.0.0/16 --advertise-port 6445 --advertise-address 127.0.0.1 --insecure-port 0 --secure-port 6444 --bind-address 127.0.0.1 --tls-cert-file /var/lib/rancher/k3s/server/tls/localhost.crt --tls-private-key-file /var/lib/rancher/k3s/server/tls/localhost.key --service-account-key-file /var/lib/rancher/k3s/server/tls/service.key --service-account-issuer k3s --api-audiences unknown --basic-auth-file /var/lib/rancher/k3s/server/cred/passwd --kubelet-client-certificate /var/lib/rancher/k3s/server/tls/token-node.crt --kubelet-client-key /var/lib/rancher/k3s/server/tls/token-node.key
-Flag --insecure-port has been deprecated, This flag will be removed in a future version.
-INFO[2019-01-22T15:16:20.196766005-07:00] Running kube-scheduler --kubeconfig /var/lib/rancher/k3s/server/cred/kubeconfig-system.yaml --port 0 --secure-port 0 --leader-elect=false
-INFO[2019-01-22T15:16:20.196880841-07:00] Running kube-controller-manager --kubeconfig /var/lib/rancher/k3s/server/cred/kubeconfig-system.yaml --service-account-private-key-file /var/lib/rancher/k3s/server/tls/service.key --allocate-node-cidrs --cluster-cidr 10.42.0.0/16 --root-ca-file /var/lib/rancher/k3s/server/tls/token-ca.crt --port 0 --secure-port 0 --leader-elect=false
-Flag --port has been deprecated, see --secure-port instead.
-INFO[2019-01-22T15:16:20.273441984-07:00] Listening on :6443
-INFO[2019-01-22T15:16:20.278383446-07:00] Writing manifest: /var/lib/rancher/k3s/server/manifests/coredns.yaml
-INFO[2019-01-22T15:16:20.474454524-07:00] Node token is available at /var/lib/rancher/k3s/server/node-token
-INFO[2019-01-22T15:16:20.474471391-07:00] To join node to cluster: k3s agent -s https://10.20.0.3:6443 -t ${NODE_TOKEN}
-INFO[2019-01-22T15:16:20.541027133-07:00] Wrote kubeconfig /etc/rancher/k3s/k3s.yaml
-INFO[2019-01-22T15:16:20.541049100-07:00] Run: k3s kubectl
-```
-
-The output will likely be much longer as the agent will create a lot of logs. By default the server
-will register itself as a node (run the agent).
-
-# Additional Preparation for Alpine Linux Setup
-
-In order to set up Alpine Linux, you have to go through the following preparation:
-
-Update **/etc/update-extlinux.conf** by adding:
-
-```
-default_kernel_opts="... cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory"
-```
-
-Then update the config and reboot:
-
-```bash
-update-extlinux
-reboot
-```
-# Additional preparation for (Red Hat/CentOS) Enterprise Linux
-
-It is recommended to turn off firewalld:
-```
-systemctl disable firewalld --now
-```
-
-If enabled, it is required to disable nm-cloud-setup and reboot the node:
-```
-systemctl disable nm-cloud-setup.service nm-cloud-setup.timer
-reboot
-```
-
-# Additional preparation for Raspberry Pi OS Setup
-## Enabling legacy iptables on Raspberry Pi OS
-Raspberry Pi OS (formerly Raspbian) defaults to using `nftables` instead of `iptables`. **K3S** networking features require `iptables` and do not work with `nftables`. Follow the steps below to switch configure **Buster** to use `legacy iptables`:
-```
-sudo iptables -F
-sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
-sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
-sudo reboot
-```
-
-## Enabling cgroups for Raspberry Pi OS
-
-Standard Raspberry Pi OS installations do not start with `cgroups` enabled. **K3S** needs `cgroups` to start the systemd service. `cgroups`can be enabled by appending `cgroup_memory=1 cgroup_enable=memory` to `/boot/cmdline.txt`.
-
-# Enabling vxlan on Ubuntu 21.10+ on Raspberry Pi
-
-Starting with Ubuntu 21.10, vxlan support on Raspberry Pi has been moved into a seperate kernel module.
-```
-sudo apt install linux-modules-extra-raspi
-```
-
-# Running K3d (K3s in Docker) and docker-compose
-
-[k3d](https://github.com/rancher/k3d) is a utility designed to easily run K3s in Docker.
-
-It can be installed via the the [brew](https://brew.sh/) utility on MacOS:
-
-```
-brew install k3d
-```
-
-`rancher/k3s` images are also available to run the K3s server and agent from Docker.
-
-A `docker-compose.yml` is in the root of the K3s repo that serves as an example of how to run K3s from Docker. To run from `docker-compose` from this repo, run:
-
- docker-compose up --scale agent=3
- # kubeconfig is written to current dir
-
- kubectl --kubeconfig kubeconfig.yaml get node
-
- NAME STATUS ROLES AGE VERSION
- 497278a2d6a2 Ready 11s v1.13.2-k3s2
- d54c8b17c055 Ready 11s v1.13.2-k3s2
- db7a5a5a5bdd Ready 12s v1.13.2-k3s2
-
-To run the agent only in Docker, use `docker-compose up agent`.
-
-Alternatively the `docker run` command can also be used:
-
- sudo docker run \
- -d --tmpfs /run \
- --tmpfs /var/run \
- -e K3S_URL=${SERVER_URL} \
- -e K3S_TOKEN=${NODE_TOKEN} \
- --privileged rancher/k3s:vX.Y.Z
-
-
-### example of /boot/cmdline.txt
-```
-console=serial0,115200 console=tty1 root=PARTUUID=58b06195-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait cgroup_memory=1 cgroup_enable=memory
-```
-
-# SELinux Support
-
-_Supported as of v1.19.4+k3s1. Experimental as of v1.17.4+k3s1._
-
-If you are installing K3s on a system where SELinux is enabled by default (such as CentOS), you must ensure the proper SELinux policies have been installed.
-
-### Automatic Installation
-
-_Available as of v1.19.3+k3s2_
-
-The [install script]({{}}/k3s/latest/en/installation/install-options/#installation-script-options) will automatically install the SELinux RPM from the Rancher RPM repository if on a compatible system if not performing an air-gapped install. Automatic installation can be skipped by setting `INSTALL_K3S_SKIP_SELINUX_RPM=true`.
-
-### Manual Installation
-
-The necessary policies can be installed with the following commands:
-```
-yum install -y container-selinux selinux-policy-base
-yum install -y https://rpm.rancher.io/k3s/latest/common/centos/7/noarch/k3s-selinux-0.2-1.el7_8.noarch.rpm
-```
-
-To force the install script to log a warning rather than fail, you can set the following environment variable: `INSTALL_K3S_SELINUX_WARN=true`.
-
-### Enabling and Disabling SELinux Enforcement
-
-The way that SELinux enforcement is enabled or disabled depends on the K3s version.
-
-{{% tabs %}}
-{{% tab "K3s v1.19.1+k3s1" %}}
-
-To leverage SELinux, specify the `--selinux` flag when starting K3s servers and agents.
-
-This option can also be specified in the K3s [configuration file:]({{}}/k3s/latest/en/installation/install-options/#configuration-file)
-
-```
-selinux: true
-```
-
-The `--disable-selinux` option should not be used. It is deprecated and will be either ignored or will be unrecognized, resulting in an error, in future minor releases.
-
-Using a custom `--data-dir` under SELinux is not supported. To customize it, you would most likely need to write your own custom policy. For guidance, you could refer to the [containers/container-selinux](https://github.com/containers/container-selinux) repository, which contains the SELinux policy files for Container Runtimes, and the [rancher/k3s-selinux](https://github.com/rancher/k3s-selinux) repository, which contains the SELinux policy for K3s .
-
-{{%/tab%}}
-{{% tab "K3s before v1.19.1+k3s1" %}}
-
-SELinux is automatically enabled for the built-in containerd.
-
-To turn off SELinux enforcement in the embedded containerd, launch K3s with the `--disable-selinux` flag.
-
-Using a custom `--data-dir` under SELinux is not supported. To customize it, you would most likely need to write your own custom policy. For guidance, you could refer to the [containers/container-selinux](https://github.com/containers/container-selinux) repository, which contains the SELinux policy files for Container Runtimes, and the [rancher/k3s-selinux](https://github.com/rancher/k3s-selinux) repository, which contains the SELinux policy for K3s .
-
-{{%/tab%}}
-{{% /tabs %}}
-
-# Enabling Lazy Pulling of eStargz (Experimental)
-
-### What's lazy pulling and eStargz?
-
-Pulling images is known as one of the time-consuming steps in the container lifecycle.
-According to [Harter, et al.](https://www.usenix.org/conference/fast16/technical-sessions/presentation/harter),
-
-> pulling packages accounts for 76% of container start time, but only 6.4% of that data is read
-
-To address this issue, k3s experimentally supports *lazy pulling* of image contents.
-This allows k3s to start a container before the entire image has been pulled.
-Instead, the necessary chunks of contents (e.g. individual files) are fetched on-demand.
-Especially for large images, this technique can shorten the container startup latency.
-
-To enable lazy pulling, the target image needs to be formatted as [*eStargz*](https://github.com/containerd/stargz-snapshotter/blob/main/docs/stargz-estargz.md).
-This is an OCI-alternative but 100% OCI-compatible image format for lazy pulling.
-Because of the compatibility, eStargz can be pushed to standard container registries (e.g. ghcr.io) as well as this is *still runnable* even on eStargz-agnostic runtimes.
-
-eStargz is developed based on the [stargz format proposed by Google CRFS project](https://github.com/google/crfs) but comes with practical features including content verification and performance optimization.
-For more details about lazy pulling and eStargz, please refer to [Stargz Snapshotter project repository](https://github.com/containerd/stargz-snapshotter).
-
-### Configure k3s for lazy pulling of eStargz
-
-As shown in the following, `--snapshotter=stargz` option is needed for k3s server and agent.
-
-```
-k3s server --snapshotter=stargz
-```
-
-With this configuration, you can perform lazy pulling for eStargz-formatted images.
-The following Pod manifest uses eStargz-formatted `node:13.13.0` image (`ghcr.io/stargz-containers/node:13.13.0-esgz`).
-k3s performs lazy pulling for this image.
-
-```
-apiVersion: v1
-kind: Pod
-metadata:
- name: nodejs
-spec:
- containers:
- - name: nodejs-estargz
- image: ghcr.io/stargz-containers/node:13.13.0-esgz
- command: ["node"]
- args:
- - -e
- - var http = require('http');
- http.createServer(function(req, res) {
- res.writeHead(200);
- res.end('Hello World!\n');
- }).listen(80);
- ports:
- - containerPort: 80
-```
-
-# Additional Logging Sources
-
-[Rancher logging]({{}}//rancher/v2.6/en/logging/helm-chart-options/) for K3s can be installed without using Rancher. The following instructions should be executed to do so:
-
-```
-helm repo add rancher-charts https://charts.rancher.io
-helm repo update
-helm install --create-namespace -n cattle-logging-system rancher-logging-crd rancher-charts/rancher-logging-crd
-helm install --create-namespace -n cattle-logging-system rancher-logging --set additionalLoggingSources.k3s.enabled=true rancher-charts/rancher-logging
-```
-
-# Server and agent tokens
-
-In K3s, there are two types of tokens: K3S_TOKEN and K3S_AGENT_TOKEN.
-
-K3S_TOKEN: Defines the key required by the server to offer the HTTP config resources. These resources are requested by the other servers before joining the K3s HA cluster. If the K3S_AGENT_TOKEN is not defined, the agents use this token as well to access the required HTTP resources to join the cluster. Note that this token is also used to generate the encryption key for important content in the database (e.g., bootstrap data).
-
-K3S_AGENT_TOKEN: Optional. Defines the key required by the server to offer HTTP config resources to the agents. If not defined, agents will require K3S_TOKEN. Defining K3S_AGENT_TOKEN is encouraged to avoid agents having to know K3S_TOKEN, which is also used to encrypt data.
-
-If no K3S_TOKEN is defined, the first K3s server will generate a random one. The result is part of the content in `/var/lib/rancher/k3s/server/token`. For example, `K1070878408e06a827960208f84ed18b65fa10f27864e71a57d9e053c4caff8504b::server:df54383b5659b9280aa1e73e60ef78fc`, where `df54383b5659b9280aa1e73e60ef78fc` is the K3S_TOKEN.
diff --git a/content/k3s/latest/en/architecture/_index.md b/content/k3s/latest/en/architecture/_index.md
deleted file mode 100644
index 2409ea4c62c..00000000000
--- a/content/k3s/latest/en/architecture/_index.md
+++ /dev/null
@@ -1,61 +0,0 @@
----
-title: Architecture
-weight: 1
----
-
-This page describes the architecture of a high-availability K3s server cluster and how it differs from a single-node server cluster.
-
-It also describes how agent nodes are registered with K3s servers.
-
-A server node is defined as a machine (bare-metal or virtual) running the `k3s server` command. A worker node is defined as a machine running the `k3s agent` command.
-
-This page covers the following topics:
-
-- [Single-server setup with an embedded database](#single-server-setup-with-an-embedded-db)
-- [High-availability K3s server with an external database](#high-availability-k3s-server-with-an-external-db)
- - [Fixed registration address for agent nodes](#fixed-registration-address-for-agent-nodes)
-- [How agent node registration works](#how-agent-node-registration-works)
-- [Automatically deployed manifests](#automatically-deployed-manifests)
-
-# Single-server Setup with an Embedded DB
-
-The following diagram shows an example of a cluster that has a single-node K3s server with an embedded SQLite database.
-
-In this configuration, each agent node is registered to the same server node. A K3s user can manipulate Kubernetes resources by calling the K3s API on the server node.
-
-K3s Architecture with a Single Server
-
-
-# High-Availability K3s Server with an External DB
-
-Single server clusters can meet a variety of use cases, but for environments where uptime of the Kubernetes control plane is critical, you can run K3s in an HA configuration. An HA K3s cluster is comprised of:
-
-* Two or more **server nodes** that will serve the Kubernetes API and run other control plane services
-* An **external datastore** (as opposed to the embedded SQLite datastore used in single-server setups)
-
-K3s Architecture with a High-availability Server
-
-
-### Fixed Registration Address for Agent Nodes
-
-In the high-availability server configuration, each node must also register with the Kubernetes API by using a fixed registration address, as shown in the diagram below.
-
-After registration, the agent nodes establish a connection directly to one of the server nodes.
-
-
-
-# How Agent Node Registration Works
-
-Agent nodes are registered with a websocket connection initiated by the `k3s agent` process, and the connection is maintained by a client-side load balancer running as part of the agent process.
-
-Agents will register with the server using the node cluster secret along with a randomly generated password for the node, stored at `/etc/rancher/node/password`. The server will store the passwords for individual nodes as Kubernetes secrets, and any subsequent attempts must use the same password. Node password secrets are stored in the `kube-system` namespace with names using the template `.node-password.k3s`.
-
-Note: Prior to K3s v1.20.2 servers stored passwords on disk at `/var/lib/rancher/k3s/server/cred/node-passwd`.
-
-If the `/etc/rancher/node` directory of an agent is removed, the password file should be recreated for the agent, or the entry removed from the server.
-
-A unique node ID can be appended to the hostname by launching K3s servers or agents using the `--with-node-id` flag.
-
-# Automatically Deployed Manifests
-
-The [manifests](https://github.com/rancher/k3s/tree/master/manifests) located at the directory path `/var/lib/rancher/k3s/server/manifests` are bundled into the K3s binary at build time. These will be installed at runtime by the [rancher/helm-controller.](https://github.com/rancher/helm-controller#helm-controller)
\ No newline at end of file
diff --git a/content/k3s/latest/en/backup-restore/_index.md b/content/k3s/latest/en/backup-restore/_index.md
deleted file mode 100644
index 13031a06c35..00000000000
--- a/content/k3s/latest/en/backup-restore/_index.md
+++ /dev/null
@@ -1,143 +0,0 @@
----
-title: Backup and Restore
-weight: 26
----
-
-The way K3s is backed up and restored depends on which type of datastore is used.
-
-- [Backup and Restore with External Datastore](#backup-and-restore-with-external-datastore)
-- [Backup and Restore with Embedded etcd Datastore (Experimental)](#backup-and-restore-with-embedded-etcd-datastore-experimental)
-
-# Backup and Restore with External Datastore
-
-When an external datastore is used, backup and restore operations are handled outside of K3s. The database administrator will need to back up the external database, or restore it from a snapshot or dump.
-
-We recommend configuring the database to take recurring snapshots.
-
-For details on taking database snapshots and restoring your database from them, refer to the official database documentation:
-
-- [Official MySQL documentation](https://dev.mysql.com/doc/refman/8.0/en/replication-snapshot-method.html)
-- [Official PostgreSQL documentation](https://www.postgresql.org/docs/8.3/backup-dump.html)
-- [Official etcd documentation](https://etcd.io/docs/latest/op-guide/recovery/)
-
-# Backup and Restore with Embedded etcd Datastore (Experimental)
-
-_Available as of v1.19.1+k3s1_
-
-In this section, you'll learn how to create backups of the K3s cluster data and to restore the cluster from backup.
-
->**Note on Single-Server with embedded SQLite:** Currently, backups of SQLite are not supported. Instead, make a copy of `/var/lib/rancher/k3s/server` and then delete K3s.
-
-### Creating Snapshots
-
-Snapshots are enabled by default.
-
-The snapshot directory defaults to `${data-dir}/server/db/snapshots`. The data-dir value defaults to `/var/lib/rancher/k3s` and can be changed by setting the `--data-dir` flag.
-
-To configure the snapshot interval or the number of retained snapshots, refer to the [options.](#options)
-
-### Restoring a Cluster from a Snapshot
-
-When K3s is restored from backup, the old data directory will be moved to `${data-dir}/server/db/etcd-old/`. Then K3s will attempt to restore the snapshot by creating a new data directory, then starting etcd with a new K3s cluster with one etcd member.
-
-To restore the cluster from backup, run K3s with the `--cluster-reset` option, with the `--cluster-reset-restore-path` also given:
-
-```
-./k3s server \
- --cluster-reset \
- --cluster-reset-restore-path=
-```
-
-**Result:** A message in the logs says that K3s can be restarted without the flags. Start k3s again and should run successfully and be restored from the specified snapshot.
-
-### Options
-
-These options can be passed in with the command line, or in the [configuration file,]({{}}/k3s/latest/en/installation/install-options/#configuration-file ) which may be easier to use.
-
-| Options | Description |
-| ----------- | --------------- |
-| `--etcd-disable-snapshots` | Disable automatic etcd snapshots |
-| `--etcd-snapshot-schedule-cron` value | Snapshot interval time in cron spec. eg. every 5 hours `0 */5 * * *`(default: `0 */12 * * *`) |
-| `--etcd-snapshot-retention` value | Number of snapshots to retain (default: 5) |
-| `--etcd-snapshot-dir` value | Directory to save db snapshots. (Default location: `${data-dir}/db/snapshots`) |
-| `--cluster-reset` | Forget all peers and become sole member of a new cluster. This can also be set with the environment variable `[$K3S_CLUSTER_RESET]`.
-| `--cluster-reset-restore-path` value | Path to snapshot file to be restored
-
-### S3 Compatible API Support
-
-K3s supports writing etcd snapshots to and restoring etcd snapshots from systems with S3-compatible APIs. S3 support is available for both on-demand and scheduled snapshots.
-
-The arguments below have been added to the `server` subcommand. These flags exist for the `etcd-snapshot` subcommand as well however the `--etcd-s3` portion is removed to avoid redundancy.
-
-| Options | Description |
-| ----------- | --------------- |
-| `--etcd-s3` | Enable backup to S3 |
-| `--etcd-s3-endpoint` | S3 endpoint url |
-| `--etcd-s3-endpoint-ca` | S3 custom CA cert to connect to S3 endpoint |
-| `--etcd-s3-skip-ssl-verify` | Disables S3 SSL certificate validation |
-| `--etcd-s3-access-key` | S3 access key |
-| `--etcd-s3-secret-key` | S3 secret key" |
-| `--etcd-s3-bucket` | S3 bucket name |
-| `--etcd-s3-region` | S3 region / bucket location (optional). defaults to us-east-1 |
-| `--etcd-s3-folder` | S3 folder |
-
-To perform an on-demand etcd snapshot and save it to S3:
-
-```
-k3s etcd-snapshot \
- --s3 \
- --s3-bucket= \
- --s3-access-key= \
- --s3-secret-key=
-```
-
-To perform an on-demand etcd snapshot restore from S3, first make sure that K3s isn't running. Then run the following commands:
-
-```
-k3s server \
- --cluster-init \
- --cluster-reset \
- --etcd-s3 \
- --cluster-reset-restore-path= \
- --etcd-s3-bucket= \
- --etcd-s3-access-key= \
- --etcd-s3-secret-key=
-```
-
-### Etcd Snapshot and Restore Subcommands
-
-k3s supports a set of subcommands for working with your etcd snapshots.
-
-| Subcommand | Description |
-| ----------- | --------------- |
-| delete | Delete given snapshot(s) |
-| ls, list, l | List snapshots |
-| prune | Remove snapshots that exceed the configured retention count |
-| save | Trigger an immediate etcd snapshot |
-
-*note* The `save` subcommand is the same as `k3s etcd-snapshot`. The latter will eventually be deprecated in favor of the former.
-
-These commands will perform as expected whether the etcd snapshots are stored locally or in an S3 compatible object store.
-
-For additional information on the etcd snapshot subcommands, run `k3s etcd-snapshot`.
-
-Delete a snapshot from S3.
-
-```
-k3s etcd-snapshot delete \
- --s3 \
- --s3-bucket= \
- --s3-access-key= \
- --s3-secret-key= \
-
-```
-
-Prune local snapshots with the default retention policy (5). The `prune` subcommand takes an additional flag `--snapshot-retention` that allows for overriding the default retention policy.
-
-```
-k3s etcd-snapshot prune
-```
-
-```
-k3s etcd-snapshot prune --snapshot-retention 10
-```
diff --git a/content/k3s/latest/en/cluster-access/_index.md b/content/k3s/latest/en/cluster-access/_index.md
deleted file mode 100644
index 7f861015b57..00000000000
--- a/content/k3s/latest/en/cluster-access/_index.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Cluster Access
-weight: 21
----
-
-The kubeconfig file stored at `/etc/rancher/k3s/k3s.yaml` is used to configure access to the Kubernetes cluster. If you have installed upstream Kubernetes command line tools such as kubectl or helm you will need to configure them with the correct kubeconfig path. This can be done by either exporting the `KUBECONFIG` environment variable or by invoking the `--kubeconfig` command line flag. Refer to the examples below for details.
-
-Leverage the KUBECONFIG environment variable:
-
-```
-export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
-kubectl get pods --all-namespaces
-helm ls --all-namespaces
-```
-
-Or specify the location of the kubeconfig file in the command:
-
-```
-kubectl --kubeconfig /etc/rancher/k3s/k3s.yaml get pods --all-namespaces
-helm --kubeconfig /etc/rancher/k3s/k3s.yaml ls --all-namespaces
-```
-
-### Accessing the Cluster from Outside with kubectl
-
-Copy `/etc/rancher/k3s/k3s.yaml` on your machine located outside the cluster as `~/.kube/config`. Then replace the value of the `server` field with the IP or name of your K3s server. `kubectl` can now manage your K3s cluster.
diff --git a/content/k3s/latest/en/faq/_index.md b/content/k3s/latest/en/faq/_index.md
deleted file mode 100644
index ed339e34059..00000000000
--- a/content/k3s/latest/en/faq/_index.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-title: FAQ
-weight: 60
----
-
-The FAQ is updated periodically and designed to answer the questions our users most frequently ask about K3s.
-
-**Is K3s a suitable replacement for k8s?**
-
-K3s is capable of nearly everything k8s can do. It is just a more lightweight version. See the [main]({{}}/k3s/latest/en/) docs page for more details.
-
-**How can I use my own Ingress instead of Traefik?**
-
-Simply start K3s server with `--disable traefik` and deploy your ingress.
-
-**Does K3s support Windows?**
-
-At this time K3s does not natively support Windows, however we are open to the idea in the future.
-
-**How can I build from source?**
-
-Please reference the K3s [BUILDING.md](https://github.com/rancher/k3s/blob/master/BUILDING.md) with instructions.
-
-**Where are the K3s logs?**
-
-The installation script will auto-detect if your OS is using systemd or openrc and start the service.
-
-When running with openrc, logs will be created at `/var/log/k3s.log`.
-
-When running with systemd, logs will be created in `/var/log/syslog` and viewed using `journalctl -u k3s`.
\ No newline at end of file
diff --git a/content/k3s/latest/en/helm/_index.md b/content/k3s/latest/en/helm/_index.md
deleted file mode 100644
index 5d43acbb78f..00000000000
--- a/content/k3s/latest/en/helm/_index.md
+++ /dev/null
@@ -1,121 +0,0 @@
----
-title: Helm
-weight: 42
----
-
-Helm is the package management tool of choice for Kubernetes. Helm charts provide templating syntax for Kubernetes YAML manifest documents. With Helm we can create configurable deployments instead of just using static files. For more information about creating your own catalog of deployments, check out the docs at [https://helm.sh/docs/intro/quickstart/](https://helm.sh/docs/intro/quickstart/).
-
-K3s does not require any special configuration to use with Helm command-line tools. Just be sure you have properly set up your kubeconfig as per the section about [cluster access](../cluster-access). K3s does include some extra functionality to make deploying both traditional Kubernetes resource manifests and Helm Charts even easier with the [rancher/helm-release CRD.](#using-the-helm-crd)
-
-This section covers the following topics:
-
-- [Automatically Deploying Manifests and Helm Charts](#automatically-deploying-manifests-and-helm-charts)
-- [Using the Helm CRD](#using-the-helm-crd)
-- [Customizing Packaged Components with HelmChartConfig](#customizing-packaged-components-with-helmchartconfig)
-- [Upgrading from Helm v2](#upgrading-from-helm-v2)
-
-### Automatically Deploying Manifests and Helm Charts
-
-Any Kubernetes manifests found in `/var/lib/rancher/k3s/server/manifests` will automatically be deployed to K3s in a manner similar to `kubectl apply`. Manifests deployed in this manner are managed as AddOn custom resources, and can be viewed by running `kubectl get addon -A`. You will find AddOns for packaged components such as CoreDNS, Local-Storage, Traefik, etc. AddOns are created automatically by the deploy controller, and are named based on their filename in the manifests directory.
-
-It is also possible to deploy Helm charts as AddOns. K3s includes a [Helm Controller](https://github.com/rancher/helm-controller/) that manages Helm charts using a HelmChart Custom Resource Definition (CRD).
-
-### Using the Helm CRD
-
-> **Note:** K3s versions through v0.5.0 used `k3s.cattle.io/v1` as the apiVersion for HelmCharts. This has been changed to `helm.cattle.io/v1` for later versions.
-
-The [HelmChart resource definition](https://github.com/rancher/helm-controller#helm-controller) captures most of the options you would normally pass to the `helm` command-line tool. Here's an example of how you might deploy Grafana from the default chart repository, overriding some of the default chart values. Note that the HelmChart resource itself is in the `kube-system` namespace, but the chart's resources will be deployed to the `monitoring` namespace.
-
-```yaml
-apiVersion: helm.cattle.io/v1
-kind: HelmChart
-metadata:
- name: grafana
- namespace: kube-system
-spec:
- chart: stable/grafana
- targetNamespace: monitoring
- set:
- adminPassword: "NotVerySafePassword"
- valuesContent: |-
- image:
- tag: master
- env:
- GF_EXPLORE_ENABLED: true
- adminUser: admin
- sidecar:
- datasources:
- enabled: true
-```
-
-#### HelmChart Field Definitions
-
-| Field | Default | Description | Helm Argument / Flag Equivalent |
-|-------|---------|-------------|-------------------------------|
-| name | | Helm Chart name | NAME |
-| spec.chart | | Helm Chart name in repository, or complete HTTPS URL to chart archive (.tgz) | CHART |
-| spec.targetNamespace | default | Helm Chart target namespace | `--namespace` |
-| spec.version | | Helm Chart version (when installing from repository) | `--version` |
-| spec.repo | | Helm Chart repository URL | `--repo` |
-| spec.helmVersion | v3 | Helm version to use (`v2` or `v3`) | |
-| spec.bootstrap | False | Set to True if this chart is needed to bootstrap the cluster (Cloud Controller Manager, etc) | |
-| spec.set | | Override simple default Chart values. These take precedence over options set via valuesContent. | `--set` / `--set-string` |
-| spec.jobImage | | Specify the image to use when installing the helm chart. E.g. rancher/klipper-helm:v0.3.0 . | |
-| spec.valuesContent | | Override complex default Chart values via YAML file content | `--values` |
-| spec.chartContent | | Base64-encoded chart archive .tgz - overrides spec.chart | CHART |
-
-Content placed in `/var/lib/rancher/k3s/server/static/` can be accessed anonymously via the Kubernetes APIServer from within the cluster. This URL can be templated using the special variable `%{KUBERNETES_API}%` in the `spec.chart` field. For example, the packaged Traefik component loads its chart from `https://%{KUBERNETES_API}%/static/charts/traefik-1.81.0.tgz`.
-
-**Note:** The `name` field should follow the Helm chart naming conventions. Refer [here](https://helm.sh/docs/chart_best_practices/conventions/#chart-names) to learn more.
-
->**Notice on File Naming Requirements:** `HelmChart` and `HelmChartConfig` manifest filenames should adhere to Kubernetes object [naming restrictions](https://kubernetes.io/docs/concepts/overview/working-with-objects/names/). The Helm Controller uses filenames to create objects; therefore, the filename must also align with the restrictions. Any related errors can be observed in the rke2-server logs. The example below is an error generated from using underscores:
-```
-level=error msg="Failed to process config: failed to process
-/var/lib/rancher/rke2/server/manifests/rke2_ingress_daemonset.yaml:
-Addon.k3s.cattle.io \"rke2_ingress_daemonset\" is invalid: metadata.name:
-Invalid value: \"rke2_ingress_daemonset\": a lowercase RFC 1123 subdomain
-must consist of lower case alphanumeric characters, '-' or '.', and must
-start and end with an alphanumeric character (e.g. 'example.com', regex
-used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]
-([-a-z0-9]*[a-z0-9])?)*')"
-```
-
-### Customizing Packaged Components with HelmChartConfig
-
-To allow overriding values for packaged components that are deployed as HelmCharts (such as Traefik), K3s versions starting with v1.19.0+k3s1 support customizing deployments via a HelmChartConfig resources. The HelmChartConfig resource must match the name and namespace of its corresponding HelmChart, and supports providing additional `valuesContent`, which is passed to the `helm` command as an additional value file.
-
-> **Note:** HelmChart `spec.set` values override HelmChart and HelmChartConfig `spec.valuesContent` settings.
-
-For example, to customize the packaged Traefik ingress configuration, you can create a file named `/var/lib/rancher/k3s/server/manifests/traefik-config.yaml` and populate it with the following content:
-
-```yaml
-apiVersion: helm.cattle.io/v1
-kind: HelmChartConfig
-metadata:
- name: traefik
- namespace: kube-system
-spec:
- valuesContent: |-
- image:
- name: traefik
- tag: v2.6.1
- proxyProtocol:
- enabled: true
- trustedIPs:
- - 10.0.0.0/8
- forwardedHeaders:
- enabled: true
- trustedIPs:
- - 10.0.0.0/8
- ssl:
- enabled: true
- permanentRedirect: false
-```
-
-### Upgrading from Helm v2
-
-> **Note:** K3s versions starting with v1.17.0+k3s.1 support Helm v3, and will use it by default. Helm v2 charts can be used by setting `helmVersion: v2` in the spec.
-
-If you were using Helm v2 in previous versions of K3s, you may upgrade to v1.17.0+k3s.1 or newer and Helm 2 will still function. If you wish to migrate to Helm 3, [this](https://helm.sh/blog/migrate-from-helm-v2-to-helm-v3/) blog post by Helm explains how to use a plugin to successfully migrate. Refer to the official Helm 3 documentation [here](https://helm.sh/docs/) for more information. K3s will handle either Helm v2 or Helm v3 as of v1.17.0+k3s.1. Just be sure you have properly set your kubeconfig as per the examples in the section about [cluster access.](../cluster-access)
-
-Note that Helm 3 no longer requires Tiller and the `helm init` command. Refer to the official documentation for details.
diff --git a/content/k3s/latest/en/installation/_index.md b/content/k3s/latest/en/installation/_index.md
deleted file mode 100644
index 6d595b68ff7..00000000000
--- a/content/k3s/latest/en/installation/_index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: "Installation"
-weight: 20
----
-
-This section contains instructions for installing K3s in various environments. Please ensure you have met the [Installation Requirements]({{< baseurl >}}/k3s/latest/en/installation/installation-requirements/) before you begin installing K3s.
-
-[Installation and Configuration Options]({{}}/k3s/latest/en/installation/install-options/) provides guidance on the options available to you when installing K3s.
-
-[High Availability with an External DB]({{}}/k3s/latest/en/installation/ha/) details how to set up an HA K3s cluster backed by an external datastore such as MySQL, PostgreSQL, or etcd.
-
-[High Availability with Embedded DB]({{}}/k3s/latest/en/installation/ha-embedded/) details how to set up an HA K3s cluster that leverages a built-in distributed database.
-
-[Air-Gap Installation]({{}}/k3s/latest/en/installation/airgap/) details how to set up K3s in environments that do not have direct access to the Internet.
-
-[Disable Components Flags]({{}}/k3s/latest/en/installation/disable-flags/) details how to set up K3s with etcd only nodes and controlplane only nodes
-
-### Uninstalling
-
-If you installed K3s with the help of the `install.sh` script, an uninstall script is generated during installation. The script is created on your node at `/usr/local/bin/k3s-uninstall.sh` (or as `k3s-agent-uninstall.sh`).
diff --git a/content/k3s/latest/en/installation/airgap/_index.md b/content/k3s/latest/en/installation/airgap/_index.md
deleted file mode 100644
index 303cebab4b9..00000000000
--- a/content/k3s/latest/en/installation/airgap/_index.md
+++ /dev/null
@@ -1,119 +0,0 @@
----
-title: "Air-Gap Install"
-weight: 60
----
-
-You can install K3s in an air-gapped environment using two different methods. An air-gapped environment is any environment that is not directly connected to the Internet. You can either deploy a private registry and mirror docker.io, or you can manually deploy images such as for small clusters.
-
-# Private Registry Method
-
-This document assumes you have already created your nodes in your air-gap environment and have a Docker private registry on your bastion host.
-
-If you have not yet set up a private Docker registry, refer to the official documentation [here](https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry).
-
-### Create the Registry YAML
-
-Follow the [Private Registry Configuration]({{< baseurl >}}/k3s/latest/en/installation/private-registry) guide to create and configure the registry.yaml file.
-
-Once you have completed this, you may now go to the [Install K3s](#install-k3s) section below.
-
-
-# Manually Deploy Images Method
-
-We are assuming you have created your nodes in your air-gap environment.
-This method requires you to manually deploy the necessary images to each node and is appropriate for edge deployments where running a private registry is not practical.
-
-### Prepare the Images Directory and K3s Binary
-Obtain the images tar file for your architecture from the [releases](https://github.com/rancher/k3s/releases) page for the version of K3s you will be running.
-
-Place the tar file in the `images` directory, for example:
-
-```sh
-sudo mkdir -p /var/lib/rancher/k3s/agent/images/
-sudo cp ./k3s-airgap-images-$ARCH.tar /var/lib/rancher/k3s/agent/images/
-```
-
-Place the k3s binary at `/usr/local/bin/k3s` and ensure it is executable.
-
-Follow the steps in the next section to install K3s.
-
-# Install K3s
-
-### Prerequisites
-
-- Before installing K3s, complete the the [Private Registry Method](#private-registry-method) or the [Manually Deploy Images Method](#manually-deploy-images-method) above to prepopulate the images that K3s needs to install.
-- Download the K3s binary from the [releases](https://github.com/rancher/k3s/releases) page, matching the same version used to get the airgap images. Place the binary in `/usr/local/bin` on each air-gapped node and ensure it is executable.
-- Download the K3s install script at https://get.k3s.io. Place the install script anywhere on each air-gapped node, and name it `install.sh`.
-
-When running the K3s script with the `INSTALL_K3S_SKIP_DOWNLOAD` environment variable, K3s will use the local version of the script and binary.
-
-
-### Installing K3s in an Air-Gapped Environment
-
-You can install K3s on one or more servers as described below.
-
-{{% tabs %}}
-{{% tab "Single Server Configuration" %}}
-
-To install K3s on a single server, simply do the following on the server node:
-
-```
-INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
-```
-
-Then, to optionally add additional agents do the following on each agent node. Take care to ensure you replace `myserver` with the IP or valid DNS of the server and replace `mynodetoken` with the node token from the server typically at `/var/lib/rancher/k3s/server/node-token`
-
-```
-INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken ./install.sh
-```
-
-{{% /tab %}}
-{{% tab "High Availability Configuration" %}}
-
-Reference the [High Availability with an External DB]({{< baseurl >}}/k3s/latest/en/installation/ha) or [High Availability with Embedded DB]({{< baseurl >}}/k3s/latest/en/installation/ha-embedded) guides. You will be tweaking install commands so you specify `INSTALL_K3S_SKIP_DOWNLOAD=true` and run your install script locally instead of via curl. You will also utilize `INSTALL_K3S_EXEC='args'` to supply any arguments to k3s.
-
-For example, step two of the High Availability with an External DB guide mentions the following:
-
-```
-curl -sfL https://get.k3s.io | sh -s - server \
- --datastore-endpoint='mysql://username:password@tcp(hostname:3306)/database-name'
-```
-
-Instead, you would modify such examples like below:
-
-```
-INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC='server' K3S_DATASTORE_ENDPOINT='mysql://username:password@tcp(hostname:3306)/database-name' ./install.sh
-```
-
-{{% /tab %}}
-{{% /tabs %}}
-
->**Note:** K3s additionally provides a `--resolv-conf` flag for kubelets, which may help with configuring DNS in air-gap networks.
-
-# Upgrading
-
-### Install Script Method
-
-Upgrading an air-gap environment can be accomplished in the following manner:
-
-1. Download the new air-gap images (tar file) from the [releases](https://github.com/rancher/k3s/releases) page for the version of K3s you will be upgrading to. Place the tar in the `/var/lib/rancher/k3s/agent/images/` directory on each
-node. Delete the old tar file.
-2. Copy and replace the old K3s binary in `/usr/local/bin` on each node. Copy over the install script at https://get.k3s.io (as it is possible it has changed since the last release). Run the script again just as you had done in the past
-with the same environment variables.
-3. Restart the K3s service (if not restarted automatically by installer).
-
-
-### Automated Upgrades Method
-
-As of v1.17.4+k3s1 K3s supports [automated upgrades]({{< baseurl >}}/k3s/latest/en/upgrades/automated/). To enable this in air-gapped environments, you must ensure the required images are available in your private registry.
-
-You will need the version of rancher/k3s-upgrade that corresponds to the version of K3s you intend to upgrade to. Note, the image tag replaces the `+` in the K3s release with a `-` because Docker images do not support `+`.
-
-You will also need the versions of system-upgrade-controller and kubectl that are specified in the system-upgrade-controller manifest YAML that you will deploy. Check for the latest release of the system-upgrade-controller [here](https://github.com/rancher/system-upgrade-controller/releases/latest) and download the system-upgrade-controller.yaml to determine the versions you need to push to your private registry. For example, in release v0.4.0 of the system-upgrade-controller, these images are specified in the manifest YAML:
-
-```
-rancher/system-upgrade-controller:v0.4.0
-rancher/kubectl:v0.17.0
-```
-
-Once you have added the necessary rancher/k3s-upgrade, rancher/system-upgrade-controller, and rancher/kubectl images to your private registry, follow the [automated upgrades]({{< baseurl >}}/k3s/latest/en/upgrades/automated/) guide.
diff --git a/content/k3s/latest/en/installation/datastore/_index.md b/content/k3s/latest/en/installation/datastore/_index.md
deleted file mode 100644
index b5476b42f35..00000000000
--- a/content/k3s/latest/en/installation/datastore/_index.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-title: "Cluster Datastore Options"
-weight: 50
----
-
-The ability to run Kubernetes using a datastore other than etcd sets K3s apart from other Kubernetes distributions. This feature provides flexibility to Kubernetes operators. The available datastore options allow you to select a datastore that best fits your use case. For example:
-
-* If your team doesn't have expertise in operating etcd, you can choose an enterprise-grade SQL database like MySQL or PostgreSQL
-* If you need to run a simple, short-lived cluster in your CI/CD environment, you can use the embedded SQLite database
-* If you wish to deploy Kubernetes on the edge and require a highly available solution but can't afford the operational overhead of managing a database at the edge, you can use K3s's embedded HA datastore built on top of embedded etcd.
-
-K3s supports the following datastore options:
-
-* Embedded [SQLite](https://www.sqlite.org/index.html)
-* [PostgreSQL](https://www.postgresql.org/) (certified against versions 10.7 and 11.5)
-* [MySQL](https://www.mysql.com/) (certified against version 5.7)
-* [MariaDB](https://mariadb.org/) (certified against version 10.3.20)
-* [etcd](https://etcd.io/) (certified against version 3.3.15)
-* Embedded etcd for High Availability
-
-### External Datastore Configuration Parameters
-If you wish to use an external datastore such as PostgreSQL, MySQL, or etcd you must set the `datastore-endpoint` parameter so that K3s knows how to connect to it. You may also specify parameters to configure the authentication and encryption of the connection. The below table summarizes these parameters, which can be passed as either CLI flags or environment variables.
-
- CLI Flag | Environment Variable | Description
- ------------|-------------|------------------
- `--datastore-endpoint` | `K3S_DATASTORE_ENDPOINT` | Specify a PostgreSQL, MySQL, or etcd connection string. This is a string used to describe the connection to the datastore. The structure of this string is specific to each backend and is detailed below.
- `--datastore-cafile` | `K3S_DATASTORE_CAFILE` | TLS Certificate Authority (CA) file used to help secure communication with the datastore. If your datastore serves requests over TLS using a certificate signed by a custom certificate authority, you can specify that CA using this parameter so that the K3s client can properly verify the certificate. |
-| `--datastore-certfile` | `K3S_DATASTORE_CERTFILE` | TLS certificate file used for client certificate based authentication to your datastore. To use this feature, your datastore must be configured to support client certificate based authentication. If you specify this parameter, you must also specify the `datastore-keyfile` parameter. |
-| `--datastore-keyfile` | `K3S_DATASTORE_KEYFILE` | TLS key file used for client certificate based authentication to your datastore. See the previous `datastore-certfile` parameter for more details. |
-
-As a best practice we recommend setting these parameters as environment variables rather than command line arguments so that your database credentials or other sensitive information aren't exposed as part of the process info.
-
-### Datastore Endpoint Format and Functionality
-As mentioned, the format of the value passed to the `datastore-endpoint` parameter is dependent upon the datastore backend. The following details this format and functionality for each supported external datastore.
-
-{{% tabs %}}
-{{% tab "PostgreSQL" %}}
-
-In its most common form, the datastore-endpoint parameter for PostgreSQL has the following format:
-
-`postgres://username:password@hostname:port/database-name`
-
-More advanced configuration parameters are available. For more information on these, please see https://godoc.org/github.com/lib/pq.
-
-If you specify a database name and it does not exist, the server will attempt to create it.
-
-If you only supply `postgres://` as the endpoint, K3s will attempt to do the following:
-
-* Connect to localhost using `postgres` as the username and password
-* Create a database named `kubernetes`
-
-
-{{% /tab %}}
-{{% tab "MySQL / MariaDB" %}}
-
-In its most common form, the `datastore-endpoint` parameter for MySQL and MariaDB has the following format:
-
-`mysql://username:password@tcp(hostname:3306)/database-name`
-
-More advanced configuration parameters are available. For more information on these, please see https://github.com/go-sql-driver/mysql#dsn-data-source-name
-
-Note that due to a [known issue](https://github.com/rancher/k3s/issues/1093) in K3s, you cannot set the `tls` parameter. TLS communication is supported, but you cannot, for example, set this parameter to "skip-verify" to cause K3s to skip certificate verification.
-
-If you specify a database name and it does not exist, the server will attempt to create it.
-
-If you only supply `mysql://` as the endpoint, K3s will attempt to do the following:
-
-* Connect to the MySQL socket at `/var/run/mysqld/mysqld.sock` using the `root` user and no password
-* Create a database with the name `kubernetes`
-
-
-{{% /tab %}}
-{{% tab "etcd" %}}
-
-In its most common form, the `datastore-endpoint` parameter for etcd has the following format:
-
-`https://etcd-host-1:2379,https://etcd-host-2:2379,https://etcd-host-3:2379`
-
-The above assumes a typical three node etcd cluster. The parameter can accept one more comma separated etcd URLs.
-
-{{% /tab %}}
-{{% /tabs %}}
-
- Based on the above, the following example command could be used to launch a server instance that connects to a PostgreSQL database named k3s:
-```
-K3S_DATASTORE_ENDPOINT='postgres://username:password@hostname:5432/k3s' k3s server
-```
-
-And the following example could be used to connect to a MySQL database using client certificate authentication:
-```
-K3S_DATASTORE_ENDPOINT='mysql://username:password@tcp(hostname:3306)/k3s' \
-K3S_DATASTORE_CERTFILE='/path/to/client.crt' \
-K3S_DATASTORE_KEYFILE='/path/to/client.key' \
-k3s server
-```
-
-### Embedded etcd for HA
-
-Please see [High Availability with Embedded DB]({{}}/k3s/latest/en/installation/ha-embedded/) for instructions on how to run with this option.
diff --git a/content/k3s/latest/en/installation/disable-flags/_index.md b/content/k3s/latest/en/installation/disable-flags/_index.md
deleted file mode 100644
index 2dbbfeb8920..00000000000
--- a/content/k3s/latest/en/installation/disable-flags/_index.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-title: "Disable Components Flags"
-weight: 60
----
-
-Starting the K3s server with `--cluster-init` will run all control plane components, including the api server, controller manager, scheduler, and etcd. However, you can run server nodes with certain components and exclude others; the following sections will explain how to do that.
-
-# ETCD Only Nodes
-
-This document assumes you run K3s server with embedded etcd by passing `--cluster-init` flag to the server process.
-
-To run a K3s server with only etcd components you can pass `--disable-apiserver --disable-controller-manager --disable-scheduler` flags to k3s, this will result in running a server node with only etcd, for example to run K3s server with those flags:
-
-```
-curl -fL https://get.k3s.io | sh -s - server --cluster-init --disable-apiserver --disable-controller-manager --disable-scheduler
-```
-
-You can join other nodes to the cluster normally after that.
-
-# Disable ETCD
-
-You can also disable etcd from a server node and this will result in a k3s server running control components other than etcd, that can be accomplished by running k3s server with flag `--disable-etcd` for example to join another node with only control components to the etcd node created in the previous section:
-
-```
-curl -fL https://get.k3s.io | sh -s - server --token --disable-etcd --server https://:6443
-```
-
-The end result will be a two nodes one of them is etcd only node and the other one is controlplane only node, if you check the node list you should see something like the following:
-
-```
-kubectl get nodes
-NAME STATUS ROLES AGE VERSION
-ip-172-31-13-32 Ready etcd 5h39m v1.20.4+k3s1
-ip-172-31-14-69 Ready control-plane,master 5h39m v1.20.4+k3s1
-```
-
-Note that you can run `kubectl` commands only on the k3s server that has the api running, and you can't run `kubectl` commands on etcd only nodes.
-
-
-### Re-enabling control components
-
-In both cases you can re-enable any component that you already disabled simply by removing the corresponding flag that disables them, so for example if you want to revert the etcd only node back to a full k3s server with all components you can just remove the following 3 flags `--disable-apiserver --disable-controller-manager --disable-scheduler`, so in our example to revert back node `ip-172-31-13-32` to a full k3s server you can just re-run the curl command without the disable flags:
-```
-curl -fL https://get.k3s.io | sh -s - server --cluster-init
-```
-
-you will notice that all components started again and you can run kubectl commands again:
-
-```
-kubectl get nodes
-NAME STATUS ROLES AGE VERSION
-ip-172-31-13-32 Ready control-plane,etcd,master 5h45m v1.20.4+k3s1
-ip-172-31-14-69 Ready control-plane,master 5h45m v1.20.4+k3s1
-```
-
-Notice that role labels has been re-added to the node `ip-172-31-13-32` with the correct labels (control-plane,etcd,master).
-
-# Add disable flags using the config file
-
-In any of the previous situations you can use the config file instead of running the curl commands with the associated flags, for example to run an etcd only node you can add the following options to the `/etc/rancher/k3s/config.yaml` file:
-
-```
----
-disable-apiserver: true
-disable-controller-manager: true
-disable-scheduler: true
-cluster-init: true
-```
-and then start K3s using the curl command without any arguents:
-
-```
-curl -fL https://get.k3s.io | sh -
-```
-# Disable components using .skip files
-
-For any yaml file under `/var/lib/rancher/k3s/server/manifests` (coredns, traefik, local-storeage, etc.) you can add a `.skip` file which will cause K3s to not apply the associated yaml file.
-For example, adding `traefik.yaml.skip` in the manifests directory will cause K3s to skip `traefik.yaml`.
-```
-ls /var/lib/rancher/k3s/server/manifests
-ccm.yaml local-storage.yaml rolebindings.yaml traefik.yaml.skip
-coredns.yaml traefik.yaml
-
-kubectl get pods -A
-NAMESPACE NAME READY STATUS RESTARTS AGE
-kube-system local-path-provisioner-64ffb68fd-xx98j 1/1 Running 0 74s
-kube-system metrics-server-5489f84d5d-7zwkt 1/1 Running 0 74s
-kube-system coredns-85cb69466-vcq7j 1/1 Running 0 74s
-```
diff --git a/content/k3s/latest/en/installation/ha-embedded/_index.md b/content/k3s/latest/en/installation/ha-embedded/_index.md
deleted file mode 100644
index 6b7f3421815..00000000000
--- a/content/k3s/latest/en/installation/ha-embedded/_index.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: "High Availability with Embedded DB"
-weight: 40
----
-
->**Notice:**
-K3s has added full support for embedded etcd as of release v1.19.5+k3s1. Versions v1.19.1 thru v1.19.4 provide only experimental support for embedded etcd.
-Embedded etcd replaced experimental Dqlite in the K3s v1.19.1 release. This is a breaking change. Please note that upgrades from experimental Dqlite to embedded etcd are not supported. If you attempt an upgrade it will not succeed and data will be lost.
-
->**Warning:**
-Embedded etcd (HA) may have performance issues on slower disks such as Raspberry Pis running with SD cards.
-
-To run K3s in this mode, you must have an odd number of server nodes. We recommend starting with three nodes.
-
-To get started, first launch a server node with the `cluster-init` flag to enable clustering and a token that will be used as a shared secret to join additional servers to the cluster.
-```
-curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server --cluster-init
-```
-
-After launching the first server, join the second and third servers to the cluster using the shared secret:
-```
-K3S_TOKEN=SECRET k3s server --server https://:6443
-```
-
-Now you have a highly available control plane. Joining additional worker nodes to the cluster follows the same procedure as a single server cluster.
-
-There are a few config flags that must be the same in all server nodes:
-
-* Network related flags: `--cluster-dns`, `--cluster-domain`, `--cluster-cidr`, `--service-cidr`
-* Flags controlling the deployment of certain components: `--disable-helm-controller`, `--disable-kube-proxy`, `--disable-network-policy` and any component passed to `--disable`
-* Feature related flags: `--secrets-encryption`
-
-## Existing clusters
-If you have an existing cluster using the default embedded SQLite database, you can convert it to etcd by simply restarting your K3s server with the `--cluster-init` flag. Once you've done that, you'll be able to add additional instances as described above.
-
->**Important:** K3s v1.22.2 and newer support migration from SQLite to etcd. Older versions will create a new empty datastore if you add `--cluster-init` to an existing server.
diff --git a/content/k3s/latest/en/installation/ha/_index.md b/content/k3s/latest/en/installation/ha/_index.md
deleted file mode 100644
index 4e5072bfff8..00000000000
--- a/content/k3s/latest/en/installation/ha/_index.md
+++ /dev/null
@@ -1,99 +0,0 @@
----
-title: High Availability with an External DB
-weight: 30
----
-
-> **Note:** Official support for installing Rancher on a Kubernetes cluster was introduced in our v1.0.0 release.
-
-This section describes how to install a high-availability K3s cluster with an external database.
-
-Single server clusters can meet a variety of use cases, but for environments where uptime of the Kubernetes control plane is critical, you can run K3s in an HA configuration. An HA K3s cluster is comprised of:
-
-* Two or more **server nodes** that will serve the Kubernetes API and run other control plane services
-* Zero or more **agent nodes** that are designated to run your apps and services
-* An **external datastore** (as opposed to the embedded SQLite datastore used in single-server setups)
-* A **fixed registration address** that is placed in front of the server nodes to allow agent nodes to register with the cluster
-
-For more details on how these components work together, refer to the [architecture section.]({{}}/k3s/latest/en/architecture/#high-availability-with-an-external-db)
-
-Agents register through the fixed registration address, but after registration they establish a connection directly to one of the server nodes. This is a websocket connection initiated by the `k3s agent` process and it is maintained by a client-side load balancer running as part of the agent process.
-
-# Installation Outline
-
-Setting up an HA cluster requires the following steps:
-
-1. [Create an external datastore](#1-create-an-external-datastore)
-2. [Launch server nodes](#2-launch-server-nodes)
-3. [Configure the fixed registration address](#3-configure-the-fixed-registration-address)
-4. [Join agent nodes](#4-optional-join-agent-nodes)
-
-### 1. Create an External Datastore
-You will first need to create an external datastore for the cluster. See the [Cluster Datastore Options]({{}}/k3s/latest/en/installation/datastore/) documentation for more details.
-
-### 2. Launch Server Nodes
-K3s requires two or more server nodes for this HA configuration. See the [Installation Requirements]({{}}/k3s/latest/en/installation/installation-requirements/) guide for minimum machine requirements.
-
-When running the `k3s server` command on these nodes, you must set the `datastore-endpoint` parameter so that K3s knows how to connect to the external datastore. The `token` parameter can also be used to set a deterministic token when adding nodes. When empty, this token will be generated automatically for further use.
-
-For example, a command like the following could be used to install the K3s server with a MySQL database as the external datastore and [set a token]({{}}/k3s/latest/en/installation/install-options/server-config/#cluster-options):
-
-```bash
-curl -sfL https://get.k3s.io | sh -s - server \
- --token=SECRET \
- --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"
-```
-
-The datastore endpoint format differs based on the database type. For details, refer to the section on [datastore endpoint formats.]({{}}/k3s/latest/en/installation/datastore/#datastore-endpoint-format-and-functionality)
-
-To configure TLS certificates when launching server nodes, refer to the [datastore configuration guide.]({{}}/k3s/latest/en/installation/datastore/#external-datastore-configuration-parameters)
-
-> **Note:** The same installation options available to single-server installs are also available for high-availability installs. For more details, see the [Installation and Configuration Options]({{}}/k3s/latest/en/installation/install-options/) documentation.
-
-By default, server nodes will be schedulable and thus your workloads can get launched on them. If you wish to have a dedicated control plane where no user workloads will run, you can use taints. The `node-taint` parameter will allow you to configure nodes with taints, for example `--node-taint CriticalAddonsOnly=true:NoExecute`.
-
-Once you've launched the `k3s server` process on all server nodes, ensure that the cluster has come up properly with `k3s kubectl get nodes`. You should see your server nodes in the Ready state.
-
-### 3. Configure the Fixed Registration Address
-
-Agent nodes need a URL to register against. This can be the IP or hostname of any of the server nodes, but in many cases those may change over time. For example, if you are running your cluster in a cloud that supports scaling groups, you may scale the server node group up and down over time, causing nodes to be created and destroyed and thus having different IPs from the initial set of server nodes. Therefore, you should have a stable endpoint in front of the server nodes that will not change over time. This endpoint can be set up using any number approaches, such as:
-
-* A layer-4 (TCP) load balancer
-* Round-robin DNS
-* Virtual or elastic IP addresses
-
-This endpoint can also be used for accessing the Kubernetes API. So you can, for example, modify your [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file to point to it instead of a specific node. To avoid certificate errors in such a configuration, you should install the server with the `--tls-san YOUR_IP_OR_HOSTNAME_HERE` option. This option adds an additional hostname or IP as a Subject Alternative Name in the TLS cert, and it can be specified multiple times if you would like to access via both the IP and the hostname.
-
-### 4. Optional: Join Additional Server Nodes
-
-The same example command in Step 2 can be used to join additional server nodes, where the token from the first node needs to be used.
-
-If the first server node was started without the `--token` CLI flag or `K3S_TOKEN` variable, the token value can be retrieved from any server already joined to the cluster:
-```bash
-cat /var/lib/rancher/k3s/server/token
-```
-
-Additional server nodes can then be added [using the token]({{}}/k3s/latest/en/installation/install-options/server-config/#cluster-options):
-
-```bash
-curl -sfL https://get.k3s.io | sh -s - server \
- --token=SECRET \
- --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"
-```
-
-There are a few config flags that must be the same in all server nodes:
-
-* Network related flags: `--cluster-dns`, `--cluster-domain`, `--cluster-cidr`, `--service-cidr`
-* Flags controlling the deployment of certain components: `--disable-helm-controller`, `--disable-kube-proxy`, `--disable-network-policy` and any component passed to `--disable`
-* Feature related flags: `--secrets-encryption`
-
-> **Note:** Ensure that you retain a copy of this token as it is required when restoring from backup and adding nodes. Previously, K3s did not enforce the use of a token when using external SQL datastores.
-
-### 5. Optional: Join Agent Nodes
-
-Because K3s server nodes are schedulable by default, the minimum number of nodes for an HA K3s server cluster is two server nodes and zero agent nodes. To add nodes designated to run your apps and services, join agent nodes to your cluster.
-
-Joining agent nodes in an HA cluster is the same as joining agent nodes in a single server cluster. You just need to specify the URL the agent should register to and the token it should use.
-
-```bash
-K3S_TOKEN=SECRET k3s agent --server https://fixed-registration-address:6443
-```
diff --git a/content/k3s/latest/en/installation/install-options/_index.md b/content/k3s/latest/en/installation/install-options/_index.md
deleted file mode 100644
index e38f4cb7f01..00000000000
--- a/content/k3s/latest/en/installation/install-options/_index.md
+++ /dev/null
@@ -1,118 +0,0 @@
----
-title: "Installation Options"
-weight: 20
----
-
-This page focuses on the options that can be used when you set up K3s for the first time:
-
-- [Options for installation with script](#options-for-installation-with-script)
-- [Options for installation from binary](#options-for-installation-from-binary)
-- [Registration options for the K3s server](#registration-options-for-the-k3s-server)
-- [Registration options for the K3s agent](#registration-options-for-the-k3s-agent)
-- [Configuration File](#configuration-file)
-
-In addition to configuring K3s with environment variables and CLI arguments, K3s can also use a [config file.](#configuration-file)
-
-For more advanced options, refer to [this page.]({{}}/k3s/latest/en/advanced)
-
-> Throughout the K3s documentation, you will see some options that can be passed in as both command flags and environment variables. For help with passing in options, refer to [How to Use Flags and Environment Variables.]({{}}/k3s/latest/en/installation/install-options/how-to-flags)
-
-### Options for Installation with Script
-
-As mentioned in the [Quick-Start Guide]({{}}/k3s/latest/en/quick-start/), you can use the installation script available at https://get.k3s.io to install K3s as a service on systemd and openrc based systems.
-
-The simplest form of this command is as follows:
-```sh
-curl -sfL https://get.k3s.io | sh -
-```
-
-When using this method to install K3s, the following environment variables can be used to configure the installation:
-
-| Environment Variable | Description |
-|-----------------------------|---------------------------------------------|
-| `INSTALL_K3S_SKIP_DOWNLOAD` | If set to true will not download K3s hash or binary. |
-| `INSTALL_K3S_SYMLINK` | By default will create symlinks for the kubectl, crictl, and ctr binaries if the commands do not already exist in path. If set to 'skip' will not create symlinks and 'force' will overwrite. |
-| `INSTALL_K3S_SKIP_ENABLE` | If set to true will not enable or start K3s service. |
-| `INSTALL_K3S_SKIP_START` | If set to true will not start K3s service. |
-| `INSTALL_K3S_VERSION` | Version of K3s to download from Github. Will attempt to download from the stable channel if not specified. |
-| `INSTALL_K3S_BIN_DIR` | Directory to install K3s binary, links, and uninstall script to, or use `/usr/local/bin` as the default. |
-| `INSTALL_K3S_BIN_DIR_READ_ONLY` | If set to true will not write files to `INSTALL_K3S_BIN_DIR`, forces setting `INSTALL_K3S_SKIP_DOWNLOAD=true`. |
-| `INSTALL_K3S_SYSTEMD_DIR` | Directory to install systemd service and environment files to, or use `/etc/systemd/system` as the default. |
-| `INSTALL_K3S_EXEC` | Command with flags to use for launching K3s in the service. If the command is not specified, and the `K3S_URL` is set, it will default to "agent." If `K3S_URL` not set, it will default to "server." For help, refer to [this example.]({{}}/k3s/latest/en/installation/install-options/how-to-flags/#example-b-install-k3s-exec) |
-| `INSTALL_K3S_NAME` | Name of systemd service to create, will default to 'k3s' if running k3s as a server and 'k3s-agent' if running k3s as an agent. If specified the name will be prefixed with 'k3s-'. |
-| `INSTALL_K3S_TYPE` | Type of systemd service to create, will default from the K3s exec command if not specified. |
-| `INSTALL_K3S_SELINUX_WARN` | If set to true will continue if k3s-selinux policy is not found. |
-| `INSTALL_K3S_SKIP_SELINUX_RPM` | If set to true will skip automatic installation of the k3s RPM. |
-| `INSTALL_K3S_CHANNEL_URL` | Channel URL for fetching K3s download URL. Defaults to https://update.k3s.io/v1-release/channels. |
-| `INSTALL_K3S_CHANNEL` | Channel to use for fetching K3s download URL. Defaults to "stable". Options include: `stable`, `latest`, `testing`. |
-
-This example shows where to place aforementioned environment variables as options (after the pipe):
-
-```
-curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=latest sh -
-```
-
-Environment variables which begin with `K3S_` will be preserved for the systemd and openrc services to use.
-
-Setting `K3S_URL` without explicitly setting an exec command will default the command to "agent".
-
-When running the agent `K3S_TOKEN` must also be set.
-
-### Options for installation from binary
-
-As stated, the installation script is primarily concerned with configuring K3s to run as a service. If you choose to not use the script, you can run K3s simply by downloading the binary from our [release page](https://github.com/rancher/k3s/releases/latest), placing it on your path, and executing it. The K3s binary supports the following commands:
-
-Command | Description
---------|------------------
-`k3s server` | Run the K3s management server, which will also launch Kubernetes control plane components such as the API server, controller-manager, and scheduler.
-`k3s agent` | Run the K3s node agent. This will cause K3s to run as a worker node, launching the Kubernetes node services `kubelet` and `kube-proxy`.
-`k3s kubectl` | Run an embedded [kubectl](https://kubernetes.io/docs/reference/kubectl/overview/) CLI. If the `KUBECONFIG` environment variable is not set, this will automatically attempt to use the config file that is created at `/etc/rancher/k3s/k3s.yaml` when launching a K3s server node.
-`k3s crictl` | Run an embedded [crictl](https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md). This is a CLI for interacting with Kubernetes's container runtime interface (CRI). Useful for debugging.
-`k3s ctr` | Run an embedded [ctr](https://github.com/projectatomic/containerd/blob/master/docs/cli.md). This is a CLI for containerd, the container daemon used by K3s. Useful for debugging.
-`k3s help` | Shows a list of commands or help for one command
-
-The `k3s server` and `k3s agent` commands have additional configuration options that can be viewed with `k3s server --help` or `k3s agent --help`.
-
-### Registration Options for the K3s Server
-
-For details on configuring the K3s server, refer to the [server configuration reference.]({{}}/k3s/latest/en/installation/install-options/server-config)
-
-
-### Registration Options for the K3s Agent
-
-For details on configuring the K3s agent, refer to the [agent configuration reference.]({{}}/k3s/latest/en/installation/install-options/agent-config)
-
-### Configuration File
-
-_Available as of v1.19.1+k3s1_
-
-In addition to configuring K3s with environment variables and CLI arguments, K3s can also use a config file.
-
-By default, values present in a YAML file located at `/etc/rancher/k3s/config.yaml` will be used on install.
-
-An example of a basic `server` config file is below:
-
-```yaml
-write-kubeconfig-mode: "0644"
-tls-san:
- - "foo.local"
-node-label:
- - "foo=bar"
- - "something=amazing"
-```
-
-In general, CLI arguments map to their respective YAML key, with repeatable CLI arguments being represented as YAML lists.
-
-An identical configuration using solely CLI arguments is shown below to demonstrate this:
-
-```bash
-k3s server \
- --write-kubeconfig-mode "0644" \
- --tls-san "foo.local" \
- --node-label "foo=bar" \
- --node-label "something=amazing"
-```
-
-It is also possible to use both a configuration file and CLI arguments. In these situations, values will be loaded from both sources, but CLI arguments will take precedence. For repeatable arguments such as `--node-label`, the CLI arguments will overwrite all values in the list.
-
-Finally, the location of the config file can be changed either through the cli argument `--config FILE, -c FILE`, or the environment variable `$K3S_CONFIG_FILE`.
diff --git a/content/k3s/latest/en/installation/install-options/agent-config/_index.md b/content/k3s/latest/en/installation/install-options/agent-config/_index.md
deleted file mode 100644
index a31cb029436..00000000000
--- a/content/k3s/latest/en/installation/install-options/agent-config/_index.md
+++ /dev/null
@@ -1,159 +0,0 @@
----
-title: K3s Agent Configuration Reference
-weight: 2
----
-In this section, you'll learn how to configure the K3s agent.
-
-> Throughout the K3s documentation, you will see some options that can be passed in as both command flags and environment variables. For help with passing in options, refer to [How to Use Flags and Environment Variables.]({{}}/k3s/latest/en/installation/install-options/how-to-flags)
-
-- [Config](#config)
-- [Logging](#logging)
-- [Cluster Options](#cluster-options)
-- [Data](#data)
-- [Node](#node)
-- [Runtime](#runtime)
-- [Networking](#networking)
-- [Customized Flags](#customized-flags)
-- [Experimental](#experimental)
-- [Deprecated](#deprecated)
-- [Node Labels and Taints for Agents](#node-labels-and-taints-for-agents)
-- [K3s Agent CLI Help](#k3s-agent-cli-help)
-
-### Config
-
-| Flag | Default | Description |
-|------|---------|-------------|
-| `--config FILE, -c` FILE | "/etc/rancher/k3s/config.yaml" | Load configuration from FILE |
-
-### Logging
-
-| Flag | Default | Environment Variable | Description |
-|------|---------|----------------------|-------------|
-| `--debug` | N/A | `K3S_DEBUG` | Turn on debug logs |
-| `-v` value | 0 | N/A | Number for the log level verbosity |
-| `--vmodule` value | N/A | N/A | Comma-separated list of pattern=N settings for file-filtered logging |
-| `--log value, -l` value | N/A | N/A | Log to file |
-| `--alsologtostderr` | N/A | N/A | Log to standard error as well as file (if set) |
-
-### Cluster Options
-| Flag | Environment Variable | Description |
-|------|----------------------|-------------|
-| `--token value, -t` value | `K3S_TOKEN` | Token to use for authentication |
-| `--token-file` value | `K3S_TOKEN_FILE` | Token file to use for authentication |
-| `--server value, -s` value | `K3S_URL` | Server to connect to |
-
-
-### Data
-| Flag | Default | Description |
-|------|---------|-------------|
-| `--data-dir value, -d` value | "/var/lib/rancher/k3s" | Folder to hold state |
-
-### Node
-| Flag | Default | Environment Variable | Description |
-|------|---------|----------------------|-------------|
-| `--node-name` value | N/A | `K3S_NODE_NAME` | Node name |
-| `--with-node-id` | N/A | N/A | Append id to node name |
-| `--node-label` value | N/A | N/A | Registering and starting kubelet with set of labels |
-| `--node-taint` value | N/A | N/A | Registering kubelet with set of taints |
-| `--image-credential-provider-bin-dir` value | "/var/lib/rancher/credentialprovider/bin" | N/A | The path to the directory where credential provider plugin binaries are located |
-| `--image-credential-provider-config` value | "/var/lib/rancher/credentialprovider/config.yaml" | N/A | The path to the credential provider plugin config file |
-| `--protect-kernel-defaults` | N/A | N/A | Kernel tuning behavior. If set, error if kernel tunables are different than kubelet defaults |
-| `--selinux` | N/A | `K3S_SELINUX` | Enable SELinux in containerd. |
-| `--lb-server-port` value | 6444 | `K3S_LB_SERVER_PORT` | Local port for supervisor client load-balancer. If the supervisor and apiserver are not colocated an additional port 1 less than this port will also be used for the apiserver client load-balancer. |
-
-### Runtime
-| Flag | Default | Description |
-|------|---------|-------------|
-| `--docker` | N/A | Use docker instead of containerd |
-| `--container-runtime-endpoint` value | N/A | Disable embedded containerd and use alternative CRI implementation |
-| `--pause-image` value | "docker.io/rancher/pause:3.1" | Customized pause image for containerd or docker sandbox | (agent/runtime) (default: )
-| `--snapshotter` value | `overlayfs` | Override default containerd snapshotter |
-| `--private-registry` value | `/etc/rancher/k3s/registries.yaml` | Private registry configuration file |
-
-### Networking
-| Flag | Environment Variable | Description |
-|------|----------------------|-------------|
-| `--node-ip value, -i` value | N/A | IP address to advertise for node |
-| `--node-external-ip` value | N/A | External IP address to advertise for node |
-| `--resolv-conf` value | `K3S_RESOLV_CONF` | Kubelet resolv.conf file |
-| `--flannel-iface` value | N/A | Override default flannel interface |
-| `--flannel-conf` value | N/A | Override default flannel config file |
-
-> Note: if you wish to directly set the kubelet `--resolv-conf` value, use `--kubelet-arg=resolv-conf=value` instead. The k3s flag is only passed through to the kubelet if set to the path of a valid resolv.conf file.
-### Customized Flags
-| Flag | Description |
-|------|--------------|
-| `--kubelet-arg` value | Customized flag for kubelet process |
-| `--kube-proxy-arg` value | Customized flag for kube-proxy process |
-
-### Experimental
-| Flag | Description |
-|------|--------------|
-| `--rootless` | Run rootless |
-
-### Deprecated
-| Flag | Environment Variable | Description |
-|------|----------------------|-------------|
-| `--no-flannel` | N/A | Use `--flannel-backend=none` |
-| `--cluster-secret` value | `K3S_CLUSTER_SECRET` | Use `--token` |
-
-### Node Labels and Taints for Agents
-
-K3s agents can be configured with the options `--node-label` and `--node-taint` which adds a label and taint to the kubelet. The two options only add labels and/or taints at registration time, so they can only be added once and not changed after that again by running K3s commands.
-
-Below is an example showing how to add labels and a taint:
-```bash
- --node-label foo=bar \
- --node-label hello=world \
- --node-taint key1=value1:NoExecute
-```
-
-If you want to change node labels and taints after node registration you should use `kubectl`. Refer to the official Kubernetes documentation for details on how to add [taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) and [node labels.](https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes/#add-a-label-to-a-node)
-
-### K3s Agent CLI Help
-
-> If an option appears in brackets below, for example `[$K3S_URL]`, it means that the option can be passed in as an environment variable of that name.
-
-```bash
-NAME:
- k3s agent - Run node agent
-
-USAGE:
- k3s agent [OPTIONS]
-
-OPTIONS:
- --config FILE, -c FILE (config) Load configuration from FILE (default: "/etc/rancher/k3s/config.yaml") [$K3S_CONFIG_FILE]
- --debug (logging) Turn on debug logs [$K3S_DEBUG]
- -v value (logging) Number for the log level verbosity (default: 0)
- --vmodule value (logging) Comma-separated list of pattern=N settings for file-filtered logging
- --log value, -l value (logging) Log to file
- --alsologtostderr (logging) Log to standard error as well as file (if set)
- --token value, -t value (cluster) Token to use for authentication [$K3S_TOKEN]
- --token-file value (cluster) Token file to use for authentication [$K3S_TOKEN_FILE]
- --server value, -s value (cluster) Server to connect to [$K3S_URL]
- --data-dir value, -d value (agent/data) Folder to hold state (default: "/var/lib/rancher/k3s")
- --node-name value (agent/node) Node name [$K3S_NODE_NAME]
- --with-node-id (agent/node) Append id to node name
- --node-label value (agent/node) Registering and starting kubelet with set of labels
- --node-taint value (agent/node) Registering kubelet with set of taints
- --image-credential-provider-bin-dir value (agent/node) The path to the directory where credential provider plugin binaries are located (default: "/var/lib/rancher/credentialprovider/bin")
- --image-credential-provider-config value (agent/node) The path to the credential provider plugin config file (default: "/var/lib/rancher/credentialprovider/config.yaml")
- --docker (agent/runtime) Use docker instead of containerd
- --container-runtime-endpoint value (agent/runtime) Disable embedded containerd and use alternative CRI implementation
- --pause-image value (agent/runtime) Customized pause image for containerd or docker sandbox (default: "rancher/mirrored-pause:3.6")
- --snapshotter value (agent/runtime) Override default containerd snapshotter (default: "overlayfs")
- --private-registry value (agent/runtime) Private registry configuration file (default: "/etc/rancher/k3s/registries.yaml")
- --node-ip value, -i value (agent/networking) IPv4/IPv6 addresses to advertise for node
- --node-external-ip value (agent/networking) IPv4/IPv6 external IP addresses to advertise for node
- --resolv-conf value (agent/networking) Kubelet resolv.conf file [$K3S_RESOLV_CONF]
- --flannel-iface value (agent/networking) Override default flannel interface
- --flannel-conf value (agent/networking) Override default flannel config file
- --kubelet-arg value (agent/flags) Customized flag for kubelet process
- --kube-proxy-arg value (agent/flags) Customized flag for kube-proxy process
- --protect-kernel-defaults (agent/node) Kernel tuning behavior. If set, error if kernel tunables are different than kubelet defaults.
- --rootless (experimental) Run rootless
- --selinux (agent/node) Enable SELinux in containerd [$K3S_SELINUX]
- --lb-server-port value (agent/node) Local port for supervisor client load-balancer. If the supervisor and apiserver are not colocated an additional port 1 less than this port will also be used for the apiserver client load-balancer. (default: 6444) [$K3S_LB_SERVER_PORT]
- --no-flannel (deprecated) use --flannel-backend=none
- --cluster-secret value (deprecated) use --token [$K3S_CLUSTER_SECRET]
-```
diff --git a/content/k3s/latest/en/installation/install-options/how-to-flags/_index.md b/content/k3s/latest/en/installation/install-options/how-to-flags/_index.md
deleted file mode 100644
index 447dfdc40f9..00000000000
--- a/content/k3s/latest/en/installation/install-options/how-to-flags/_index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: How to Use Flags and Environment Variables
-weight: 3
----
-
-Throughout the K3s documentation, you will see some options that can be passed in as both command flags and environment variables. The below examples show how these options can be passed in both ways.
-
-### Example A: K3S_KUBECONFIG_MODE
-
-The option to allow writing to the kubeconfig file is useful for allowing a K3s cluster to be imported into Rancher. Below are two ways to pass in the option.
-
-Using the flag `--write-kubeconfig-mode 644`:
-
-```bash
-$ curl -sfL https://get.k3s.io | sh -s - --write-kubeconfig-mode 644
-```
-Using the environment variable `K3S_KUBECONFIG_MODE`:
-
-```bash
-$ curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" sh -s -
-```
-
-### Example B: INSTALL_K3S_EXEC
-
-If this command is not specified as a server or agent command, it will default to "agent" if `K3S_URL` is set, or "server" if it is not set.
-
-The final systemd command resolves to a combination of this environment variable and script args. To illustrate this, the following commands result in the same behavior of registering a server without flannel:
-
-```bash
-curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--flannel-backend none" sh -s -
-curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --flannel-backend none" sh -s -
-curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server" sh -s - --flannel-backend none
-curl -sfL https://get.k3s.io | sh -s - server --flannel-backend none
-curl -sfL https://get.k3s.io | sh -s - --flannel-backend none
-```
-
-### Example C: CONFIG FILE
-
-Before installing k3s, you can create a file called `config.yaml` containing fields that match CLI flags. That file needs to be in the path: `/etc/rancher/k3s/config.yaml` for k3s to consume it.
-
-The fields in the config file drop the starting `--` from the matching CLI flag. For example:
-
-```
-write-kubeconfig-mode: 644
-token: "secret"
-node-ip: 10.0.10.22,2a05:d012:c6f:4655:d73c:c825:a184:1b75
-cluster-cidr: 10.42.0.0/16,2001:cafe:42:0::/56
-service-cidr: 10.43.0.0/16,2001:cafe:42:1::/112
-```
diff --git a/content/k3s/latest/en/installation/install-options/server-config/_index.md b/content/k3s/latest/en/installation/install-options/server-config/_index.md
deleted file mode 100644
index 853d2ccb491..00000000000
--- a/content/k3s/latest/en/installation/install-options/server-config/_index.md
+++ /dev/null
@@ -1,301 +0,0 @@
----
-title: K3s Server Configuration Reference
-weight: 1
----
-
-In this section, you'll learn how to configure the K3s server.
-
-> Throughout the K3s documentation, you will see some options that can be passed in as both command flags and environment variables. For help with passing in options, refer to [How to Use Flags and Environment Variables.]({{}}/k3s/latest/en/installation/install-options/how-to-flags)
-
-- [Commonly Used Options](#commonly-used-options)
- - [Database](#database)
- - [Cluster Options](#cluster-options)
- - [Client Options](#client-options)
-- [Agent Options](#agent-options)
- - [Agent Nodes](#agent-nodes)
- - [Agent Runtime](#agent-runtime)
- - [Agent Networking](#agent-networking)
-- [Advanced Options](#advanced-options)
- - [Logging](#logging)
- - [Listeners](#listeners)
- - [Data](#data)
- - [Networking](#networking)
- - [Customized Options](#customized-options)
- - [Storage Class](#storage-class)
- - [Kubernetes Components](#kubernetes-components)
- - [Customized Flags for Kubernetes Processes](#customized-flags-for-kubernetes-processes)
- - [Experimental Options](#experimental-options)
- - [Deprecated Options](#deprecated-options)
-- [K3s Server Cli Help](#k3s-server-cli-help)
-
-
-# Commonly Used Options
-
-### Database
-
-| Flag | Environment Variable | Description |
-|------|----------------------|-------------|
-| `--datastore-endpoint` value | `K3S_DATASTORE_ENDPOINT` | Specify etcd, Mysql, Postgres, or Sqlite (default) data source name |
-| `--datastore-cafile` value | `K3S_DATASTORE_CAFILE` | TLS Certificate Authority file used to secure datastore backend communication |
-| `--datastore-certfile` value | `K3S_DATASTORE_CERTFILE` | TLS certification file used to secure datastore backend communication |
-| `--datastore-keyfile` value | `K3S_DATASTORE_KEYFILE` | TLS key file used to secure datastore backend communication |
-| `--etcd-expose-metrics` | N/A | Expose etcd metrics to client interface. (Default false) |
-| `--etcd-disable-snapshots` | N/A | Disable automatic etcd snapshots |
-| `--etcd-snapshot-name` value | N/A | Set the base name of etcd snapshots. Default: etcd-snapshot- (default: "etcd-snapshot") |
-| `--etcd-snapshot-schedule-cron` value | N/A | Snapshot interval time in cron spec. eg. every 5 hours '* */5 * * *' (default: "0 */12 * * *") |
-| `--etcd-snapshot-retention` value | N/A | Number of snapshots to retain (Default: 5) |
-| `--etcd-snapshot-dir` value | N/A | Directory to save db snapshots. (Default location: ${data-dir}/db/snapshots) |
-| `--etcd-s3` | N/A | Enable backup to S3 |
-| `--etcd-s3-endpoint` value | N/A | S3 endpoint url (default: "s3.amazonaws.com") |
-| `--etcd-s3-endpoint-ca` value | N/A | S3 custom CA cert to connect to S3 endpoint |
-| `--etcd-s3-skip-ssl-verify` | N/A | Disables S3 SSL certificate validation |
-| `--etcd-s3-access-key` value | `AWS_ACCESS_KEY_ID` | S3 access key |
-| `--etcd-s3-secret-key` value | `AWS_SECRET_ACCESS_KEY` | S3 secret key |
-| `--etcd-s3-bucket` value | N/A | S3 bucket name |
-| `--etcd-s3-region` value | N/A | S3 region / bucket location (optional) (default: "us-east-1") |
-| `--etcd-s3-folder` value | N/A | S3 folder |
-
-### Cluster Options
-
-| Flag | Environment Variable | Description |
-|------|----------------------|-------------|
-| `--token value, -t` value | `K3S_TOKEN` | Shared secret used to join a server or agent to a cluster |
-| `--token-file` value | `K3S_TOKEN_FILE` | File containing the cluster-secret/token |
-
-### Client Options
-
-| Flag | Environment Variable | Description |
-|------|----------------------|-------------|
-| `--write-kubeconfig value, -o` value | `K3S_KUBECONFIG_OUTPUT` | Write kubeconfig for admin client to this file |
-| `--write-kubeconfig-mode` value | `K3S_KUBECONFIG_MODE` | Write kubeconfig with this [mode.](https://en.wikipedia.org/wiki/Chmod) The option to allow writing to the kubeconfig file is useful for allowing a K3s cluster to be imported into Rancher. An example value is 644. |
-
-# Agent Options
-
-K3s agent options are available as server options because the server has the agent process embedded within.
-
-### Agent Nodes
-
-| Flag | Environment Variable | Description |
-|------|----------------------|-------------|
-| `--node-name` value | `K3S_NODE_NAME` | Node name |
-| `--with-node-id` | N/A | Append id to node name | (agent/node)
-| `--node-label` value | N/A | Registering and starting kubelet with set of labels |
-| `--node-taint` value | N/A | Registering kubelet with set of taints |
-| `--image-credential-provider-bin-dir` value | N/A | The path to the directory where credential provider plugin binaries are located (default: "/var/lib/rancher/credentialprovider/bin") |
-| `--image-credential-provider-config` value | N/A | The path to the credential provider plugin config file (default: "/var/lib/rancher/credentialprovider/config.yaml") |
-| `--selinux` | `K3S_SELINUX` | Enable SELinux in containerd |
-| `--lb-server-port` value | `K3S_LB_SERVER_PORT` | Local port for supervisor client load-balancer. If the supervisor and apiserver are not colocated an additional port 1 less than this port will also be used for the apiserver client load-balancer. (default: 6444) |
-
-### Agent Runtime
-
-| Flag | Default | Description |
-|------|---------|-------------|
-| `--docker` | N/A | Use docker instead of containerd | (agent/runtime)
-| `--container-runtime-endpoint` value | N/A | Disable embedded containerd and use alternative CRI implementation |
-| `--pause-image` value | "docker.io/rancher/pause:3.1" | Customized pause image for containerd or Docker sandbox |
-| `--snapshotter` value | N/A | Override default containerd snapshotter (default: "overlayfs") |
-| `--private-registry` value | "/etc/rancher/k3s/registries.yaml" | Private registry configuration file |
-
-### Agent Networking
-
-the agent options are there because the server has the agent process embedded within
-
-| Flag | Environment Variable | Description |
-|------|----------------------|-------------|
-| `--node-ip value, -i` value | N/A | IP address to advertise for node |
-| `--node-external-ip` value | N/A | External IP address to advertise for node |
-| `--resolv-conf` value | `K3S_RESOLV_CONF` | Kubelet resolv.conf file |
-| `--flannel-iface` value | N/A | Override default flannel interface |
-| `--flannel-conf` value | N/A | Override default flannel config file |
-
-# Advanced Options
-
-### Logging
-
-| Flag | Default | Description |
-|------|---------|-------------|
-| `--debug` | N/A | Turn on debug logs |
-| `-v` value | 0 | Number for the log level verbosity |
-| `--vmodule` value | N/A | Comma-separated list of pattern=N settings for file-filtered logging |
-| `--log value, -l` value | N/A | Log to file |
-| `--alsologtostderr` | N/A | Log to standard error as well as file (if set) |
-
-
-### Listeners
-
-| Flag | Default | Description |
-|------|---------|-------------|
-| `--bind-address` value | 0.0.0.0 | k3s bind address |
-| `--https-listen-port` value | 6443 | HTTPS listen port |
-| `--advertise-address` value | node-external-ip/node-ip | IP address that apiserver uses to advertise to members of the cluster |
-| `--advertise-port` value | 0 | Port that apiserver uses to advertise to members of the cluster (default: listen-port) |
-| `--tls-san` value | N/A | Add additional hostname or IP as a Subject Alternative Name in the TLS cert
-
-### Data
-
-| Flag | Default | Description |
-|------|---------|-------------|
-| `--data-dir value, -d` value | `/var/lib/rancher/k3s` or `${HOME}/.rancher/k3s` if not root | Folder to hold state |
-
-### Networking
-
-| Flag | Default | Description |
-|------|---------|-------------|
-| `--cluster-cidr` value | "10.42.0.0/16" | Network CIDR to use for pod IPs |
-| `--service-cidr` value | "10.43.0.0/16" | Network CIDR to use for services IPs |
-| `--service-node-port-range` value | "30000-32767" | Port range to reserve for services with NodePort visibility |
-| `--cluster-dns` value | "10.43.0.10" | Cluster IP for coredns service. Should be in your service-cidr range |
-| `--cluster-domain` value | "cluster.local" | Cluster Domain |
-| `--flannel-backend` value | "vxlan" | One of 'none', 'vxlan', 'ipsec', 'host-gw', or 'wireguard' |
-
-### Customized Flags
-
-| Flag | Description |
-|------|--------------|
-| `--etcd-arg` value | Customized flag for etcd process |
-| `--kube-apiserver-arg` value | Customized flag for kube-apiserver process |
-| `--kube-scheduler-arg` value | Customized flag for kube-scheduler process |
-| `--kube-controller-manager-arg` value | Customized flag for kube-controller-manager process |
-| `--kube-cloud-controller-manager-arg` value | Customized flag for kube-cloud-controller-manager process |
-
-### Storage Class
-
-| Flag | Description |
-|------|--------------|
-| `--default-local-storage-path` value | Default local storage path for local provisioner storage class |
-
-### Kubernetes Components
-
-| Flag | Description |
-|------|--------------|
-| `--disable` value | Do not deploy packaged components and delete any deployed components (valid items: coredns, servicelb, traefik,local-storage, metrics-server) |
-| `--disable-scheduler` | Disable Kubernetes default scheduler |
-| `--disable-cloud-controller` | Disable k3s default cloud controller manager |
-| `--disable-kube-proxy` | Disable running kube-proxy |
-| `--disable-network-policy` | Disable k3s default network policy controller |
-
-### Customized Flags for Kubernetes Processes
-
-| Flag | Description |
-|------|--------------|
-| `--kubelet-arg` value | Customized flag for kubelet process |
-| `--kube-proxy-arg` value | Customized flag for kube-proxy process |
-
-### Experimental Options
-
-| Flag | Environment Variable | Description |
-|------|----------------------|-------------|
-| `--rootless` | N/A | Run rootless | (experimental)
-| `--agent-token` value | `K3S_AGENT_TOKEN` | Shared secret used to join agents to the cluster, but not servers |
-| `--agent-token-file` value | `K3S_AGENT_TOKEN_FILE` | File containing the agent secret |
-| `--server value, -s` value | `K3S_URL` | Server to connect to, used to join a cluster |
-| `--cluster-init` | `K3S_CLUSTER_INIT` | Initialize new cluster master |
-| `--cluster-reset` | `K3S_CLUSTER_RESET` | Forget all peers and become a single cluster new cluster master |
-| `--secrets-encryption` | N/A | Enable Secret encryption at rest |
-
-### Deprecated Options
-
-| Flag | Environment Variable | Description |
-|------|----------------------|-------------|
-| `--no-flannel` | N/A | Use --flannel-backend=none |
-| `--no-deploy` value | N/A | Do not deploy packaged components (valid items: coredns, servicelb, traefik, local-storage, metrics-server) |
-| `--cluster-secret` value | `K3S_CLUSTER_SECRET` | Use --token |
-
-
-# K3s Server CLI Help
-
-> If an option appears in brackets below, for example `[$K3S_TOKEN]`, it means that the option can be passed in as an environment variable of that name.
-
-```bash
-NAME:
- k3s server - Run management server
-
-USAGE:
- k3s server [OPTIONS]
-
-OPTIONS:
- --config FILE, -c FILE (config) Load configuration from FILE (default: "/etc/rancher/k3s/config.yaml") [$K3S_CONFIG_FILE] --debug (logging) Turn on debug logs [$K3S_DEBUG]
- -v value (logging) Number for the log level verbosity (default: 0)
- --vmodule value (logging) Comma-separated list of pattern=N settings for file-filtered logging
- --log value, -l value (logging) Log to file
- --alsologtostderr (logging) Log to standard error as well as file (if set)
- --bind-address value (listener) k3s bind address (default: 0.0.0.0)
- --https-listen-port value (listener) HTTPS listen port (default: 6443)
- --advertise-address value (listener) IP address that apiserver uses to advertise to members of the cluster (default: node-external-ip/node-ip)
- --advertise-port value (listener) Port that apiserver uses to advertise to members of the cluster (default: listen-port) (default: 0)
- --tls-san value (listener) Add additional hostname or IP as a Subject Alternative Name in the TLS cert
- --data-dir value, -d value (data) Folder to hold state default /var/lib/rancher/k3s or ${HOME}/.rancher/k3s if not root
- --cluster-cidr value (networking) Network CIDR to use for pod IPs (default: "10.42.0.0/16")
- --service-cidr value (networking) Network CIDR to use for services IPs (default: "10.43.0.0/16")
- --service-node-port-range value (networking) Port range to reserve for services with NodePort visibility (default: "30000-32767")
- --cluster-dns value (networking) Cluster IP for coredns service. Should be in your service-cidr range (default: 10.43.0.10)
- --cluster-domain value (networking) Cluster Domain (default: "cluster.local")
- --flannel-backend value (networking) One of 'none', 'vxlan', 'ipsec', 'host-gw', or 'wireguard' (default: "vxlan")
- --token value, -t value (cluster) Shared secret used to join a server or agent to a cluster [$K3S_TOKEN]
- --token-file value (cluster) File containing the cluster-secret/token [$K3S_TOKEN_FILE]
- --write-kubeconfig value, -o value (client) Write kubeconfig for admin client to this file [$K3S_KUBECONFIG_OUTPUT]
- --write-kubeconfig-mode value (client) Write kubeconfig with this mode [$K3S_KUBECONFIG_MODE]
- --etcd-arg value (flags) Customized flag for etcd process
- --kube-apiserver-arg value (flags) Customized flag for kube-apiserver process
- --kube-scheduler-arg value (flags) Customized flag for kube-scheduler process
- --kube-controller-manager-arg value (flags) Customized flag for kube-controller-manager process
- --kube-cloud-controller-manager-arg value (flags) Customized flag for kube-cloud-controller-manager process
- --datastore-endpoint value (db) Specify etcd, Mysql, Postgres, or Sqlite (default) data source name [$K3S_DATASTORE_ENDPOINT]
- --datastore-cafile value (db) TLS Certificate Authority file used to secure datastore backend communication [$K3S_DATASTORE_CAFILE]
- --datastore-certfile value (db) TLS certification file used to secure datastore backend communication [$K3S_DATASTORE_CERTFILE]
- --datastore-keyfile value (db) TLS key file used to secure datastore backend communication [$K3S_DATASTORE_KEYFILE]
- --etcd-expose-metrics (db) Expose etcd metrics to client interface. (Default false)
- --etcd-disable-snapshots (db) Disable automatic etcd snapshots
- --etcd-snapshot-name value (db) Set the base name of etcd snapshots. Default: etcd-snapshot- (default: "etcd-snapshot")
- --etcd-snapshot-schedule-cron value (db) Snapshot interval time in cron spec. eg. every 5 hours '* */5 * * *' (default: "0 */12 * * *")
- --etcd-snapshot-retention value (db) Number of snapshots to retain Default: 5 (default: 5)
- --etcd-snapshot-dir value (db) Directory to save db snapshots. (Default location: ${data-dir}/db/snapshots)
- --etcd-s3 (db) Enable backup to S3
- --etcd-s3-endpoint value (db) S3 endpoint url (default: "s3.amazonaws.com")
- --etcd-s3-endpoint-ca value (db) S3 custom CA cert to connect to S3 endpoint
- --etcd-s3-skip-ssl-verify (db) Disables S3 SSL certificate validation
- --etcd-s3-access-key value (db) S3 access key [$AWS_ACCESS_KEY_ID]
- --etcd-s3-secret-key value (db) S3 secret key [$AWS_SECRET_ACCESS_KEY]
- --etcd-s3-bucket value (db) S3 bucket name
- --etcd-s3-region value (db) S3 region / bucket location (optional) (default: "us-east-1")
- --etcd-s3-folder value (db) S3 folder
- --default-local-storage-path value (storage) Default local storage path for local provisioner storage class
- --disable value (components) Do not deploy packaged components and delete any deployed components (valid items: coredns, servicelb, traefik, local-storage, metrics-server)
- --disable-scheduler (components) Disable Kubernetes default scheduler
- --disable-cloud-controller (components) Disable k3s default cloud controller manager
- --disable-kube-proxy (components) Disable running kube-proxy
- --disable-network-policy (components) Disable k3s default network policy controller
- --node-name value (agent/node) Node name [$K3S_NODE_NAME]
- --with-node-id (agent/node) Append id to node name
- --node-label value (agent/node) Registering and starting kubelet with set of labels
- --node-taint value (agent/node) Registering kubelet with set of taints
- --image-credential-provider-bin-dir value (agent/node) The path to the directory where credential provider plugin binaries are located (default: "/var/lib/rancher/credentialprovider/bin")
- --image-credential-provider-config value (agent/node) The path to the credential provider plugin config file (default: "/var/lib/rancher/credentialprovider/config.yaml")
- --docker (agent/runtime) Use docker instead of containerd
- --container-runtime-endpoint value (agent/runtime) Disable embedded containerd and use alternative CRI implementation
- --pause-image value (agent/runtime) Customized pause image for containerd or docker sandbox (default: "docker.io/rancher/pause:3.1")
- --snapshotter value (agent/runtime) Override default containerd snapshotter (default: "overlayfs")
- --private-registry value (agent/runtime) Private registry configuration file (default: "/etc/rancher/k3s/registries.yaml")
- --node-ip value, -i value (agent/networking) IP address to advertise for node
- --node-external-ip value (agent/networking) External IP address to advertise for node
- --resolv-conf value (agent/networking) Kubelet resolv.conf file [$K3S_RESOLV_CONF]
- --flannel-iface value (agent/networking) Override default flannel interface
- --flannel-conf value (agent/networking) Override default flannel config file
- --kubelet-arg value (agent/flags) Customized flag for kubelet process
- --kube-proxy-arg value (agent/flags) Customized flag for kube-proxy process
- --protect-kernel-defaults (agent/node) Kernel tuning behavior. If set, error if kernel tunables are different than kubelet defaults.
- --rootless (experimental) Run rootless
- --agent-token value (experimental/cluster) Shared secret used to join agents to the cluster, but not servers [$K3S_AGENT_TOKEN]
- --agent-token-file value (experimental/cluster) File containing the agent secret [$K3S_AGENT_TOKEN_FILE]
- --server value, -s value (experimental/cluster) Server to connect to, used to join a cluster [$K3S_URL]
- --cluster-init (experimental/cluster) Initialize new cluster master [$K3S_CLUSTER_INIT]
- --cluster-reset (experimental/cluster) Forget all peers and become a single cluster new cluster master [$K3S_CLUSTER_RESET]
- --cluster-reset-restore-path value (db) Path to snapshot file to be restored
- --secrets-encryption (experimental) Enable Secret encryption at rest
- --system-default-registry value (image) Private registry to be used for all system images [$K3S_SYSTEM_DEFAULT_REGISTRY]
- --selinux (agent/node) Enable SELinux in containerd [$K3S_SELINUX]
- --lb-server-port value (agent/node) Local port for supervisor client load-balancer. If the supervisor and apiserver are not colocated an additional port 1 less than this port will also be used for the apiserver client load-balancer. (default: 6444) [$K3S_LB_SERVER_PORT]
- --no-flannel (deprecated) use --flannel-backend=none
- --no-deploy value (deprecated) Do not deploy packaged components (valid items: coredns, servicelb, traefik, local-storage, metrics-server)
- --cluster-secret value (deprecated) use --token [$K3S_CLUSTER_SECRET]
-```
diff --git a/content/k3s/latest/en/installation/installation-requirements/_index.md b/content/k3s/latest/en/installation/installation-requirements/_index.md
deleted file mode 100644
index f4fd336d7f7..00000000000
--- a/content/k3s/latest/en/installation/installation-requirements/_index.md
+++ /dev/null
@@ -1,108 +0,0 @@
----
-title: Installation Requirements
-weight: 1
-aliases:
- - /k3s/latest/en/installation/node-requirements/
----
-
-K3s is very lightweight, but has some minimum requirements as outlined below.
-
-Whether you're configuring a K3s cluster to run in a Docker or Kubernetes setup, each node running K3s should meet the following minimum requirements. You may need more resources to fit your needs.
-
-## Prerequisites
-
-Two nodes cannot have the same hostname.
-
-If all your nodes have the same hostname, use the `--with-node-id` option to append a random suffix for each node, or otherwise devise a unique name to pass with `--node-name` or `$K3S_NODE_NAME` for each node you add to the cluster.
-
-## Operating Systems
-
-K3s is expected to work on most modern Linux systems.
-
-Some OSs have specific requirements:
-
-- If you are using **Raspbian Buster**, follow [these steps]({{}}/k3s/latest/en/advanced/#enabling-legacy-iptables-on-raspbian-buster) to switch to legacy iptables.
-- If you are using **Alpine Linux**, follow [these steps]({{}}/k3s/latest/en/advanced/#additional-preparation-for-alpine-linux-setup) for additional setup.
-- If you are using **(Red Hat/CentOS) Enterprise Linux**, follow [these steps]({{}}/k3s/latest/en/advanced/#additional-preparation-for-red-hat-centos-enterprise-linux) for additional setup.
-
-For more information on which OSs were tested with Rancher managed K3s clusters, refer to the [Rancher support and maintenance terms.](https://rancher.com/support-maintenance-terms/)
-
-## Hardware
-
-Hardware requirements scale based on the size of your deployments. Minimum recommendations are outlined here.
-
-* RAM: 512MB Minimum (we recommend at least 1GB)
-* CPU: 1 Minimum
-
-[This section](./resource-profiling) captures the results of tests to determine minimum resource requirements for the K3s agent, the K3s server with a workload, and the K3s server with one agent. It also contains analysis about what has the biggest impact on K3s server and agent utilization, and how the cluster datastore can be protected from interference from agents and workloads.
-
-#### Disks
-
-K3s performance depends on the performance of the database. To ensure optimal speed, we recommend using an SSD when possible. Disk performance will vary on ARM devices utilizing an SD card or eMMC.
-
-## Networking
-
-The K3s server needs port 6443 to be accessible by all nodes.
-
-The nodes need to be able to reach other nodes over UDP port 8472 when Flannel VXLAN is used or over UDP ports 51820 and 51821 (when using IPv6) when Flannel Wireguard backend is used. The node should not listen on any other port. K3s uses reverse tunneling such that the nodes make outbound connections to the server and all kubelet traffic runs through that tunnel. However, if you do not use Flannel and provide your own custom CNI, then the ports needed by Flannel are not needed by K3s.
-
-If you wish to utilize the metrics server, you will need to open port 10250 on each node.
-
-If you plan on achieving high availability with embedded etcd, server nodes must be accessible to each other on ports 2379 and 2380.
-
-> **Important:** The VXLAN port on nodes should not be exposed to the world as it opens up your cluster network to be accessed by anyone. Run your nodes behind a firewall/security group that disables access to port 8472.
-> **Warning:** Flannel relies on the [Bridge CNI plugin](https://www.cni.dev/plugins/current/main/bridge/) to create a L2 network that switches traffic. Rogue pods with NET_RAW capabilities can abuse that L2 network to launch attacks such as [ARP spoofing](https://static.sched.com/hosted_files/kccncna19/72/ARP%20DNS%20spoof.pdf). Therefore, as documented in the [kubernetes docs](https://kubernetes.io/docs/concepts/security/pod-security-standards/), please set a restricted profile that disables NET_RAW on non-trustable pods.
-
-Inbound Rules for K3s Server Nodes
-
-| Protocol | Port | Source | Description
-|-----|-----|----------------|---|
-| TCP | 6443 | K3s agent nodes | Kubernetes API Server
-| UDP | 8472 | K3s server and agent nodes | Required only for Flannel VXLAN
-| UDP | 51820 | K3s server and agent nodes | Required only for Flannel Wireguard backend
-| UDP | 51821 | K3s server and agent nodes | Required only for Flannel Wireguard backend with IPv6
-| TCP | 10250 | K3s server and agent nodes | Kubelet metrics
-| TCP | 2379-2380 | K3s server nodes | Required only for HA with embedded etcd
-
-Typically all outbound traffic is allowed.
-
-## Large Clusters
-
-Hardware requirements are based on the size of your K3s cluster. For production and large clusters, we recommend using a high-availability setup with an external database. The following options are recommended for the external database in production:
-
-- MySQL
-- PostgreSQL
-- etcd
-
-### CPU and Memory
-
-The following are the minimum CPU and memory requirements for nodes in a high-availability K3s server:
-
-| Deployment Size | Nodes | VCPUS | RAM |
-|:---------------:|:---------:|:-----:|:-----:|
-| Small | Up to 10 | 2 | 4 GB |
-| Medium | Up to 100 | 4 | 8 GB |
-| Large | Up to 250 | 8 | 16 GB |
-| X-Large | Up to 500 | 16 | 32 GB |
-| XX-Large | 500+ | 32 | 64 GB |
-
-### Disks
-
-The cluster performance depends on database performance. To ensure optimal speed, we recommend always using SSD disks to back your K3s cluster. On cloud providers, you will also want to use the minimum size that allows the maximum IOPS.
-
-### Network
-
-You should consider increasing the subnet size for the cluster CIDR so that you don't run out of IPs for the pods. You can do that by passing the `--cluster-cidr` option to K3s server upon starting.
-
-### Database
-
-K3s supports different databases including MySQL, PostgreSQL, MariaDB, and etcd, the following is a sizing guide for the database resources you need to run large clusters:
-
-| Deployment Size | Nodes | VCPUS | RAM |
-|:---------------:|:---------:|:-----:|:-----:|
-| Small | Up to 10 | 1 | 2 GB |
-| Medium | Up to 100 | 2 | 8 GB |
-| Large | Up to 250 | 4 | 16 GB |
-| X-Large | Up to 500 | 8 | 32 GB |
-| XX-Large | 500+ | 16 | 64 GB |
-
diff --git a/content/k3s/latest/en/installation/installation-requirements/resource-profiling/_index.md b/content/k3s/latest/en/installation/installation-requirements/resource-profiling/_index.md
deleted file mode 100644
index 53866c533c8..00000000000
--- a/content/k3s/latest/en/installation/installation-requirements/resource-profiling/_index.md
+++ /dev/null
@@ -1,139 +0,0 @@
----
-title: K3s Resource Profiling
-shortTitle: Resource Profiling
-weight: 1
----
-
-This section captures the results of tests to determine minimum resource requirements for K3s.
-
-The results are summarized as follows:
-
-| Components | Processor | Min CPU | Min RAM with Kine/SQLite | Min RAM with Embedded etcd |
-|------------|-----|----------|-------------------------|---------------------------|
-| K3s server with a workload | Intel(R) Xeon(R) Platinum 8124M CPU, 3.00 GHz | 10% of a core | 768 M | 896 M |
-| K3s cluster with a single agent | Intel(R) Xeon(R) Platinum 8124M CPU, 3.00 GHz | 10% of a core | 512 M | 768 M |
-| K3s agent | Intel(R) Xeon(R) Platinum 8124M CPU, 3.00 GHz | 5% of a core | 256 M | 256 M |
-| K3s server with a workload | Pi4B BCM2711, 1.50 GHz | 20% of a core | 768 M | 896 M |
-| K3s cluster with a single agent | Pi4B BCM2711, 1.50 GHz | 20% of a core | 512 M | 768 M |
-| K3s agent | Pi4B BCM2711, 1.50 GHz | 10% of a core | 256 M | 256 M |
-
-- [Scope of Resource Testing](#scope-of-resource-testing)
-- [Components Included for Baseline Measurements](#components-included-for-baseline-measurements)
-- [Methodology](#methodology)
-- [Environment](#environment)
-- [Baseline Resource Requirements](#baseline-resource-requirements)
- - [K3s Server with a Workload](#k3s-server-with-a-workload)
- - [K3s Cluster with a Single Agent](#k3s-cluster-with-a-single-agent)
- - [K3s Agent](#k3s-agent)
-- [Analysis](#analysis)
- - [Primary Resource Utilization Drivers](#primary-resource-utilization-drivers)
- - [Preventing Agents and Workloads from Interfering with the Cluster Datastore](#preventing-agents-and-workloads-from-interfering-with-the-cluster-datastore)
-
-# Scope of Resource Testing
-
-The resource tests were intended to address the following problem statements:
-
-- On a single-node cluster, determine the legitimate minimum amount of CPU, memory, and IOPs that should be set aside to run the entire K3s stack server stack, assuming that a real workload will be deployed on the cluster.
-- On an agent (worker) node, determine the legitimate minimum amount of CPU, memory, and IOPs that should be set aside for the Kubernetes and K3s control plane components (the kubelet and k3s agent).
-
-# Components Included for Baseline Measurements
-
-The tested components are:
-
-* K3s 1.19.2 with all packaged components enabled
-* Prometheus + Grafana monitoring stack
-* Kubernetes Example PHP Guestbook app
-
-These are baseline figures for a stable system using only K3s packaged components (Traefik Ingress, Klipper lb, local-path storage) running a standard monitoring stack (Prometheus and Grafana) and the Guestbook example app.
-
-Resource figures including IOPS are for the Kubernetes datastore and control plane only, and do not include overhead for system-level management agents or logging, container image management, or any workload-specific requirements.
-
-# Methodology
-
-A standalone instance of Prometheus v2.21.0 was used to collect host CPU, memory, and disk IO statistics using `prometheus-node-exporter` installed via apt.
-
-`systemd-cgtop` was used to spot-check systemd cgroup-level CPU and memory utilization. `system.slice/k3s.service` tracks resource utilization for both K3s and containerd, while individual pods are under the `kubepods` hierarchy.
-
-Additional detailed K3s memory utilization data was collected from the `process_resident_memory_bytes` and `go_memstats_alloc_bytes` metrics using the kubelet exporter integrated into the server and agent processes.
-
-Utilization figures were based on 95th percentile readings from steady state operation on nodes running the described workloads.
-
-# Environment
-
-OS: Ubuntu 20.04 x86_64, aarch64
-
-Hardware:
-
-- AWS c5d.xlarge - 4 core, 8 GB RAM, NVME SSD
-- Raspberry Pi 4 Model B - 4 core, 8 GB RAM, Class 10 SDHC
-
-# Baseline Resource Requirements
-
-This section captures the results of tests to determine minimum resource requirements for the K3s agent, the K3s server with a workload, and the K3s server with one agent.
-
-### K3s Server with a Workload
-
-These are the requirements for a single-node cluster in which the K3s server shares resources with a workload.
-
-The CPU requirements are:
-
-| Resource Requirement | Tested Processor |
-|-----------|-----------------|
-| 10% of a core | Intel(R) Xeon(R) Platinum 8124M CPU, 3.00 GHz |
-| 20% of a core | Low-power processor such as Pi4B BCM2711, 1.50 GHz |
-
-The IOPS and memory requirements are:
-
-| Tested Datastore | IOPS | KiB/sec | Latency | RAM |
-|-----------|------|---------|---------|--------|
-| Kine/SQLite | 10 | 500 | < 10 ms | 768 M |
-| Embedded etcd | 50 | 250 | < 5 ms | 896 M |
-
-### K3s Cluster with a Single Agent
-
-These are the baseline requirements for a K3s cluster with a K3s server node and a K3s agent, but no workload.
-
-The CPU requirements are:
-
-| Resource Requirement | Tested Processor |
-|-----------|-----------------|
-| 10% of a core | Intel(R) Xeon(R) Platinum 8124M CPU, 3.00 GHz |
-| 20% of a core | Pi4B BCM2711, 1.50 GHz |
-
-The IOPS and memory requirements are:
-
-| Datastore | IOPS | KiB/sec | Latency | RAM |
-|-----------|------|---------|---------|--------|
-| Kine/SQLite | 10 | 500 | < 10 ms | 512 M |
-| Embedded etcd | 50 | 250 | < 5 ms | 768 M |
-
-### K3s Agent
-
-The CPU requirements are:
-
- Resource Requirement | Tested Processor |
-|-----------|-----------------|
-| 5% of a core | Intel(R) Xeon(R) Platinum 8124M CPU, 3.00 GHz |
-| 10% of a core | Pi4B BCM2711, 1.50 GHz |
-
-256 M of RAM is required.
-
-# Analysis
-
-This section captures what has the biggest impact on K3s server and agent utilization, and how the cluster datastore can be protected from interference from agents and workloads.
-
-### Primary Resource Utilization Drivers
-
-K3s server utilization figures are primarily driven by support of the Kubernetes datastore (kine or etcd), API Server, Controller-Manager, and Scheduler control loops, as well as any management tasks necessary to effect changes to the state of the system. Operations that place additional load on the Kubernetes control plane, such as creating/modifying/deleting resources, will cause temporary spikes in utilization. Using operators or apps that make extensive use of the Kubernetes datastore (such as Rancher or other Operator-type applications) will increase the server's resource requirements. Scaling up the cluster by adding additional nodes or creating many cluster resources will increase the server's resource requirements.
-
-K3s agent utilization figures are primarily driven by support of container lifecycle management control loops. Operations that involve managing images, provisioning storage, or creating/destroying containers will cause temporary spikes in utilization. Image pulls in particular are typically highly CPU and IO bound, as they involve decompressing image content to disk. If possible, workload storage (pod ephemeral storage and volumes) should be isolated from the agent components (/var/lib/rancher/k3s/agent) to ensure that there are no resource conflicts.
-
-### Preventing Agents and Workloads from Interfering with the Cluster Datastore
-
-When running in an environment where the server is also hosting workload pods, care should be taken to ensure that agent and workload IOPS do not interfere with the datastore.
-
-This can be best accomplished by placing the server components (/var/lib/rancher/k3s/server) on a different storage medium than the agent components (/var/lib/rancher/k3s/agent), which include the containerd image store.
-
-Workload storage (pod ephemeral storage and volumes) should also be isolated from the datastore.
-
-Failure to meet datastore throughput and latency requirements may result in delayed response from the control plane and/or failure of the control plane to maintain system state.
\ No newline at end of file
diff --git a/content/k3s/latest/en/installation/kube-dashboard/_index.md b/content/k3s/latest/en/installation/kube-dashboard/_index.md
deleted file mode 100644
index 880a16c630d..00000000000
--- a/content/k3s/latest/en/installation/kube-dashboard/_index.md
+++ /dev/null
@@ -1,91 +0,0 @@
----
-title: "Kubernetes Dashboard"
-weight: 60
----
-
-This installation guide will help you to deploy and configure the [Kubernetes Dashboard](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/) on K3s.
-
-### Deploying the Kubernetes Dashboard
-
-```bash
-GITHUB_URL=https://github.com/kubernetes/dashboard/releases
-VERSION_KUBE_DASHBOARD=$(curl -w '%{url_effective}' -I -L -s -S ${GITHUB_URL}/latest -o /dev/null | sed -e 's|.*/||')
-sudo k3s kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/${VERSION_KUBE_DASHBOARD}/aio/deploy/recommended.yaml
-```
-
-### Dashboard RBAC Configuration
-
-> **Important:** The `admin-user` created in this guide will have administrative privileges in the Dashboard.
-
-Create the following resource manifest files:
-
-`dashboard.admin-user.yml`
-```yaml
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: admin-user
- namespace: kubernetes-dashboard
-```
-
-`dashboard.admin-user-role.yml`
-```yaml
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: admin-user
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: cluster-admin
-subjects:
-- kind: ServiceAccount
- name: admin-user
- namespace: kubernetes-dashboard
-```
-
-Deploy the `admin-user` configuration:
-
-```bash
-sudo k3s kubectl create -f dashboard.admin-user.yml -f dashboard.admin-user-role.yml
-```
-
-### Obtain the Bearer Token
-
-```bash
-sudo k3s kubectl -n kubernetes-dashboard describe secret admin-user-token | grep '^token'
-```
-
-### Local Access to the Dashboard
-
-To access the Dashboard you must create a secure channel to your K3s cluster:
-
-```bash
-sudo k3s kubectl proxy
-```
-
-The Dashboard is now accessible at:
-
-* http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
-* `Sign In` with the `admin-user` Bearer Token
-
-#### Advanced: Remote Access to the Dashboard
-
-Please see the Dashboard documentation: Using [Port Forwarding](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) to Access Applications in a Cluster.
-
-### Upgrading the Dashboard
-
-```bash
-sudo k3s kubectl delete ns kubernetes-dashboard
-GITHUB_URL=https://github.com/kubernetes/dashboard/releases
-VERSION_KUBE_DASHBOARD=$(curl -w '%{url_effective}' -I -L -s -S ${GITHUB_URL}/latest -o /dev/null | sed -e 's|.*/||')
-sudo k3s kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/${VERSION_KUBE_DASHBOARD}/aio/deploy/recommended.yaml -f dashboard.admin-user.yml -f dashboard.admin-user-role.yml
-```
-
-### Deleting the Dashboard and admin-user configuration
-
-```bash
-sudo k3s kubectl delete ns kubernetes-dashboard
-sudo k3s kubectl delete clusterrolebinding kubernetes-dashboard
-sudo k3s kubectl delete clusterrole kubernetes-dashboard
-```
diff --git a/content/k3s/latest/en/installation/network-options/_index.md b/content/k3s/latest/en/installation/network-options/_index.md
deleted file mode 100644
index 138a0618713..00000000000
--- a/content/k3s/latest/en/installation/network-options/_index.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-title: "Network Options"
-weight: 25
----
-
-> **Note:** Please reference the [Networking]({{}}/k3s/latest/en/networking) page for information about CoreDNS, Traefik, and the Service LB.
-
-By default, K3s will run with flannel as the CNI, using VXLAN as the default backend. To change the CNI, refer to the section on configuring a [custom CNI](#custom-cni). To change the flannel backend, refer to the flannel options section.
-
-### Flannel Options
-
-The default backend for flannel is VXLAN. To enable encryption, pass the IPSec (Internet Protocol Security) or WireGuard options below.
-
-If you wish to use WireGuard as your flannel backend it may require additional kernel modules. Please see the [WireGuard Install Guide](https://www.wireguard.com/install/) for details. The WireGuard install steps will ensure the appropriate kernel modules are installed for your operating system. You need to install WireGuard on every node, both server and agents before attempting to leverage the WireGuard flannel backend option.
-
- CLI Flag and Value | Description
- -------------------|------------
- `--flannel-backend=vxlan` | (Default) Uses the VXLAN backend. |
- `--flannel-backend=ipsec` | Uses the IPSEC backend which encrypts network traffic. |
- `--flannel-backend=host-gw` | Uses the host-gw backend. |
- `--flannel-backend=wireguard` | Uses the WireGuard backend which encrypts network traffic. May require additional kernel modules and configuration. |
- `--flannel-ipv6-masq` | Apply masquerading rules to IPv6 traffic (default for IPv4). Only applies on dual-stack or IPv6-only clusters |
-
-### Custom CNI
-
-Run K3s with `--flannel-backend=none` and install your CNI of choice. Most CNI plugins come with their own network policy engine, so it is recommended to set `--disable-network-policy` as well to avoid conflicts. IP Forwarding should be enabled for Canal and Calico. Please reference the steps below.
-
-{{% tabs %}}
-{{% tab "Canal" %}}
-
-Visit the [Project Calico Docs](https://docs.projectcalico.org/) website. Follow the steps to install Canal. Modify the Canal YAML so that IP forwarding is allowed in the container_settings section, for example:
-
-```
-"container_settings": {
- "allow_ip_forwarding": true
- }
-```
-
-Apply the Canal YAML.
-
-Ensure the settings were applied by running the following command on the host:
-
-```
-cat /etc/cni/net.d/10-canal.conflist
-```
-
-You should see that IP forwarding is set to true.
-
-{{% /tab %}}
-{{% tab "Calico" %}}
-
-Follow the [Calico CNI Plugins Guide](https://docs.projectcalico.org/master/reference/cni-plugin/configuration). Modify the Calico YAML so that IP forwarding is allowed in the container_settings section, for example:
-
-```
-"container_settings": {
- "allow_ip_forwarding": true
- }
-```
-
-Apply the Calico YAML.
-
-Ensure the settings were applied by running the following command on the host:
-
-```
-cat /etc/cni/net.d/10-calico.conflist
-```
-
-You should see that IP forwarding is set to true.
-
-
-{{% /tab %}}
-{{% /tabs %}}
-
-### Dual-stack installation
-
-Dual-stack networking must be configured when the cluster is first created. It cannot be enabled on an existing single-stack cluster.
-
-Dual-stack is supported on k3s v1.21 or above.
-
-To enable dual-stack in K3s, you must provide valid dual-stack `cluster-cidr` and `service-cidr` on all server nodes. Both servers and agents must provide valid dual-stack `node-ip` settings. Node address auto-detection is not supported on dual-stack clusters, because kubelet fetches only the first IP address that it finds. Additionally, only vxlan backend is supported currently. This is an example of a valid configuration:
-
-```
-k3s server --node-ip 10.0.10.7,2a05:d012:c6f:4611:5c2:5602:eed2:898c --cluster-cidr 10.42.0.0/16,2001:cafe:42:0::/56 --service-cidr 10.43.0.0/16,2001:cafe:42:1::/112
-```
-
-Note that you can choose whatever `cluster-cidr` and `service-cidr` value, however the `node-ip` values must correspond to the ip addresses of your main interface. Remember to allow ipv6 traffic if you are deploying in a public cloud.
-
-If you are using a custom cni plugin, i.e. a cni plugin different from flannel, the previous configuration might not be enough to enable dual-stack in the cni plugin. Please check how to enable dual-stack in its documentation and verify if network policies can be enabled.
-
-### IPv6 only installation
-
-IPv6 only setup is supported on k3s v1.22 or above
-
-> **Warning:** If your IPv6 default route is set by a router advertisement (RA), you will need to set `net.ipv6.conf.all.accept_ra = 2`; otherwise, the node will drop the default route once it expires. Be aware that accepting RAs could increase the risk of [man-in-the-middle attacks](https://github.com/kubernetes/kubernetes/issues/91507).
diff --git a/content/k3s/latest/en/installation/private-registry/_index.md b/content/k3s/latest/en/installation/private-registry/_index.md
deleted file mode 100644
index 523ae6c8586..00000000000
--- a/content/k3s/latest/en/installation/private-registry/_index.md
+++ /dev/null
@@ -1,166 +0,0 @@
----
-title: "Private Registry Configuration"
-weight: 55
----
-_Available as of v1.0.0_
-
-Containerd can be configured to connect to private registries and use them to pull private images on the node.
-
-Upon startup, K3s will check to see if a `registries.yaml` file exists at `/etc/rancher/k3s/` and instruct containerd to use any registries defined in the file. If you wish to use a private registry, then you will need to create this file as root on each node that will be using the registry.
-
-Note that server nodes are schedulable by default. If you have not tainted the server nodes and will be running workloads on them, please ensure you also create the `registries.yaml` file on each server as well.
-
-Configuration in containerd can be used to connect to a private registry with a TLS connection and with registries that enable authentication as well. The following section will explain the `registries.yaml` file and give different examples of using private registry configuration in K3s.
-
-# Registries Configuration File
-
-The file consists of two main sections:
-
-- mirrors
-- configs
-
-### Mirrors
-
-Mirrors is a directive that defines the names and endpoints of the private registries, for example:
-
-```
-mirrors:
- mycustomreg.com:
- endpoint:
- - "https://mycustomreg.com:5000"
-```
-
-Each mirror must have a name and set of endpoints. When pulling an image from a registry, containerd will try these endpoint URLs one by one, and use the first working one.
-
-#### Rewrites
-
-Each mirror can have a set of rewrites. Rewrites can change the tag of an image based on a regular expression. This is useful if the organization/project structure in the mirror registry is different to the upstream one.
-
-For example, the following configuration would transparently pull the image `docker.io/rancher/coredns-coredns:1.6.3` from `registry.example.com:5000/mirrorproject/rancher-images/coredns-coredns:1.6.3`:
-
-```
-mirrors:
- docker.io:
- endpoint:
- - "https://registry.example.com:5000"
- rewrite:
- "^rancher/(.*)": "mirrorproject/rancher-images/$1"
-```
-
-The image will still be stored under the original name so that a `crictl image ls` will show `docker.io/rancher/coredns-coredns:1.6.3` as available on the node, even though the image was pulled from the mirrored registry with a different name.
-
-### Configs
-
-The `configs` section defines the TLS and credential configuration for each mirror. For each mirror you can define `auth` and/or `tls`.
-
-The `tls` part consists of:
-
-| Directive | Description |
-|------------------------|--------------------------------------------------------------------------------------|
-| `cert_file` | The client certificate path that will be used to authenticate with the registry |
-| `key_file` | The client key path that will be used to authenticate with the registry |
-| `ca_file` | Defines the CA certificate path to be used to verify the registry's server cert file |
-| `insecure_skip_verify` | Boolean that defines if TLS verification should be skipped for the registry |
-
-The `auth` part consists of either username/password or authentication token:
-
-| Directive | Description |
-|------------|---------------------------------------------------------|
-| `username` | user name of the private registry basic auth |
-| `password` | user password of the private registry basic auth |
-| `auth` | authentication token of the private registry basic auth |
-
-Below are basic examples of using private registries in different modes:
-
-### With TLS
-
-Below are examples showing how you may configure `/etc/rancher/k3s/registries.yaml` on each node when using TLS.
-
-{{% tabs %}}
-{{% tab "With Authentication" %}}
-
-```
-mirrors:
- docker.io:
- endpoint:
- - "https://mycustomreg.com:5000"
-configs:
- "mycustomreg:5000":
- auth:
- username: xxxxxx # this is the registry username
- password: xxxxxx # this is the registry password
- tls:
- cert_file: # path to the cert file used in the registry
- key_file: # path to the key file used in the registry
- ca_file: # path to the ca file used in the registry
-```
-
-{{% /tab %}}
-{{% tab "Without Authentication" %}}
-
-```
-mirrors:
- docker.io:
- endpoint:
- - "https://mycustomreg.com:5000"
-configs:
- "mycustomreg:5000":
- tls:
- cert_file: # path to the cert file used in the registry
- key_file: # path to the key file used in the registry
- ca_file: # path to the ca file used in the registry
-```
-
-{{% /tab %}}
-{{% /tabs %}}
-
-### Without TLS
-
-Below are examples showing how you may configure `/etc/rancher/k3s/registries.yaml` on each node when _not_ using TLS.
-
-{{% tabs %}}
-{{% tab "With Authentication" %}}
-
-```
-mirrors:
- docker.io:
- endpoint:
- - "http://mycustomreg.com:5000"
-configs:
- "mycustomreg:5000":
- auth:
- username: xxxxxx # this is the registry username
- password: xxxxxx # this is the registry password
-```
-
-{{% /tab %}}
-{{% tab "Without Authentication" %}}
-
-```
-mirrors:
- docker.io:
- endpoint:
- - "http://mycustomreg.com:5000"
-```
-
-{{% /tab %}}
-{{% /tabs %}}
-
-> In case of no TLS communication, you need to specify `http://` for the endpoints, otherwise it will default to https.
-
-In order for the registry changes to take effect, you need to restart K3s on each node.
-
-# Adding Images to the Private Registry
-
-First, obtain the k3s-images.txt file from GitHub for the release you are working with.
-Pull the K3s images listed on the k3s-images.txt file from docker.io
-
-Example: `docker pull docker.io/rancher/coredns-coredns:1.6.3`
-
-Then, retag the images to the private registry.
-
-Example: `docker tag coredns-coredns:1.6.3 mycustomreg:5000/coredns-coredns`
-
-Last, push the images to the private registry.
-
-Example: `docker push mycustomreg.com:5000/coredns-coredns`
diff --git a/content/k3s/latest/en/installation/uninstall/_index.md b/content/k3s/latest/en/installation/uninstall/_index.md
deleted file mode 100644
index f30b018029f..00000000000
--- a/content/k3s/latest/en/installation/uninstall/_index.md
+++ /dev/null
@@ -1,20 +0,0 @@
----
-title: Uninstalling K3s
-weight: 61
----
-
-If you installed K3s using the installation script, a script to uninstall K3s was generated during installation.
-
-> Uninstalling K3s deletes the cluster data and all of the scripts. To restart the cluster with different installation options, re-run the installation script with different flags.
-
-To uninstall K3s from a server node, run:
-
-```
-/usr/local/bin/k3s-uninstall.sh
-```
-
-To uninstall K3s from an agent node, run:
-
-```
-/usr/local/bin/k3s-agent-uninstall.sh
-```
\ No newline at end of file
diff --git a/content/k3s/latest/en/known-issues/_index.md b/content/k3s/latest/en/known-issues/_index.md
deleted file mode 100644
index d12fafa2a5c..00000000000
--- a/content/k3s/latest/en/known-issues/_index.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Known Issues
-weight: 70
----
-The Known Issues are updated periodically and designed to inform you about any issues that may not be immediately addressed in the next upcoming release.
-
-**Snap Docker**
-
-If you plan to use K3s with docker, Docker installed via a snap package is not recommended as it has been known to cause issues running K3s.
-
-**Iptables**
-
-If you are running iptables in nftables mode instead of legacy you might encounter issues. We recommend utilizing newer iptables (such as 1.6.1+) to avoid issues.
-
-**Rootless Mode**
-
-Running K3s with Rootless mode is experimental and has several [known issues.]({{}}/k3s/latest/en/advanced/#known-issues-with-rootless-mode)
diff --git a/content/k3s/latest/en/networking/_index.md b/content/k3s/latest/en/networking/_index.md
deleted file mode 100644
index 2dff22e927d..00000000000
--- a/content/k3s/latest/en/networking/_index.md
+++ /dev/null
@@ -1,87 +0,0 @@
----
-title: "Networking"
-weight: 35
----
-
-This page explains how CoreDNS, the Traefik Ingress controller, and Klipper service load balancer work within K3s.
-
-Refer to the [Installation Network Options]({{}}/k3s/latest/en/installation/network-options/) page for details on Flannel configuration options and backend selection, or how to set up your own CNI.
-
-For information on which ports need to be opened for K3s, refer to the [Installation Requirements.]({{}}/k3s/latest/en/installation/installation-requirements/#networking)
-
-- [CoreDNS](#coredns)
-- [Traefik Ingress Controller](#traefik-ingress-controller)
-- [Service Load Balancer](#service-load-balancer)
- - [How the Service LB Works](#how-the-service-lb-works)
- - [Usage](#usage)
- - [Excluding the Service LB from Nodes](#excluding-the-service-lb-from-nodes)
- - [Disabling the Service LB](#disabling-the-service-lb)
-- [Nodes Without a Hostname](#nodes-without-a-hostname)
-
-# CoreDNS
-
-CoreDNS is deployed on start of the agent. To disable, run each server with the `--disable coredns` option.
-
-If you don't install CoreDNS, you will need to install a cluster DNS provider yourself.
-
-# Traefik Ingress Controller
-
-[Traefik](https://traefik.io/) is a modern HTTP reverse proxy and load balancer made to deploy microservices with ease. It simplifies networking complexity while designing, deploying, and running applications.
-
-Traefik is deployed by default when starting the server. For more information see [Auto Deploying Manifests]({{}}/k3s/latest/en/advanced/#auto-deploying-manifests). The default config file is found in `/var/lib/rancher/k3s/server/manifests/traefik.yaml`.
-
-The Traefik ingress controller will use ports 80 and 443 on the host (i.e. these will not be usable for HostPort or NodePort).
-
-The `traefik.yaml` file should not be edited manually, because k3s would overwrite it again once it is restarted. Instead you can customize Traefik by creating an additional `HelmChartConfig` manifest in `/var/lib/rancher/k3s/server/manifests`. For more details and an example see [Customizing Packaged Components with HelmChartConfig]({{}}/k3s/latest/en/helm/#customizing-packaged-components-with-helmchartconfig). For more information on the possible configuration values, refer to the official [Traefik Helm Configuration Parameters.](https://github.com/traefik/traefik-helm-chart/tree/master/traefik).
-
-To disable it, start each server with the `--disable traefik` option.
-
-If Traefik is not disabled K3s versions 1.20 and earlier will install Traefik v1, while K3s versions 1.21 and later will install Traefik v2 if v1 is not already present.
-
-To migrate from an older Traefik v1 instance please refer to the [Traefik documentation](https://doc.traefik.io/traefik/migration/v1-to-v2/) and [migration tool](https://github.com/traefik/traefik-migration-tool).
-
-# Service Load Balancer
-
-Any service load balancer (LB) can be leveraged in your Kubernetes cluster. K3s provides a load balancer known as [Klipper Load Balancer](https://github.com/k3s-io/klipper-lb) that uses available host ports.
-
-Upstream Kubernetes allows a Service of type LoadBalancer to be created, but doesn't include the implementation of the LB. Some LB services require a cloud provider such as Amazon EC2 or Microsoft Azure. By contrast, the K3s service LB makes it possible to use an LB service without a cloud provider.
-
-### How the Service LB Works
-
-K3s creates a controller that creates a Pod for the service load balancer, which is a Kubernetes object of kind [Service.](https://kubernetes.io/docs/concepts/services-networking/service/)
-
-For each service load balancer, a [DaemonSet](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/) is created. The DaemonSet creates a pod with the `svc` prefix on each node.
-
-The Service LB controller listens for other Kubernetes Services. After it finds a Service, it creates a proxy Pod for the service using a DaemonSet on all of the nodes. This Pod becomes a proxy to the other Service, so that for example, requests coming to port 8000 on a node could be routed to your workload on port 8888.
-
-If the Service LB runs on a node that has an external IP, it uses the external IP.
-
-If multiple Services are created, a separate DaemonSet is created for each Service.
-
-It is possible to run multiple Services on the same node, as long as they use different ports.
-
-If you try to create a Service LB that listens on port 80, the Service LB will try to find a free host in the cluster for port 80. If no host with that port is available, the LB will stay in Pending.
-
-### Usage
-
-Create a [Service of type LoadBalancer](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) in K3s.
-
-### Excluding the Service LB from Nodes
-
-To exclude nodes from using the Service LB, add the following label to the nodes that should not be excluded:
-
-```
-svccontroller.k3s.cattle.io/enablelb
-```
-
-If the label is used, the service load balancer only runs on the labeled nodes.
-
-### Disabling the Service LB
-
-To disable the embedded LB, run the server with the `--disable servicelb` option.
-
-This is necessary if you wish to run a different LB, such as MetalLB.
-
-# Nodes Without a Hostname
-
-Some cloud providers, such as Linode, will create machines with "localhost" as the hostname and others may not have a hostname set at all. This can cause problems with domain name resolution. You can run K3s with the `--node-name` flag or `K3S_NODE_NAME` environment variable and this will pass the node name to resolve this issue.
diff --git a/content/k3s/latest/en/quick-start/_index.md b/content/k3s/latest/en/quick-start/_index.md
deleted file mode 100644
index 8ec057e36a0..00000000000
--- a/content/k3s/latest/en/quick-start/_index.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: "Quick-Start Guide"
-weight: 10
----
-
-This guide will help you quickly launch a cluster with default options. The [installation section](../installation) covers in greater detail how K3s can be set up.
-
-For information on how K3s components work together, refer to the [architecture section.]({{}}/k3s/latest/en/architecture/#high-availability-with-an-external-db)
-
-> New to Kubernetes? The official Kubernetes docs already have some great tutorials outlining the basics [here](https://kubernetes.io/docs/tutorials/kubernetes-basics/).
-
-Install Script
---------------
-K3s provides an installation script that is a convenient way to install it as a service on systemd or openrc based systems. This script is available at https://get.k3s.io. To install K3s using this method, just run:
-```bash
-curl -sfL https://get.k3s.io | sh -
-```
-
-After running this installation:
-
-* The K3s service will be configured to automatically restart after node reboots or if the process crashes or is killed
-* Additional utilities will be installed, including `kubectl`, `crictl`, `ctr`, `k3s-killall.sh`, and `k3s-uninstall.sh`
-* A [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file will be written to `/etc/rancher/k3s/k3s.yaml` and the kubectl installed by K3s will automatically use it
-
-To install on worker nodes and add them to the cluster, run the installation script with the `K3S_URL` and `K3S_TOKEN` environment variables. Here is an example showing how to join a worker node:
-
-```bash
-curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -
-```
-Setting the `K3S_URL` parameter causes K3s to run in worker mode. The K3s agent will register with the K3s server listening at the supplied URL. The value to use for `K3S_TOKEN` is stored at `/var/lib/rancher/k3s/server/node-token` on your server node.
-
-Note: Each machine must have a unique hostname. If your machines do not have unique hostnames, pass the `K3S_NODE_NAME` environment variable and provide a value with a valid and unique hostname for each node.
diff --git a/content/k3s/latest/en/security/_index.md b/content/k3s/latest/en/security/_index.md
deleted file mode 100644
index ba6ef7ccbd6..00000000000
--- a/content/k3s/latest/en/security/_index.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: "Security"
-weight: 90
----
-
-This section describes the methodology and means of securing a K3s cluster. It's broken into 2 sections. These guides assume k3s is running with embedded etcd.
-
-The documents below apply to CIS Kubernetes Benchmark v1.6.
-
-* [Hardening Guide](./hardening_guide/)
-* [CIS Benchmark Self-Assessment Guide](./self_assessment/)
diff --git a/content/k3s/latest/en/security/hardening_guide/_index.md b/content/k3s/latest/en/security/hardening_guide/_index.md
deleted file mode 100644
index e22571f30ef..00000000000
--- a/content/k3s/latest/en/security/hardening_guide/_index.md
+++ /dev/null
@@ -1,677 +0,0 @@
----
-title: "CIS Hardening Guide"
-weight: 80
----
-
-This document provides prescriptive guidance for hardening a production installation of K3s. It outlines the configurations and controls required to address Kubernetes benchmark controls from the Center for Internet Security (CIS).
-
-K3s has a number of security mitigations applied and turned on by default and will pass a number of the Kubernetes CIS controls without modification. There are some notable exceptions to this that require manual intervention to fully comply with the CIS Benchmark:
-
-1. K3s will not modify the host operating system. Any host-level modifications will need to be done manually.
-2. Certain CIS policy controls for `PodSecurityPolicies` and `NetworkPolicies` will restrict the functionality of the cluster. You must opt into having K3s configure these by adding the appropriate options (enabling of admission plugins) to your command-line flags or configuration file as well as manually applying appropriate policies. Further details are presented in the sections below.
-
-The first section (1.1) of the CIS Benchmark concerns itself primarily with pod manifest permissions and ownership. K3s doesn't utilize these for the core components since everything is packaged into a single binary.
-
-## Host-level Requirements
-
-There are two areas of host-level requirements: kernel parameters and etcd process/directory configuration. These are outlined in this section.
-
-### Ensure `protect-kernel-defaults` is set
-
-This is a kubelet flag that will cause the kubelet to exit if the required kernel parameters are unset or are set to values that are different from the kubelet's defaults.
-
-> **Note:** `protect-kernel-defaults` is exposed as a top-level flag for K3s.
-
-#### Set kernel parameters
-
-Create a file called `/etc/sysctl.d/90-kubelet.conf` and add the snippet below. Then run `sysctl -p /etc/sysctl.d/90-kubelet.conf`.
-
-```bash
-vm.panic_on_oom=0
-vm.overcommit_memory=1
-kernel.panic=10
-kernel.panic_on_oops=1
-kernel.keys.root_maxbytes=25000000
-```
-
-## Kubernetes Runtime Requirements
-
-The runtime requirements to comply with the CIS Benchmark are centered around pod security (PSPs), network policies and API Server auditing logs. These are outlined in this section. K3s doesn't apply any default PSPs or network policies. However, K3s ships with a controller that is meant to apply a given set of network policies. By default, K3s runs with the `NodeRestriction` admission controller. To enable PSPs, add the following to the K3s start command: `--kube-apiserver-arg="enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount"`. This will have the effect of maintaining the `NodeRestriction` plugin as well as enabling the `PodSecurityPolicy`. The same happens with the API Server auditing logs, K3s doesn't enable them by default, so audit log configuration and audit policy must be created manually.
-
-### Pod Security Policies
-
-When PSPs are enabled, a policy can be applied to satisfy the necessary controls described in section 5.2 of the CIS Benchmark.
-
-Here is an example of a compliant PSP.
-
-```yaml
-apiVersion: policy/v1beta1
-kind: PodSecurityPolicy
-metadata:
- name: restricted-psp
-spec:
- privileged: false # CIS - 5.2.1
- allowPrivilegeEscalation: false # CIS - 5.2.5
- requiredDropCapabilities: # CIS - 5.2.7/8/9
- - ALL
- volumes:
- - 'configMap'
- - 'emptyDir'
- - 'projected'
- - 'secret'
- - 'downwardAPI'
- - 'csi'
- - 'persistentVolumeClaim'
- - 'ephemeral'
- hostNetwork: false # CIS - 5.2.4
- hostIPC: false # CIS - 5.2.3
- hostPID: false # CIS - 5.2.2
- runAsUser:
- rule: 'MustRunAsNonRoot' # CIS - 5.2.6
- seLinux:
- rule: 'RunAsAny'
- supplementalGroups:
- rule: 'MustRunAs'
- ranges:
- - min: 1
- max: 65535
- fsGroup:
- rule: 'MustRunAs'
- ranges:
- - min: 1
- max: 65535
- readOnlyRootFilesystem: false
-```
-
-For the above PSP to be effective, we need to create a ClusterRole and a ClusterRoleBinding. We also need to include a "system unrestricted policy" which is needed for system-level pods that require additional privileges.
-
-These can be combined with the PSP yaml above and NetworkPolicy yaml below into a single file and placed in the `/var/lib/rancher/k3s/server/manifests` directory. Below is an example of a `policy.yaml` file.
-
-```yaml
-apiVersion: policy/v1beta1
-kind: PodSecurityPolicy
-metadata:
- name: restricted-psp
-spec:
- privileged: false
- allowPrivilegeEscalation: false
- requiredDropCapabilities:
- - ALL
- volumes:
- - 'configMap'
- - 'emptyDir'
- - 'projected'
- - 'secret'
- - 'downwardAPI'
- - 'csi'
- - 'persistentVolumeClaim'
- - 'ephemeral'
- hostNetwork: false
- hostIPC: false
- hostPID: false
- runAsUser:
- rule: 'MustRunAsNonRoot'
- seLinux:
- rule: 'RunAsAny'
- supplementalGroups:
- rule: 'MustRunAs'
- ranges:
- - min: 1
- max: 65535
- fsGroup:
- rule: 'MustRunAs'
- ranges:
- - min: 1
- max: 65535
- readOnlyRootFilesystem: false
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: psp:restricted-psp
- labels:
- addonmanager.kubernetes.io/mode: EnsureExists
-rules:
-- apiGroups: ['extensions']
- resources: ['podsecuritypolicies']
- verbs: ['use']
- resourceNames:
- - restricted-psp
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: default:restricted-psp
- labels:
- addonmanager.kubernetes.io/mode: EnsureExists
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: psp:restricted-psp
-subjects:
-- kind: Group
- name: system:authenticated
- apiGroup: rbac.authorization.k8s.io
----
-apiVersion: policy/v1beta1
-kind: PodSecurityPolicy
-metadata:
- name: system-unrestricted-psp
-spec:
- allowPrivilegeEscalation: true
- allowedCapabilities:
- - '*'
- fsGroup:
- rule: RunAsAny
- hostIPC: true
- hostNetwork: true
- hostPID: true
- hostPorts:
- - max: 65535
- min: 0
- privileged: true
- runAsUser:
- rule: RunAsAny
- seLinux:
- rule: RunAsAny
- supplementalGroups:
- rule: RunAsAny
- volumes:
- - '*'
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: system-unrestricted-node-psp-rolebinding
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: system-unrestricted-psp-role
-subjects:
-- apiGroup: rbac.authorization.k8s.io
- kind: Group
- name: system:nodes
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: system-unrestricted-psp-role
-rules:
-- apiGroups:
- - policy
- resourceNames:
- - system-unrestricted-psp
- resources:
- - podsecuritypolicies
- verbs:
- - use
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: system-unrestricted-svc-acct-psp-rolebinding
- namespace: kube-system
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: system-unrestricted-psp-role
-subjects:
-- apiGroup: rbac.authorization.k8s.io
- kind: Group
- name: system:serviceaccounts
----
-kind: NetworkPolicy
-apiVersion: networking.k8s.io/v1
-metadata:
- name: intra-namespace
- namespace: kube-system
-spec:
- podSelector: {}
- ingress:
- - from:
- - namespaceSelector:
- matchLabels:
- name: kube-system
----
-kind: NetworkPolicy
-apiVersion: networking.k8s.io/v1
-metadata:
- name: intra-namespace
- namespace: default
-spec:
- podSelector: {}
- ingress:
- - from:
- - namespaceSelector:
- matchLabels:
- name: default
----
-kind: NetworkPolicy
-apiVersion: networking.k8s.io/v1
-metadata:
- name: intra-namespace
- namespace: kube-public
-spec:
- podSelector: {}
- ingress:
- - from:
- - namespaceSelector:
- matchLabels:
- name: kube-public
-```
-
-> **Note:** The Kubernetes critical additions such as CNI, DNS, and Ingress are ran as pods in the `kube-system` namespace. Therefore, this namespace will have a policy that is less restrictive so that these components can run properly.
-
-### NetworkPolicies
-
-> NOTE: K3s deploys kube-router for network policy enforcement. Support for this in K3s is currently experimental.
-
-CIS requires that all namespaces have a network policy applied that reasonably limits traffic into namespaces and pods.
-
-Here is an example of a compliant network policy.
-
-```yaml
-kind: NetworkPolicy
-apiVersion: networking.k8s.io/v1
-metadata:
- name: intra-namespace
- namespace: kube-system
-spec:
- podSelector: {}
- ingress:
- - from:
- - namespaceSelector:
- matchLabels:
- name: kube-system
-```
-
-With the applied restrictions, DNS will be blocked unless purposely allowed. Below is a network policy that will allow for traffic to exist for DNS.
-
-```yaml
-apiVersion: networking.k8s.io/v1
-kind: NetworkPolicy
-metadata:
- name: default-network-dns-policy
- namespace:
-spec:
- ingress:
- - ports:
- - port: 53
- protocol: TCP
- - port: 53
- protocol: UDP
- podSelector:
- matchLabels:
- k8s-app: kube-dns
- policyTypes:
- - Ingress
-```
-
-The metrics-server and Traefik ingress controller will be blocked by default if network policies are not created to allow access. Traefik v1 as packaged in K3s version 1.20 and below uses different labels than Traefik v2. Ensure that you only use the sample yaml below that is associated with the version of Traefik present on your cluster.
-
-```yaml
-apiVersion: networking.k8s.io/v1
-kind: NetworkPolicy
-metadata:
- name: allow-all-metrics-server
- namespace: kube-system
-spec:
- podSelector:
- matchLabels:
- k8s-app: metrics-server
- ingress:
- - {}
- policyTypes:
- - Ingress
----
-apiVersion: networking.k8s.io/v1
-kind: NetworkPolicy
-metadata:
- name: allow-all-svclbtraefik-ingress
- namespace: kube-system
-spec:
- podSelector:
- matchLabels:
- app: svclb-traefik
- ingress:
- - {}
- policyTypes:
- - Ingress
----
-# Below is for 1.20 ONLY -- remove if on 1.21 or above
-apiVersion: networking.k8s.io/v1
-kind: NetworkPolicy
-metadata:
- name: allow-all-traefik-v120-ingress
- namespace: kube-system
-spec:
- podSelector:
- matchLabels:
- app: traefik
- ingress:
- - {}
- policyTypes:
- - Ingress
----
-# Below is for 1.21 and above ONLY -- remove if on 1.20 or below
-apiVersion: networking.k8s.io/v1
-kind: NetworkPolicy
-metadata:
- name: allow-all-traefik-v121-ingress
- namespace: kube-system
-spec:
- podSelector:
- matchLabels:
- app.kubernetes.io/name: traefik
- ingress:
- - {}
- policyTypes:
- - Ingress
-```
-
-> **Note:** Operators must manage network policies as normal for additional namespaces that are created.
-
-### API Server audit configuration
-
-CIS requirements 1.2.22 to 1.2.25 are related to configuring audit logs for the API Server. K3s doesn't create by default the log directory and audit policy, as auditing requirements are specific to each user's policies and environment.
-
-The log directory, ideally, must be created before starting K3s. A restrictive access permission is recommended to avoid leaking potential sensitive information.
-
-```bash
-sudo mkdir -p -m 700 /var/lib/rancher/k3s/server/logs
-```
-
-A starter audit policy to log request metadata is provided below. The policy should be written to a file named `audit.yaml` in `/var/lib/rancher/k3s/server` directory. Detailed information about policy configuration for the API server can be found in the Kubernetes [documentation](https://kubernetes.io/docs/tasks/debug-application-cluster/audit/).
-
-```yaml
-apiVersion: audit.k8s.io/v1
-kind: Policy
-rules:
-- level: Metadata
-```
-
-Both configurations must be passed as arguments to the API Server as:
-
-```bash
---kube-apiserver-arg='audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log'
---kube-apiserver-arg='audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml'
-```
-
-If the configurations are created after K3s is installed, they must be added to K3s' systemd service in `/etc/systemd/system/k3s.service`.
-
-```bash
-ExecStart=/usr/local/bin/k3s \
- server \
- '--kube-apiserver-arg=audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log' \
- '--kube-apiserver-arg=audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml' \
-```
-
-K3s must be restarted to load the new configuration.
-
-```bash
-sudo systemctl daemon-reload
-sudo systemctl restart k3s.service
-```
-
-Additional information about CIS requirements 1.2.22 to 1.2.25 is presented below.
-
-## Known Issues
-The following are controls that K3s currently does not pass by default. Each gap will be explained, along with a note clarifying whether it can be passed through manual operator intervention, or if it will be addressed in a future release of K3s.
-
-### Control 1.2.15
-Ensure that the admission control plugin `NamespaceLifecycle` is set.
-
-Rationale
-Setting admission control policy to `NamespaceLifecycle` ensures that objects cannot be created in non-existent namespaces, and that namespaces undergoing termination are not used for creating the new objects. This is recommended to enforce the integrity of the namespace termination process and also for the availability of the newer objects.
-
-This can be remediated by passing this argument as a value to the `enable-admission-plugins=` and pass that to `--kube-apiserver-arg=` argument to `k3s server`. An example can be found below.
-
-
-### Control 1.2.16
-Ensure that the admission control plugin `PodSecurityPolicy` is set.
-
-Rationale
-A Pod Security Policy is a cluster-level resource that controls the actions that a pod can perform and what it has the ability to access. The `PodSecurityPolicy` objects define a set of conditions that a pod must run with in order to be accepted into the system. Pod Security Policies are comprised of settings and strategies that control the security features a pod has access to and hence this must be used to control pod access permissions.
-
-This can be remediated by passing this argument as a value to the `enable-admission-plugins=` and pass that to `--kube-apiserver-arg=` argument to `k3s server`. An example can be found below.
-
-
-### Control 1.2.22
-Ensure that the `--audit-log-path` argument is set.
-
-Rationale
-Auditing the Kubernetes API Server provides a security-relevant chronological set of records documenting the sequence of activities that have affected system by individual users, administrators or other components of the system. Even though currently, Kubernetes provides only basic audit capabilities, it should be enabled. You can enable it by setting an appropriate audit log path.
-
-This can be remediated by passing this argument as a value to the `--kube-apiserver-arg=` argument to `k3s server`. An example can be found below.
-
-
-### Control 1.2.23
-Ensure that the `--audit-log-maxage` argument is set to 30 or as appropriate.
-
-Rationale
-Retaining logs for at least 30 days ensures that you can go back in time and investigate or correlate any events. Set your audit log retention period to 30 days or as per your business requirements.
-
-This can be remediated by passing this argument as a value to the `--kube-apiserver-arg=` argument to `k3s server`. An example can be found below.
-
-
-### Control 1.2.24
-Ensure that the `--audit-log-maxbackup` argument is set to 10 or as appropriate.
-
-Rationale
-Kubernetes automatically rotates the log files. Retaining old log files ensures that you would have sufficient log data available for carrying out any investigation or correlation. For example, if you have set file size of 100 MB and the number of old log files to keep as 10, you would approximate have 1 GB of log data that you could potentially use for your analysis.
-
-This can be remediated by passing this argument as a value to the `--kube-apiserver-arg=` argument to `k3s server`. An example can be found below.
-
-
-### Control 1.2.25
-Ensure that the `--audit-log-maxsize` argument is set to 100 or as appropriate.
-
-Rationale
-Kubernetes automatically rotates the log files. Retaining old log files ensures that you would have sufficient log data available for carrying out any investigation or correlation. If you have set file size of 100 MB and the number of old log files to keep as 10, you would approximate have 1 GB of log data that you could potentially use for your analysis.
-
-This can be remediated by passing this argument as a value to the `--kube-apiserver-arg=` argument to `k3s server`. An example can be found below.
-
-
-### Control 1.2.26
-Ensure that the `--request-timeout` argument is set as appropriate.
-
-Rationale
-Setting global request timeout allows extending the API server request timeout limit to a duration appropriate to the user's connection speed. By default, it is set to 60 seconds which might be problematic on slower connections making cluster resources inaccessible once the data volume for requests exceeds what can be transmitted in 60 seconds. But, setting this timeout limit to be too large can exhaust the API server resources making it prone to Denial-of-Service attack. Hence, it is recommended to set this limit as appropriate and change the default limit of 60 seconds only if needed.
-
-This can be remediated by passing this argument as a value to the `--kube-apiserver-arg=` argument to `k3s server`. An example can be found below.
-
-
-### Control 1.2.27
-Ensure that the `--service-account-lookup` argument is set to true.
-
-Rationale
-If `--service-account-lookup` is not enabled, the apiserver only verifies that the authentication token is valid, and does not validate that the service account token mentioned in the request is actually present in etcd. This allows using a service account token even after the corresponding service account is deleted. This is an example of time of check to time of use security issue.
-
-This can be remediated by passing this argument as a value to the `--kube-apiserver-arg=` argument to `k3s server`. An example can be found below.
-
-
-### Control 1.2.33
-Ensure that the `--encryption-provider-config` argument is set as appropriate.
-
-Rationale
-`etcd` is a highly available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should be encrypted at rest to avoid any disclosures.
-
-Detailed steps on how to configure secrets encryption in K3s are available in [Secrets Encryption](../secrets_encryption/).
-
-
-### Control 1.2.34
-Ensure that encryption providers are appropriately configured.
-
-Rationale
-Where `etcd` encryption is used, it is important to ensure that the appropriate set of encryption providers is used. Currently, the `aescbc`, `kms` and `secretbox` are likely to be appropriate options.
-
-This can be remediated by passing a valid configuration to `k3s` as outlined above. Detailed steps on how to configure secrets encryption in K3s are available in [Secrets Encryption](../secrets_encryption/).
-
-
-### Control 1.3.1
-Ensure that the `--terminated-pod-gc-threshold` argument is set as appropriate.
-
-Rationale
-Garbage collection is important to ensure sufficient resource availability and avoiding degraded performance and availability. In the worst case, the system might crash or just be unusable for a long period of time. The current setting for garbage collection is 12,500 terminated pods which might be too high for your system to sustain. Based on your system resources and tests, choose an appropriate threshold value to activate garbage collection.
-
-This can be remediated by passing this argument as a value to the `--kube-apiserver-arg=` argument to `k3s server`. An example can be found below.
-
-
-### Control 3.2.1
-Ensure that a minimal audit policy is created.
-
-Rationale
-Logging is an important detective control for all systems, to detect potential unauthorized access.
-
-This can be remediated by passing controls 1.2.22 - 1.2.25 and verifying their efficacy.
-
-
-### Control 4.2.7
-Ensure that the `--make-iptables-util-chains` argument is set to true.
-
-Rationale
-Kubelets can automatically manage the required changes to iptables based on how you choose your networking options for the pods. It is recommended to let kubelets manage the changes to iptables. This ensures that the iptables configuration remains in sync with pods networking configuration. Manually configuring iptables with dynamic pod network configuration changes might hamper the communication between pods/containers and to the outside world. You might have iptables rules too restrictive or too open.
-
-This can be remediated by passing this argument as a value to the `--kube-apiserver-arg=` argument to `k3s server`. An example can be found below.
-
-
-### Control 5.1.5
-Ensure that default service accounts are not actively used
-
-Rationale
-Kubernetes provides a `default` service account which is used by cluster workloads where no specific service account is assigned to the pod.
-
-Where access to the Kubernetes API from a pod is required, a specific service account should be created for that pod, and rights granted to that service account.
-
-The default service account should be configured such that it does not provide a service account token and does not have any explicit rights assignments.
-
-This can be remediated by updating the `automountServiceAccountToken` field to `false` for the `default` service account in each namespace.
-
-For `default` service accounts in the built-in namespaces (`kube-system`, `kube-public`, `kube-node-lease`, and `default`), K3s does not automatically do this. You can manually update this field on these service accounts to pass the control.
-
-
-## Control Plane Execution and Arguments
-
-Listed below are the K3s control plane components and the arguments they are given at start, by default. Commented to their right is the CIS 1.6 control that they satisfy.
-
-```bash
-kube-apiserver
- --advertise-port=6443
- --allow-privileged=true
- --anonymous-auth=false # 1.2.1
- --api-audiences=unknown
- --authorization-mode=Node,RBAC
- --bind-address=127.0.0.1
- --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs
- --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt # 1.2.31
- --enable-admission-plugins=NodeRestriction,PodSecurityPolicy # 1.2.17
- --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt # 1.2.32
- --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt # 1.2.29
- --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key # 1.2.29
- --etcd-servers=https://127.0.0.1:2379
- --insecure-port=0 # 1.2.19
- --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt
- --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt
- --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key
- --profiling=false # 1.2.21
- --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt
- --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key
- --requestheader-allowed-names=system:auth-proxy
- --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt
- --requestheader-extra-headers-prefix=X-Remote-Extra-
- --requestheader-group-headers=X-Remote-Group
- --requestheader-username-headers=X-Remote-User
- --secure-port=6444 # 1.2.20
- --service-account-issuer=k3s
- --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key # 1.2.28
- --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.key
- --service-cluster-ip-range=10.43.0.0/16
- --storage-backend=etcd3
- --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt # 1.2.30
- --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key # 1.2.30
-```
-
-```bash
-kube-controller-manager
- --address=127.0.0.1
- --allocate-node-cidrs=true
- --bind-address=127.0.0.1 # 1.3.7
- --cluster-cidr=10.42.0.0/16
- --cluster-signing-cert-file=/var/lib/rancher/k3s/server/tls/client-ca.crt
- --cluster-signing-key-file=/var/lib/rancher/k3s/server/tls/client-ca.key
- --kubeconfig=/var/lib/rancher/k3s/server/cred/controller.kubeconfig
- --port=10252
- --profiling=false # 1.3.2
- --root-ca-file=/var/lib/rancher/k3s/server/tls/server-ca.crt # 1.3.5
- --secure-port=0
- --service-account-private-key-file=/var/lib/rancher/k3s/server/tls/service.key # 1.3.4
- --use-service-account-credentials=true # 1.3.3
-```
-
-```bash
-kube-scheduler
- --address=127.0.0.1
- --bind-address=127.0.0.1 # 1.4.2
- --kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig
- --port=10251
- --profiling=false # 1.4.1
- --secure-port=0
-```
-
-```bash
-kubelet
- --address=0.0.0.0
- --anonymous-auth=false # 4.2.1
- --authentication-token-webhook=true
- --authorization-mode=Webhook # 4.2.2
- --cgroup-driver=cgroupfs
- --client-ca-file=/var/lib/rancher/k3s/agent/client-ca.crt # 4.2.3
- --cloud-provider=external
- --cluster-dns=10.43.0.10
- --cluster-domain=cluster.local
- --cni-bin-dir=/var/lib/rancher/k3s/data/223e6420f8db0d8828a8f5ed3c44489bb8eb47aa71485404f8af8c462a29bea3/bin
- --cni-conf-dir=/var/lib/rancher/k3s/agent/etc/cni/net.d
- --container-runtime-endpoint=/run/k3s/containerd/containerd.sock
- --container-runtime=remote
- --containerd=/run/k3s/containerd/containerd.sock
- --eviction-hard=imagefs.available<5%,nodefs.available<5%
- --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10%
- --fail-swap-on=false
- --healthz-bind-address=127.0.0.1
- --hostname-override=hostname01
- --kubeconfig=/var/lib/rancher/k3s/agent/kubelet.kubeconfig
- --kubelet-cgroups=/systemd/system.slice
- --node-labels=
- --pod-manifest-path=/var/lib/rancher/k3s/agent/pod-manifests
- --protect-kernel-defaults=true # 4.2.6
- --read-only-port=0 # 4.2.4
- --resolv-conf=/run/systemd/resolve/resolv.conf
- --runtime-cgroups=/systemd/system.slice
- --serialize-image-pulls=false
- --tls-cert-file=/var/lib/rancher/k3s/agent/serving-kubelet.crt # 4.2.10
- --tls-private-key-file=/var/lib/rancher/k3s/agent/serving-kubelet.key # 4.2.10
-```
-
-The command below is an example of how the outlined remediations can be applied to harden K3s.
-
-```bash
-k3s server \
- --protect-kernel-defaults=true \
- --secrets-encryption=true \
- --kube-apiserver-arg='audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log' \
- --kube-apiserver-arg='audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml' \
- --kube-apiserver-arg='audit-log-maxage=30' \
- --kube-apiserver-arg='audit-log-maxbackup=10' \
- --kube-apiserver-arg='audit-log-maxsize=100' \
- --kube-apiserver-arg='request-timeout=300s' \
- --kube-apiserver-arg='service-account-lookup=true' \
- --kube-apiserver-arg='enable-admission-plugins=NodeRestriction,PodSecurityPolicy,NamespaceLifecycle,ServiceAccount' \
- --kube-controller-manager-arg='terminated-pod-gc-threshold=10' \
- --kube-controller-manager-arg='use-service-account-credentials=true' \
- --kubelet-arg='streaming-connection-idle-timeout=5m' \
- --kubelet-arg='make-iptables-util-chains=true'
-```
-
-## Conclusion
-
-If you have followed this guide, your K3s cluster will be configured to comply with the CIS Kubernetes Benchmark. You can review the [CIS Benchmark Self-Assessment Guide](../self_assessment/) to understand the expectations of each of the benchmark's checks and how you can do the same on your cluster.
diff --git a/content/k3s/latest/en/security/secrets_encryption/_index.md b/content/k3s/latest/en/security/secrets_encryption/_index.md
deleted file mode 100644
index a7491e2fb63..00000000000
--- a/content/k3s/latest/en/security/secrets_encryption/_index.md
+++ /dev/null
@@ -1,241 +0,0 @@
----
-title: Secrets Encryption
-weight: 26
----
-
-# Secrets Encryption Config
-_Available as of v1.17.4+k3s1_
-
-K3s supports enabling secrets encryption at rest by passing the flag `--secrets-encryption` on a server; this flag will do the following automatically:
-
-- Generate an AES-CBC key
-- Generate an encryption config file with the generated key
-- Pass the config to the KubeAPI as encryption-provider-config
-
-Example of the encryption config file:
-```
-{
- "kind": "EncryptionConfiguration",
- "apiVersion": "apiserver.config.k8s.io/v1",
- "resources": [
- {
- "resources": [
- "secrets"
- ],
- "providers": [
- {
- "aescbc": {
- "keys": [
- {
- "name": "aescbckey",
- "secret": "xxxxxxxxxxxxxxxxxxx"
- }
- ]
- }
- },
- {
- "identity": {}
- }
- ]
- }
- ]
-}
-```
-
-
-## Secrets Encryption Tool
-_Available as of v1.21.8+k3s1_
-
-K3s contains a utility tool `secrets-encrypt`, which enables automatic control over the following:
-
-- Disabling/Enabling secrets encryption
-- Adding new encryption keys
-- Rotating and deleting encryption keys
-- Reencrypting secrets
-
->**Warning:** Failure to follow proper procedure for rotating encryption keys can leave your cluster permanently corrupted. Proceed with caution.
-
-### Single-Server Encryption Key Rotation
-To rotate secrets encryption keys on a single-node cluster:
-
-- Start the K3s server with the flag `--secrets-encryption`
-
->**Note:** Starting K3s without encryption and enabling it at a later time is currently *not* supported.
-
-1. Prepare
-
- ```
- k3s secrets-encrypt prepare
- ```
-
-2. Kill and restart the K3s server with same arguments
-3. Rotate
-
- ```
- k3s secrets-encrypt rotate
- ```
-
-4. Kill and restart the K3s server with same arguments
-5. Reencrypt
-
- ```
- k3s secrets-encrypt reencrypt
- ```
-
-### High-Availability Encryption Key Rotation
-The steps are the same for both embedded DB and external DB clusters.
-
-To rotate secrets encryption keys on HA setups:
-
->**Notes:**
->
-> - Starting K3s without encryption and enabling it at a later time is currently *not* supported.
->
-> - While not required, it is recommended that you pick one server node from which to run the `secrets-encrypt` commands.
-
-- Start up all three K3s servers with the `--secrets-encryption` flag. For brevity, the servers will be referred to as S1, S2, S3.
-
-1. Prepare on S1
-
- ```
- k3s secrets-encrypt prepare
- ```
-
-2. Kill and restart S1 with same arguments
-3. Once S1 is up, kill and restart the S2 and S3
-
-4. Rotate on S1
-
- ```
- k3s secrets-encrypt rotate
- ```
-
-5. Kill and restart S1 with same arguments
-6. Once S1 is up, kill and restart the S2 and S3
-
-7. Reencrypt on S1
-
- ```
- k3s secrets-encrypt reencrypt
- ```
-
-8. Kill and restart S1 with same arguments
-9. Once S1 is up, kill and restart the S2 and S3
-
-### Single-Server Secrets Encryption Disable/Enable
-After launching a server with `--secrets-encryption` flag, secrets encryption can be disabled.
-
-To disable secrets encryption on a single-node cluster:
-
-1. Disable
-
- ```
- k3s secrets-encrypt disable
- ```
-
-2. Kill and restart the K3s server with same arguments
-
-3. Reencrypt with flags
-
- ```
- k3s secrets-encrypt reencrypt --force --skip
- ```
-
-To re-enable secrets encryption on a single node cluster:
-
-1. Enable
-
- ```
- k3s secrets-encrypt enable
- ```
-
-2. Kill and restart the K3s server with same arguments
-
-3. Reencrypt with flags
-
- ```
- k3s secrets-encrypt reencrypt --force --skip
- ```
-
-### High-Availability Secrets Encryption Disable/Enable
-After launching a HA cluster with `--secrets-encryption` flags, secrets encryption can be disabled.
->**Note:** While not required, it is recommended that you pick one server node from which to run the `secrets-encrypt` commands.
-
-For brevity, the three servers used in this guide will be referred to as S1, S2, S3.
-
-To disable secrets encryption on a HA cluster:
-
-1. Disable on S1
-
- ```
- k3s secrets-encrypt disable
- ```
-
-2. Kill and restart S1 with same arguments
-3. Once S1 is up, kill and restart the S2 and S3
-
-
-4. Reencrypt with flags on S1
-
- ```
- k3s secrets-encrypt reencrypt --force --skip
- ```
-
-To re-enable secrets encryption on a HA cluster:
-
-1. Enable on S1
-
- ```
- k3s secrets-encrypt enable
- ```
-
-2. Kill and restart S1 with same arguments
-3. Once S1 is up, kill and restart the S2 and S3
-
-4. Reencrypt with flags on S1
-
- ```
- k3s secrets-encrypt reencrypt --force --skip
- ```
-
-
-### Secrets Encryption Status
-The secrets-encrypt tool includes a `status` command that displays information about the current status of secrets encryption on the node.
-
-An example of the command on a single-server node:
-```
-$ k3s secrets-encrypt status
-Encryption Status: Enabled
-Current Rotation Stage: start
-Server Encryption Hashes: All hashes match
-
-Active Key Type Name
------- -------- ----
- * AES-CBC aescbckey
-
-```
-
-Another example on HA cluster, after rotating the keys, but before restarting the servers:
-```
-$ k3s secrets-encrypt status
-Encryption Status: Enabled
-Current Rotation Stage: rotate
-Server Encryption Hashes: hash does not match between node-1 and node-2
-
-Active Key Type Name
------- -------- ----
- * AES-CBC aescbckey-2021-12-10T22:54:38Z
- AES-CBC aescbckey
-
-```
-
-Details on each section are as follows:
-
-- __Encryption Status__: Displayed whether secrets encryption is disabled or enabled on the node
-- __Current Rotation Stage__: Indicates the current rotation stage on the node.
- Stages are: `start`, `prepare`, `rotate`, `reencrypt_request`, `reencrypt_active`, `reencrypt_finished`
-- __Server Encryption Hashes__: Useful for HA clusters, this indicates whether all servers are on the same stage with their local files. This can be used to identify whether a restart of servers is required before proceeding to the next stage. In the HA example above, node-1 and node-2 have different hashes, indicating that they currently do not have the same encryption configuration. Restarting the servers will sync up their configuration.
-- __Key Table__: Summarizes information about the secrets encryption keys found on the node.
- * __Active__: The "*" indicates which, if any, of the keys are currently used for secrets encryption. An active key is used by Kubernetes to encrypt any new secrets.
- * __Key Type__: All keys using this tool are `AES-CBC` type. See more info [here.](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#providers)
- * __Name__: Name of the encryption key.
\ No newline at end of file
diff --git a/content/k3s/latest/en/security/self_assessment/_index.md b/content/k3s/latest/en/security/self_assessment/_index.md
deleted file mode 100644
index 6471a95fb83..00000000000
--- a/content/k3s/latest/en/security/self_assessment/_index.md
+++ /dev/null
@@ -1,3078 +0,0 @@
----
-title: CIS Self Assessment Guide
-weight: 90
----
-
-### CIS Kubernetes Benchmark v1.6 - K3s with Kubernetes v1.17 to v1.21
-
-#### Overview
-
-This document is a companion to the K3s security hardening guide. The hardening guide provides prescriptive guidance for hardening a production installation of K3s, and this benchmark guide is meant to help you evaluate the level of security of the hardened cluster against each control in the CIS Kubernetes Benchmark. It is to be used by K3s operators, security teams, auditors, and decision-makers.
-
-This guide is specific to the **v1.17**, **v1.18**, **v1.19**, **v1.20** and **v1.21** release line of K3s and the **v1.6** release of the CIS Kubernetes Benchmark.
-
-For more information about each control, including detailed descriptions and remediations for failing tests, you can refer to the corresponding section of the CIS Kubernetes Benchmark v1.6. You can download the benchmark, after creating a free account, in [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/).
-
-#### Testing controls methodology
-
-Each control in the CIS Kubernetes Benchmark was evaluated against a K3s cluster that was configured according to the accompanying hardening guide.
-
-Where control audits differ from the original CIS benchmark, the audit commands specific to K3s are provided for testing.
-
-These are the possible results for each control:
-
-- **Pass** - The K3s cluster under test passed the audit outlined in the benchmark.
-- **Not Applicable** - The control is not applicable to K3s because of how it is designed to operate. The remediation section will explain why this is so.
-- **Warn** - The control is manual in the CIS benchmark and it depends on the cluster's use case or some other factor that must be determined by the cluster operator. These controls have been evaluated to ensure K3s does not prevent their implementation, but no further configuration or auditing of the cluster under test has been performed.
-
-This guide makes the assumption that K3s is running as a Systemd unit. Your installation may vary and will require you to adjust the "audit" commands to fit your scenario.
-
-> NOTE: Only `automated` tests (previously called `scored`) are covered in this guide.
-
-### Controls
-
----
-
-## 1.1 Master Node Configuration Files
-### 1.1.1 Ensure that the API server pod specification file permissions are set to 644 or more restrictive (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the
-master node.
-For example, chmod 644 /etc/kubernetes/manifests/kube-apiserver.yaml
-
-### 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chown root:root /etc/kubernetes/manifests/kube-apiserver.yaml
-
-### 1.1.3 Ensure that the controller manager pod specification file permissions are set to 644 or more restrictive (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chmod 644 /etc/kubernetes/manifests/kube-controller-manager.yaml
-
-### 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chown root:root /etc/kubernetes/manifests/kube-controller-manager.yaml
-
-### 1.1.5 Ensure that the scheduler pod specification file permissions are set to 644 or more restrictive (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chmod 644 /etc/kubernetes/manifests/kube-scheduler.yaml
-
-### 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chown root:root /etc/kubernetes/manifests/kube-scheduler.yaml
-
-### 1.1.7 Ensure that the etcd pod specification file permissions are set to 644 or more restrictive (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chmod 644 /etc/kubernetes/manifests/etcd.yaml
-
-### 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chown root:root /etc/kubernetes/manifests/etcd.yaml
-
-### 1.1.9 Ensure that the Container Network Interface file permissions are set to 644 or more restrictive (Manual)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chmod 644
-
-### 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Manual)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chown root:root
-
-### 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
-from the below command:
-ps -ef | grep etcd
-Run the below command (based on the etcd data directory found above). For example,
-chmod 700 /var/lib/etcd
-
-**Audit Script:** `check_for_k3s_etcd.sh`
-
-```bash
-#!/bin/bash
-
-# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
-# before it checks the requirement
-set -eE
-
-handle_error() {
- echo "false"
-}
-
-trap 'handle_error' ERR
-
-
-if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then
- case $1 in
- "1.1.11")
- echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
- "1.2.29")
- echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
- "2.1")
- echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.2")
- echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.3")
- echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.4")
- echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.5")
- echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.6")
- echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.7")
- echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
- esac
-else
-# If another database is running, return whatever is required to pass the scan
- case $1 in
- "1.1.11")
- echo "700";;
- "1.2.29")
- echo "--etcd-certfile AND --etcd-keyfile";;
- "2.1")
- echo "cert-file AND key-file";;
- "2.2")
- echo "true";;
- "2.3")
- echo "false";;
- "2.4")
- echo "peer-cert-file AND peer-key-file";;
- "2.5")
- echo "true";;
- "2.6")
- echo "--peer-auto-tls=false";;
- "2.7")
- echo "--trusted-ca-file";;
- esac
-fi
-
-```
-
-**Audit Execution:**
-
-```bash
-./check_for_k3s_etcd.sh 1.1.11
-```
-
-**Expected Result**:
-
-```console
-'700' is equal to '700'
-```
-
-**Returned Value**:
-
-```console
-700
-```
-
-### 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-On the etcd server node, get the etcd data directory, passed as an argument --data-dir,
-from the below command:
-ps -ef | grep etcd
-Run the below command (based on the etcd data directory found above).
-For example, chown etcd:etcd /var/lib/etcd
-
-### 1.1.13 Ensure that the admin.conf file permissions are set to 644 or more restrictive (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chmod 644 /var/lib/rancher/k3s/server/cred/admin.kubeconfig
-
-### 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chown root:root /etc/kubernetes/admin.conf
-
-**Audit:**
-
-```bash
-/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/admin.kubeconfig; then stat -c %U:%G /var/lib/rancher/k3s/server/cred/admin.kubeconfig; fi'
-```
-
-**Expected Result**:
-
-```console
-'root:root' is equal to 'root:root'
-```
-
-**Returned Value**:
-
-```console
-root:root
-```
-
-### 1.1.15 Ensure that the scheduler.conf file permissions are set to 644 or more restrictive (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chmod 644 scheduler
-
-**Audit:**
-
-```bash
-/bin/sh -c 'if test -e scheduler; then stat -c permissions=%a scheduler; fi'
-```
-
-**Expected Result**:
-
-```console
-'permissions' is not present
-```
-
-### 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chown root:root scheduler
-
-**Audit:**
-
-```bash
-/bin/sh -c 'if test -e scheduler; then stat -c %U:%G scheduler; fi'
-```
-
-**Expected Result**:
-
-```console
-'root:root' is not present
-```
-
-### 1.1.17 Ensure that the controller-manager.conf file permissions are set to 644 or more restrictive (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chmod 644 controllermanager
-
-**Audit:**
-
-```bash
-/bin/sh -c 'if test -e controllermanager; then stat -c permissions=%a controllermanager; fi'
-```
-
-**Expected Result**:
-
-```console
-'permissions' is not present
-```
-
-### 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chown root:root controllermanager
-
-**Audit:**
-
-```bash
-stat -c %U:%G /var/lib/rancher/k3s/server/tls
-```
-
-**Expected Result**:
-
-```console
-'root:root' is equal to 'root:root'
-```
-
-**Returned Value**:
-
-```console
-root:root
-```
-
-### 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chown -R root:root /etc/kubernetes/pki/
-
-**Audit:**
-
-```bash
-find /etc/kubernetes/pki/ | xargs stat -c %U:%G
-```
-
-**Expected Result**:
-
-```console
-'root:root' is not present
-```
-
-### 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 644 or more restrictive (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chmod -R 644 /etc/kubernetes/pki/*.crt
-
-**Audit:**
-
-```bash
-stat -c %n %a /var/lib/rancher/k3s/server/tls/*.crt
-```
-
-**Expected Result**:
-
-```console
-'permissions' is not present
-```
-
-### 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the master node.
-For example,
-chmod -R 600 /etc/kubernetes/pki/*.key
-
-**Audit:**
-
-```bash
-stat -c %n %a /var/lib/rancher/k3s/server/tls/*.key
-```
-
-**Expected Result**:
-
-```console
-'permissions' is not present
-```
-
-## 1.2 API Server
-### 1.2.1 Ensure that the --anonymous-auth argument is set to false (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the below parameter.
---anonymous-auth=false
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'anonymous-auth'
-```
-
-### 1.2.2 Ensure that the --basic-auth-file argument is not set (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the documentation and configure alternate mechanisms for authentication. Then,
-edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and remove the --basic-auth-file= parameter.
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'basic-auth-file'
-```
-
-**Expected Result**:
-
-```console
-'--basic-auth-file' is not present
-```
-
-### 1.2.3 Ensure that the --token-auth-file parameter is not set (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the documentation and configure alternate mechanisms for authentication. Then,
-edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and remove the --token-auth-file= parameter.
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'token-auth-file'
-```
-
-**Expected Result**:
-
-```console
-'--token-auth-file' is not present
-```
-
-### 1.2.4 Ensure that the --kubelet-https argument is set to true (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and remove the --kubelet-https parameter.
-
-### 1.2.5 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the Kubernetes documentation and set up the TLS connection between the
-apiserver and kubelets. Then, edit API server pod specification file
-/etc/kubernetes/manifests/kube-apiserver.yaml on the master node and set the
-kubelet client certificate and key parameters as below.
---kubelet-client-certificate=
---kubelet-client-key=
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'kubelet-certificate-authority'
-```
-
-**Expected Result**:
-
-```console
-'--kubelet-client-certificate' is not present AND '--kubelet-client-key' is not present
-```
-
-### 1.2.6 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the Kubernetes documentation and setup the TLS connection between
-the apiserver and kubelets. Then, edit the API server pod specification file
-/etc/kubernetes/manifests/kube-apiserver.yaml on the master node and set the
---kubelet-certificate-authority parameter to the path to the cert file for the certificate authority.
---kubelet-certificate-authority=
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'kubelet-certificate-authority'
-```
-
-**Expected Result**:
-
-```console
-'--kubelet-certificate-authority' is not present
-```
-
-### 1.2.7 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --authorization-mode parameter to values other than AlwaysAllow.
-One such example could be as below.
---authorization-mode=RBAC
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode'
-```
-
-**Expected Result**:
-
-```console
-'--authorization-mode' is not present
-```
-
-### 1.2.8 Ensure that the --authorization-mode argument includes Node (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --authorization-mode parameter to a value that includes Node.
---authorization-mode=Node,RBAC
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode'
-```
-
-**Expected Result**:
-
-```console
-'--authorization-mode' is not present
-```
-
-### 1.2.9 Ensure that the --authorization-mode argument includes RBAC (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --authorization-mode parameter to a value that includes RBAC,
-for example:
---authorization-mode=Node,RBAC
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode'
-```
-
-**Expected Result**:
-
-```console
-'--authorization-mode' is not present
-```
-
-### 1.2.10 Ensure that the admission control plugin EventRateLimit is set (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the Kubernetes documentation and set the desired limits in a configuration file.
-Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-and set the below parameters.
---enable-admission-plugins=...,EventRateLimit,...
---admission-control-config-file=
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
-```
-
-**Expected Result**:
-
-```console
-'--enable-admission-plugins' is not present
-```
-
-### 1.2.11 Ensure that the admission control plugin AlwaysAdmit is not set (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and either remove the --enable-admission-plugins parameter, or set it to a
-value that does not include AlwaysAdmit.
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
-```
-
-**Expected Result**:
-
-```console
-'--enable-admission-plugins' is not present OR '--enable-admission-plugins' is not present
-```
-
-### 1.2.12 Ensure that the admission control plugin AlwaysPullImages is set (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --enable-admission-plugins parameter to include
-AlwaysPullImages.
---enable-admission-plugins=...,AlwaysPullImages,...
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
-```
-
-**Expected Result**:
-
-```console
-'--enable-admission-plugins' is not present
-```
-
-### 1.2.13 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --enable-admission-plugins parameter to include
-SecurityContextDeny, unless PodSecurityPolicy is already in place.
---enable-admission-plugins=...,SecurityContextDeny,...
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
-```
-
-**Expected Result**:
-
-```console
-'--enable-admission-plugins' is not present OR '--enable-admission-plugins' is not present
-```
-
-### 1.2.14 Ensure that the admission control plugin ServiceAccount is set (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the documentation and create ServiceAccount objects as per your environment.
-Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and ensure that the --disable-admission-plugins parameter is set to a
-value that does not include ServiceAccount.
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'ServiceAccount'
-```
-
-**Expected Result**:
-
-```console
-'--disable-admission-plugins' is not present OR '--disable-admission-plugins' is not present
-```
-
-### 1.2.15 Ensure that the admission control plugin NamespaceLifecycle is set (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --disable-admission-plugins parameter to
-ensure it does not include NamespaceLifecycle.
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'disable-admission-plugins'
-```
-
-**Expected Result**:
-
-```console
-'--disable-admission-plugins' is not present OR '--disable-admission-plugins' is not present
-```
-
-### 1.2.16 Ensure that the admission control plugin PodSecurityPolicy is set (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the documentation and create Pod Security Policy objects as per your environment.
-Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --enable-admission-plugins parameter to a
-value that includes PodSecurityPolicy:
---enable-admission-plugins=...,PodSecurityPolicy,...
-Then restart the API Server.
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
-```
-
-**Expected Result**:
-
-```console
-'--enable-admission-plugins' is not present
-```
-
-### 1.2.17 Ensure that the admission control plugin NodeRestriction is set (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the Kubernetes documentation and configure NodeRestriction plug-in on kubelets.
-Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --enable-admission-plugins parameter to a
-value that includes NodeRestriction.
---enable-admission-plugins=...,NodeRestriction,...
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins'
-```
-
-**Expected Result**:
-
-```console
-'--enable-admission-plugins' is not present
-```
-
-### 1.2.18 Ensure that the --insecure-bind-address argument is not set (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and remove the --insecure-bind-address parameter.
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'insecure-bind-address'
-```
-
-**Expected Result**:
-
-```console
-'--insecure-bind-address' is not present
-```
-
-### 1.2.19 Ensure that the --insecure-port argument is set to 0 (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the below parameter.
---insecure-port=0
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'insecure-port'
-```
-
-**Expected Result**:
-
-```console
-'--insecure-port' is not present
-```
-
-### 1.2.20 Ensure that the --secure-port argument is not set to 0 (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and either remove the --secure-port parameter or
-set it to a different (non-zero) desired port.
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'secure-port'
-```
-
-**Expected Result**:
-
-```console
-'--secure-port' is not present OR '--secure-port' is not present
-```
-
-### 1.2.21 Ensure that the --profiling argument is set to false (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the below parameter.
---profiling=false
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'profiling'
-```
-
-**Expected Result**:
-
-```console
-'--profiling' is not present
-```
-
-### 1.2.22 Ensure that the --audit-log-path argument is set (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --audit-log-path parameter to a suitable path and
-file where you would like audit logs to be written, for example:
---audit-log-path=/var/log/apiserver/audit.log
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-log-path'
-```
-
-**Expected Result**:
-
-```console
-'--audit-log-path' is not present
-```
-
-### 1.2.23 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --audit-log-maxage parameter to 30 or as an appropriate number of days:
---audit-log-maxage=30
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-log-maxage'
-```
-
-**Expected Result**:
-
-```console
-'--audit-log-maxage' is not present
-```
-
-### 1.2.24 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --audit-log-maxbackup parameter to 10 or to an appropriate
-value.
---audit-log-maxbackup=10
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-log-maxbackup'
-```
-
-**Expected Result**:
-
-```console
-'--audit-log-maxbackup' is not present
-```
-
-### 1.2.25 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --audit-log-maxsize parameter to an appropriate size in MB.
-For example, to set it as 100 MB:
---audit-log-maxsize=100
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-log-maxsize'
-```
-
-**Expected Result**:
-
-```console
-'--audit-log-maxsize' is not present
-```
-
-### 1.2.26 Ensure that the --request-timeout argument is set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-and set the below parameter as appropriate and if needed.
-For example,
---request-timeout=300s
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'request-timeout'
-```
-
-**Expected Result**:
-
-```console
-'--request-timeout' is not present OR '--request-timeout' is not present
-```
-
-### 1.2.27 Ensure that the --service-account-lookup argument is set to true (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the below parameter.
---service-account-lookup=true
-Alternatively, you can delete the --service-account-lookup parameter from this file so
-that the default takes effect.
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'service-account-lookup'
-```
-
-**Expected Result**:
-
-```console
-'--service-account-lookup' is not present OR '--service-account-lookup' is not present
-```
-
-### 1.2.28 Ensure that the --service-account-key-file argument is set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --service-account-key-file parameter
-to the public key file for service accounts:
---service-account-key-file=
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'service-account-key-file'
-```
-
-**Expected Result**:
-
-```console
-'--service-account-key-file' is not present
-```
-
-### 1.2.29 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
-Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the etcd certificate and key file parameters.
---etcd-certfile=
---etcd-keyfile=
-
-**Audit Script:** `check_for_k3s_etcd.sh`
-
-```bash
-#!/bin/bash
-
-# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
-# before it checks the requirement
-set -eE
-
-handle_error() {
- echo "false"
-}
-
-trap 'handle_error' ERR
-
-
-if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then
- case $1 in
- "1.1.11")
- echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
- "1.2.29")
- echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
- "2.1")
- echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.2")
- echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.3")
- echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.4")
- echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.5")
- echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.6")
- echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.7")
- echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
- esac
-else
-# If another database is running, return whatever is required to pass the scan
- case $1 in
- "1.1.11")
- echo "700";;
- "1.2.29")
- echo "--etcd-certfile AND --etcd-keyfile";;
- "2.1")
- echo "cert-file AND key-file";;
- "2.2")
- echo "true";;
- "2.3")
- echo "false";;
- "2.4")
- echo "peer-cert-file AND peer-key-file";;
- "2.5")
- echo "true";;
- "2.6")
- echo "--peer-auto-tls=false";;
- "2.7")
- echo "--trusted-ca-file";;
- esac
-fi
-
-```
-
-**Audit Execution:**
-
-```bash
-./check_for_k3s_etcd.sh 1.2.29
-```
-
-**Expected Result**:
-
-```console
-'--etcd-certfile' is present AND '--etcd-keyfile' is present
-```
-
-**Returned Value**:
-
-```console
-Feb 21 23:13:24 k3s[5223]: time="2022-02-21T23:13:24.847339487Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit-log --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,NamespaceLifecycle,ServiceAccount --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
-```
-
-### 1.2.30 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
-Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the TLS certificate and private key file parameters.
---tls-cert-file=
---tls-private-key-file=
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep -A1 'Running kube-apiserver' | tail -n2
-```
-
-**Expected Result**:
-
-```console
-'--tls-cert-file' is present AND '--tls-private-key-file' is present
-```
-
-**Returned Value**:
-
-```console
-Feb 21 23:13:24 k3s[5223]: time="2022-02-21T23:13:24.847339487Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit-log --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,NamespaceLifecycle,ServiceAccount --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key" Feb 21 23:13:24 k3s[5223]: {"level":"info","ts":"2022-02-21T23:13:24.848Z","caller":"raft/raft.go:1530","msg":"b3656202b34887ca switched to configuration voters=(12926846069174208458)"}
-```
-
-### 1.2.31 Ensure that the --client-ca-file argument is set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the Kubernetes documentation and set up the TLS connection on the apiserver.
-Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the client certificate authority file.
---client-ca-file=
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'client-ca-file'
-```
-
-**Expected Result**:
-
-```console
-'--client-ca-file' is not present
-```
-
-### 1.2.32 Ensure that the --etcd-cafile argument is set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd.
-Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the etcd certificate authority file parameter.
---etcd-cafile=
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-cafile'
-```
-
-**Expected Result**:
-
-```console
-'--etcd-cafile' is not present
-```
-
-### 1.2.33 Ensure that the --encryption-provider-config argument is set as appropriate (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the Kubernetes documentation and configure a EncryptionConfig file.
-Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the --encryption-provider-config parameter to the path of that file: --encryption-provider-config=
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'encryption-provider-config'
-```
-
-**Expected Result**:
-
-```console
-'--encryption-provider-config' is not present
-```
-
-### 1.2.34 Ensure that encryption providers are appropriately configured (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Follow the Kubernetes documentation and configure a EncryptionConfig file.
-In this file, choose aescbc, kms or secretbox as the encryption provider.
-
-**Audit:**
-
-```bash
-grep aescbc /path/to/encryption-config.json
-```
-
-### 1.2.35 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml
-on the master node and set the below parameter.
---tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM
-_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM
-_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM
-_SHA384
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'tls-cipher-suites'
-```
-
-**Expected Result**:
-
-```console
-'--tls-cipher-suites' is not present
-```
-
-## 1.3 Controller Manager
-### 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
-on the master node and set the --terminated-pod-gc-threshold to an appropriate threshold,
-for example:
---terminated-pod-gc-threshold=10
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'terminated-pod-gc-threshold'
-```
-
-**Expected Result**:
-
-```console
-'--terminated-pod-gc-threshold' is not present
-```
-
-### 1.3.2 Ensure that the --profiling argument is set to false (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
-on the master node and set the below parameter.
---profiling=false
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'profiling'
-```
-
-**Expected Result**:
-
-```console
-'--profiling' is not present
-```
-
-### 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
-on the master node to set the below parameter.
---use-service-account-credentials=true
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'use-service-account-credentials'
-```
-
-**Expected Result**:
-
-```console
-'--use-service-account-credentials' is not present
-```
-
-### 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
-on the master node and set the --service-account-private-key-file parameter
-to the private key file for service accounts.
---service-account-private-key-file=
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'service-account-private-key-file'
-```
-
-**Expected Result**:
-
-```console
-'--service-account-private-key-file' is not present
-```
-
-### 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
-on the master node and set the --root-ca-file parameter to the certificate bundle file`.
---root-ca-file=
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'root-ca-file'
-```
-
-**Expected Result**:
-
-```console
-'--root-ca-file' is not present
-```
-
-### 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
-on the master node and set the --feature-gates parameter to include RotateKubeletServerCertificate=true.
---feature-gates=RotateKubeletServerCertificate=true
-
-### 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml
-on the master node and ensure the correct value for the --bind-address parameter
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'bind-address'
-```
-
-**Expected Result**:
-
-```console
-'--bind-address' is present OR '--bind-address' is not present
-```
-
-## 1.4 Scheduler
-### 1.4.1 Ensure that the --profiling argument is set to false (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml file
-on the master node and set the below parameter.
---profiling=false
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-scheduler' | tail -n1
-```
-
-**Expected Result**:
-
-```console
-'false' is equal to 'false'
-```
-
-**Returned Value**:
-
-```console
-Feb 21 23:13:24 k3s[5223]: time="2022-02-21T23:13:24.851975832Z" level=info msg="Running kube-scheduler --address=127.0.0.1 --bind-address=127.0.0.1 --kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --port=10251 --profiling=false --secure-port=0"
-```
-
-### 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml
-on the master node and ensure the correct value for the --bind-address parameter
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-scheduler' | tail -n1 | grep 'bind-address'
-```
-
-**Expected Result**:
-
-```console
-'--bind-address' is present OR '--bind-address' is not present
-```
-
-## 2 Etcd Node Configuration Files
-### 2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the etcd service documentation and configure TLS encryption.
-Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml
-on the master node and set the below parameters.
---cert-file=
---key-file=
-
-**Audit Script:** `check_for_k3s_etcd.sh`
-
-```bash
-#!/bin/bash
-
-# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
-# before it checks the requirement
-set -eE
-
-handle_error() {
- echo "false"
-}
-
-trap 'handle_error' ERR
-
-
-if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then
- case $1 in
- "1.1.11")
- echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
- "1.2.29")
- echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
- "2.1")
- echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.2")
- echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.3")
- echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.4")
- echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.5")
- echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.6")
- echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.7")
- echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
- esac
-else
-# If another database is running, return whatever is required to pass the scan
- case $1 in
- "1.1.11")
- echo "700";;
- "1.2.29")
- echo "--etcd-certfile AND --etcd-keyfile";;
- "2.1")
- echo "cert-file AND key-file";;
- "2.2")
- echo "true";;
- "2.3")
- echo "false";;
- "2.4")
- echo "peer-cert-file AND peer-key-file";;
- "2.5")
- echo "true";;
- "2.6")
- echo "--peer-auto-tls=false";;
- "2.7")
- echo "--trusted-ca-file";;
- esac
-fi
-
-```
-
-**Audit Execution:**
-
-```bash
-./check_for_k3s_etcd.sh 2.1
-```
-
-**Expected Result**:
-
-```console
-'cert-file' is present AND 'key-file' is present
-```
-
-**Returned Value**:
-
-```console
-cert-file: /var/lib/rancher/k3s/server/tls/etcd/server-client.crt key-file: /var/lib/rancher/k3s/server/tls/etcd/server-client.key
-```
-
-### 2.2 Ensure that the --client-cert-auth argument is set to true (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master
-node and set the below parameter.
---client-cert-auth="true"
-
-**Audit Script:** `check_for_k3s_etcd.sh`
-
-```bash
-#!/bin/bash
-
-# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
-# before it checks the requirement
-set -eE
-
-handle_error() {
- echo "false"
-}
-
-trap 'handle_error' ERR
-
-
-if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then
- case $1 in
- "1.1.11")
- echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
- "1.2.29")
- echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
- "2.1")
- echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.2")
- echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.3")
- echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.4")
- echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.5")
- echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.6")
- echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.7")
- echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
- esac
-else
-# If another database is running, return whatever is required to pass the scan
- case $1 in
- "1.1.11")
- echo "700";;
- "1.2.29")
- echo "--etcd-certfile AND --etcd-keyfile";;
- "2.1")
- echo "cert-file AND key-file";;
- "2.2")
- echo "true";;
- "2.3")
- echo "false";;
- "2.4")
- echo "peer-cert-file AND peer-key-file";;
- "2.5")
- echo "true";;
- "2.6")
- echo "--peer-auto-tls=false";;
- "2.7")
- echo "--trusted-ca-file";;
- esac
-fi
-
-```
-
-**Audit Execution:**
-
-```bash
-./check_for_k3s_etcd.sh 2.2
-```
-
-**Expected Result**:
-
-```console
-'--client-cert-auth' is not present
-```
-
-**Returned Value**:
-
-```console
-client-cert-auth: true
-```
-
-### 2.3 Ensure that the --auto-tls argument is not set to true (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master
-node and either remove the --auto-tls parameter or set it to false.
- --auto-tls=false
-
-**Audit Script:** `check_for_k3s_etcd.sh`
-
-```bash
-#!/bin/bash
-
-# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
-# before it checks the requirement
-set -eE
-
-handle_error() {
- echo "false"
-}
-
-trap 'handle_error' ERR
-
-
-if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then
- case $1 in
- "1.1.11")
- echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
- "1.2.29")
- echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
- "2.1")
- echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.2")
- echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.3")
- echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.4")
- echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.5")
- echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.6")
- echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.7")
- echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
- esac
-else
-# If another database is running, return whatever is required to pass the scan
- case $1 in
- "1.1.11")
- echo "700";;
- "1.2.29")
- echo "--etcd-certfile AND --etcd-keyfile";;
- "2.1")
- echo "cert-file AND key-file";;
- "2.2")
- echo "true";;
- "2.3")
- echo "false";;
- "2.4")
- echo "peer-cert-file AND peer-key-file";;
- "2.5")
- echo "true";;
- "2.6")
- echo "--peer-auto-tls=false";;
- "2.7")
- echo "--trusted-ca-file";;
- esac
-fi
-
-```
-
-**Audit Execution:**
-
-```bash
-./check_for_k3s_etcd.sh 2.3
-```
-
-**Expected Result**:
-
-```console
-'--auto-tls' is not present OR '--auto-tls' is not present
-```
-
-**Returned Value**:
-
-```console
-false
-```
-
-### 2.4 Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the etcd service documentation and configure peer TLS encryption as appropriate
-for your etcd cluster.
-Then, edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the
-master node and set the below parameters.
---peer-client-file=
---peer-key-file=
-
-**Audit Script:** `check_for_k3s_etcd.sh`
-
-```bash
-#!/bin/bash
-
-# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
-# before it checks the requirement
-set -eE
-
-handle_error() {
- echo "false"
-}
-
-trap 'handle_error' ERR
-
-
-if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then
- case $1 in
- "1.1.11")
- echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
- "1.2.29")
- echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
- "2.1")
- echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.2")
- echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.3")
- echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.4")
- echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.5")
- echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.6")
- echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.7")
- echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
- esac
-else
-# If another database is running, return whatever is required to pass the scan
- case $1 in
- "1.1.11")
- echo "700";;
- "1.2.29")
- echo "--etcd-certfile AND --etcd-keyfile";;
- "2.1")
- echo "cert-file AND key-file";;
- "2.2")
- echo "true";;
- "2.3")
- echo "false";;
- "2.4")
- echo "peer-cert-file AND peer-key-file";;
- "2.5")
- echo "true";;
- "2.6")
- echo "--peer-auto-tls=false";;
- "2.7")
- echo "--trusted-ca-file";;
- esac
-fi
-
-```
-
-**Audit Execution:**
-
-```bash
-./check_for_k3s_etcd.sh 2.4
-```
-
-**Expected Result**:
-
-```console
-'cert-file' is present AND 'key-file' is present
-```
-
-**Returned Value**:
-
-```console
-cert-file: /var/lib/rancher/k3s/server/tls/etcd/peer-server-client.crt key-file: /var/lib/rancher/k3s/server/tls/etcd/peer-server-client.key
-```
-
-### 2.5 Ensure that the --peer-client-cert-auth argument is set to true (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master
-node and set the below parameter.
---peer-client-cert-auth=true
-
-**Audit Script:** `check_for_k3s_etcd.sh`
-
-```bash
-#!/bin/bash
-
-# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
-# before it checks the requirement
-set -eE
-
-handle_error() {
- echo "false"
-}
-
-trap 'handle_error' ERR
-
-
-if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then
- case $1 in
- "1.1.11")
- echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
- "1.2.29")
- echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
- "2.1")
- echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.2")
- echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.3")
- echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.4")
- echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.5")
- echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.6")
- echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.7")
- echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
- esac
-else
-# If another database is running, return whatever is required to pass the scan
- case $1 in
- "1.1.11")
- echo "700";;
- "1.2.29")
- echo "--etcd-certfile AND --etcd-keyfile";;
- "2.1")
- echo "cert-file AND key-file";;
- "2.2")
- echo "true";;
- "2.3")
- echo "false";;
- "2.4")
- echo "peer-cert-file AND peer-key-file";;
- "2.5")
- echo "true";;
- "2.6")
- echo "--peer-auto-tls=false";;
- "2.7")
- echo "--trusted-ca-file";;
- esac
-fi
-
-```
-
-**Audit Execution:**
-
-```bash
-./check_for_k3s_etcd.sh 2.5
-```
-
-**Expected Result**:
-
-```console
-'--client-cert-auth' is not present
-```
-
-**Returned Value**:
-
-```console
-client-cert-auth: true
-```
-
-### 2.6 Ensure that the --peer-auto-tls argument is not set to true (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master
-node and either remove the --peer-auto-tls parameter or set it to false.
---peer-auto-tls=false
-
-**Audit Script:** `check_for_k3s_etcd.sh`
-
-```bash
-#!/bin/bash
-
-# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
-# before it checks the requirement
-set -eE
-
-handle_error() {
- echo "false"
-}
-
-trap 'handle_error' ERR
-
-
-if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then
- case $1 in
- "1.1.11")
- echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
- "1.2.29")
- echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
- "2.1")
- echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.2")
- echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.3")
- echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.4")
- echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.5")
- echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.6")
- echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.7")
- echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
- esac
-else
-# If another database is running, return whatever is required to pass the scan
- case $1 in
- "1.1.11")
- echo "700";;
- "1.2.29")
- echo "--etcd-certfile AND --etcd-keyfile";;
- "2.1")
- echo "cert-file AND key-file";;
- "2.2")
- echo "true";;
- "2.3")
- echo "false";;
- "2.4")
- echo "peer-cert-file AND peer-key-file";;
- "2.5")
- echo "true";;
- "2.6")
- echo "--peer-auto-tls=false";;
- "2.7")
- echo "--trusted-ca-file";;
- esac
-fi
-
-```
-
-**Audit Execution:**
-
-```bash
-./check_for_k3s_etcd.sh 2.6
-```
-
-**Expected Result**:
-
-```console
-'--peer-auto-tls' is not present OR '--peer-auto-tls' is present
-```
-
-**Returned Value**:
-
-```console
-false
-```
-
-### 2.7 Ensure that a unique Certificate Authority is used for etcd (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-[Manual test]
-Follow the etcd documentation and create a dedicated certificate authority setup for the
-etcd service.
-Then, edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the
-master node and set the below parameter.
---trusted-ca-file=
-
-**Audit Script:** `check_for_k3s_etcd.sh`
-
-```bash
-#!/bin/bash
-
-# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3)
-# before it checks the requirement
-set -eE
-
-handle_error() {
- echo "false"
-}
-
-trap 'handle_error' ERR
-
-
-if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then
- case $1 in
- "1.1.11")
- echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);;
- "1.2.29")
- echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');;
- "2.1")
- echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.2")
- echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.3")
- echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.4")
- echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');;
- "2.5")
- echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";;
- "2.6")
- echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);;
- "2.7")
- echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);;
- esac
-else
-# If another database is running, return whatever is required to pass the scan
- case $1 in
- "1.1.11")
- echo "700";;
- "1.2.29")
- echo "--etcd-certfile AND --etcd-keyfile";;
- "2.1")
- echo "cert-file AND key-file";;
- "2.2")
- echo "true";;
- "2.3")
- echo "false";;
- "2.4")
- echo "peer-cert-file AND peer-key-file";;
- "2.5")
- echo "true";;
- "2.6")
- echo "--peer-auto-tls=false";;
- "2.7")
- echo "--trusted-ca-file";;
- esac
-fi
-
-```
-
-**Audit Execution:**
-
-```bash
-./check_for_k3s_etcd.sh 2.7
-```
-
-**Expected Result**:
-
-```console
-'trusted-ca-file' is present
-```
-
-**Returned Value**:
-
-```console
-trusted-ca-file: /var/lib/rancher/k3s/server/tls/etcd/server-ca.crt trusted-ca-file: /var/lib/rancher/k3s/server/tls/etcd/peer-ca.crt
-```
-
-## 3.1 Authentication and Authorization
-### 3.1.1 Client certificate authentication should not be used for users (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Alternative mechanisms provided by Kubernetes such as the use of OIDC should be
-implemented in place of client certificates.
-
-## 3.2 Logging
-### 3.2.1 Ensure that a minimal audit policy is created (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Create an audit policy file for your cluster.
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-policy-file'
-```
-
-### 3.2.2 Ensure that the audit policy covers key security concerns (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Consider modification of the audit policy in use on the cluster to include these items, at a
-minimum.
-
-## 4.1 Worker Node Configuration Files
-### 4.1.1 Ensure that the kubelet service file permissions are set to 644 or more restrictive (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the each worker node.
-For example,
-chmod 644 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
-
-### 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the each worker node.
-For example,
-chown root:root /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
-
-### 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 644 or more restrictive (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the each worker node.
-For example,
-chmod 644 /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig
-
-**Audit:**
-
-```bash
-stat -c %a /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig
-```
-
-**Expected Result**:
-
-```console
-'permissions' is present OR '/var/lib/rancher/k3s/agent/kubeproxy.kubeconfig' is not present
-```
-
-**Returned Value**:
-
-```console
-644
-```
-
-### 4.1.4 Ensure that the proxy kubeconfig file ownership is set to root:root (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the each worker node.
-For example, chown root:root /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig
-
-**Audit:**
-
-```bash
-stat -c %U:%G /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig
-```
-
-**Expected Result**:
-
-```console
-'root:root' is not present OR '/var/lib/rancher/k3s/agent/kubeproxy.kubeconfig' is not present
-```
-
-**Returned Value**:
-
-```console
-root:root
-```
-
-### 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 644 or more restrictive (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the each worker node.
-For example,
-chmod 644 /var/lib/rancher/k3s/server/cred/admin.kubeconfig
-
-**Audit:**
-
-```bash
-stat -c %a /var/lib/rancher/k3s/agent/kubelet.kubeconfig
-```
-
-**Expected Result**:
-
-```console
-'644' is equal to '644'
-```
-
-**Returned Value**:
-
-```console
-644
-```
-
-### 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Run the below command (based on the file location on your system) on the each worker node.
-For example,
-chown root:root /var/lib/rancher/k3s/server/cred/admin.kubeconfig
-
-**Audit:**
-
-```bash
-stat -c %U:%G /var/lib/rancher/k3s/agent/kubelet.kubeconfig
-```
-
-### 4.1.7 Ensure that the certificate authorities file permissions are set to 644 or more restrictive (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Run the following command to modify the file permissions of the
---client-ca-file chmod 644
-
-**Audit:**
-
-```bash
-stat -c %a /var/lib/rancher/k3s/server/tls/server-ca.crt
-```
-
-**Expected Result**:
-
-```console
-'644' is equal to '644' OR '640' is present OR '600' is present OR '444' is present OR '440' is present OR '400' is present OR '000' is present
-```
-
-**Returned Value**:
-
-```console
-644
-```
-
-### 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Run the following command to modify the ownership of the --client-ca-file.
-chown root:root
-
-**Audit:**
-
-```bash
-stat -c %U:%G /var/lib/rancher/k3s/server/tls/client-ca.crt
-```
-
-### 4.1.9 Ensure that the kubelet --config configuration file has permissions set to 644 or more restrictive (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the following command (using the config file location identified in the Audit step)
-chmod 644 /var/lib/kubelet/config.yaml
-
-### 4.1.10 Ensure that the kubelet --config configuration file ownership is set to root:root (Automated)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Run the following command (using the config file location identified in the Audit step)
-chown root:root /var/lib/kubelet/config.yaml
-
-## 4.2 Kubelet
-### 4.2.1 Ensure that the anonymous-auth argument is set to false (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-If using a Kubelet config file, edit the file to set authentication: anonymous: enabled to
-false.
-If using executable arguments, edit the kubelet service file
-/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
-set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
---anonymous-auth=false
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'anonymous-auth' | grep -v grep
-```
-
-**Expected Result**:
-
-```console
-'false' is equal to 'false'
-```
-
-**Returned Value**:
-
-```console
-Feb 21 23:13:24 k3s[5223]: time="2022-02-21T23:13:24.847339487Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit-log --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,NamespaceLifecycle,ServiceAccount --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
-```
-
-### 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-If using a Kubelet config file, edit the file to set authorization: mode to Webhook. If
-using executable arguments, edit the kubelet service file
-/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
-set the below parameter in KUBELET_AUTHZ_ARGS variable.
---authorization-mode=Webhook
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode' | grep -v grep
-```
-
-**Expected Result**:
-
-```console
-'Node,RBAC' not have 'AlwaysAllow'
-```
-
-**Returned Value**:
-
-```console
-Feb 21 23:13:24 k3s[5223]: time="2022-02-21T23:13:24.847339487Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit-log --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,NamespaceLifecycle,ServiceAccount --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
-```
-
-### 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-If using a Kubelet config file, edit the file to set authentication: x509: clientCAFile to
-the location of the client CA file.
-If using command line arguments, edit the kubelet service file
-/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
-set the below parameter in KUBELET_AUTHZ_ARGS variable.
---client-ca-file=
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver'| tail -n1 | grep 'client-ca-file' | grep -v grep
-```
-
-**Expected Result**:
-
-```console
-'--client-ca-file' is present
-```
-
-**Returned Value**:
-
-```console
-Feb 21 23:13:24 k3s[5223]: time="2022-02-21T23:13:24.847339487Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit-log --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,NamespaceLifecycle,ServiceAccount --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key"
-```
-
-### 4.2.4 Ensure that the --read-only-port argument is set to 0 (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-If using a Kubelet config file, edit the file to set readOnlyPort to 0.
-If using command line arguments, edit the kubelet service file
-/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
-set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
---read-only-port=0
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'read-only-port'
-```
-
-### 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-If using a Kubelet config file, edit the file to set streamingConnectionIdleTimeout to a
-value other than 0.
-If using command line arguments, edit the kubelet service file
-/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
-set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
---streaming-connection-idle-timeout=5m
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'streaming-connection-idle-timeout'
-```
-
-### 4.2.6 Ensure that the --protect-kernel-defaults argument is set to true (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-If using a Kubelet config file, edit the file to set protectKernelDefaults: true.
-If using command line arguments, edit the kubelet service file
-/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
-set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
---protect-kernel-defaults=true
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'protect-kernel-defaults'
-```
-
-**Expected Result**:
-
-```console
-'true' is equal to 'true'
-```
-
-**Returned Value**:
-
-```console
-Feb 21 23:13:32 k3s[5223]: time="2022-02-21T23:13:32.581127632Z" level=info msg="Running kubelet --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=cgroupfs --client-ca-file=/var/lib/rancher/k3s/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --cni-bin-dir=/var/lib/rancher/k3s/data/9de9bfcf367b723ef0ac73dd91761165a4a8ad11ad16a758d3a996264e60c612/bin --cni-conf-dir=/var/lib/rancher/k3s/agent/etc/cni/net.d --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --container-runtime=remote --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override= --kubeconfig=/var/lib/rancher/k3s/agent/kubelet.kubeconfig --make-iptables-util-chains=true --node-labels= --pod-manifest-path=/var/lib/rancher/k3s/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --streaming-connection-idle-timeout=5m --tls-cert-file=/var/lib/rancher/k3s/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/k3s/agent/serving-kubelet.key"
-```
-
-### 4.2.7 Ensure that the --make-iptables-util-chains argument is set to true (Automated)
-
-
-**Result:** pass
-
-**Remediation:**
-If using a Kubelet config file, edit the file to set makeIPTablesUtilChains: true.
-If using command line arguments, edit the kubelet service file
-/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
-remove the --make-iptables-util-chains argument from the
-KUBELET_SYSTEM_PODS_ARGS variable.
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'make-iptables-util-chains'
-```
-
-**Expected Result**:
-
-```console
-'true' is equal to 'true' OR '--make-iptables-util-chains' is not present
-```
-
-**Returned Value**:
-
-```console
-Feb 21 23:13:32 k3s[5223]: time="2022-02-21T23:13:32.581127632Z" level=info msg="Running kubelet --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=cgroupfs --client-ca-file=/var/lib/rancher/k3s/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --cni-bin-dir=/var/lib/rancher/k3s/data/9de9bfcf367b723ef0ac73dd91761165a4a8ad11ad16a758d3a996264e60c612/bin --cni-conf-dir=/var/lib/rancher/k3s/agent/etc/cni/net.d --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --container-runtime=remote --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override= --kubeconfig=/var/lib/rancher/k3s/agent/kubelet.kubeconfig --make-iptables-util-chains=true --node-labels= --pod-manifest-path=/var/lib/rancher/k3s/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --streaming-connection-idle-timeout=5m --tls-cert-file=/var/lib/rancher/k3s/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/k3s/agent/serving-kubelet.key"
-```
-
-### 4.2.8 Ensure that the --hostname-override argument is not set (Manual)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
-on each worker node and remove the --hostname-override argument from the
-KUBELET_SYSTEM_PODS_ARGS variable.
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-### 4.2.9 Ensure that the --event-qps argument is set to 0 or a level which ensures appropriate event capture (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-If using a Kubelet config file, edit the file to set eventRecordQPS: to an appropriate level.
-If using command line arguments, edit the kubelet service file
-/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
-set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable.
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-**Audit:**
-
-```bash
-/bin/ps -fC containerd
-```
-
-### 4.2.10 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-If using a Kubelet config file, edit the file to set tlsCertFile to the location
-of the certificate file to use to identify this Kubelet, and tlsPrivateKeyFile
-to the location of the corresponding private key file.
-If using command line arguments, edit the kubelet service file
-/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
-set the below parameters in KUBELET_CERTIFICATE_ARGS variable.
---tls-cert-file=
---tls-private-key-file=
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-**Audit:**
-
-```bash
-journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1
-```
-
-### 4.2.11 Ensure that the --rotate-certificates argument is not set to false (Manual)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-If using a Kubelet config file, edit the file to add the line rotateCertificates: true or
-remove it altogether to use the default value.
-If using command line arguments, edit the kubelet service file
-/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
-remove --rotate-certificates=false argument from the KUBELET_CERTIFICATE_ARGS
-variable.
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-### 4.2.12 Verify that the RotateKubeletServerCertificate argument is set to true (Manual)
-
-
-**Result:** Not Applicable
-
-**Remediation:**
-Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
-on each worker node and set the below parameter in KUBELET_CERTIFICATE_ARGS variable.
---feature-gates=RotateKubeletServerCertificate=true
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-### 4.2.13 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-If using a Kubelet config file, edit the file to set TLSCipherSuites: to
-TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
-or to a subset of these values.
-If using executable arguments, edit the kubelet service file
-/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and
-set the --tls-cipher-suites parameter as follows, or to a subset of these values.
---tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256
-Based on your system, restart the kubelet service. For example:
-systemctl daemon-reload
-systemctl restart kubelet.service
-
-**Audit:**
-
-```bash
-/bin/ps -fC containerd
-```
-
-## 5.1 RBAC and Service Accounts
-### 5.1.1 Ensure that the cluster-admin role is only used where required (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Identify all clusterrolebindings to the cluster-admin role. Check if they are used and
-if they need this role or if they could use a role with fewer privileges.
-Where possible, first bind users to a lower privileged role and then remove the
-clusterrolebinding to the cluster-admin role :
-kubectl delete clusterrolebinding [name]
-
-### 5.1.2 Minimize access to secrets (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Where possible, remove get, list and watch access to secret objects in the cluster.
-
-### 5.1.3 Minimize wildcard use in Roles and ClusterRoles (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Where possible replace any use of wildcards in clusterroles and roles with specific
-objects or actions.
-
-### 5.1.4 Minimize access to create pods (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Where possible, remove create access to pod objects in the cluster.
-
-### 5.1.5 Ensure that default service accounts are not actively used. (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Create explicit service accounts wherever a Kubernetes workload requires specific access
-to the Kubernetes API server.
-Modify the configuration of each default service account to include this value
-automountServiceAccountToken: false
-
-### 5.1.6 Ensure that Service Account Tokens are only mounted where necessary (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Modify the definition of pods and service accounts which do not need to mount service
-account tokens to disable it.
-
-## 5.2 Pod Security Policies
-### 5.2.1 Minimize the admission of privileged containers (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Create a PSP as described in the Kubernetes documentation, ensuring that
-the .spec.privileged field is omitted or set to false.
-
-**Audit:**
-
-```bash
-kubectl describe psp global-restricted-psp | grep MustRunAsNonRoot
-```
-
-### 5.2.2 Minimize the admission of containers wishing to share the host process ID namespace (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Create a PSP as described in the Kubernetes documentation, ensuring that the
-.spec.hostPID field is omitted or set to false.
-
-**Audit:**
-
-```bash
-kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostPID == null) or (.spec.hostPID == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
-```
-
-**Expected Result**:
-
-```console
-1 is greater than 0
-```
-
-**Returned Value**:
-
-```console
---count=1
-```
-
-### 5.2.3 Minimize the admission of containers wishing to share the host IPC namespace (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Create a PSP as described in the Kubernetes documentation, ensuring that the
-.spec.hostIPC field is omitted or set to false.
-
-**Audit:**
-
-```bash
-kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostIPC == null) or (.spec.hostIPC == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
-```
-
-**Expected Result**:
-
-```console
-1 is greater than 0
-```
-
-**Returned Value**:
-
-```console
---count=1
-```
-
-### 5.2.4 Minimize the admission of containers wishing to share the host network namespace (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Create a PSP as described in the Kubernetes documentation, ensuring that the
-.spec.hostNetwork field is omitted or set to false.
-
-**Audit:**
-
-```bash
-kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostNetwork == null) or (.spec.hostNetwork == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
-```
-
-**Expected Result**:
-
-```console
-1 is greater than 0
-```
-
-**Returned Value**:
-
-```console
---count=1
-```
-
-### 5.2.5 Minimize the admission of containers with allowPrivilegeEscalation (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Create a PSP as described in the Kubernetes documentation, ensuring that the
-.spec.allowPrivilegeEscalation field is omitted or set to false.
-
-**Audit:**
-
-```bash
-kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.allowPrivilegeEscalation == null) or (.spec.allowPrivilegeEscalation == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
-```
-
-**Expected Result**:
-
-```console
-1 is greater than 0
-```
-
-**Returned Value**:
-
-```console
---count=1
-```
-
-### 5.2.6 Minimize the admission of root containers (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Create a PSP as described in the Kubernetes documentation, ensuring that the
-.spec.runAsUser.rule is set to either MustRunAsNonRoot or MustRunAs with the range of
-UIDs not including 0.
-
-**Audit:**
-
-```bash
-kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.allowPrivilegeEscalation == null) or (.spec.allowPrivilegeEscalation == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}'
-```
-
-**Expected Result**:
-
-```console
-1 is greater than 0
-```
-
-**Returned Value**:
-
-```console
---count=1
-```
-
-### 5.2.7 Minimize the admission of containers with the NET_RAW capability (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Create a PSP as described in the Kubernetes documentation, ensuring that the
-.spec.requiredDropCapabilities is set to include either NET_RAW or ALL.
-
-**Audit:**
-
-```bash
-kubectl get psp
-```
-
-### 5.2.8 Minimize the admission of containers with added capabilities (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Ensure that allowedCapabilities is not present in PSPs for the cluster unless
-it is set to an empty array.
-
-### 5.2.9 Minimize the admission of containers with capabilities assigned (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Review the use of capabilites in applications runnning on your cluster. Where a namespace
-contains applicaions which do not require any Linux capabities to operate consider adding
-a PSP which forbids the admission of containers which do not drop all capabilities.
-
-## 5.3 Network Policies and CNI
-### 5.3.1 Ensure that the CNI in use supports Network Policies (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-If the CNI plugin in use does not support network policies, consideration should be given to
-making use of a different plugin, or finding an alternate mechanism for restricting traffic
-in the Kubernetes cluster.
-
-### 5.3.2 Ensure that all Namespaces have Network Policies defined (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Follow the documentation and create NetworkPolicy objects as you need them.
-
-**Audit Script:** `check_for_rke2_network_policies.sh`
-
-```bash
-#!/bin/bash
-
-set -eE
-
-handle_error() {
- echo "false"
-}
-
-trap 'handle_error' ERR
-
-for namespace in kube-system kube-public default; do
- policy_count=$(/var/lib/rancher/rke2/bin/kubectl get networkpolicy -n ${namespace} -o json | jq -r '.items | length')
- if [ ${policy_count} -eq 0 ]; then
- echo "false"
- exit
- fi
-done
-
-echo "true"
-
-```
-
-**Audit Execution:**
-
-```bash
-./check_for_rke2_network_policies.sh
-```
-
-**Expected Result**:
-
-```console
-'true' is equal to 'true'
-```
-
-**Returned Value**:
-
-```console
-true
-```
-
-## 5.4 Secrets Management
-### 5.4.1 Prefer using secrets as files over secrets as environment variables (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-if possible, rewrite application code to read secrets from mounted secret files, rather than
-from environment variables.
-
-**Audit:**
-
-```bash
-kubectl get all -o jsonpath='{range .items[?(@..secretKeyRef)]} {.kind} {.metadata.name} {' '}{end}' -A
-```
-
-### 5.4.2 Consider external secret storage (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Refer to the secrets management options offered by your cloud provider or a third-party
-secrets management solution.
-
-## 5.5 Extensible Admission Control
-### 5.5.1 Configure Image Provenance using ImagePolicyWebhook admission controller (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Follow the Kubernetes documentation and setup image provenance.
-
-## 5.7 General Policies
-### 5.7.1 Create administrative boundaries between resources using namespaces (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Follow the documentation and create namespaces for objects in your deployment as you need
-them.
-
-### 5.7.2 Ensure that the seccomp profile is set to docker/default in your pod definitions (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Seccomp is an alpha feature currently. By default, all alpha features are disabled. So, you
-would need to enable alpha features in the apiserver by passing "--feature-
-gates=AllAlpha=true" argument.
-Edit the /etc/kubernetes/apiserver file on the master node and set the KUBE_API_ARGS
-parameter to "--feature-gates=AllAlpha=true"
-KUBE_API_ARGS="--feature-gates=AllAlpha=true"
-Based on your system, restart the kube-apiserver service. For example:
-systemctl restart kube-apiserver.service
-Use annotations to enable the docker/default seccomp profile in your pod definitions. An
-example is as below:
-apiVersion: v1
-kind: Pod
-metadata:
- name: trustworthy-pod
- annotations:
- seccomp.security.alpha.kubernetes.io/pod: docker/default
-spec:
- containers:
- - name: trustworthy-container
- image: sotrustworthy:latest
-
-### 5.7.3 Apply Security Context to Your Pods and Containers (Manual)
-
-
-**Result:** warn
-
-**Remediation:**
-Follow the Kubernetes documentation and apply security contexts to your pods. For a
-suggested list of security contexts, you may refer to the CIS Security Benchmark for Docker
-Containers.
-
-### 5.7.4 The default namespace should not be used (Manual)
-
-
-**Result:** pass
-
-**Remediation:**
-Ensure that namespaces are created to allow for appropriate segregation of Kubernetes
-resources and that all new resources are created in a specific namespace.
-
-**Audit:**
-
-```bash
-kubectl get all --no-headers -n default | grep -v service | wc -l | xargs -I {} echo '--count={}'
-```
-
-**Expected Result**:
-
-```console
-'0' is equal to '0'
-```
-
-**Returned Value**:
-
-```console
---count=0
-```
diff --git a/content/k3s/latest/en/storage/_index.md b/content/k3s/latest/en/storage/_index.md
deleted file mode 100644
index 883128ee118..00000000000
--- a/content/k3s/latest/en/storage/_index.md
+++ /dev/null
@@ -1,166 +0,0 @@
----
-title: "Volumes and Storage"
-weight: 30
----
-
-When deploying an application that needs to retain data, you’ll need to create persistent storage. Persistent storage allows you to store application data external from the pod running your application. This storage practice allows you to maintain application data, even if the application’s pod fails.
-
-A persistent volume (PV) is a piece of storage in the Kubernetes cluster, while a persistent volume claim (PVC) is a request for storage. For details on how PVs and PVCs work, refer to the official Kubernetes documentation on [storage.](https://kubernetes.io/docs/concepts/storage/volumes/)
-
-This page describes how to set up persistent storage with a local storage provider, or with [Longhorn.](#setting-up-longhorn)
-
-# What's changed in K3s storage?
-
-K3s removes several optional volume plugins and all built-in (sometimes referred to as "in-tree") cloud providers. We do this in order to achieve a smaller binary size and to avoid dependence on third-party cloud or data center technologies and services, which may not be available in many K3s use cases. We are able to do this because their removal affects neither core Kubernetes functionality nor conformance.
-
-The following volume plugins have been removed from K3s:
-
-* cephfs
-* fc
-* flocker
-* git_repo
-* glusterfs
-* portworx
-* quobyte
-* rbd
-* storageos
-
-Both components have out-of-tree alternatives that can be used with K3s: The Kubernetes [Container Storage Interface (CSI)](https://github.com/container-storage-interface/spec/blob/master/spec.md) and [Cloud Provider Interface (CPI)](https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/).
-
-Kubernetes maintainers are actively migrating in-tree volume plugins to CSI drivers. For more information on this migration, please refer [here](https://kubernetes.io/blog/2021/12/10/storage-in-tree-to-csi-migration-status-update/).
-
-# Setting up the Local Storage Provider
-K3s comes with Rancher's Local Path Provisioner and this enables the ability to create persistent volume claims out of the box using local storage on the respective node. Below we cover a simple example. For more information please reference the official documentation [here](https://github.com/rancher/local-path-provisioner/blob/master/README.md#usage).
-
-Create a hostPath backed persistent volume claim and a pod to utilize it:
-
-### pvc.yaml
-
-```
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- name: local-path-pvc
- namespace: default
-spec:
- accessModes:
- - ReadWriteOnce
- storageClassName: local-path
- resources:
- requests:
- storage: 2Gi
-```
-
-### pod.yaml
-
-```
-apiVersion: v1
-kind: Pod
-metadata:
- name: volume-test
- namespace: default
-spec:
- containers:
- - name: volume-test
- image: nginx:stable-alpine
- imagePullPolicy: IfNotPresent
- volumeMounts:
- - name: volv
- mountPath: /data
- ports:
- - containerPort: 80
- volumes:
- - name: volv
- persistentVolumeClaim:
- claimName: local-path-pvc
-```
-
-Apply the yaml:
-
-```
-kubectl create -f pvc.yaml
-kubectl create -f pod.yaml
-```
-
-Confirm the PV and PVC are created:
-
-```
-kubectl get pv
-kubectl get pvc
-```
-
-The status should be Bound for each.
-
-# Setting up Longhorn
-
-[comment]: <> (pending change - longhorn may support arm64 and armhf in the future.)
-
-> **Note:** At this time Longhorn only supports amd64 and arm64 (experimental).
-
-K3s supports [Longhorn](https://github.com/longhorn/longhorn). Longhorn is an open-source distributed block storage system for Kubernetes.
-
-Below we cover a simple example. For more information, refer to the official documentation [here](https://github.com/longhorn/longhorn/blob/master/README.md).
-
-Apply the longhorn.yaml to install Longhorn:
-
-```
-kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/longhorn.yaml
-```
-
-Longhorn will be installed in the namespace `longhorn-system`.
-
-Apply the yaml to create the PVC and pod:
-
-```
-kubectl create -f pvc.yaml
-kubectl create -f pod.yaml
-```
-
-### pvc.yaml
-
-```
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- name: longhorn-volv-pvc
-spec:
- accessModes:
- - ReadWriteOnce
- storageClassName: longhorn
- resources:
- requests:
- storage: 2Gi
-```
-
-### pod.yaml
-
-```
-apiVersion: v1
-kind: Pod
-metadata:
- name: volume-test
- namespace: default
-spec:
- containers:
- - name: volume-test
- image: nginx:stable-alpine
- imagePullPolicy: IfNotPresent
- volumeMounts:
- - name: volv
- mountPath: /data
- ports:
- - containerPort: 80
- volumes:
- - name: volv
- persistentVolumeClaim:
- claimName: longhorn-volv-pvc
-```
-
-Confirm the PV and PVC are created:
-
-```
-kubectl get pv
-kubectl get pvc
-```
-
-The status should be Bound for each.
diff --git a/content/k3s/latest/en/upgrades/_index.md b/content/k3s/latest/en/upgrades/_index.md
deleted file mode 100644
index fad09759854..00000000000
--- a/content/k3s/latest/en/upgrades/_index.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: "Upgrades"
-weight: 25
----
-
-### Upgrading your K3s cluster
-
-[Upgrade basics]({{< baseurl >}}/k3s/latest/en/upgrades/basic/) describes several techniques for upgrading your cluster manually. It can also be used as a basis for upgrading through third-party Infrastructure-as-Code tools like [Terraform](https://www.terraform.io/).
-
-[Automated upgrades]({{< baseurl >}}/k3s/latest/en/upgrades/automated/) describes how to perform Kubernetes-native automated upgrades using Rancher's [system-upgrade-controller](https://github.com/rancher/system-upgrade-controller).
-
-### Version-specific caveats
-
-- **Traefik:** If Traefik is not disabled, K3s versions 1.20 and earlier will install Traefik v1, while K3s versions 1.21 and later will install Traefik v2, if v1 is not already present. To upgrade from the older Traefik v1 to Traefik v2, please refer to the [Traefik documentation](https://doc.traefik.io/traefik/migration/v1-to-v2/) and use the [migration tool](https://github.com/traefik/traefik-migration-tool).
-
-- **K3s bootstrap data:** If you are using K3s in an HA configuration with an external SQL datastore, and your server (control-plane) nodes were not started with the `--token` CLI flag, you will no longer be able to add additional K3s servers to the cluster without specifying the token. Ensure that you retain a copy of this token, as it is required when restoring from backup. Previously, K3s did not enforce the use of a token when using external SQL datastores.
- - The affected versions are <= v1.19.12+k3s1, v1.20.8+k3s1, v1.21.2+k3s1; the patched versions are v1.19.13+k3s1, v1.20.9+k3s1, v1.21.3+k3s1.
-
- - You may retrieve the token value from any server already joined to the cluster as follows:
-```
-cat /var/lib/rancher/k3s/server/token
-```
-
-- **Experimental Dqlite:** The experimental embedded Dqlite data store was deprecated in K3s v1.19.1. Please note that upgrades from experimental Dqlite to experimental embedded etcd are not supported. If you attempt an upgrade, it will not succeed, and data will be lost.
diff --git a/content/k3s/latest/en/upgrades/automated/_index.md b/content/k3s/latest/en/upgrades/automated/_index.md
deleted file mode 100644
index f95da7de0e5..00000000000
--- a/content/k3s/latest/en/upgrades/automated/_index.md
+++ /dev/null
@@ -1,120 +0,0 @@
----
-title: "Automated Upgrades"
-weight: 20
----
-
->**Note:** This feature is available as of [v1.17.4+k3s1](https://github.com/rancher/k3s/releases/tag/v1.17.4%2Bk3s1)
-
-### Overview
-
-You can manage K3s cluster upgrades using Rancher's system-upgrade-controller. This is a Kubernetes-native approach to cluster upgrades. It leverages a [custom resource definition (CRD)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#custom-resources), the `plan`, and a [controller](https://kubernetes.io/docs/concepts/architecture/controller/) that schedules upgrades based on the configured plans.
-
-A plan defines upgrade policies and requirements. This documentation will provide plans with defaults appropriate for upgrading a K3s cluster. For more advanced plan configuration options, please review the [CRD](https://github.com/rancher/system-upgrade-controller/blob/master/pkg/apis/upgrade.cattle.io/v1/types.go).
-
-The controller schedules upgrades by monitoring plans and selecting nodes to run upgrade [jobs](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/) on. A plan defines which nodes should be upgraded through a [label selector](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/). When a job has run to completion successfully, the controller will label the node on which it ran accordingly.
-
->**Note:** The upgrade job that is launched must be highly privileged. It is configured with the following:
->
-- Host `IPC`, `NET`, and `PID` namespaces
-- The `CAP_SYS_BOOT` capability
-- Host root mounted at `/host` with read and write permissions
-
-For more details on the design and architecture of the system-upgrade-controller or its integration with K3s, see the following Git repositories:
-
-- [system-upgrade-controller](https://github.com/rancher/system-upgrade-controller)
-- [k3s-upgrade](https://github.com/rancher/k3s-upgrade)
-
-To automate upgrades in this manner, you must do the following:
-
-1. Install the system-upgrade-controller into your cluster
-1. Configure plans
-
->**Note:** Users can and should use Rancher to upgrade their K3s cluster if Rancher is managing it.
->
-> * If you choose to use Rancher to upgrade, the following steps below are taken care of for you.
-> * If you choose not to use Rancher to upgrade, you must use the following steps below to do so.
-
-
-### Install the system-upgrade-controller
- The system-upgrade-controller can be installed as a deployment into your cluster. The deployment requires a service-account, clusterRoleBinding, and a configmap. To install these components, run the following command:
-```
-kubectl apply -f https://github.com/rancher/system-upgrade-controller/releases/latest/download/system-upgrade-controller.yaml
-```
-The controller can be configured and customized via the previously mentioned configmap, but the controller must be redeployed for the changes to be applied.
-
-
-### Configure plans
-It is recommended that you minimally create two plans: a plan for upgrading server (master) nodes and a plan for upgrading agent (worker) nodes. As needed, you can create additional plans to control the rollout of the upgrade across nodes. The following two example plans will upgrade your cluster to K3s v1.17.4+k3s1. Once the plans are created, the controller will pick them up and begin to upgrade your cluster.
-```
-# Server plan
-apiVersion: upgrade.cattle.io/v1
-kind: Plan
-metadata:
- name: server-plan
- namespace: system-upgrade
-spec:
- concurrency: 1
- cordon: true
- nodeSelector:
- matchExpressions:
- - key: node-role.kubernetes.io/master
- operator: In
- values:
- - "true"
- serviceAccountName: system-upgrade
- upgrade:
- image: rancher/k3s-upgrade
- version: v1.17.4+k3s1
----
-# Agent plan
-apiVersion: upgrade.cattle.io/v1
-kind: Plan
-metadata:
- name: agent-plan
- namespace: system-upgrade
-spec:
- concurrency: 1
- cordon: true
- nodeSelector:
- matchExpressions:
- - key: node-role.kubernetes.io/master
- operator: DoesNotExist
- prepare:
- args:
- - prepare
- - server-plan
- image: rancher/k3s-upgrade
- serviceAccountName: system-upgrade
- upgrade:
- image: rancher/k3s-upgrade
- version: v1.17.4+k3s1
-```
-There are a few important things to call out regarding these plans:
-
-First, the plans must be created in the same namespace where the controller was deployed.
-
-Second, the `concurrency` field indicates how many nodes can be upgraded at the same time.
-
-Third, the server-plan targets server nodes by specifying a label selector that selects nodes with the `node-role.kubernetes.io/master` label. The agent-plan targets agent nodes by specifying a label selector that select nodes without that label.
-
-Fourth, the `prepare` step in the agent-plan will cause upgrade jobs for that plan to wait for the server-plan to complete before they execute.
-
-Fifth, both plans have the `version` field set to v1.17.4+k3s1. Alternatively, you can omit the `version` field and set the `channel` field to a URL that resolves to a release of K3s. This will cause the controller to monitor that URL and upgrade the cluster any time it resolves to a new release. This works well with the [release channels]({{< baseurl >}}/k3s/latest/en/upgrades/basic/#release-channels). Thus, you can configure your plans with the following channel to ensure your cluster is always automatically upgraded to the newest stable release of K3s:
-```
-apiVersion: upgrade.cattle.io/v1
-kind: Plan
-...
-spec:
- ...
- channel: https://update.k3s.io/v1-release/channels/stable
-
-```
-
-As stated, the upgrade will begin as soon as the controller detects that a plan was created. Updating a plan will cause the controller to re-evaluate the plan and determine if another upgrade is needed.
-
-You can monitor the progress of an upgrade by viewing the plan and jobs via kubectl:
-```
-kubectl -n system-upgrade get plans -o yaml
-kubectl -n system-upgrade get jobs -o yaml
-```
-
diff --git a/content/k3s/latest/en/upgrades/basic/_index.md b/content/k3s/latest/en/upgrades/basic/_index.md
deleted file mode 100644
index d4f1fb8ebde..00000000000
--- a/content/k3s/latest/en/upgrades/basic/_index.md
+++ /dev/null
@@ -1,77 +0,0 @@
----
-title: "Upgrade Basics"
-weight: 10
----
-
-You can upgrade K3s by using the installation script, or by manually installing the binary of the desired version.
-
->**Note:** When upgrading, upgrade server nodes first one at a time, then any worker nodes.
-
-### Release Channels
-
-Upgrades performed via the installation script or using our [automated upgrades]({{< baseurl >}}/k3s/latest/en/upgrades/automated/) feature can be tied to different release channels. The following channels are available:
-
-| Channel | Description |
-|---------------|---------|
-| stable | (Default) Stable is recommended for production environments. These releases have been through a period of community hardening. |
-| latest | Latest is recommended for trying out the latest features. These releases have not yet been through a period of community hardening. |
-| v1.18 (example) | There is a release channel tied to each supported Kubernetes minor version. At the time of this writing, they are `v1.18`, `v1.17`, and `v1.16`. These channels will select the latest patch available, not necessarily a stable release. |
-
-For an exhaustive and up-to-date list of channels, you can visit the [k3s channel service API](https://update.k3s.io/v1-release/channels). For more technical details on how channels work, you see the [channelserver project](https://github.com/rancher/channelserver).
-
-### Upgrade K3s Using the Installation Script
-
-To upgrade K3s from an older version you can re-run the installation script using the same flags, for example:
-
-```sh
-curl -sfL https://get.k3s.io | sh -
-```
-This will upgrade to a newer version in the stable channel by default.
-
-If you want to upgrade to a newer version in a specific channel (such as latest) you can specify the channel:
-```sh
-curl -sfL https://get.k3s.io | INSTALL_K3S_CHANNEL=latest sh -
-```
-
-If you want to upgrade to a specific version you can run the following command:
-
-```sh
-curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=vX.Y.Z-rc1 sh -
-```
-
-### Manually Upgrade K3s Using the Binary
-
-Or to manually upgrade K3s:
-
-1. Download the desired version of the K3s binary from [releases](https://github.com/rancher/k3s/releases)
-2. Copy the downloaded binary to `/usr/local/bin/k3s` (or your desired location)
-3. Stop the old k3s binary
-4. Launch the new k3s binary
-
-### Restarting K3s
-
-Restarting K3s is supported by the installation script for systemd and OpenRC.
-
-**systemd**
-
-To restart servers manually:
-```sh
-sudo systemctl restart k3s
-```
-
-To restart agents manually:
-```sh
-sudo systemctl restart k3s-agent
-```
-
-**OpenRC**
-
-To restart servers manually:
-```sh
-sudo service k3s restart
-```
-
-To restart agents manually:
-```sh
-sudo service k3s-agent restart
-```
diff --git a/content/k3s/latest/en/upgrades/killall/_index.md b/content/k3s/latest/en/upgrades/killall/_index.md
deleted file mode 100644
index dabe4cde270..00000000000
--- a/content/k3s/latest/en/upgrades/killall/_index.md
+++ /dev/null
@@ -1,16 +0,0 @@
----
-title: The k3s-killall.sh script
-weight: 4
----
-
-To allow high availability during upgrades, the K3s containers continue running when the K3s service is stopped.
-
-To stop all of the K3s containers and reset the containerd state, the `k3s-killall.sh` script can be used.
-
-The killall script cleans up containers, K3s directories, and networking components while also removing the iptables chain with all the associated rules. The cluster data will not be deleted.
-
-To run the killall script from a server node, run:
-
-```
-/usr/local/bin/k3s-killall.sh
-```
\ No newline at end of file
diff --git a/content/os/_index.md b/content/os/_index.md
deleted file mode 100644
index 2601a529a9f..00000000000
--- a/content/os/_index.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: RancherOS
-weight: 1
-showBreadcrumb: false
----
diff --git a/content/os/v1.x/_index.md b/content/os/v1.x/_index.md
deleted file mode 100644
index 0c15327f266..00000000000
--- a/content/os/v1.x/_index.md
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: v1.x
-showBreadcrumb: false
----
diff --git a/content/os/v1.x/en/_index.md b/content/os/v1.x/en/_index.md
deleted file mode 100644
index fcd43aea12f..00000000000
--- a/content/os/v1.x/en/_index.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: Overview of RancherOS
-shortTitle: RancherOS
-description: RancherOS is a simplified Linux distribution built from containers, for containers. These documents describe how to install and use RancherOS.
-weight: 1
----
-
-> RancherOS 1.x is currently in a maintain-only-as-essential mode. It is no longer being actively maintained at a code level other than addressing critical or security fixes. For more information about the support status of RancherOS, see [this page.](https://rancher.com/docs/os/v1.x/en/support/)
-
-RancherOS is the smallest, easiest way to run Docker in production. Every process in RancherOS is a container managed by Docker. This includes system services such as `udev` and `syslog`. Because it only includes the services necessary to run Docker, RancherOS is significantly smaller than most traditional operating systems. By removing unnecessary libraries and services, requirements for security patches and other maintenance are also reduced. This is possible because, with Docker, users typically package all necessary libraries into their containers.
-
-Another way in which RancherOS is designed specifically for running Docker is that it always runs the latest version of Docker. This allows users to take advantage of the latest Docker capabilities and bug fixes.
-
-Like other minimalist Linux distributions, RancherOS boots incredibly quickly. Starting Docker containers is nearly instant, similar to starting any other process. This speed is ideal for organizations adopting microservices and autoscaling.
-
-Docker is an open-source platform designed for developers, system admins, and DevOps. It is used to build, ship, and run containers, using a simple and powerful command line interface (CLI). To get started with Docker, please visit the [Docker user guide](https://docs.docker.com/engine/userguide/).
-
-### Hardware Requirements
-
-* Memory Requirements
-
-Platform | RAM requirement(>=v1.5.x) | RAM requirement(v1.4.x)
--------- | ------------------------ | ---------------------------
-Baremetal | 1GB | 1280MB
-VirtualBox | 1GB | 1280MB
-VMWare | 1GB | 1280MB (rancheros.iso) 2048MB (rancheros-vmware.iso)
-GCE | 1GB | 1280MB
-AWS | 1GB | 1.7GB
-
-You can adjust memory requirements by custom building RancherOS, please refer to [reduce-memory-requirements]({{}}/os/v1.x/en/installation/custom-builds/custom-rancheros-iso/#reduce-memory-requirements)
-
-### How RancherOS Works
-
-Everything in RancherOS is a Docker container. We accomplish this by launching two instances of Docker. One is what we call **System Docker** and is the first process on the system. All other system services, like `ntpd`, `syslog`, and `console`, are running in Docker containers. System Docker replaces traditional init systems like `systemd` and is used to launch [additional system services]({{}}/os/v1.x/en/system-services/).
-
-System Docker runs a special container called **Docker**, which is another Docker daemon responsible for managing all of the user’s containers. Any containers that you launch as a user from the console will run inside this Docker. This creates isolation from the System Docker containers and ensures that normal user commands don’t impact system services.
-
- We created this separation not only for the security benefits, but also to make sure that commands like `docker rm -f $(docker ps -qa)` don't delete the entire OS.
-
-{{< img "/img/os/rancheroshowitworks.png" "How it works">}}
-
-### Running RancherOS
-
-To get started with RancherOS, head over to our [Quick Start Guide](quick-start-guide/).
-
-### Latest Release
-
-Please check our repository for the latest release in our [README](https://github.com/rancher/os/blob/master/README.md).
-
-
-
diff --git a/content/os/v1.x/en/about/_index.md b/content/os/v1.x/en/about/_index.md
deleted file mode 100644
index 8b5bf2f8525..00000000000
--- a/content/os/v1.x/en/about/_index.md
+++ /dev/null
@@ -1,74 +0,0 @@
----
-title: Additional Resources
-weight: 200
----
-
-## Developing
-
-Development is easiest done with QEMU on Linux. OS X works too, although QEMU doesn't have KVM support. If you are running Linux in a virtual machine, then we recommend you run VMWare Fusion/Workstation and enable VT-x support. Then, QEMU will have KVM support and run sufficiently fast inside your Linux VM.
-
-### Building
-
-#### Requirements:
-
-* bash
-* make
-* Docker 1.10.3+
-
-```
-$ make
-```
-
-The build will run in Docker containers, and when the build is done, the vmlinuz, initrd, and ISO should be in `dist/artifacts`.
-
-If you're building a version of RancherOS used for development and not for a release, you can instead run `make dev`. This will run faster than the standard build by avoiding building the `installer.tar` and `rootfs.tar.gz` artifacts which are not needed by QEMU.
-
-### Testing
-
-Run `make integration-tests` to run the all integration tests in a container, or `./scripts/integration-tests` to run them outside a container (they use QEMU to test the OS.)
-
-To run just one integration test, or a group of them (using regex's like `.*Console.*`, you can set the `RUNTEST` environment variable:
-
-```
-$ RUNTEST=TestPreload make integration-test
-```
-
-### Running
-
-Prerequisites: QEMU, coreutils, cdrtools/genisoimage/mkisofs.
-On OS X, `brew` is recommended to install those. On Linux, use your distro package manager.
-
-To launch RancherOS in QEMU from your dev version, you can either use `make run`, or customise the vm using `./scripts/run` and its options. You can use `--append your.kernel=params here` and `--cloud-config your-cloud-config.yml` to configure the RancherOS instance you're launching.
-
-You can SSH in using `./scripts/ssh`. Your SSH keys should have been populated (if you didn't provide your own cloud-config) so you won't need a password. If you don't have SSH keys, or something is wrong with your cloud-config, then the password is "`rancher`".
-
-If you're on OS X, you can run RancherOS using [_xhyve_](https://github.com/mist64/xhyve) instead of QEMU: just pass `--xhyve` to `./scripts/run` and `./scripts/ssh`.
-
-### Debugging and logging.
-
-You can enable extra log information in the console by setting them using `sudo ros config set`,
-or as kernel boot parameters.
-Enable all logging by setting `rancher.debug` true
-or you can set `rancher.docker.debug`, `rancher.system_docker.debug`, `rancher.bootstrap_docker.debug`, or `rancher.log` individually.
-
-You will also be able to view the debug logging information by running `dmesg` as root.
-
-## Repositories
-
-All of repositories are located within our main GitHub [page](https://github.com/rancher).
-
-[RancherOS Repo](https://github.com/rancher/os): This repo contains the bulk of the RancherOS code.
-
-[RancherOS Services Repo](https://github.com/rancher/os-services): This repo is where any [system-services]({{< baseurl >}}/os/v1.x/en//system-services/) can be contributed.
-
-[RancherOS Images Repo](https://github.com/rancher/os-images): This repo is for the corresponding service images.
-
-
-## Bugs
-
-If you find any bugs or are having any trouble, please contact us by filing an [issue](https://github.com/rancher/os/issues/new).
-
-If you have any updates to our documentation, please make any PRs to our [docs repo](https://github.com/rancher/docs).
-
-
-
diff --git a/content/os/v1.x/en/about/custom-partition-layout/_index.md b/content/os/v1.x/en/about/custom-partition-layout/_index.md
deleted file mode 100644
index a1c43205ed8..00000000000
--- a/content/os/v1.x/en/about/custom-partition-layout/_index.md
+++ /dev/null
@@ -1,147 +0,0 @@
----
-title: How to custom partition layout
-weight: 305
----
-
-When users use the default `ros install`, ROS will automatically create one partition on the root disk.
-It will be the only partition with the label RANCHER_STATE.
-But sometimes users want to be able to customize the root disk partition to isolate the data.
-
-> The following defaults to MBR mode, GPT mode has not been tested.
-
-### Use RANCHER_STATE partition
-
-As mentioned above, the default mode is that ROS will automatically create one partition with the label RANCHER_STATE.
-
-In addition, we can have other partitions, e.g.: two partitions, one is RANCHER_STATE and the other is a normal partition.
-
-First boot a ROS instance from ISO, then manually format and partition `/dev/sda` , the reference configuration is as follows:
-
-```
-[root@rancher oem]# fdisk -l
-Disk /dev/sda: 5 GiB, 5377622016 bytes, 10503168 sectors
-Units: sectors of 1 * 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-Disklabel type: dos
-Disk identifier: 0x9fff87e9
-
-Device Boot Start End Sectors Size Id Type
-/dev/sda1 * 2048 7503167 7501120 3.6G 83 Linux
-/dev/sda2 7503872 10503167 2999296 1.4G 83 Linux
-
-[root@rancher oem]# blkid
-/dev/sda1: LABEL="RANCHER_STATE" UUID="512f212b-3130-458e-a2d1-1d601c34d4e4" TYPE="ext4" PARTUUID="9fff87e9-01"
-/dev/sda2: UUID="3828e3ac-b825-4898-9072-45da9d37c2a6" TYPE="ext4" PARTUUID="9fff87e9-02"
-```
-
-Then install ROS to the disk with `ros install -t noformat -d /dev/sda ...`.
-
-After rebooting, you can use `/dev/sda2`. For example, changing the data root of user-docker:
-
-```
-$ ros config set mounts '[["/dev/sda2","/mnt/s","ext4",""]]’
-$ ros config set rancher.docker.graph /mnt/s
-$ reboot
-```
-
-> In this mode, the RANCHER_STATE partition capacity cannot exceed 3.8GiB, otherwise the bootloader may not recognize the boot disk. This is the test result on VirtualBox.
-
-### Use RANCHER_BOOT partition
-
-When you only use the RANCHER_STATE partition, the bootloader will be installed in the `/boot` directory.
-
-```
-$ system-docker run -it --rm -v /:/host alpine
-ls /host/boot
-...
-```
-
-If you want to use a separate boot partition, you also need to boot a ROS instance from ISO, then manually format and partition `/dev/sda`:
-
-```
-[root@rancher rancher]# fdisk -l
-Disk /dev/sda: 5 GiB, 5377622016 bytes, 10503168 sectors
-Units: sectors of 1 * 512 = 512 bytes
-Sector size (logical/physical): 512 bytes / 512 bytes
-I/O size (minimum/optimal): 512 bytes / 512 bytes
-Disklabel type: dos
-Disk identifier: 0xe32b3025
-
-Device Boot Start End Sectors Size Id Type
-/dev/sda1 2048 2503167 2501120 1.2G 83 Linux
-/dev/sda2 2504704 7503167 4998464 2.4G 83 Linux
-/dev/sda3 7503872 10503167 2999296 1.4G 83 Linux
-
-[root@rancher rancher]# mkfs.ext4 -L RANCHER_BOOT /dev/sda1
-[root@rancher rancher]# mkfs.ext4 -L RANCHER_STATE /dev/sda2
-[root@rancher rancher]# mkfs.ext4 /dev/sda3
-
-[root@rancher rancher]# blkid
-/dev/sda1: LABEL="RANCHER_BOOT" UUID="43baeac3-11f3-4eed-acfa-64daf66b26c8" TYPE="ext4" PARTUUID="e32b3025-01"
-/dev/sda2: LABEL="RANCHER_STATE" UUID="16f1ecef-dbe4-42a2-87a1-611939684e0b" TYPE="ext4" PARTUUID="e32b3025-02"
-/dev/sda3: UUID="9f34e161-0eee-48f9-93de-3b7c54dea437" TYPE="ext4" PARTUUID="c9b8f181-03"
-```
-
-Then install ROS to the disk with `ros install -t noformat -d /dev/sda ...`.
-
-After rebooting, you can check the boot partition:
-
-```
-[root@rancher rancher]# mkdir /boot
-[root@rancher rancher]# mount /dev/sda1 /boot
-[root@rancher rancher]# ls -ahl /boot/
-total 175388
-drwxr-xr-x 4 root root 4.0K Sep 27 03:35 .
-drwxr-xr-x 1 root root 4.0K Sep 27 03:38 ..
--rw-r--r-- 1 root root 24 Sep 27 03:05 append
--rw-r--r-- 1 root root 128 Sep 27 03:35 global.cfg
--rw-r--r-- 1 root root 96.8M Sep 27 03:05 initrd
-```
-
-If you are not using the first partition as a BOOT partition, you need to set BOOT flag via the fdisk tool.
-
-> In this mode, the RANCHER_BOOT partition capacity cannot exceed 3.8GiB, otherwise the bootloader may not recognize the boot disk. This is the test result on VirtualBox.
-
-### Use RANCHER_OEM partition
-
-If you format any partition with the label RANCHER_OEM, ROS will mount this partition to `/usr/share/ros/oem`:
-
-```
-[root@rancher rancher]# blkid
-/dev/sda2: LABEL="RANCHER_OEM" UUID="4f438455-63a3-4d29-ac90-50adbeced412" TYPE="ext4" PARTUUID="9fff87e9-02"
-
-[root@rancher rancher]# df -hT | grep sda2
-/dev/sda2 ext4 1.4G 4.3M 1.3G 0% /usr/share/ros/oem
-```
-
-Currently, this OEM directory is hardcoded and not configurable.
-
-### Use RANCHER_SWAP partition
-
-Suppose you have a partition(`/dev/sda2`) and you want to use it as a SWAP partition:
-
-```
-$ mkswap -L RANCHER_SWAP /dev/sda2
-
-$ blkid
-/dev/sda1: LABEL="RANCHER_STATE" UUID="512f212b-3130-458e-a2d1-1d601c34d4e4" TYPE="ext4" PARTUUID="9fff87e9-01"
-/dev/sda2: LABEL="RANCHER_SWAP" UUID="772b6e76-f89c-458e-931e-10902d78d3e4" TYPE="swap" PARTUUID="9fff87e9-02"
-```
-
-After you install ROS to the disk, you can add the `runcmd` to enable SWAP:
-
-```
-runcmd:
-- swapon -L RANCHER_SWAP
-```
-
-Then check the memory information:
-
-```
-[root@rancher rancher]# free -m
- total used free shared buffers cached
-Mem: 1996 774 1221 237 20 614
--/+ buffers/cache: 139 1856
-Swap: 487 0 487
-```
diff --git a/content/os/v1.x/en/about/faqs/_index.md b/content/os/v1.x/en/about/faqs/_index.md
deleted file mode 100644
index 4caf7c71a8e..00000000000
--- a/content/os/v1.x/en/about/faqs/_index.md
+++ /dev/null
@@ -1,27 +0,0 @@
----
-title: FAQs
-weight: 301
----
-
-### What is required to run RancherOS?
-
-RancherOS runs on any laptop, physical, or virtual servers.
-
-### What are some commands?
-
-Command | Description
---------|------------
-`docker`| Good old Docker, use that to run stuff.
-`system-docker` | The Docker instance running the system containers. Must run as root or using `sudo`
-`ros` | Control and configure RancherOS
-
-
-### How can I extend my disk size in Amazon?
-
-Assuming your EC2 instance with RancherOS with more disk space than what's being read, run the following command to extend the disk size. This allows RancherOS to see the disk size.
-
-```
-$ docker run --privileged --rm --it debian:jessie resize2fs /dev/xvda1
-```
-
-`xvda1` should be the right disk for your own setup. In the future, we will be trying to create a system service that would automatically do this on boot in AWS.
diff --git a/content/os/v1.x/en/about/microcode-loader/_index.md b/content/os/v1.x/en/about/microcode-loader/_index.md
deleted file mode 100644
index 88fe6069d7c..00000000000
--- a/content/os/v1.x/en/about/microcode-loader/_index.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: How to update microcode
-weight: 306
----
-
-Processor manufacturers release stability and security updates to the processor microcode. While microcode can be updated through the BIOS, the Linux kernel is also able to apply these updates.
-These updates provide bug fixes that can be critical to the stability of your system. Without these updates, you may experience spurious crashes or unexpected system halts that can be difficult to track down.
-
-The microcode loader supports three loading methods:
-
-- Early load microcode
-- Late loading
-- Builtin microcode
-
-You can get more details from [here](https://www.kernel.org/doc/html/latest/x86/microcode.html).
-
-RancherOS supports `Late loading`. To update the Intel microcode, get the latest Intel microcode. An example is [here](https://downloadcenter.intel.com/download/28087/Linux-Processor-Microcode-Data-File?v=t). Then copy the data files to the firmware directory:
-
-```
-mkdir -p /lib/firmware/intel-ucode/
-cp -v intel-ucode/* /lib/firmware/intel-ucode/
-```
-Reload the microcode. This file does not exist if you are running RancherOS on the hypervisor. Usually, the VM does not need to update the microcode.
-
-```
-echo 1 > /sys/devices/system/cpu/microcode/reload
-```
-Check the result:
-
-```
-dmesg | grep microcode
-[ 13.659429] microcode: sig=0x306f2, pf=0x1, revision=0x36
-[ 13.665981] microcode: Microcode Update Driver: v2.01 , Peter Oruba
-[ 510.899733] microcode: updated to revision 0x3b, date = 2017-11-17
-```
-
-You can use `runcmd` to reload the microcode every boot:
-
-```
-runcmd:
-- echo 1 > /sys/devices/system/cpu/microcode/reload
-```
diff --git a/content/os/v1.x/en/about/recovery-console/_index.md b/content/os/v1.x/en/about/recovery-console/_index.md
deleted file mode 100644
index ad5fea9bc34..00000000000
--- a/content/os/v1.x/en/about/recovery-console/_index.md
+++ /dev/null
@@ -1,88 +0,0 @@
----
-title: How to use recovery console
-weight: 304
----
-
-### Test Environment
-
-In order to demonstrate how to use the recovery console, we choose a scene that the disk space is full and the OS cannot boot.
-
-| Term | Definition |
-|-----------------------|--------------------------------------------------|
-| RancherOS | v1.4.0 |
-| Platform | Virtualbox |
-| Root Disk | 2GB |
-| CPU | 1C |
-| MEM | 2GB |
-
-
-### Fill up the disk
-
-Start this VM to check disk usage:
-
-```
-/dev/sda1 ext4 1.8G 567.2M 1.2G 32% /opt
-/dev/sda1 ext4 1.8G 567.2M 1.2G 32% /mnt
-...
-...
-```
-
-Fill the remaining space with `dd`:
-
-```
-$ cd /opt/
-$ dd if=/dev/zero of=2GB.img bs=1M count=2000
-dd: writing '2GB.img': No space left on device
-1304+0 records in
-1302+1 records out
-
-$ ls -ahl
-total 1334036
-drwxr-xr-x 2 root root 4.0K Jul 19 07:32 .
-drwxr-xr-x 1 root root 4.0K Jul 19 06:58 ..
--rw-r--r-- 1 root root 1.3G Jul 19 07:32 2GB.img
-```
-
-At this point you cannot reboot in the OS, but you can reboot via Virtualbox:
-
-```
-$ shutdown -h now
-Failed to write to log, write /var/log/boot/shutdown.log: no space left on device
-[ ] shutdown:info: Setting shutdown timeout to 60 (rancher.shutdown_timeout set to 60)
-Failed to write to log, write /var/log/boot/shutdown.log: no space left on device
-Failed to write to log, write /var/log/boot/shutdown.log: no space left on device
-.[ ] shutdown:fatal: Error response from daemon: {"message":"mkdir /var/lib/system-docker/overlay2/7c7dffbed40e7b0ed4c68d5630b17a179751643ca7b7a4ac183e48a767071684-init: no space left on device"}
-Failed to write to log, write /var/log/boot/shutdown.log: no space left on device
-```
-
-After rebooting, you will not be able to enter the OS and there will be a kernel panic.
-
-
-
-### Boot with recovery console
-
-When you can access the bootloader, you should select the `Recovery console` and press `` to edit:
-
-
-
-You need add `rancher.autologin=tty1` to the end, then press ``. If all goes well, you will automatically login to the recovery console.
-
-### How to recover
-
-We need to mount the root disk in the recovery console and delete some data:
-
-```
-# If you couldn't see any disk devices created under `/dev/`, please try this command:
-$ ros udev-settle
-
-$ mkdir /mnt/root-disk
-$ mount /dev/sda1 /mnt/root-disk
-
-# delete data previously generated using dd
-$ ls -ahl /mnt/root-disk/opt
--rw-r--r-- 1 root root 1.3G Jul 19 07:32 2GB.img
-$ rm -f /mnt/root-disk/opt/2GB.img
-```
-
-After rebooting, you can enter the OS normally.
-
diff --git a/content/os/v1.x/en/about/running-rancher-on-rancherOS/_index.md b/content/os/v1.x/en/about/running-rancher-on-rancherOS/_index.md
deleted file mode 100644
index 3fb01def4ed..00000000000
--- a/content/os/v1.x/en/about/running-rancher-on-rancherOS/_index.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-title: Tips on using Rancher v1.x with RancherOS
-weight: 302
----
-
-RancherOS can be used to launch [Rancher](/rancher/) and be used as the OS to add nodes to Rancher.
-
-### Launching Agents using Cloud-Config
-
-You can easily add hosts into Rancher by using [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config) to launch the rancher/agent container.
-
-After Rancher is launched and host registration has been saved, you will be able to find use the custom option to add Rancher OS nodes.
-
-```bash
-$ sudo docker run --d --privileged -v /var/run/docker.sock:/var/run/docker.sock \
- rancher/agent:v0.8.2 http://:8080/v1/projects/1a5/scripts/
-```
-
-
-
-> **Note:** The `rancher/agent` version is correlated to the Rancher server version. You will need to check the custom command to get the appropriate tag for the version to use.
-
-_Cloud-Config Example_
-
-Here's using the command above and converting it into a cloud-config file to launch the rancher/agent in docker when RancherOS boots up.
-
-```yaml
-#cloud-config
-rancher:
- services:
- rancher-agent1:
- image: rancher/agent:v0.8.2
- command: http://:8080/v1/projects/1a5/scripts/
- privileged: true
- volumes:
- - /var/run/docker.sock:/var/run/docker.sock
-```
-
-
-> **Note:** You can not name the service `rancher-agent` as this will not allow the rancher/agent container to be launched correctly. Please read more about why [you can't name your container as `rancher-agent`]({{}}/rancher/v1.6/en/faqs/agents/#adding-in-name-rancher-agent).
-
-### Adding in Host Labels
-
-With each host, you have the ability to add labels to help you organize your hosts. The labels are added as an environment variable when launching the rancher/agent container. The host label in the UI will be a key/value pair and the keys must be unique identifiers. If you added two keys with different values, we'll take the last inputted value to use as the key/value pair.
-
-By adding labels to hosts, you can use these labels when to schedule services/load balancers/services and create a whitelist or blacklist of hosts for your services to run on.
-
-When adding a custom host, you can add the labels using the UI and it will automatically add the environment variable (`CATTLE_HOST_LABELS`) with the key/value pair into the command on the UI screen.
-
-#### Native Docker Commands Example
-
-```bash
-# Adding one host label to the rancher/agent command
-$ sudo docker run -e CATTLE_HOST_LABELS='foo=bar' -d --privileged \
- -v /var/run/docker.sock:/var/run/docker.sock rancher/agent:v0.8.2 \
- http://:8080/v1/projects/1a5/scripts/
-
-# Adding more than one host label requires joining the additional host labels with an `&`
-$ sudo docker run -e CATTLE_HOST_LABELS='foo=bar&hello=world' -d --privileged \
- -v /var/run/docker.sock:/var/run/docker.sock rancher/agent:v0.8.2 \
- http://:8080/v1/projects/1a5/scripts/
-```
-
-#### Cloud-Config Example
-
-Adding one host label
-
-```yaml
-#cloud-config
-rancher:
- services:
- rancher-agent1:
- image: rancher/agent:v0.8.2
- command: http://:8080/v1/projects/1a5/scripts/
- privileged: true
- volumes:
- - /var/run/docker.sock:/var/run/docker.sock
- environment:
- CATTLE_HOST_LABELS: foo=bar
-```
-
-
-Adding more than one host label requires joining the additional host labels with an `&`
-
-```yaml
-#cloud-config
-rancher:
- services:
- rancher-agent1:
- image: rancher/agent:v0.8.2
- command: http://:8080/v1/projects/1a5/scripts/
- privileged: true
- volumes:
- - /var/run/docker.sock:/var/run/docker.sock
- environment:
- CATTLE_HOST_LABELS: foo=bar&hello=world
-```
diff --git a/content/os/v1.x/en/about/security/_index.md b/content/os/v1.x/en/about/security/_index.md
deleted file mode 100644
index 00286cf1a53..00000000000
--- a/content/os/v1.x/en/about/security/_index.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: RancherOS Security
-weight: 303
----
-
-
-
-
-
Security policy
-
Rancher Labs supports responsible disclosure, and endeavours to resolve all issues in a reasonable time frame. RancherOS is a minimal Linux distribution, built with entirely using open source components.
-
-### RancherOS Vulnerabilities
-
-| ID | Description | Date | Resolution |
-|----|-------------|------|------------|
-| [CVE-2017-6074](http://seclists.org/oss-sec/2017/q1/471) | Local privilege-escalation using a user after free issue in [Datagram Congestion Control Protocol (DCCP)](https://wiki.linuxfoundation.org/networking/dccp). DCCP is built into the RancherOS kernel as a dynamically loaded module, and isn't loaded by default. | 17 Feb 2017 | [RancherOS v0.8.1](https://github.com/rancher/os/releases/tag/v0.8.1) using a [patched 4.9.12 Linux kernel](https://github.com/rancher/os-kernel/releases/tag/v4.9.12-rancher) |
-| [CVE-2017-7184](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7184) | Allows local users to obtain root privileges or cause a denial of service (heap-based out-of-bounds access) by leveraging the CAP_NET_ADMIN capability. | 3 April 2017 | [RancherOS v0.9.2-rc1](https://github.com/rancher/os/releases/tag/v0.9.2-rc1) using Linux 4.9.20 |
-| [CVE-2017-1000364](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-1000364) | Linux Kernel is prone to a local memory-corruption vulnerability. Attackers may be able to exploit this issue to execute arbitrary code with elevated privileges | 19 June 2017 | [RancherOS v1.0.3](https://github.com/rancher/os/releases/tag/v1.0.3) |
-| [CVE-2017-1000366](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-1000366) | glibc contains a vulnerability that allows manipulation of the heap/stack. Attackers may be able to exploit this issue to execute arbitrary code with elevated privileges | 19 June 2017 | [RancherOS v1.0.3](https://github.com/rancher/os/releases/tag/v1.0.3) |
-| [CVE-2017-1000405](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-1000405) | The Linux Kernel versions 2.6.38 through 4.14 have a problematic use of pmd_mkdirty() in the touch_pmd() function inside the THP implementation. touch_pmd() can be reached by get_user_pages(). In such case, the pmd will become dirty. | 10 Dec 2017 | [RancherOS v1.1.1](https://github.com/rancher/os/releases/tag/v1.1.1) |
-| [CVE-2017-5754](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5754) | Systems with microprocessors utilizing speculative execution and indirect branch prediction may allow unauthorized disclosure of information to an attacker with local user access via a side-channel analysis of the data cache. | 5 Jan 2018 | [RancherOS v1.1.3](https://github.com/rancher/os/releases/tag/v1.1.3) using Linux v4.9.75 |
-| [CVE-2017-5715](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5715) | Systems with microprocessors utilizing speculative execution and indirect branch prediction may allow unauthorized disclosure of information to an attacker with local user access via a side-channel analysis | 6 Feb 2018 | [RancherOS v1.1.4](https://github.com/rancher/os/releases/tag/v1.1.4) using Linux v4.9.78 with the Retpoline support |
-| [CVE-2017-5753](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5753) | Systems with microprocessors utilizing speculative execution and branch prediction may allow unauthorized disclosure of information to an attacker with local user access via a side-channel analysis. | 31 May 2018 | [RancherOS v1.4.0](https://github.com/rancher/os/releases/tag/v1.4.0) using Linux v4.14.32 |
-| [CVE-2018-8897](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8897) | A statement in the System Programming Guide of the Intel 64 and IA-32 Architectures Software Developer's Manual (SDM) was mishandled in the development of some or all operating-system kernels, resulting in unexpected behavior for #DB exceptions that are deferred by MOV SS or POP SS, as demonstrated by (for example) privilege escalation in Windows, macOS, some Xen configurations, or FreeBSD, or a Linux kernel crash. | 31 May 2018 | [RancherOS v1.4.0](https://github.com/rancher/os/releases/tag/v1.4.0) using Linux v4.14.32 |
-| [CVE-2018-3620](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3620) | L1 Terminal Fault is a hardware vulnerability which allows unprivileged speculative access to data which is available in the Level 1 Data Cache when the page table entry controlling the virtual address, which is used for the access, has the Present bit cleared or other reserved bits set. | 19 Sep 2018 | [RancherOS v1.4.1](https://github.com/rancher/os/releases/tag/v1.4.1) using Linux v4.14.67 |
-| [CVE-2018-3639](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3639) | Systems with microprocessors utilizing speculative execution and speculative execution of memory reads before the addresses of all prior memory writes are known may allow unauthorized disclosure of information to an attacker with local user access via a side-channel analysis, aka Speculative Store Bypass (SSB), Variant 4. | 19 Sep 2018 | [RancherOS v1.4.1](https://github.com/rancher/os/releases/tag/v1.4.1) using Linux v4.14.67 |
-| [CVE-2018-17182](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-17182) | The vmacache_flush_all function in mm/vmacache.c mishandles sequence number overflows. An attacker can trigger a use-after-free (and possibly gain privileges) via certain thread creation, map, unmap, invalidation, and dereference operations. | 18 Oct 2018 | [RancherOS v1.4.2](https://github.com/rancher/os/releases/tag/v1.4.2) using Linux v4.14.73 |
-| [CVE-2019-5736](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-5736) | runc through 1.0-rc6, as used in Docker before 18.09.2 and other products, allows attackers to overwrite the host runc binary (and consequently obtain host root access) by leveraging the ability to execute a command as root within one of these types of containers: (1) a new container with an attacker-controlled image, or (2) an existing container, to which the attacker previously had write access, that can be attached with docker exec. This occurs because of file-descriptor mishandling, related to /proc/self/exe. | 12 Feb 2019 | [RancherOS v1.5.1](https://github.com/rancher/os/releases/tag/v1.5.1) |
-| [Microarchitectural Data Sampling (MDS)](https://www.kernel.org/doc/html/latest/x86/mds.html) | Microarchitectural Data Sampling (MDS) is a family of side channel attacks on internal buffers in Intel CPUs. The variants are: CVE-2018-12126, CVE-2018-12130, CVE-2018-12127, CVE-2019-11091 | 31 May 2019 | [RancherOS v1.5.2](https://github.com/rancher/os/releases/tag/v1.5.2) using Linux v4.14.122 |
-| [The TCP SACK panic](https://lwn.net/Articles/791409/) | Selective acknowledgment (SACK) is a technique used by TCP to help alleviate congestion that can arise due to the retransmission of dropped packets. It allows the endpoints to describe which pieces of the data they have received, so that only the missing pieces need to be retransmitted. However, a bug was recently found in the Linux implementation of SACK that allows remote attackers to panic the system by sending crafted SACK information. | 11 July 2019 | [RancherOS v1.5.3](https://github.com/rancher/os/releases/tag/v1.5.3) |
diff --git a/content/os/v1.x/en/configuration/_index.md b/content/os/v1.x/en/configuration/_index.md
deleted file mode 100644
index 15a11fcaaa2..00000000000
--- a/content/os/v1.x/en/configuration/_index.md
+++ /dev/null
@@ -1,89 +0,0 @@
----
-title: Configuration
-weight: 120
-aliases:
- - /os/v1.x/en/installation/configuration
----
-
-There are two ways that RancherOS can be configured.
-
-1. A cloud-config file can be used to provide configuration when first booting RancherOS.
-2. Manually changing configuration with the `ros config` command.
-
-Typically, when you first boot the server, you pass in a cloud-config file to configure the initialization of the server. After the first boot, if you have any changes for the configuration, it's recommended that you use `ros config` to set the necessary configuration properties. Any changes will be saved on disk and a reboot will be required for changes to be applied.
-
-### Cloud-Config
-
-Cloud-config is a declarative configuration file format supported by many Linux distributions and is the primary configuration mechanism for RancherOS.
-
-A Linux OS supporting cloud-config will invoke a cloud-init process during startup to parse the cloud-config file and configure the operating system. RancherOS runs its own cloud-init process in a system container. The cloud-init process will attempt to retrieve a cloud-config file from a variety of data sources. Once cloud-init obtains a cloud-config file, it configures the Linux OS according to the content of the cloud-config file.
-
-When you create a RancherOS instance on AWS, for example, you can optionally provide cloud-config passed in the `user-data` field. Inside the RancherOS instance, cloud-init process will retrieve the cloud-config content through its AWS cloud-config data source, which simply extracts the content of user-data received by the VM instance. If the file starts with "`#cloud-config`", cloud-init will interpret that file as a cloud-config file. If the file starts with `#!` (e.g., `#!/bin/sh`), cloud-init will simply execute that file. You can place any configuration commands in the file as scripts.
-
-A cloud-config file uses the YAML format. YAML is easy to understand and easy to parse. For more information on YAML, please read more at the [YAML site](http://www.yaml.org/). The most important formatting principle is indentation or whitespace. This indentation indicates relationships of the items to one another. If something is indented more than the previous line, it is a sub-item of the top item that is less indented.
-
-Example: Notice how both are indented underneath `ssh_authorized_keys`.
-
-```yaml
-#cloud-config
-ssh_authorized_keys:
- - ssh-rsa AAA...ZZZ example1@rancher
- - ssh-rsa BBB...ZZZ example2@rancher
-```
-
-In our example above, we have our `#cloud-config` line to indicate it's a cloud-config file. We have 1 top-level property, `ssh_authorized_keys`. Its value is a list of public keys that are represented as a dashed list under `ssh_authorized_keys:`.
-
-### Manually Changing Configuration
-
-To update RancherOS configuration after booting, the `ros config set ` command can be used.
-For more complicated settings, like the [sysctl settings]({{< baseurl >}}/os/v1.x/en/configuration/sysctl/), you can also create a small YAML file and then run `sudo ros config merge -i `.
-
-#### Getting Values
-
-You can easily get any value that's been set in the `/var/lib/rancher/conf/cloud-config.yml` file. Let's see how easy it is to get the DNS configuration of the system.
-
-```
-$ sudo ros config get rancher.network.dns.nameservers
-- 8.8.8.8
-- 8.8.4.4
-```
-
-#### Setting Values
-
-You can set values in the `/var/lib/rancher/conf/cloud-config.yml` file.
-
-Setting a simple value in the `/var/lib/rancher/conf/cloud-config.yml`
-
-```
-$ sudo ros config set rancher.docker.tls true
-```
-
-Setting a list in the `/var/lib/rancher/conf/cloud-config.yml`
-
-```
-$ sudo ros config set rancher.network.dns.nameservers "['8.8.8.8','8.8.4.4']"
-```
-
-#### Exporting the Current Configuration
-
-To output and review the current configuration state you can use the `ros config export` command.
-
-```
-$ sudo ros config export
-rancher:
- docker:
- tls: true
- network:
- dns:
- nameservers:
- - 8.8.8.8
- - 8.8.4.4
-```
-
-#### Validating a Configuration File
-
-To validate a configuration file you can use the `ros config validate` command.
-
-```
-$ sudo ros config validate -i cloud-config.yml
-```
diff --git a/content/os/v1.x/en/configuration/adding-kernel-parameters/_index.md b/content/os/v1.x/en/configuration/adding-kernel-parameters/_index.md
deleted file mode 100644
index da82856f3c9..00000000000
--- a/content/os/v1.x/en/configuration/adding-kernel-parameters/_index.md
+++ /dev/null
@@ -1,76 +0,0 @@
----
-title: Kernel boot parameters
-weight: 133
-aliases:
- - /os/v1.x/en/installation/configuration/adding-kernel-parameters
----
-
-RancherOS parses the Linux kernel boot cmdline to add any keys it understands to its configuration. This allows you to modify what cloud-init sources it will use on boot, to enable `rancher.debug` logging, or to almost any other configuration setting.
-
-There are two ways to set or modify persistent kernel parameters, in-place (editing the file and reboot) or during installation to disk.
-
-### In-place editing
-
-_Available as of v1.1_
-
-To edit the kernel boot parameters of an already installed RancherOS system, use the new `sudo ros config syslinux` editing command (uses `vi`).
-
-> To activate this setting, you will need to reboot.
-
-_For v1.0_
-
-For in-place editing, you will need to run a container with an editor and a mount to access the `/boot/global.cfg` file containing the kernel parameters.
-
-> To activate this setting, you will need to reboot.
-
-```bash
-$ sudo system-docker run --rm -it -v /:/host alpine vi /host/boot/global.cfg
-```
-
-### During installation
-
-If you want to set the extra kernel parameters when you are [Installing RancherOS to Disk]({{< baseurl >}}/os/v1.x/en/installation/server/install-to-disk/) please use the `--append` parameter.
-
-```bash
-$ sudo ros install -d /dev/sda --append "rancheros.autologin=tty1"
-```
-
-### Graphical boot screen
-
-_Available as of v1.1_
-
-RancherOS v1.1.0 added a Syslinux boot menu, which allows you to temporarily edit the boot parameters, or to select "Debug logging", "Autologin", both "Debug logging & Autologin" and "Recovery Console".
-
-On desktop systems the Syslinux boot menu can be switched to graphical mode by adding `UI vesamenu.c32` to a new line in `global.cfg` (use `sudo ros config syslinux` to edit the file).
-
-### Useful RancherOS kernel boot parameters
-
-#### User password
-
-`rancher.password=` will set the password for rancher user. If you are not willing to use SSH keys, you can consider this parameter.
-
-#### Recovery console
-
-`rancher.recovery=true` will start a single user `root` bash session as easily in the boot process, with no network, or persistent filesystem mounted. This can be used to fix disk problems, or to debug your system.
-
-#### Enable/Disable sshd
-
-`rancher.ssh.daemon=false` (its enabled in the os-config) can be used to start your RancherOS with no sshd daemon. This can be used to further reduce the ports that your system is listening on.
-
-#### Enable debug logging
-
-`rancher.debug=true` will log everything to the console for debugging.
-
-#### Autologin console
-
-`rancher.autologin=` will automatically log in the specified console - common values are `tty1`, `ttyS0` and `ttyAMA0` - depending on your platform.
-
-#### Enable/Disable hypervisor service auto-enable
-
-RancherOS v1.1.0 added detection of Hypervisor, and then will try to download the a service called `-vm-tools`. This may cause boot speed issues, and so can be disabled by setting `rancher.hypervisor_service=false`.
-
-#### Auto reboot after a kernel panic
-
-_Available as of v1.3_
-
-`panic=10` will automatically reboot after a kernel panic, 10 means wait 10 seconds before reboot. This is a common kernel parameter, pointing out that it is because we set this parameter by default.
diff --git a/content/os/v1.x/en/configuration/airgap-configuration/_index.md b/content/os/v1.x/en/configuration/airgap-configuration/_index.md
deleted file mode 100644
index 8cc05fc4507..00000000000
--- a/content/os/v1.x/en/configuration/airgap-configuration/_index.md
+++ /dev/null
@@ -1,125 +0,0 @@
----
-title: Air Gap Configuration
-weight: 138
-aliases:
- - /os/v1.x/en/installation/configuration/airgap-configuration
----
-
-In the air gap environment, the Docker registry, RancherOS repositories URL, and the RancherOS upgrade URL should be configured to ensure the OS can pull images, update OS services, and upgrade the OS.
-
-
-# Configuring a Private Docker Registry
-
-You should use a private Docker registry so that `user-docker` and `system-docker` can pull images.
-
-1. Add the private Docker registry domain to the [images prefix]({{< baseurl >}}/os/v1.x/en/configuration/images-prefix/).
-2. Set the private registry certificates for `user-docker`. For details, refer to [Certificates for Private Registries]({{< baseurl >}}/os/v1.x/en/configuration/private-registries/#certificates-for-private-registries)
-3. Set the private registry certificates for `system-docker`. There are two ways to set the certificates:
- - To set the private registry certificates before RancherOS starts, you can run a script included with RancherOS. For details, refer to [Set Custom Certs in ISO]({{< baseurl >}}/os/v1.x/en/configuration/airgap-configuration/#set-custom-certs-in-iso).
- - To set the private registry certificates after RancherOS starts, append your private registry certs to the `/etc/ssl/certs/ca-certificates.crt.rancher` file. Then reboot to make the certs fully take effect.
-4. The images used by RancherOS should be pushed to your private registry.
-
-# Set Custom Certs in ISO
-
-RancherOS provides a [script](https://github.com/rancher/os/blob/master/scripts/tools/flush_crt_iso.sh) to set your custom certs for an ISO. The following commands show how to use the script:
-
-```shell
-$ git clone https://github.com/rancher/os.git
-$ cd os
-$ make shell-bind
-$ cd scripts/tools/
-$ wget http://link/rancheros-xx.iso
-$ wget http://link/custom.crt
-$ ./flush_crt_iso.sh --iso rancheros-xx.iso --cert custom.crt
-$ exit
-
-$ ls ./build/
-```
-
-# Configuring RancherOS Repositories and Upgrade URL
-
-The following steps show how to configure RancherOS to update from private repositories.
-
-By default, RancherOS will update the `engine`, `console`, and `service` list from `https://raw.githubusercontent.com/rancher/os-services` and update the `os` list from `https://releases.rancher.com/os/releases.yml`. So in the air gap environment, you need to change the repository URL and upgrade URL to your own URLs.
-
-### 1. Clone os-services files
-
-Clone `github.com/rancher/os-services` to local. The repo has many branches named after the RancherOS versions. Please check out the branch that you are using.
-
-```
-$ git clone https://github.com/rancher/os-services.git
-$ cd os-services
-$ git checkout v1.5.2
-```
-
-### 2. Download the OS releases yaml
-
-Download the `releases.yml` from `https://releases.rancher.com/os/releases.yml`.
-
-### 3. Serve these files by HTTP
-
-Use a HTTP server to serve the cloned `os-services` directory and download `releases.yml`.
-Make sure you can access all the files in `os-services` and `releases.yml` by URL.
-
-### 4. Set the URLs
-
-In your cloud-config, set `rancher.repositories.core.url` and `rancher.upgrade.url` to your own `os-services` and `releases` URLs:
-```yaml
-#cloud-config
-rancher:
- repositories:
- core:
- url: https://foo.bar.com/os-services
- upgrade:
- url: https://foo.bar.com/os/releases.yml
-```
-
-You can also customize `rancher.repositories.core.url` and `rancher.upgrade.url` after it's been started using `ros config`.
-
-```
-$ sudo ros config set rancher.repositories.core.url https://foo.bar.com/os-services
-$ sudo ros config set rancher.upgrade.url https://foo.bar.com/os/releases.yml
-```
-
-# Example Cloud-config
-
-
-Here is a total cloud-config example for using RancherOS in an air gap environment.
-
-For `system-docker`, see [Configuring Private Docker Registry]({{< baseurl >}}/os/v1.x/en/configuration/airgap-configuration/#configuring-private-docker-registry).
-
-```yaml
-#cloud-config
-write_files:
- - path: /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt
- permissions: "0644"
- owner: root
- content: |
- -----BEGIN CERTIFICATE-----
- MIIDJjCCAg4CCQDLCSjwGXM72TANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJB
- VTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0
- cyBQdHkgTHRkMQ4wDAYDVQQDEwVhbGVuYTAeFw0xNTA3MjMwMzUzMDdaFw0xNjA3
- MjIwMzUzMDdaMFUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEw
- HwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDjAMBgNVBAMTBWFsZW5h
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxdVIDGlAySQmighbfNqb
- TtqetENPXjNNq1JasIjGGZdOsmFvNciroNBgCps/HPJphICQwtHpNeKv4+ZuL0Yg
- 1FECgW7oo6DOET74swUywtq/2IOeik+i+7skmpu1o9uNC+Fo+twpgHnGAaGk8IFm
- fP5gDgthrWBWlEPTPY1tmPjI2Hepu2hJ28SzdXi1CpjfFYOiWL8cUlvFBdyNqzqT
- uo6M2QCgSX3E1kXLnipRT6jUh0HokhFK4htAQ3hTBmzcxRkgTVZ/D0hA5lAocMKX
- EVP1Tlw0y1ext2ppS1NR9Sg46GP4+ATgT1m3ae7rWjQGuBEB6DyDgyxdEAvmAEH4
- LQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA45V0bnGPhIIkb54Gzjt9jyPJxPVTW
- mwTCP+0jtfLxAor5tFuCERVs8+cLw1wASfu4vH/yHJ/N/CW92yYmtqoGLuTsywJt
- u1+amECJaLyq0pZ5EjHqLjeys9yW728IifDxbQDX0cj7bBjYYzzUXp0DB/dtWb/U
- KdBmT1zYeKWmSxkXDFFSpL/SGKoqx3YLTdcIbgNHwKNMfTgD+wTZ/fvk0CLxye4P
- n/1ZWdSeZPAgjkha5MTUw3o1hjo/0H0ekI4erZFrZnG2N3lDaqDPR8djR+x7Gv6E
- vloANkUoc1pvzvxKoz2HIHUKf+xFT50xppx6wsQZ01pNMSNF0qgc1vvH
- -----END CERTIFICATE-----
-rancher:
- environment:
- REGISTRY_DOMAIN: xxxx.yyy
- repositories:
- core:
- url: https://foo.bar.com/os-services
- upgrade:
- url: https://foo.bar.com/os/releases.yml
-```
diff --git a/content/os/v1.x/en/configuration/date-and-timezone/_index.md b/content/os/v1.x/en/configuration/date-and-timezone/_index.md
deleted file mode 100644
index 4f21ba4b3d7..00000000000
--- a/content/os/v1.x/en/configuration/date-and-timezone/_index.md
+++ /dev/null
@@ -1,24 +0,0 @@
----
-title: Date and time zone
-weight: 121
-aliases:
- - /os/v1.x/en/installation/configuration/date-and-timezone
----
-
-The default console keeps time in the Coordinated Universal Time (UTC) zone and synchronizes clocks with the Network Time Protocol (NTP). The Network Time Protocol daemon (ntpd) is an operating system program that maintains the system time in synchronization with time servers using the NTP.
-
-RancherOS can run ntpd in the System Docker container. You can update its configurations by updating `/etc/ntp.conf`. For an example of how to update a file such as `/etc/ntp.conf` within a container, refer to [this page.]({{< baseurl >}}/os/v1.x/en/configuration/write-files/#writing-files-in-specific-system-services)
-
-The default console cannot support changing the time zone because including `tzdata` (time zone data) will increase the ISO size. However, you can change the time zone in the container by passing a flag to specify the time zone when you run the container:
-
-```
-$ docker run -e TZ=Europe/Amsterdam debian:jessie date
-Tue Aug 20 09:28:19 CEST 2019
-```
-
-You may need to install the `tzdata` in some images:
-
-```
-$ docker run -e TZ=Asia/Shanghai -e DEBIAN_FRONTEND=noninteractive -it --rm ubuntu /bin/bash -c "apt-get update && apt-get install -yq tzdata && date�
-Thu Aug 29 08:13:02 CST 2019
-```
diff --git a/content/os/v1.x/en/configuration/disable-access-to-system/_index.md b/content/os/v1.x/en/configuration/disable-access-to-system/_index.md
deleted file mode 100644
index bcbe845c4ac..00000000000
--- a/content/os/v1.x/en/configuration/disable-access-to-system/_index.md
+++ /dev/null
@@ -1,33 +0,0 @@
----
-title: Disabling Access to RancherOS
-weight: 136
-aliases:
- - /os/v1.x/en/installation/configuration/disable-access-to-system
----
-
-_Available as of v1.5_
-
-In RancherOS, you can set `rancher.password` as a kernel parameter and `auto-login` to be enabled, but there may be some cases where we want to disable both of these options. Both of these options can be disabled in the cloud-config or as part of a `ros` command.
-
-### How to Disabling Options
-
-If RancherOS has already been started, you can use `ros config set` to update that you want to disable
-
-```
-# Disabling the `rancher.password` kernel parameter
-$ sudo ros config set rancher.disable ["password"]
-
-# Disabling the `autologin` ability
-$ sudo ros config set rancher.disable ["autologin"]
-```
-
-Alternatively, you can set it up in your cloud-config so it's automatically disabled when you boot RancherOS.
-
-
-```yaml
-# cloud-config
-rancher:
- disable:
- - password
- - autologin
-```
diff --git a/content/os/v1.x/en/configuration/docker/_index.md b/content/os/v1.x/en/configuration/docker/_index.md
deleted file mode 100644
index f1c9bc03344..00000000000
--- a/content/os/v1.x/en/configuration/docker/_index.md
+++ /dev/null
@@ -1,283 +0,0 @@
----
-title: Configuring Docker or System Docker
-weight: 126
-aliases:
- - /os/v1.x/en/installation/configuration/docker
----
-
-In RancherOS, you can configure System Docker and Docker daemons by using [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config).
-
-### Configuring Docker
-
-In your cloud-config, Docker configuration is located under the `rancher.docker` key.
-
-```yaml
-#cloud-config
-rancher:
- docker:
- tls: true
- tls_args:
- - "--tlsverify"
- - "--tlscacert=/etc/docker/tls/ca.pem"
- - "--tlscert=/etc/docker/tls/server-cert.pem"
- - "--tlskey=/etc/docker/tls/server-key.pem"
- - "-H=0.0.0.0:2376"
- storage_driver: overlay
-```
-
-You can also customize Docker after it's been started using `ros config`.
-
-```
-$ sudo ros config set rancher.docker.storage_driver overlay
-```
-
-#### User Docker settings
-
-Many of the standard Docker daemon arguments can be placed under the `rancher.docker` key. The command needed to start the Docker daemon will be generated based on these arguments. The following arguments are currently supported.
-
-Key | Value
----|---
-`bridge` | String
-`bip` | String
-`config_file` | String
-`containerd` | String
-`debug` | Boolean
-`exec_root` | String
-`group` | String
-`graph` | String
-`host` | List
-`insecure_registry` | List
-`live_restore` | Boolean
-`log_driver` | String
-`log_opts` | Map where keys and values are strings
-`pid_file` | String
-`registry_mirror` | String
-`restart` | Boolean
-`selinux_enabled` | Boolean
-`storage_driver` | String
-`userland_proxy` | Boolean
-
-In addition to the standard daemon arguments, there are a few fields specific to RancherOS.
-
-Key | Value | Default | Description
----|---|---| ---
-`extra_args` | List of Strings | `[]` | Arbitrary daemon arguments, appended to the generated command
-`environment` | List of Strings | `[]` |
-`tls` | Boolean | `false` | When [setting up TLS]({{< baseurl >}}/os/v1.x/en/configuration/setting-up-docker-tls/), this key needs to be set to true.
-`tls_args` | List of Strings (used only if `tls: true`) | `[]` |
-`server_key` | String (used only if `tls: true`)| `""` | PEM encoded server TLS key.
-`server_cert` | String (used only if `tls: true`) | `""` | PEM encoded server TLS certificate.
-`ca_key` | String (used only if `tls: true`) | `""` | PEM encoded CA TLS key.
-`storage_context` | String | `console` | Specifies the name of the system container in whose context to run the Docker daemon process.
-
-#### Example using extra_args for setting MTU
-
-The following example can be used to set MTU on the Docker daemon:
-
-```yaml
-#cloud-config
-rancher:
- docker:
- extra_args: [--mtu, 1460]
-```
-
-#### Example using bip for docker0 bridge
-
-_Available as of v1.4.x_
-
-The docker0 bridge can be configured with docker args, it will take effect after reboot.
-
-```
-$ ros config set rancher.docker.bip 192.168.0.0/16
-```
-
-### Configuring System Docker
-
-In your cloud-config, System Docker configuration is located under the `rancher.system_docker` key.
-
-```yaml
-#cloud-config
-rancher:
- system_docker:
- storage_driver: overlay
-```
-
-#### System Docker settings
-
-All daemon arguments shown in the first table are also available to System Docker. The following are also supported.
-
-Key | Value | Default | Description
----|---|---| ---
-`extra_args` | List of Strings | `[]` | Arbitrary daemon arguments, appended to the generated command
-`environment` | List of Strings (optional) | `[]` |
-
-_Available as of v1.4.x_
-
-The docker-sys bridge can be configured with system-docker args, it will take effect after reboot.
-
-```
-$ ros config set rancher.system_docker.bip 172.19.0.0/16
-```
-
-_Available as of v1.4.x_
-
-The default path of system-docker logs is `/var/log/system-docker.log`. If you want to write the system-docker logs to a separate partition,
-e.g. [RANCHER_OEM partition]({{}}/os/v1.x/en/about/custom-partition-layout/#use-rancher-oem-partition), you can try `rancher.defaults.system_docker_logs`:
-
-```
-#cloud-config
-rancher:
- defaults:
- system_docker_logs: /usr/share/ros/oem/system-docker.log
-```
-
-### Using a pull through registry mirror
-
-There are 3 Docker engines that can be configured to use the pull-through Docker Hub registry mirror cache:
-
-```
-#cloud-config
-rancher:
- bootstrap_docker:
- registry_mirror: "http://10.10.10.23:5555"
- docker:
- registry_mirror: "http://10.10.10.23:5555"
- system_docker:
- registry_mirror: "http://10.10.10.23:5555"
-```
-
-`bootstrap_docker` is used to prepare and initial network and pull any cloud-config options that can be used to configure the final network configuration and System-docker - its very unlikely to pull any images.
-
-A successful pull through mirror cache request by System-docker looks like:
-
-```
-[root@rancher-dev rancher]# system-docker pull alpine
-Using default tag: latest
-DEBU[0201] Calling GET /v1.23/info
-> WARN[0201] Could not get operating system name: Error opening /usr/lib/os-release: open /usr/lib/os-release: no such file or directory
-WARN[0201] Could not get operating system name: Error opening /usr/lib/os-release: open /usr/lib/os-release: no such file or directory
-DEBU[0201] Calling POST /v1.23/images/create?fromImage=alpine%3Alatest
-DEBU[0201] hostDir: /etc/docker/certs.d/10.10.10.23:5555
-DEBU[0201] Trying to pull alpine from http://10.10.10.23:5555/ v2
-DEBU[0204] Pulling ref from V2 registry: alpine:latest
-DEBU[0204] pulling blob "sha256:2aecc7e1714b6fad58d13aedb0639011b37b86f743ba7b6a52d82bd03014b78e" latest: Pulling from library/alpine
-DEBU[0204] Downloaded 2aecc7e1714b to tempfile /var/lib/system-docker/tmp/GetImageBlob281102233 2aecc7e1714b: Extracting 1.99 MB/1.99 MB
-DEBU[0204] Untar time: 0.161064213s
-DEBU[0204] Applied tar sha256:3fb66f713c9fa9debcdaa58bb9858bd04c17350d9614b7a250ec0ee527319e59 to 841c99a5995007d7a66b922be9bafdd38f8090af17295b4a44436ef433a2aecc7e1714b: Pull complete
-Digest: sha256:0b94d1d1b5eb130dd0253374552445b39470653fb1a1ec2d81490948876e462c
-Status: Downloaded newer image for alpine:latest
-```
-
-### Using Multiple User Docker Daemons
-
-_Available as of v1.5.0_
-
-When RancherOS is booted, you start with a User Docker service that is running in System Docker. With v1.5.0, RancherOS has the ability to create additional User Docker services that can run at the same time.
-
-#### Terminology
-
-Throughout the rest of this documentation, we may simplify to use these terms when describing Docker.
-
-| Terminology | Definition |
-|-----------------------|--------------------------------------------------|
-| DinD | Docker in docker |
-| User Docker | The user-docker on RancherOS |
-| Other User Docker| The other user-docker daemons you create, these user-docker daemons are automatically assumed to be Docker in Docker. |
-
-#### Pre-Requisites
-
-User Docker must be set as Docker 17.12.1 or earlier. If it's a later Docker version, it will produce errors when creating a user defined network in System Docker.
-
-```
-$ ros engine switch docker-17.12.1-ce
-```
-
-You will need to create a user-defined network, which will be used when creating the Other User Docker.
-
-```
-$ system-docker network create --subnet=172.20.0.0/16 dind
-```
-
-#### Create the Other User Docker
-
-In order to create another User Docker, you will use `ros engine create`. Currently, RancherOS only supports Docker `17.12.1` and `18.03.1` for the Other User Docker image.
-
-```
-$ ros engine create otheruserdockername --network=dind --fixed-ip=172.20.0.2
-```
-
-After the Other User Docker service is created, users can query this service like other services.
-
-```
-$ ros service list
-...
-...
-disabled volume-efs
-disabled volume-nfs
-enabled otheruserdockername
-```
-
-You can use `ros service up` to start the Other User Docker service.
-
-```
-$ ros service up otheruserdockername
-```
-
-After the Other User Docker service is running, you can interact with it just like you can use the built-in User Docker. You would need to append `-` to `docker`.
-
-```
-$ docker-otheruserdockername ps -a
-```
-
-#### SSH into the Other User Docker container
-
-When creating the Other User Docker, you can set an external SSH port so you can SSH into the Other User Docker container in System Docker. By using `--ssh-port` and adding ssh keys with `--authorized-keys`, you can set up this optional SSH port.
-
-```
-$ ros engine create --help
-...
-...
-OPTIONS:
- --ssh-port value
- --authorized-keys value
-```
-
-When using `--authorized-keys`, you will need to put the key file in one of the following directories:
-
-```
-/var/lib/rancher/
-/opt/
-/home/
-```
-
-RancherOS will generate a random password for each Other User Docker container, which can be viewed in the container logs. If you do not set any SSH keys, the password can be used.
-
-```
-$ system-docker logs otheruserdockername
-
-======================================
-chpasswd: password for 'root' changed
-password: xCrw6fEG
-======================================
-```
-
-In System Docker, you can SSH into any Other User Docker Container using `ssh`.
-
-```
-$ system-docker ps
-CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-2ca07a25799b rancher/os-dind:17.12.1 "docker-entrypoint..." 5 seconds ago Up 3 seconds 2375/tcp, 0.0.0.0:34791->22/tcp otheruserdockername
-
-$ ssh -p 34791 root@
-
-$ ssh root@
-
-```
-
-#### Removing any Other User Docker Service
-
-We recommend using `ros engine rm` to remove any Other User Docker service.
-
-```
-$ ros engine rm otheruserdockername
-```
diff --git a/content/os/v1.x/en/configuration/hostname/_index.md b/content/os/v1.x/en/configuration/hostname/_index.md
deleted file mode 100644
index d7c6f3636b5..00000000000
--- a/content/os/v1.x/en/configuration/hostname/_index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: Setting the Hostname
-weight: 124
-aliases:
- - /os/v1.x/en/installation/configuration/hostname
----
-
-You can set the hostname of the host using [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config). The example below shows how to configure it.
-
-```yaml
-#cloud-config
-hostname: myhost
-```
diff --git a/content/os/v1.x/en/configuration/images-prefix/_index.md b/content/os/v1.x/en/configuration/images-prefix/_index.md
deleted file mode 100644
index 207595a1312..00000000000
--- a/content/os/v1.x/en/configuration/images-prefix/_index.md
+++ /dev/null
@@ -1,50 +0,0 @@
----
-title: Images prefix
-weight: 121
-aliases:
- - /os/v1.x/en/installation/configuration/images-prefix
----
-
-_Available as of v1.3_
-
-When you have built your own docker registries, and have cached the `rancher/os` and other `os-services` images,
-something like a normal `docker pull rancher/os` can be cached as `docker pull dockerhub.mycompanyname.com/docker.io/rancher/os`.
-
-However, you need a way to inject a prefix into RancherOS for installation or service pulls.
-RancherOS supports a global prefix you can add to force ROS to always use your mirror.
-
-You can config a global image prefix:
-
-```
-ros config set rancher.environment.REGISTRY_DOMAIN xxxx.yyy
-
-```
-
-Then you check the os list:
-
-```
-$ ros os list
-xxxx.yyy/rancher/os:v1.3.0 remote latest running
-xxxx.yyy/rancher/os:v1.2.0 remote available
-...
-...
-```
-
-Also you can check consoles:
-
-```
-$ ros console switch ubuntu
-Switching consoles will
-1. destroy the current console container
-2. log you out
-3. restart Docker
-Continue [y/N]: y
-Pulling console (xxxx.yyy/rancher/os-ubuntuconsole:v1.3.0)...
-...
-```
-
-If you want to reset this setting:
-
-```
-ros config set rancher.environment.REGISTRY_DOMAIN docker.io
-```
diff --git a/content/os/v1.x/en/configuration/kernel-modules-kernel-headers/_index.md b/content/os/v1.x/en/configuration/kernel-modules-kernel-headers/_index.md
deleted file mode 100644
index a350c41eff0..00000000000
--- a/content/os/v1.x/en/configuration/kernel-modules-kernel-headers/_index.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: Installing Kernel Modules that require Kernel Headers
-weight: 135
-aliases:
- - /os/v1.x/en/installation/configuration/kernel-modules-kernel-headers
----
-
-To compile any kernel modules, you will need to download the kernel headers. The kernel headers are available in the form of a system service. Since the kernel headers are a system service, they need to be enabled using the `ros service` command.
-
-### Installing Kernel Headers
-
-The following commands can be used to install kernel headers for usage by containers in Docker or System Docker.
-
-#### Docker
-
-```
-$ sudo ros service enable kernel-headers
-$ sudo ros service up kernel-headers
-```
-
-#### System Docker
-
-```
-$ sudo ros service enable kernel-headers-system-docker
-$ sudo ros service up kernel-headers-system-docker
-```
-
-The `ros service` commands will install the kernel headers in `/lib/modules/$(uname -r)/build`. Based on which service you install, the kernel headers will be available to containers, in Docker or System Docker, by bind mounting specific volumes. For any containers that compile a kernel module, the Docker command will need to bind mount in `/usr/src` and `/lib/modules`.
-
-> **Note:** Since both commands install kernel headers in the same location, the only reason for different services is due to the fact that the storage places for System Docker and Docker are different. Either one or both kernel headers can be installed in the same RancherOS services.
-
-### Example of Launching Containers to use Kernel Headers
-
-```
-# Run a container in Docker and bind mount specific directories
-$ docker run -it -v /usr/src:/usr/src -v /lib/modules:/lib/modules ubuntu:15.10
-# Run a container in System Docker and bind mount specific directories
-$ sudo system-docker run -it -v /usr/src:/usr/src -v /lib/modules:/lib/modules ubuntu:15.10
-```
diff --git a/content/os/v1.x/en/configuration/loading-kernel-modules/_index.md b/content/os/v1.x/en/configuration/loading-kernel-modules/_index.md
deleted file mode 100644
index d7f2b47673b..00000000000
--- a/content/os/v1.x/en/configuration/loading-kernel-modules/_index.md
+++ /dev/null
@@ -1,115 +0,0 @@
----
-title: Loading Kernel Modules
-weight: 134
-aliases:
- - /os/v1.x/en/installation/configuration/loading-kernel-modules
----
-
-Since RancherOS v0.8, we build our own kernels using an unmodified kernel.org LTS kernel.
-We provide both loading kernel modules with parameters and loading extra kernel modules for you.
-
-### Loading Kernel Modules with parameters
-
-_Available as of v1.4_
-
-The `rancher.modules` can help you to set kernel modules or module parameters.
-
-As an example, I'm going to set a parameter for kernel module `ndb`
-
-```
-sudo ros config set rancher.modules "['nbd nbds_max=1024', 'nfs']"
-```
-
-Or
-
-```
-#cloud-config
-rancher:
- modules: [nbd nbds_max=1024, nfs]
-```
-
-After rebooting, you can check that `ndbs_max` parameter has been updated.
-
-```
-# cat /sys/module/nbd/parameters/nbds_max
-1024
-```
-
-### Loading Extra Kernel Modules
-
-We also build almost all optional extras as modules - so most in-tree modules are available
-in the `kernel-extras` service.
-
-If you do need to build kernel modules for RancherOS, there are 4 options:
-
-* Try the `kernel-extras` service
-* Ask us to add it into the next release
-* If its out of tree, copy the methods used for the zfs and open-iscsi services
-* Build it yourself.
-
-#### Try the kernel-extras service
-
-We build the RancherOS kernel with most of the optional drivers as kernel modules, packaged
-into an optional RancherOS service.
-
-To install these, run:
-
-```
-sudo ros service enable kernel-extras
-sudo ros service up kernel-extras
-```
-
-The modules should now be available for you to `modprobe`
-
-#### Ask us to do it
-
-Open a GitHub issue in the https://github.com/rancher/os repository - we'll probably add
-it to the kernel-extras next time we build a kernel. Tell us if you need the module at initial
-configuration or boot, and we can add it to the default kernel modules.
-
-#### Copy the out of tree build method
-
-See https://github.com/rancher/os-services/blob/master/z/zfs.yml and
-https://github.com/rancher/os-services/tree/master/images/20-zfs
-
-The build container and build.sh script build the source, and then create a tools image, which is used to
-"wonka.sh" import those tools into the console container using `docker run`
-
-#### Build your own.
-
-As an example I'm going build the `intel-ishtp` hid driver using the `rancher/os-zfs:` images to build in, as they should contain the right tools versions for that kernel.
-
-```
-sudo docker run --rm -it --entrypoint bash --privileged -v /lib:/host/lib -v $(pwd):/data -w /data rancher/os-zfs:$(ros -v | cut -d ' ' -f 2)
-
-apt-get update
-apt-get install -qy libncurses5-dev bc libssh-dev
-curl -SsL -o src.tgz https://github.com/rancher/os-kernel/releases/download/v$(uname -r)/linux-$(uname -r)-src.tgz
-tar zxvf src.tgz
-zcat /proc/config.gz >.config
-# Yes, ignore the name of the directory :/
-cd v*
-# enable whatever modules you want to add.
-make menuconfig
-# I finally found an Intel sound hub that wasn't enabled yet
-# CONFIG_INTEL_ISH_HID=m
-make modules SUBDIRS=drivers/hid/intel-ish-hid
-
-# test it
-insmod drivers/hid/intel-ish-hid/intel-ishtp.ko
-rmmod intel-ishtp
-
-# install it
-ln -s /host/lib/modules/ /lib/
-cp drivers/hid/intel-ish-hid/*.ko /host/lib/modules/$(uname -r)/kernel/drivers/hid/
-depmod
-
-# done
-exit
-```
-
-Then in your console, you should be able to run
-
-```
-modprobe intel-ishtp
-```
diff --git a/content/os/v1.x/en/configuration/private-registries/_index.md b/content/os/v1.x/en/configuration/private-registries/_index.md
deleted file mode 100644
index b231ec4fb6c..00000000000
--- a/content/os/v1.x/en/configuration/private-registries/_index.md
+++ /dev/null
@@ -1,94 +0,0 @@
----
-title: Private Registries
-weight: 128
-aliases:
- - /os/v1.x/en/installation/configuration/private-registries
----
-
-When launching services through a [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config), it is sometimes necessary to pull a private image from DockerHub or from a private registry. Authentication for these can be embedded in your cloud-config.
-
-For example, to add authentication for DockerHub:
-
-```yaml
-#cloud-config
-rancher:
- registry_auths:
- https://index.docker.io/v1/:
- auth: dXNlcm5hbWU6cGFzc3dvcmQ=
-```
-
-The `auth` key is generated by base64 encoding a string of the form `username:password`. The `docker login` command can be used to generate an `auth` key. After running the command and authenticating successfully, the key can be found in the `$HOME/.docker/config.json` file.
-
-```json
-{
- "auths": {
- "https://index.docker.io/v1/": {
- "auth": "dXNlcm5hbWU6cGFzc3dvcmQ="
- }
- }
-}
-```
-
-Alternatively, a username and password can be specified directly.
-
-```yaml
-#cloud-config
-rancher:
- registry_auths:
- https://index.docker.io/v1/:
- username: username
- password: password
-```
-
-### Docker Client Authentication
-
-Configuring authentication for the Docker client is not handled by the `registry_auth` key. Instead, the `write_files` directive can be used to write credentials to the standard Docker configuration location.
-
-```
-#cloud-config
-write_files:
- - path: /home/rancher/.docker/config.json
- permissions: "0755"
- owner: rancher
- content: |
- {
- "auths": {
- "https://index.docker.io/v1/": {
- "auth": "asdf=",
- "email": "not@val.id"
- }
- }
- }
-```
-
-### Certificates for Private Registries
-
-Certificates can be stored in the standard locations (i.e. `/etc/docker/certs.d`) following the [Docker documentation](https://docs.docker.com/registry/insecure). By using the `write_files` directive of the [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config), the certificates can be written directly into `/etc/docker/certs.d`.
-
-```yaml
-#cloud-config
-write_files:
- - path: /etc/docker/certs.d/myregistrydomain.com:5000/ca.crt
- permissions: "0644"
- owner: root
- content: |
- -----BEGIN CERTIFICATE-----
- MIIDJjCCAg4CCQDLCSjwGXM72TANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJB
- VTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0
- cyBQdHkgTHRkMQ4wDAYDVQQDEwVhbGVuYTAeFw0xNTA3MjMwMzUzMDdaFw0xNjA3
- MjIwMzUzMDdaMFUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEw
- HwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxDjAMBgNVBAMTBWFsZW5h
- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxdVIDGlAySQmighbfNqb
- TtqetENPXjNNq1JasIjGGZdOsmFvNciroNBgCps/HPJphICQwtHpNeKv4+ZuL0Yg
- 1FECgW7oo6DOET74swUywtq/2IOeik+i+7skmpu1o9uNC+Fo+twpgHnGAaGk8IFm
- fP5gDgthrWBWlEPTPY1tmPjI2Hepu2hJ28SzdXi1CpjfFYOiWL8cUlvFBdyNqzqT
- uo6M2QCgSX3E1kXLnipRT6jUh0HokhFK4htAQ3hTBmzcxRkgTVZ/D0hA5lAocMKX
- EVP1Tlw0y1ext2ppS1NR9Sg46GP4+ATgT1m3ae7rWjQGuBEB6DyDgyxdEAvmAEH4
- LQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA45V0bnGPhIIkb54Gzjt9jyPJxPVTW
- mwTCP+0jtfLxAor5tFuCERVs8+cLw1wASfu4vH/yHJ/N/CW92yYmtqoGLuTsywJt
- u1+amECJaLyq0pZ5EjHqLjeys9yW728IifDxbQDX0cj7bBjYYzzUXp0DB/dtWb/U
- KdBmT1zYeKWmSxkXDFFSpL/SGKoqx3YLTdcIbgNHwKNMfTgD+wTZ/fvk0CLxye4P
- n/1ZWdSeZPAgjkha5MTUw3o1hjo/0H0ekI4erZFrZnG2N3lDaqDPR8djR+x7Gv6E
- vloANkUoc1pvzvxKoz2HIHUKf+xFT50xppx6wsQZ01pNMSNF0qgc1vvH
- -----END CERTIFICATE-----
-```
diff --git a/content/os/v1.x/en/configuration/resizing-device-partition/_index.md b/content/os/v1.x/en/configuration/resizing-device-partition/_index.md
deleted file mode 100644
index dc21dc1d6a4..00000000000
--- a/content/os/v1.x/en/configuration/resizing-device-partition/_index.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Resizing a Device Partition
-weight: 131
-aliases:
- - /os/v1.x/en/installation/configuration/resizing-device-partition
----
-
-The `resize_device` cloud config option can be used to automatically extend the first partition (assuming its `ext4`) to fill the size of it's device.
-
-Once the partition has been resized to fill the device, a `/var/lib/rancher/resizefs.done` file will be written to prevent the resize tools from being run again. If you need it to run again, delete that file and reboot.
-
-```yaml
-#cloud-config
-rancher:
- resize_device: /dev/sda
-```
-
-This behavior is the default when launching RancherOS on AWS.
diff --git a/content/os/v1.x/en/configuration/running-commands/_index.md b/content/os/v1.x/en/configuration/running-commands/_index.md
deleted file mode 100644
index b13fee7e041..00000000000
--- a/content/os/v1.x/en/configuration/running-commands/_index.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: Running Commands
-weight: 123
-aliases:
- - /os/v1.x/en/installation/configuration/running-commands
----
-
-You can automate running commands on boot using the `runcmd` cloud-config directive. Commands can be specified as either a list or a string. In the latter case, the command is executed with `sh`.
-
-```yaml
-#cloud-config
-runcmd:
-- [ touch, /home/rancher/test1 ]
-- echo "test" > /home/rancher/test2
-```
-
-Commands specified using `runcmd` will be executed within the context of the `console` container.
-
-### Running Docker commands
-
-When using `runcmd`, RancherOS will wait for all commands to complete before starting Docker. As a result, any `docker run` command should not be placed under `runcmd`. Instead, the `/etc/rc.local` script can be used. RancherOS will not wait for commands in this script to complete, so you can use the `wait-for-docker` command to ensure that the Docker daemon is running before performing any `docker run` commands.
-
-```yaml
-#cloud-config
-rancher:
-write_files:
- - path: /etc/rc.local
- permissions: "0755"
- owner: root
- content: |
- #!/bin/bash
- wait-for-docker
- docker run -d nginx
-```
-
-Running Docker commands in this manner is useful when pieces of the `docker run` command are dynamically generated. For services whose configuration is static, [adding a system service]({{< baseurl >}}/os/v1.x/en/system-services/) is recommended.
diff --git a/content/os/v1.x/en/configuration/setting-up-docker-tls/_index.md b/content/os/v1.x/en/configuration/setting-up-docker-tls/_index.md
deleted file mode 100644
index 0fb44180b0b..00000000000
--- a/content/os/v1.x/en/configuration/setting-up-docker-tls/_index.md
+++ /dev/null
@@ -1,58 +0,0 @@
----
-title: Setting up Docker TLS
-weight: 127
-aliases:
- - /os/v1.x/en/installation/configuration/setting-up-docker-tls
----
-
-`ros tls generate` is used to generate both the client and server TLS certificates for Docker.
-
-Remember, all `ros` commands need to be used with `sudo` or as a `root` user.
-
-### End to end example
-
-#### Enable TLS for Docker and Generate Server Certificate
-
-To have docker secured by TLS you need to set `rancher.docker.tls` to `true`, and generate a set of server and client keys and certificates:
-
-```
-$ sudo ros config set rancher.docker.tls true
-$ sudo ros tls gen --server -H localhost -H -H ... -H
-$ sudo system-docker restart docker
-```
-
-Here, ``s are the hostnames that you will be able to use as your docker host names. A `` can be a wildcard pattern, e.g. "`*.*.*.*.*`". It is recommended to have `localhost` as one of the hostnames, so that you can test docker TLS connectivity locally.
-
-When you've done that, all the necessary server certificate and key files have been saved to `/etc/docker/tls` directory, and the `docker` service has been started with `--tlsverify` option.
-
-#### Generate Client Certificates
-
-You also need client cert and key to access Docker via a TCP socket now:
-
-
-```
-$ sudo ros tls gen
- INFO[0000] Out directory (-d, --dir) not specified, using default: /home/rancher/.docker
-```
-
-All the docker client TLS files are in `~/.docker` dir now.
-
-#### Test docker TLS connection
-
-Now you can use your client cert to check if you can access Docker via TCP:
-
-```
-$ docker --tlsverify version
-```
-
-Because all the necessary files are in the `~/.docker` dir, you don't need to specify them using `--tlscacert` `--tlscert` and `--tlskey` options. You also don't need `-H` to access Docker on localhost.
-
-Copy the files from `/home/rancher/.docker` to `$HOME/.docker` on your client machine if you need to access Docker on your RancherOS host from there.
-
-On your client machine, set the Docker host and test out if Docker commands work.
-
-
-```
-$ export DOCKER_HOST=tcp://:2376 DOCKER_TLS_VERIFY=1
-$ docker ps
-```
diff --git a/content/os/v1.x/en/configuration/ssh-keys/_index.md b/content/os/v1.x/en/configuration/ssh-keys/_index.md
deleted file mode 100644
index 25dbfe72cf7..00000000000
--- a/content/os/v1.x/en/configuration/ssh-keys/_index.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: SSH Settings
-weight: 121
-aliases:
- - /os/v1.x/en/installation/configuration/ssh-keys
----
-
-RancherOS supports adding SSH keys through the [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config) file. Within the cloud-config file, you simply add the ssh keys within the `ssh_authorized_keys` key.
-
-```yaml
-#cloud-config
-ssh_authorized_keys:
- - ssh-rsa AAA...ZZZ example1@rancher
- - ssh-rsa BBB...ZZZ example2@rancher
-```
-
-When we pass the cloud-config file during the `ros install` command, it will allow these ssh keys to be associated with the **rancher** user. You can ssh into RancherOS using the key.
-
-```
-$ ssh -i /path/to/private/key rancher@
-```
-
-Please note that OpenSSH 7.0 and greater similarly disable the ssh-dss (DSA) public key algorithm. It too is weak and we recommend against its use.
-
-### SSHD Port and IP
-
-_Available as of v1.3_
-
-RancherOS supports changing the sshd port and IP, you can use these in the cloud-config file:
-
-```
-rancher:
- ssh:
- port: 10022
- listen_address: 172.22.100.100
-```
-
-These settings are only designed for default console.
-Because if you change sshd-config, restart the host will restore the default, the new configuration will not take effect.
-
-For other consoles, all files are persistent, you can modify sshd-config by yourself.
diff --git a/content/os/v1.x/en/configuration/switching-consoles/_index.md b/content/os/v1.x/en/configuration/switching-consoles/_index.md
deleted file mode 100644
index 4668878f6d8..00000000000
--- a/content/os/v1.x/en/configuration/switching-consoles/_index.md
+++ /dev/null
@@ -1,137 +0,0 @@
----
-title: Switching Consoles
-weight: 125
-aliases:
- - /os/v1.x/en/installation/configuration/switching-consoles
----
-
-When [booting from the ISO]({{< baseurl >}}/os/v1.x/en/installation/workstation//boot-from-iso/), RancherOS starts with the default console, which is based on busybox.
-
-You can select which console you want RancherOS to start with using the [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config).
-
-### Enabling Consoles using Cloud-Config
-
-When launching RancherOS with a [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config) file, you can select which console you want to use.
-
-Currently, the list of available consoles are:
-
-* default
-* alpine
-* centos
-* debian
-* fedora
-* ubuntu
-
-Here is an example cloud-config file that can be used to enable the debian console.
-
-```yaml
-#cloud-config
-rancher:
- console: debian
-```
-
-### Listing Available Consoles
-
-You can easily list the available consoles in RancherOS and what their status is with `sudo ros console list`.
-
-```
-$ sudo ros console list
-disabled alpine
-disabled centos
-disabled debian
-current default
-disabled fedora
-disabled ubuntu
-```
-
-### Changing Consoles after RancherOS has started
-
-You can view which console is being used by RancherOS by checking which console container is running in System Docker. If you wanted to switch consoles, you just need to run a simple command and select your new console.
-
-For our example, we'll switch to the Ubuntu console.
-
-```
-$ sudo ros console switch ubuntu
-Switching consoles will
-1. destroy the current console container
-2. log you out
-3. restart Docker
-Continue [y/N]:y
-Pulling console (rancher/os-ubuntuconsole:v0.5.0-3)...
-v0.5.0-3: Pulling from rancher/os-ubuntuconsole
-6d3a6d998241: Pull complete
-606b08bdd0f3: Pull complete
-1d99b95ffc1c: Pull complete
-a3ed95caeb02: Pull complete
-3fc2f42db623: Pull complete
-2fb84911e8d2: Pull complete
-fff5d987b31c: Pull complete
-e7849ae8f782: Pull complete
-de375d40ae05: Pull complete
-8939c16614d1: Pull complete
-Digest: sha256:37224c3964801d633ea8b9629137bc9d4a8db9d37f47901111b119d3e597d15b
-Status: Downloaded newer image for rancher/os-ubuntuconsole:v0.5.0-3
-switch-console_1 | time="2016-07-02T01:47:14Z" level=info msg="Project [os]: Starting project "
-switch-console_1 | time="2016-07-02T01:47:14Z" level=info msg="[0/18] [console]: Starting "
-switch-console_1 | time="2016-07-02T01:47:14Z" level=info msg="Recreating console"
-Connection to 127.0.0.1 closed by remote host.
-```
-
-
-
-After logging back, you'll be in the Ubuntu console.
-
-```
-$ sudo system-docker ps
-CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-6bf33541b2dc rancher/os-ubuntuconsole:v0.5.0-rc3 "/usr/sbin/entry.sh /" About a minute ago Up About a minute
-```
-
-
-
-> **Note:** When switching between consoles, the currently running console container is destroyed, Docker is restarted and you will be logged out.
-
-### Console persistence
-
-All consoles except the default (busybox) console are persistent. Persistent console means that the console container will remain the same and preserves changes made to its filesystem across reboots. If a container is deleted/rebuilt, state in the console will be lost except what is in the persisted directories.
-
-```
-/home
-/opt
-/var/lib/docker
-/var/lib/rancher
-```
-
-
-
-> **Note:** When using a persistent console and in the current version's console, [rolling back]({{}}/os/v1.x/en/upgrading/#rolling-back-an-upgrade) is not supported. For example, rolling back to v0.4.5 when using a v0.5.0 persistent console is not supported.
-
-### Enabling Consoles
-
-You can also enable a console that will be changed at the next reboot.
-
-For our example, we'll switch to the Debian console.
-
-```
-# Check the console running in System Docker
-$ sudo system-docker ps
-CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-95d548689e82 rancher/os-docker:v0.5.0 "/usr/sbin/entry.sh /" About an hour ago Up About an hour docker
-# Enable the Debian console
-$ sudo ros console enable debian
-Pulling console (rancher/os-debianconsole:v0.5.0-3)...
-v0.5.0-3: Pulling from rancher/os-debianconsole
-7268d8f794c4: Pull complete
-a3ed95caeb02: Pull complete
-21cb8a645d75: Pull complete
-5ee1d288a088: Pull complete
-c09f41c2bd29: Pull complete
-02b48ce40553: Pull complete
-38a4150e7e9c: Pull complete
-Digest: sha256:5dbca5ba6c3b7ba6cd6ac75a1d054145db4b4ea140db732bfcbd06f17059c5d0
-Status: Downloaded newer image for rancher/os-debianconsole:v0.5.0-3
-```
-
-
-
-At the next reboot, RancherOS will be using the Debian console.
diff --git a/content/os/v1.x/en/configuration/switching-docker-versions/_index.md b/content/os/v1.x/en/configuration/switching-docker-versions/_index.md
deleted file mode 100644
index d1df6deebaf..00000000000
--- a/content/os/v1.x/en/configuration/switching-docker-versions/_index.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-title: Switching Docker Versions
-weight: 129
-aliases:
- - /os/v1.x/en/installation/configuration/switching-docker-versions
----
-
-The version of User Docker used in RancherOS can be configured using a [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config) file or by using the `ros engine` command.
-
-> **Note:** There are known issues in Docker when switching between versions. For production systems, we recommend setting the Docker engine only once [using a cloud-config](#setting-the-docker-engine-using-cloud-config).
-
-### Available Docker engines
-
-The `ros engine list` command can be used to show which Docker engines are available to switch to. This command will also provide details of which Docker engine is currently being used.
-
-```
-$ sudo ros engine list
-disabled docker-1.10.3
-disabled docker-1.11.2
-current docker-1.12.1
-```
-
-### Setting the Docker engine using cloud-config
-
-RancherOS supports defining which Docker engine to use through the cloud-config file. To change the Docker version from the default packaged version, you can use the following cloud-config setting and select one of the available engines. In the following example, we'll use the cloud-config file to set RancherOS to use Docker 1.10.3 for User Docker.
-
-```yaml
-#cloud-config
-rancher:
- docker:
- engine: docker-1.10.3
-```
-
-### Changing Docker engines after RancherOS has started
-
-If you've already started RancherOS and want to switch Docker engines, you can change the Docker engine by using the `ros engine switch` command. In our example, we'll switch to Docker 1.11.2.
-
-```
-$ sudo ros engine switch docker-1.11.2
-INFO[0000] Project [os]: Starting project
-INFO[0000] [0/19] [docker]: Starting
-Pulling docker (rancher/os-docker:1.11.2)...
-1.11.2: Pulling from rancher/os-docker
-2a6bbb293656: Pull complete
-Digest: sha256:ec57fb24f6d4856d737e14c81a20f303afbeef11fc896d31b4e498829f5d18b2
-Status: Downloaded newer image for rancher/os-docker:1.11.2
-INFO[0007] Recreating docker
-INFO[0007] [1/19] [docker]: Started
-INFO[0007] Project [os]: Project started
-$ docker version
-Client:
- Version: 1.11.2
- API version: 1.23
- Go version: go1.5.4
- Git commit: b9f10c9
- Built: Wed Jun 1 21:20:08 2016
- OS/Arch: linux/amd64
-
-Server:
- Version: 1.11.2
- API version: 1.23
- Go version: go1.5.4
- Git commit: b9f10c9
- Built: Wed Jun 1 21:20:08 2016
- OS/Arch: linux/amd64
-
-```
-
-### Enabling Docker engines
-
-If you don't want to automatically switch Docker engines, you can also set which version of Docker to use after the next reboot by enabling a Docker engine.
-
-```
-$ sudo ros engine enable docker-1.10.3
-```
-
-## Using a Custom Version of Docker
-
-If you're using a version of Docker that isn't available by default or a custom build of Docker then you can create a custom Docker image and service file to distribute it.
-
-Docker engine images are built by adding the binaries to a folder named `engine` and then adding this folder to a `FROM scratch` image. For example, the following Dockerfile will build a Docker engine image.
-
-```
-FROM scratch
-COPY engine /engine
-```
-
-Once the image is built a [system service]({{< baseurl >}}/os/v1.x/en/system-services/) configuration file must be created. An [example file](https://github.com/rancher/os-services/blob/master/d/docker-18.06.3-ce.yml) can be found in the rancher/os-services repo. Change the `image` field to point to the Docker engine image you've built.
-
-All of the previously mentioned methods of switching Docker engines are now available. For example, if your service file is located at `https://myservicefile` then the following cloud-config file could be used to use your custom Docker engine.
-
-```yaml
-#cloud-config
-rancher:
- docker:
- engine: https://myservicefile
-```
diff --git a/content/os/v1.x/en/configuration/sysctl/_index.md b/content/os/v1.x/en/configuration/sysctl/_index.md
deleted file mode 100644
index 1a8d6722d63..00000000000
--- a/content/os/v1.x/en/configuration/sysctl/_index.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: Sysctl Settings
-weight: 132
-aliases:
- - /os/v1.x/en/installation/configuration/sysctl
----
-
-The `rancher.sysctl` cloud-config key can be used to control sysctl parameters. This works in a manner similar to `/etc/sysctl.conf` for other Linux distros.
-
-```
-#cloud-config
-rancher:
- sysctl:
- net.ipv4.conf.default.rp_filter: 1
-```
-
-You can either add these settings to your `cloud-init.yml`, or use `sudo ros config merge -i somefile.yml` to merge settings into your existing system.
diff --git a/content/os/v1.x/en/configuration/users/_index.md b/content/os/v1.x/en/configuration/users/_index.md
deleted file mode 100644
index 4612c1cce2a..00000000000
--- a/content/os/v1.x/en/configuration/users/_index.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-title: Users
-weight: 130
-aliases:
- - /os/v1.x/en/installation/configuration/users
----
-
-Currently, we don't support adding other users besides `rancher`.
-
-You _can_ add users in the console container, but these users will only exist as long as the console container exists. It only makes sense to add users in a [persistent consoles]({{}}/os/v1.x/en/installation/custom-builds/custom-console/#console-persistence).
-
-If you want the console user to be able to ssh into RancherOS, you need to add them
-to the `docker` group.
diff --git a/content/os/v1.x/en/configuration/write-files/_index.md b/content/os/v1.x/en/configuration/write-files/_index.md
deleted file mode 100644
index 7071d5d8923..00000000000
--- a/content/os/v1.x/en/configuration/write-files/_index.md
+++ /dev/null
@@ -1,45 +0,0 @@
----
-title: Writing Files
-weight: 122
-aliases:
- - /os/v1.x/en/installation/configuration/write-files
----
-
-You can automate writing files to disk using the `write_files` cloud-config directive.
-
-```yaml
-#cloud-config
-write_files:
- - path: /etc/rc.local
- permissions: "0755"
- owner: root
- content: |
- #!/bin/bash
- echo "I'm doing things on start"
-```
-
-### Writing Files in Specific System Services
-
-By default, the `write_files` directive will create files in the console container. To write files in other system services, the `container` key can be used. For example, the `container` key could be used to write to `/etc/ntp.conf` in the NTP system service.
-
-```yaml
-#cloud-config
-write_files:
- - container: ntp
- path: /etc/ntp.conf
- permissions: "0644"
- owner: root
- content: |
- server 0.pool.ntp.org iburst
- server 1.pool.ntp.org iburst
- server 2.pool.ntp.org iburst
- server 3.pool.ntp.org iburst
-
- # Allow only time queries, at a limited rate, sending KoD when in excess.
- # Allow all local queries (IPv4, IPv6)
- restrict default nomodify nopeer noquery limited kod
- restrict 127.0.0.1
- restrict [::1]
-```
-
-> **Note:** Currently, writing files to a specific system service is only supported for RancherOS's built-in services. You are unable to write files to any custom system services.
diff --git a/content/os/v1.x/en/installation/_index.md b/content/os/v1.x/en/installation/_index.md
deleted file mode 100644
index be3cae1d222..00000000000
--- a/content/os/v1.x/en/installation/_index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: Installing and Running RancherOS
-weight: 100
-aliases:
- - /os/v1.x/en/installation/running-rancheros
----
-
-RancherOS runs on virtualization platforms, cloud providers and bare metal servers. We also support running a local VM on your laptop.
-
-To start running RancherOS as quickly as possible, follow our [Quick Start Guide]({{< baseurl >}}/os/v1.x/en/quick-start-guide/).
-
-# Platforms
-Refer to the below resources for more information on installing Rancher on your platform.
-
-### Workstation
-
-- [Docker Machine]({{< baseurl >}}/os/v1.x/en/installation/workstation//docker-machine)
-- [Boot from ISO]({{< baseurl >}}/os/v1.x/en/installation/workstation//boot-from-iso)
-
-### Cloud
-
-- [Amazon EC2]({{< baseurl >}}/os/v1.x/en/installation/cloud/aws)
-- [Google Compute Engine]({{< baseurl >}}/os/v1.x/en/installation/cloud/gce)
-- [DigitalOcean]({{< baseurl >}}/os/v1.x/en/installation/cloud/do)
-- [Azure]({{< baseurl >}}/os/v1.x/en/installation/cloud/azure)
-- [OpenStack]({{< baseurl >}}/os/v1.x/en/installation/cloud/openstack)
-- [VMware ESXi]({{< baseurl >}}/os/v1.x/en/installation/cloud/vmware-esxi)
-- [Aliyun]({{< baseurl >}}/os/v1.x/en/installation/cloud/aliyun)
-
-### Bare Metal & Virtual Servers
-
-- [PXE]({{< baseurl >}}/os/v1.x/en/installation/server/pxe)
-- [Install to Hard Disk]({{< baseurl >}}/os/v1.x/en/installation/server/install-to-disk)
-- [Raspberry Pi]({{< baseurl >}}/os/v1.x/en/installation/server/raspberry-pi)
diff --git a/content/os/v1.x/en/installation/amazon-ecs/_index.md b/content/os/v1.x/en/installation/amazon-ecs/_index.md
deleted file mode 100644
index 1379784c5bf..00000000000
--- a/content/os/v1.x/en/installation/amazon-ecs/_index.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-title: Amazon ECS (EC2 Container Service)
-weight: 190
----
-
-[Amazon ECS](https://aws.amazon.com/ecs/) is supported, which allows RancherOS EC2 instances to join your cluster.
-
-### Pre-Requisites
-
-Before launching RancherOS EC2 instances, the [ECS Container Instance IAM Role](http://docs.aws.amazon.com/AmazonECS/latest/developerguide/instance_IAM_role.html) will need to have been created. This `ecsInstanceRole` will need to be used when launching EC2 instances. If you have been using ECS, you created this role if you followed the ECS "Get Started" interactive guide.
-
-### Launching an instance with ECS
-
-RancherOS makes it easy to join your ECS cluster. The ECS agent is a [system service]({{< baseurl >}}/os/v1.x/en/system-services/) that is enabled in the ECS enabled AMI. There may be other RancherOS AMIs that don't have the ECS agent enabled by default, but it can easily be added in the user data on any RancherOS AMI.
-
-When launching the RancherOS AMI, you'll need to specify the **IAM Role** and **Advanced Details** -> **User Data** in the **Configure Instance Details** step.
-
-For the **IAM Role**, you'll need to be sure to select the ECS Container Instance IAM role.
-
-For the **User Data**, you'll need to pass in the [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config) file.
-
-```yaml
-#cloud-config
-rancher:
- environment:
- ECS_CLUSTER: your-ecs-cluster-name
- # Note: You will need to add this variable, if using awslogs for ECS task.
- ECS_AVAILABLE_LOGGING_DRIVERS: |-
- ["json-file","awslogs"]
-# If you have selected a RancherOS AMI that does not have ECS enabled by default,
-# you'll need to enable the system service for the ECS agent.
- services_include:
- amazon-ecs-agent: true
-```
-
-#### Version
-
-By default, the ECS agent will be using the `latest` tag for the `amazon-ecs-agent` image. In v0.5.0, we introduced the ability to select which version of the `amazon-ecs-agent`.
-
-To select the version, you can update your [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config) file.
-
-```yaml
-#cloud-config
-rancher:
- environment:
- ECS_CLUSTER: your-ecs-cluster-name
- # Note: You will need to make sure to include the colon in front of the version.
- ECS_AGENT_VERSION: :v1.9.0
- # If you have selected a RancherOS AMI that does not have ECS enabled by default,
- # you'll need to enable the system service for the ECS agent.
- services_include:
- amazon-ecs-agent: true
-```
-
-
-
-> **Note:** The `:` must be in front of the version tag in order for the ECS image to be tagged correctly.
-
-### Amazon ECS enabled AMIs
-
-Latest Release: [v1.5.6](https://github.com/rancher/os/releases/tag/v1.5.6)
-
-Region | Type | AMI
----|--- | ---
-eu-north-1 | HVM - ECS enabled | [ami-0539b842146882049](https://eu-north-1.console.aws.amazon.com/ec2/home?region=eu-north-1#launchInstanceWizard:ami=ami-0539b842146882049)
-ap-south-1 | HVM - ECS enabled | [ami-0d3b8d8f26c689b4f](https://ap-south-1.console.aws.amazon.com/ec2/home?region=ap-south-1#launchInstanceWizard:ami=ami-0d3b8d8f26c689b4f)
-eu-west-3 | HVM - ECS enabled | [ami-0fea51d2e82d132a0](https://eu-west-3.console.aws.amazon.com/ec2/home?region=eu-west-3#launchInstanceWizard:ami=ami-0fea51d2e82d132a0)
-eu-west-2 | HVM - ECS enabled | [ami-00c3a19135715c851](https://eu-west-2.console.aws.amazon.com/ec2/home?region=eu-west-2#launchInstanceWizard:ami=ami-00c3a19135715c851)
-eu-west-1 | HVM - ECS enabled | [ami-012c49dfd6efe2b69](https://eu-west-1.console.aws.amazon.com/ec2/home?region=eu-west-1#launchInstanceWizard:ami=ami-012c49dfd6efe2b69)
-ap-northeast-2 | HVM - ECS enabled | [ami-02c46f0bcf41b4979](https://ap-northeast-2.console.aws.amazon.com/ec2/home?region=ap-northeast-2#launchInstanceWizard:ami=ami-02c46f0bcf41b4979)
-ap-northeast-1 | HVM - ECS enabled | [ami-0354daa9f30fe60e6](https://ap-northeast-1.console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchInstanceWizard:ami=ami-0354daa9f30fe60e6)
-sa-east-1 | HVM - ECS enabled | [ami-00856c117fa05835f](https://sa-east-1.console.aws.amazon.com/ec2/home?region=sa-east-1#launchInstanceWizard:ami=ami-00856c117fa05835f)
-ca-central-1 | HVM - ECS enabled | [ami-0b0cb5188439bf169](https://ca-central-1.console.aws.amazon.com/ec2/home?region=ca-central-1#launchInstanceWizard:ami=ami-0b0cb5188439bf169)
-ap-southeast-1 | HVM - ECS enabled | [ami-0d8a0ed617d75bacc](https://ap-southeast-1.console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchInstanceWizard:ami=ami-0d8a0ed617d75bacc)
-ap-southeast-2 | HVM - ECS enabled | [ami-029cebde25901dcc9](https://ap-southeast-2.console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchInstanceWizard:ami=ami-029cebde25901dcc9)
-eu-central-1 | HVM - ECS enabled | [ami-0d513a54a3e67e38e](https://eu-central-1.console.aws.amazon.com/ec2/home?region=eu-central-1#launchInstanceWizard:ami=ami-0d513a54a3e67e38e)
-us-east-1 | HVM - ECS enabled | [ami-0f5cc7a532c3171c3](https://us-east-1.console.aws.amazon.com/ec2/home?region=us-east-1#launchInstanceWizard:ami=ami-0f5cc7a532c3171c3)
-us-east-2 | HVM - ECS enabled | [ami-030615e199666fd4b](https://us-east-2.console.aws.amazon.com/ec2/home?region=us-east-2#launchInstanceWizard:ami=ami-030615e199666fd4b)
-us-west-1 | HVM - ECS enabled | [ami-0b530a841750e3315](https://us-west-1.console.aws.amazon.com/ec2/home?region=us-west-1#launchInstanceWizard:ami=ami-0b530a841750e3315)
-us-west-2 | HVM - ECS enabled | [ami-0f1e06359f24f6480](https://us-west-2.console.aws.amazon.com/ec2/home?region=us-west-2#launchInstanceWizard:ami=ami-0f1e06359f24f6480)
diff --git a/content/os/v1.x/en/installation/boot-process/built-in-system-services/_index.md b/content/os/v1.x/en/installation/boot-process/built-in-system-services/_index.md
deleted file mode 100644
index d49a8ac4b5a..00000000000
--- a/content/os/v1.x/en/installation/boot-process/built-in-system-services/_index.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: Built-in System Services
-weight: 150
----
-
-To launch RancherOS, we have built-in system services. They are defined in the [Docker Compose](https://docs.docker.com/compose/compose-file/) format, and can be found in the default system config file, `/usr/share/ros/os-config.yml`. You can [add your own system services]({{< baseurl >}}/os/v1.x/en/system-services/) or override services in the cloud-config.
-
-### preload-user-images
-
-Read more about [image preloading]({{}}/os/v1.x/en/installation/boot-process/image-preloading/).
-
-### network
-
-During this service, networking is set up, e.g. hostname, interfaces, and DNS.
-
-It is configured by `hostname` and `rancher.network`settings in [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config).
-
-### ntp
-
-Runs `ntpd` in a System Docker container.
-
-### console
-
-This service provides the RancherOS user interface by running `sshd` and `getty`. It completes the RancherOS configuration on start up:
-
-1. If the `rancher.password=` kernel parameter exists, it sets `` as the password for the `rancher` user.
-2. If there are no host SSH keys, it generates host SSH keys and saves them under `rancher.ssh.keys` in [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config).
-3. Runs `cloud-init -execute`, which does the following:
- * Updates `.ssh/authorized_keys` in `/home/rancher` and `/home/docker` from [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/ssh-keys/) and metadata.
- * Writes files specified by the `write_files` [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/write-files/) setting.
- * Resizes the device specified by the `rancher.resize_device` [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/resizing-device-partition/) setting.
- * Mount devices specified in the `mounts` [cloud-config]({{< baseurl >}}/os/v1.x/en/storage/additional-mounts/) setting.
- * Set sysctl parameters specified in the`rancher.sysctl` [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/sysctl/) setting.
-4. If user-data contained a file that started with `#!`, then a file would be saved at `/var/lib/rancher/conf/cloud-config-script` during cloud-init and then executed. Any errors are ignored.
-5. Runs `/opt/rancher/bin/start.sh` if it exists and is executable. Any errors are ignored.
-6. Runs `/etc/rc.local` if it exists and is executable. Any errors are ignored.
-
-### docker
-
-This system service runs the user docker daemon. Normally it runs inside the console system container by running `docker-init` script which, in turn, looks for docker binaries in `/opt/bin`, `/usr/local/bin` and `/usr/bin`, adds the first found directory with docker binaries to PATH and runs `dockerlaunch docker daemon` appending the passed arguments.
-
-Docker daemon args are read from `rancher.docker.args` cloud-config property (followed by `rancher.docker.extra_args`).
diff --git a/content/os/v1.x/en/installation/boot-process/cloud-init/_index.md b/content/os/v1.x/en/installation/boot-process/cloud-init/_index.md
deleted file mode 100644
index 78a9c583273..00000000000
--- a/content/os/v1.x/en/installation/boot-process/cloud-init/_index.md
+++ /dev/null
@@ -1,25 +0,0 @@
----
-title: Cloud-Init
-weight: 151
----
-
-Userdata and metadata can be fetched from a cloud provider, VM runtime, or management service during the RancherOS boot process. Since v0.8.0, this process occurs while RancherOS is still running from memory and before System Docker starts. It is configured by the `rancher.cloud_init.datasources` configuration parameter. For cloud-provider specific images, such as AWS and GCE, the datasource is pre-configured.
-
-### Userdata
-
-Userdata is a file given by users when launching RancherOS hosts. It is stored in different locations depending on its format. If the userdata is a [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config) file, indicated by beginning with `#cloud-config` and being in YAML format, it is stored in `/var/lib/rancher/conf/cloud-config.d/boot.yml`. If the userdata is a script, indicated by beginning with `#!`, it is stored in `/var/lib/rancher/conf/cloud-config-script`.
-
-### Metadata
-
-Although the specifics vary based on provider, a metadata file will typically contain information about the RancherOS host and contain additional configuration. Its primary purpose within RancherOS is to provide an alternate source for SSH keys and hostname configuration. For example, AWS launches hosts with a set of authorized keys and RancherOS obtains these via metadata. Metadata is stored in `/var/lib/rancher/conf/metadata`.
-
-## Configuration Load Order
-
-[Cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config/) is read by system services when they need to get configuration. Each additional file overwrites and extends the previous configuration file.
-
-1. `/usr/share/ros/os-config.yml` - This is the system default configuration, which should **not** be modified by users.
-2. `/usr/share/ros/oem/oem-config.yml` - This will typically exist by OEM, which should **not** be modified by users.
-3. Files in `/var/lib/rancher/conf/cloud-config.d/` ordered by filename. If a file is passed in through user-data, it is written by cloud-init and saved as `/var/lib/rancher/conf/cloud-config.d/boot.yml`.
-4. `/var/lib/rancher/conf/cloud-config.yml` - If you set anything with `ros config set`, the changes are saved in this file.
-5. Kernel parameters with names starting with `rancher`.
-6. `/var/lib/rancher/conf/metadata` - Metadata added by cloud-init.
diff --git a/content/os/v1.x/en/installation/boot-process/image-preloading/_index.md b/content/os/v1.x/en/installation/boot-process/image-preloading/_index.md
deleted file mode 100644
index d7bde60fbee..00000000000
--- a/content/os/v1.x/en/installation/boot-process/image-preloading/_index.md
+++ /dev/null
@@ -1,34 +0,0 @@
----
-title: Image Preloading
-weight: 152
----
-
-On boot, RancherOS scans `/var/lib/rancher/preload/docker` and `/var/lib/rancher/preload/system-docker` directories and tries to load container image archives it finds there, with `docker load` and `system-docker load`.
-
-The archives are `.tar` files, optionally compressed with `xz` or `gzip`. These can be produced by `docker save` command, e.g.:
-
-```
-$ docker save my-image1 my-image2 some-other/image3 | xz > my-images.tar.xz
-```
-
-The resulting files should be placed into `/var/lib/rancher/preload/docker` or `/var/lib/rancher/preload/system-docker` (depending on whether you want it preloaded into Docker or System Docker).
-
-Pre-loading process only reads each new archive once, so it won't take time on subsequent boots (`.done` files are created to mark the read archives). If you update the archive (place a newer archive with the same name) it'll get read on the next boot as well.
-
-Pre-loading process is `asynchronous` by default, optionally this can be set to `synchronous` through the cloud-config file or `ros config set` command. In the following example, we’ll use the cloud-config file and `ros config set` command to set RancherOS pre-loading process to `synchronous`.
-
-_Available as of v1.4_
-
-cloud-config file, e.g.:
-```
-#cloud-config
-rancher:
- preload_wait: true
-```
-
-`ros config set` command, e.g.:
-```
-$ ros config set rancher.preload_wait true
-```
-
-Pre-packing docker images is handy when you're customizing your RancherOS distribution (perhaps, building cloud VM images for your infrastructure).
diff --git a/content/os/v1.x/en/installation/boot-process/logging/_index.md b/content/os/v1.x/en/installation/boot-process/logging/_index.md
deleted file mode 100644
index ad370802db4..00000000000
--- a/content/os/v1.x/en/installation/boot-process/logging/_index.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: System Logging
-weight: 153
----
-
-### System services
-
-RancherOS uses containers for its system services. This means the logs for `syslog`, `acipd`, `system-cron`, `udev`, `network`, `ntp`, `console` and the user Docker are available using `sudo ros service logs `.
-
-### Boot logging
-
-Since v1.1.0, the init process's logs are copied to `/var/log/boot` after the user-space filesystem is made available. These can be used to diagnose initialisation, network, and cloud-init issues.
-
-### Remote Syslog logging
-
-The Linux kernel has a `netconsole` logging facility that allows it to send the Kernel level logs to a remote Syslog server.
-When you set this kernel boot parameter in RancherOS v1.1.0 and later, the RancherOS debug logs will also be sent to it.
-
-To set up Linux kernel and RancherOS remote Syslog logging, you need to set both a local, and remote host IP address - even if this address isn't the final IP address of your system. The kernel setting looks like:
-
-```
- netconsole=[+][src-port]@[src-ip]/[],[tgt-port]@/[tgt-macaddr]
-
- where
- + if present, enable extended console support
- src-port source for UDP packets (defaults to 6665)
- src-ip source IP to use (interface address)
- dev network interface (eth0)
- tgt-port port for logging agent (6666)
- tgt-ip IP address for logging agent
- tgt-macaddr ethernet MAC address for logging agent (broadcast)
-```
-
-For example, on my current test system, I have set the kernel boot line to:
-
-
-```
-printk.devkmsg=on console=tty1 rancher.autologin=tty1 console=ttyS0 rancher.autologin=ttyS0 rancher.state.dev=LABEL=RANCHER_STATE rancher.state.autoformat=[/dev/sda,/dev/vda] rancher.rm_usr loglevel=8 netconsole=+9999@10.0.2.14/,514@192.168.42.223/
-```
-
-The kernel boot parameters can be set during installation using `sudo ros install --append "...."`, or on an installed RancherOS system, by running `sudo ros config syslinux` (which will start vi in a container, editing the `global.cfg` boot config file.
diff --git a/content/os/v1.x/en/installation/cloud/aliyun/_index.md b/content/os/v1.x/en/installation/cloud/aliyun/_index.md
deleted file mode 100644
index bffd35fc0d6..00000000000
--- a/content/os/v1.x/en/installation/cloud/aliyun/_index.md
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: Aliyun
-weight: 111
-aliases:
- - /os/v1.x/en/installation/running-rancheros/cloud/aliyun
----
-
-# Adding the RancherOS Image into Aliyun
-
-RancherOS is available as an image in Aliyun, and can be easily run in Elastic Compute Service (ECS). Let’s walk through how to upload the ECS image.
-
-1. Download the most recent RancherOS image. The image `rancheros-aliyun.vhd` can be found in the [release artifacts](https://github.com/rancher/os/releases).
-2. Follow Aliyun's instructions on how to [upload the image](https://help.aliyun.com/document_detail/127285.html). Before the image can be added, it must be uploaded into an OSS bucket.
-3. Once the image is added to your ECS, we can start creating new instances!
-
-Example:
-
-
-
-## Options
-
-| Option | Description |
-| --- | --- |
-| Root disk size | The size must be greater than 10GB. Note: When booting the instance, the value must be kept the same. |
-| Platform | Select `Others Linux` |
-| Image Format | Select `VHD` |
-
-### Launching RancherOS using Aliyun Console
-
-After the image is uploaded, we can use the `Aliyun Console` to start a new instance. Currently, RancherOS on Aliyun only supports SSH key access, so it can only be deployed through the UI.
-
-Since the image is private, we need to use the `Custom Images`.
-
-
-
-After the instance is successfully started, we can login with the `rancher` user via SSH.
diff --git a/content/os/v1.x/en/installation/cloud/aws/_index.md b/content/os/v1.x/en/installation/cloud/aws/_index.md
deleted file mode 100644
index 2547ec84ba1..00000000000
--- a/content/os/v1.x/en/installation/cloud/aws/_index.md
+++ /dev/null
@@ -1,59 +0,0 @@
----
-title: Amazon EC2
-weight: 105
-aliases:
- - /os/v1.x/en/installation/running-rancheros/cloud/aws
----
-
-RancherOS is available as an Amazon Web Services AMI, and can be easily run on EC2. You can launch RancherOS either using the AWS Command Line Interface (CLI) or using the AWS console.
-
-### Launching RancherOS through the AWS CLI
-
-If you haven't installed the AWS CLI, follow the instructions on the [AWS CLI page](http://aws.amazon.com/cli/) to install the CLI and configure access key and secret keys.
-
-Once you've installed your AWS CLI, use this command to launch an EC2 instance with the RancherOS AMI. You will need to know your SSH key name and security group name for the _region_ that you are configured for. These can be found from the AWS console.
-
-> **Note:** Check the RancherOS [README](https://github.com/rancher/os/blob/master/README.md) for AMI names for each region. We support PV and HVM types of AMIs.
-
-```
-$ aws ec2 run-instances --image-id ami-ID# --count 1 --instance-type t2.small --key-name MySSHKeyName --security-groups sg-name
-```
-
-Your EC2 instance is now running RancherOS!
-
-### Launching RancherOS through the AWS Console
-
-Let’s walk through how to import and create a RancherOS on EC2 machine using the AWS console.
-
-
-1. First login to your AWS console, and go to the EC2 dashboard, click on **Launch Instance**:
- {{< img "/img/os/Rancher_aws1.png" "RancherOS on AWS 1">}}
-2. Select the **Community AMIs** on the sidebar and search for **RancherOS**. Pick the latest version and click **Select**.
- {{< img "/img/os/Rancher_aws2.png" "RancherOS on AWS 2">}}
-3. Go through the steps of creating the instance type through the AWS console. If you want to pass in a [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config) file during boot of RancherOS, you'd pass in the file as **User data** by expanding the **Advanced Details** in **Step 3: Configure Instance Details**. You can pass in the data as text or as a file.
- {{< img "/img/os/Rancher_aws6.png" "RancherOS on AWS 6">}}
- After going through all the steps, you finally click on **Launch**, and either create a new key pair or choose an existing key pair to be used with the EC2 instance. If you have created a new key pair, download the key pair. If you have chosen an existing key pair, make sure you have the key pair accessible. Click on **Launch Instances**.
- {{< img "/img/os/Rancher_aws3.png" "RancherOS on AWS 3">}}
-4. Your instance will be launching and you can click on **View Instances** to see it's status.
- {{< img "/img/os/Rancher_aws4.png" "RancherOS on AWS 4">}}
- Your instance is now running!
- {{< img "/img/os/Rancher_aws5.png" "RancherOS on AWS 5">}}
-
-## Logging into RancherOS
-
-From a command line, log into the EC2 Instance. If you added ssh keys using a cloud-config,
-both those keys, and the one you selected in the AWS UI will be installed.
-
-```
-$ ssh -i /Directory/of/MySSHKeyName.pem rancher@
-```
-
-If you have issues logging into RancherOS, try using this command to help debug the issue.
-
-```
-$ ssh -v -i /Directory/of/MySSHKeyName.pem rancher@
-```
-
-## Latest AMI Releases
-
-Please check the [README](https://github.com/rancher/os/blob/master/README.md) in our RancherOS repository for our latest AMIs.
diff --git a/content/os/v1.x/en/installation/cloud/azure/_index.md b/content/os/v1.x/en/installation/cloud/azure/_index.md
deleted file mode 100644
index 19553b92b02..00000000000
--- a/content/os/v1.x/en/installation/cloud/azure/_index.md
+++ /dev/null
@@ -1,78 +0,0 @@
----
-title: Azure
-weight: 110
-aliases:
- - /os/v1.x/en/installation/running-rancheros/cloud/azure
----
-
-RancherOS has been published in Azure Marketplace, you can get it from [here](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/rancher.rancheros).
-
-### Launching RancherOS through the Azure Portal
-
-Using the new Azure Resource Management portal, click on **Marketplace**. Search for **RancherOS**. Click on **Create**.
-
-Follow the steps to create a virtual machine.
-
-In the _Basics_ step, provide a **name** for the VM, use _rancher_ as the **user name** and select the **SSH public key** option of authenticating. Add your ssh public key into the appropriate field. Select the **Resource group** that you want to add the VM to or create a new one. Select the **location** for your VM.
-
-In the _Size_ step, select a virtual machine that has at least **1GB** of memory.
-
-In the _Settings_ step, you can use all the default settings to get RancherOS running.
-
-Review your VM and buy it so that you can **Create** your VM.
-
-After the VM has been provisioned, click on the VM to find the public IP address. SSH into your VM using the _rancher_ username.
-
-```
-$ ssh rancher@ -p 22
-```
-
-### Launching RancherOS with custom data
-
-_Available as of v1.5.2_
-
-Instance Metadata Service provides the ability for the VM to have access to its custom data. The binary data must be less than 64 KB and is provided to the VM in base64 encoded form.
-You can get more details from [here](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/instance-metadata-service#custom-data)
-
-For example, you can add custom data through [CLI](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/cli-ps-findimage):
-
-```
-# list images from marketplace
-az vm image list --location westus --publisher Rancher --offer rancheros --sku os --all --output table
-
-Offer Publisher Sku Urn Version
---------- ----------- ----- ----------------------------- ---------
-rancheros rancher os rancher:rancheros:os:1.5.1 1.5.1
-rancheros rancher os152 rancher:rancheros:os152:1.5.2 1.5.2
-...
-
-# accept the terms
-az vm image accept-terms --urn rancher:rancheros:os152:1.5.2
-
-# create the vm
-AZURE_ROS_SSH_PUBLIC_KEY="xxxxxx"
-az vm create --resource-group mygroup \
- --name myvm \
- --image rancher:rancheros:os152:1.5.2 \
- --plan-name os152 \
- --plan-product rancheros \
- --plan-publisher rancher \
- --custom-data ./custom_data.txt \
- --admin-username rancher \
- --size Standard_A1 \
- --ssh-key-value "$AZURE_ROS_SSH_PUBLIC_KEY"
-```
-
-The `custom_data.txt` can be the cloud-config format or a shell script, such as:
-
-```
-#cloud-config
-runcmd:
-- [ touch, /home/rancher/test1 ]
-- echo "test" > /home/rancher/test2
-```
-
-```
-#!/bin/sh
-echo "aaa" > /home/rancher/aaa.txt
-```
diff --git a/content/os/v1.x/en/installation/cloud/do/_index.md b/content/os/v1.x/en/installation/cloud/do/_index.md
deleted file mode 100644
index 1d043601180..00000000000
--- a/content/os/v1.x/en/installation/cloud/do/_index.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-title: Digital Ocean
-weight: 107
-aliases:
- - /os/v1.x/en/installation/running-rancheros/cloud/do
----
-
-RancherOS is available in the Digital Ocean portal. RancherOS is a member of container distributions and you can find it easily.
-
->**Note**
->Deploying to Digital Ocean will incur charges.
-
-To start a RancherOS Droplet on Digital Ocean:
-
-1. In the Digital Ocean portal, go to the project view.
-1. Click **New Droplet.**
-1. Click **Create Droplet.**
-1. Click the **Container distributions** tab.
-1. Click **RancherOS.**
-1. Choose a plan. Make sure your Droplet has the [minimum hardware requirements for RancherOS]({{}}/os/v1.x/en/overview/#hardware-requirements).
-1. Choose any options for backups, block storage, and datacenter region.
-1. Optional: In the **Select additional options** section, you can check the **User data** box and enter a `cloud-config` file in the text box that appears. The `cloud-config` file is used to provide a script to be run on the first boot. An example is below.
-1. Choose an SSH key that you have access to, or generate a new SSH key.
-1. Choose your project.
-1. Click **Create.**
-
-
-You can access the host via SSH after the Droplet is booted. The default user is `rancher`.
-
-Below is an example `cloud-config` file that you can use to initialize the Droplet with user data, such as deploying Rancher:
-
-```
-#cloud-config
-
-write_files:
- - path: /etc/rc.local
- permissions: "0755"
- owner: root
- content: |
- #!/bin/bash
- wait-for-docker
-
- export curlimage=appropriate/curl
- export jqimage=stedolan/jq
- export rancher_version=v2.2.2
-
- for image in $curlimage $jqimage "rancher/rancher:${rancher_version}"; do
- until docker inspect $image > /dev/null 2>&1; do
- docker pull $image
- sleep 2
- done
- done
-
- docker run -d --restart=unless-stopped -p 80:80 -p 443:443 -v /opt/rancher:/var/lib/rancher rancher/rancher:${rancher_version}
-```
diff --git a/content/os/v1.x/en/installation/cloud/gce/_index.md b/content/os/v1.x/en/installation/cloud/gce/_index.md
deleted file mode 100644
index 34159b09d19..00000000000
--- a/content/os/v1.x/en/installation/cloud/gce/_index.md
+++ /dev/null
@@ -1,138 +0,0 @@
----
-title: Google Compute Engine (GCE)
-weight: 106
-aliases:
- - /os/v1.x/en/installation/running-rancheros/cloud/gce
----
-
-> **Note:** Due to the maximum transmission unit (MTU) of [1460 bytes on GCE](https://cloud.google.com/compute/docs/troubleshooting#packetfragmentation), you will need to configure your [network interfaces]({{< baseurl >}}/os/v1.x/en/networking/interfaces/) and both the [Docker and System Docker]({{< baseurl >}}/os/v1.x/en/configuration/docker/) to use a MTU of 1460 bytes or you will encounter weird networking related errors.
-
-### Adding the RancherOS Image into GCE
-
-RancherOS is available as an image in GCE, and can be easily run in Google Compute Engine (GCE). Let’s walk through how to upload GCE image.
-
-1. Download the most recent RancherOS image. The image can be found in the [release artifacts](https://github.com/rancher/os/releases). It is a `.tar.gz` file.
-2. Follow Google's instructions on how to [upload the image](https://cloud.google.com/compute/docs/tutorials/building-images#publishingimage). The image must be uploaded into a Google Cloud Storage bucket before it can be added to a project.
-3. Follow Google's instructions on how to [import a RAW image](https://cloud.google.com/compute/docs/images/import-existing-image#use_saved_image).
-4. Once the image is added to your Google Compute Engine, we can start creating new instances!
-
-### Launching RancherOS using `gcloud compute`
-
-After the image is uploaded, we can use the `gcloud compute` [command-line tool](https://cloud.google.com/compute/docs/gcloud-compute/) to start a new instance. It automatically merges the SSH keys from the project and adds the keys to the **rancher** user. If you don't have any project level SSH keys, go to the _Adding SSH Keys_ section to learn more about adding SSH keys.
-
-Since the image is private, we need to follow Google's [instructions](https://cloud.google.com/compute/docs/creating-custom-image#start_an_instance_from_a_custom_image).
-
-```
-$ gcloud compute instances create --project --zone --image
-```
-
-### Using a Cloud Config File with GCE
-
-If you want to pass in your own cloud config file that will be processed by [cloud init]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config), you can pass it as metadata upon creation of the instance during the `gcloud compute` command. The file will need to be stored locally before running the command. The key of the metadata will be `user-data` and the value is the location of the file. If any SSH keys are added in the cloud config file, it will also be added to the **rancher** user.
-
-```
-$ gcloud compute instances create --project --zone --image --metadata-from-file user-data=/Directory/of/Cloud_Config.yml
-```
-
-**Adding your Cloud Config to Existing Instance**
-
-If you have already created the instance, you can still add the cloud config file after the instance is created. You will just need to reset the machine after you've added the metadata.
-
-```
-$ gcloud compute instances add-metadata --metadata-from-file user-data=/Directory/of/File --project --zone
-Updated [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_OF_INSTANCE/instances/INSTANCE_NAME].
-$ gcloud compute instances reset --project --zone
-Updated [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_OF_INSTANCE/instances/INSTANCE_NAME].
-```
-
-**Reviewing your Cloud Config**
-
-If you want to review the cloud config file for your instance, review the **metadata** section:
-
-```
-$ gcloud compute instances describe --project --zone
-```
-
-**Removing your Cloud Config**
-
-If you want to remove your cloud config file, use the following command to remove the metadata.
-
-```
-$ gcloud compute instances remove-metadata --project --zone --keys user-data
-Updated [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_OF_INSTANCE/instances/INSTANCE_NAME].
-```
-
-**Resetting your Instance**
-
-After any changes to the cloud config file, you'll need to reset the machine. You can reset either using the console or using this command:
-
-```
-$ gcloud compute instances reset --project --zone
-Updated [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE_OF_INSTANCE/instances/INSTANCE_NAME].
-```
-
-### Launching RancherOS using the Google Console
-
-After the image is uploaded, it's easy to use the console to create new instances. You will **not** be able to upload your own cloud config file when creating instances through the console. You can add it after the instance is created using `gcloud compute` commands and resetting the instance.
-
-1. Make sure you are in the project that the image was created in.
- 
-2. In the navigation bar, click on the **VM instances**, which is located at Compute -> Compute Engine -> Metadata. Click on **Create instance**.
- 
-2. Fill out the information for your instance. In the **Image** dropdown, your private image will be listed among the public images provided by Google. Select the private image for RancherOS. Click **Create**.
- 
-3. Your instance is being created and will be up and running shortly!
-
-#### Adding SSH keys
-
-In order to SSH into the GCE instance, you will need to have SSH keys set up in either the project instance, add them to the instance after the instance is created, or add them using the `gcloud compute` commands to add meta-data to an instance.
-
-**Option 1: Project Level SSH Keys**
-
-In your project, click on **Metadata**, which is located within Compute -> Compute Engine -> Metadata. Click on **SSH Keys**.
-
-
-
-Add the SSH keys that you want to have access to any instances within your project.
-
-Note: If you do this after any RancherOS instance is created, you will need to reset the instance so that the SSH keys are added to the **rancher** user.
-
-**Option 2: Instance Level SSH Keys**
-
-After your instance is created, click on the instance name. Scroll down to the **SSH Keys** section and click on **Add SSH key**. This key will only be applicable to the instance.
-
-
-
-After the SSH keys have been added, you'll need to reset the machine, by clicking **Reset**.
-
-
-
-After a little bit, you will be able to SSH into the box using the **rancher** user.
-
-**Option 3: Using the Cloud Config file**
-
-You can add SSH keys by adding them into the cloud config file. Follow the directions above that walk through how to pass the cloud config file to an instance.
-
-Example of cloud config file that has only SSH keys:
-
-```yaml
-#cloud-config
-
-ssh_authorized_keys:
- - ssh-rsa AAA... user@host
-```
-
-## Logging into RancherOS
-----
-
-Remember, the SSH keys are passed to the **rancher** user. The SSH keys can be passed from the project level, the instance level or through the cloud config file. If you add any of these SSH keys after the instance has been created, the instance will need to be reset before the SSH keys are passed through.
-
-```
-$ gcloud compute ssh rancher@ --project --zone
-```
-
-If you have issues logging into RancherOS, try using this command to help debug the instance.
-
-```
-$ gcloud compute instances get-serial-port-output --zone --project
-```
diff --git a/content/os/v1.x/en/installation/cloud/openstack/_index.md b/content/os/v1.x/en/installation/cloud/openstack/_index.md
deleted file mode 100644
index 9ab19b45d8e..00000000000
--- a/content/os/v1.x/en/installation/cloud/openstack/_index.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: OpenStack
-weight: 109
-aliases:
- - /os/v1.x/en/installation/running-rancheros/cloud/openstack
----
-
-As of v0.5.0, RancherOS releases include an OpenStack image that can be found on our [releases page](https://github.com/rancher/os/releases). The image format is [QCOW3](https://wiki.qemu.org/Features/Qcow3#Fully_QCOW2_backwards-compatible_feature_set) that is backward compatible with QCOW2.
-
-When launching an instance using the image, you must enable **Advanced Options** -> **Configuration Drive** and in order to use a [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config) file.
diff --git a/content/os/v1.x/en/installation/cloud/vmware-esxi/_index.md b/content/os/v1.x/en/installation/cloud/vmware-esxi/_index.md
deleted file mode 100644
index 07913f18ae4..00000000000
--- a/content/os/v1.x/en/installation/cloud/vmware-esxi/_index.md
+++ /dev/null
@@ -1,38 +0,0 @@
----
-title: VMware ESXi
-weight: 108
-aliases:
- - /os/v1.x/en/installation/running-rancheros/cloud/vmware-esxi
----
-
-As of v1.1.0, RancherOS automatically detects that it is running on VMware ESXi, and automatically adds the `open-vm-tools` service to be downloaded and started, and uses `guestinfo` keys to set the cloud-init data.
-
-As of v1.5.0, RancherOS releases anything required for VMware, which includes initrd, a standard ISO for VMware, a `vmdk` image, and a specific ISO to be used with Docker Machine. The open-vm-tools is built in to RancherOS, there is no need to download it.
-
-| Description | Download URL |
-|---|---|
-| Booting from ISO | https://releases.rancher.com/os/latest/vmware/rancheros.iso |
-| For docker-machine | https://releases.rancher.com/os/latest/vmware/rancheros-autoformat.iso |
-| VMDK | https://releases.rancher.com/os/latest/vmware/rancheros.vmdk |
-| Initrd | https://releases.rancher.com/os/latest/vmware/initrd |
-
-### VMware Guest Info
-
-| VARIABLE | TYPE |
-|---|---|
-| `hostname` | hostname |
-| `interface..name` | string |
-| `interface..mac` | MAC address (is used to match the ethernet device's MAC address, not to set it) |
-| `interface..dhcp` | {"yes", "no"} |
-| `interface..role` | {"public", "private"} |
-| `interface..ip..address` | CIDR IP address |
-| `interface..route..gateway` | IP address |
-| `interface..route..destination` | CIDR IP address (not available yet) |
-| `dns.server.` | IP address |
-| `dns.domain.` | DNS search domain |
-| `cloud-init.config.data` | string |
-| `cloud-init.data.encoding` | {"", "base64", "gzip+base64"} |
-| `cloud-init.config.url` | URL |
-
-
-> **Note:** "n", "m", "l", "x" and "y" are 0-indexed, incrementing integers. The identifier for an interface (``) is used in the generation of the default interface name in the form `eth`.
diff --git a/content/os/v1.x/en/installation/custom-builds/custom-console/_index.md b/content/os/v1.x/en/installation/custom-builds/custom-console/_index.md
deleted file mode 100644
index a54cf2f4f6f..00000000000
--- a/content/os/v1.x/en/installation/custom-builds/custom-console/_index.md
+++ /dev/null
@@ -1,135 +0,0 @@
----
-title: Custom Console
-weight: 180
----
-
-When [booting from the ISO]({{< baseurl >}}/os/v1.x/en/installation/workstation//boot-from-iso/), RancherOS starts with the default console, which is based on busybox.
-
-You can select which console you want RancherOS to start with using the [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config).
-
-### Enabling Consoles using Cloud-Config
-
-When launching RancherOS with a [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config) file, you can select which console you want to use.
-
-Currently, the list of available consoles are:
-
-* default
-* alpine
-* centos
-* debian
-* fedora
-* ubuntu
-
-Here is an example cloud-config file that can be used to enable the debian console.
-
-```yaml
-#cloud-config
-rancher:
- console: debian
-```
-
-### Listing Available Consoles
-
-You can easily list the available consoles in RancherOS and what their status is with `sudo ros console list`.
-
-```
-$ sudo ros console list
-disabled alpine
-disabled centos
-disabled debian
-current default
-disabled fedora
-disabled ubuntu
-```
-
-### Changing Consoles after RancherOS has started
-
-You can view which console is being used by RancherOS by checking which console container is running in System Docker. If you wanted to switch consoles, you just need to run a simple command and select your new console.
-
-For our example, we'll switch to the Ubuntu console.
-
-```
-$ sudo ros console switch ubuntu
-Switching consoles will
-1. destroy the current console container
-2. log you out
-3. restart Docker
-Continue [y/N]:y
-Pulling console (rancher/os-ubuntuconsole:v0.5.0-3)...
-v0.5.0-3: Pulling from rancher/os-ubuntuconsole
-6d3a6d998241: Pull complete
-606b08bdd0f3: Pull complete
-1d99b95ffc1c: Pull complete
-a3ed95caeb02: Pull complete
-3fc2f42db623: Pull complete
-2fb84911e8d2: Pull complete
-fff5d987b31c: Pull complete
-e7849ae8f782: Pull complete
-de375d40ae05: Pull complete
-8939c16614d1: Pull complete
-Digest: sha256:37224c3964801d633ea8b9629137bc9d4a8db9d37f47901111b119d3e597d15b
-Status: Downloaded newer image for rancher/os-ubuntuconsole:v0.5.0-3
-switch-console_1 | time="2016-07-02T01:47:14Z" level=info msg="Project [os]: Starting project "
-switch-console_1 | time="2016-07-02T01:47:14Z" level=info msg="[0/18] [console]: Starting "
-switch-console_1 | time="2016-07-02T01:47:14Z" level=info msg="Recreating console"
-Connection to 127.0.0.1 closed by remote host.
-```
-
-
-
-After logging back, you'll be in the Ubuntu console.
-
-```
-$ sudo system-docker ps
-CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-6bf33541b2dc rancher/os-ubuntuconsole:v0.5.0-rc3 "/usr/sbin/entry.sh /" About a minute ago Up About a minute
-```
-
-
-
-> **Note:** When switching between consoles, the currently running console container is destroyed, Docker is restarted and you will be logged out.
-
-### Console persistence
-
-All consoles except the default (busybox) console are persistent. Persistent console means that the console container will remain the same and preserves changes made to its filesystem across reboots. If a container is deleted/rebuilt, state in the console will be lost except what is in the persisted directories.
-
-```
-/home
-/opt
-/var/lib/docker
-/var/lib/rancher
-```
-
-
-
-> **Note:** When using a persistent console and in the current version's console, [rolling back]({{}}/os/v1.x/en/upgrading/#rolling-back-an-upgrade) is not supported. For example, rolling back to v0.4.5 when using a v0.5.0 persistent console is not supported.
-
-### Enabling Consoles
-
-You can also enable a console that will be changed at the next reboot.
-
-For our example, we'll switch to the Debian console.
-
-```
-# Check the console running in System Docker
-$ sudo system-docker ps
-CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-95d548689e82 rancher/os-docker:v0.5.0 "/usr/sbin/entry.sh /" About an hour ago Up About an hour docker
-# Enable the Debian console
-$ sudo ros console enable debian
-Pulling console (rancher/os-debianconsole:v0.5.0-3)...
-v0.5.0-3: Pulling from rancher/os-debianconsole
-7268d8f794c4: Pull complete
-a3ed95caeb02: Pull complete
-21cb8a645d75: Pull complete
-5ee1d288a088: Pull complete
-c09f41c2bd29: Pull complete
-02b48ce40553: Pull complete
-38a4150e7e9c: Pull complete
-Digest: sha256:5dbca5ba6c3b7ba6cd6ac75a1d054145db4b4ea140db732bfcbd06f17059c5d0
-Status: Downloaded newer image for rancher/os-debianconsole:v0.5.0-3
-```
-
-
-
-At the next reboot, RancherOS will be using the Debian console.
diff --git a/content/os/v1.x/en/installation/custom-builds/custom-kernels/_index.md b/content/os/v1.x/en/installation/custom-builds/custom-kernels/_index.md
deleted file mode 100644
index b3d6d35baae..00000000000
--- a/content/os/v1.x/en/installation/custom-builds/custom-kernels/_index.md
+++ /dev/null
@@ -1,80 +0,0 @@
----
-title: Custom Kernels
-weight: 181
----
-
-### Kernel version in RancherOS
-
-RancherOS basically uses the standard Linux kernel, but we maintain a kernel config ourselves. Due to various feature support and security fixes, we are constantly updating the kernel version.
-
-RancherOS | Kernel
---------- | ------
-<=v0.7.1 | 4.4.x
-<=v1.3.0 | 4.9.x
->=v1.4.0 | 4.14.x
-
-### Building and Packaging a Kernel to be used in RancherOS
-
-We build the kernel for RancherOS at the [os-kernel repository](https://github.com/rancher/os-kernel). You can use this repository to help package your own custom kernel to be used in RancherOS.
-
-Create a clone of the [os-kernel](https://github.com/rancher/os-kernel) repository to your local machine using `git clone`.
-
-```
-$ git clone https://github.com/rancher/os-kernel.git
-```
-
-If you want to build kernel v4.14.53, you can refer to the following command. After the build is completed, a `./dist/kernel` directory will be created with the freshly built kernel tarball and headers.
-
-```
-$ git tag v4.14.53-rancher
-$ KERNEL_TAG=4.14.53 make release
-...snip...
-./dist/kernel/extra-linux-4.14.53-rancher-x86.tar.gz
-./dist/kernel/build-linux-4.14.53-rancher-x86.tar.gz
-./dist/kernel/linux-4.14.53-rancher-x86.tar.gz
-./dist/kernel/config
-...snip...
-Images ready to push:
-rancher/os-extras:4.14.53-rancher
-rancher/os-headers:4.14.53-rancher
- ```
-For some users who need a custom kernel, the following information is very useful to you:
-
-1. The modules defined in `modules.list` will be packaged into the built-in modules.
-2. The modules defined in `modules-extra.list` will be packaged into the extra modules.
-3. You can modify `config/kernel-config` to build the kernel modules you need.
-4. You can add your patches in the `patches` directory, and `os-kernel` will update these patches after downloading the kernel source.
-
-Now you need to either upload the `./dist/kernel/linux-4.14.53-rancher-x86.tar.gz` file to somewhere, or copy that file into your clone of the `rancher/os` repo, as `assets/kernel.tar.gz`.
-
-The `build-.tar.gz` and `extra-.tar.gz` files are used to build the `rancher/os-extras` and `rancher/os-headers` images for your RancherOS release - which you will need to tag them with a different organisation name, push them to a registry, and create custom service.yml files.
-
-Your kernel should be packaged and published as a set of files of the following format:
-
-1. `.tar.gz` is the one KERNEL_URL in `rancher/os` should point to. It contains the kernel binary, core modules and firmware.
-
-2. `build-.tar.gz` contains build headers to build additional modules: it is a subset of the kernel sources tarball. These files will be installed into `/usr/src/` using the `kernel-headers-system-docker` and `kernel-headers` services.
-
-3. `extra-.tar.gz` contains extra modules and firmware for your kernel and should be built into a `kernel-extras` service.
-
-### Building a RancherOS release using the Packaged kernel files.
-
-By default, RancherOS ships with the kernel provided by the [os-kernel repository](https://github.com/rancher/os-kernel). Swapping out the default kernel can by done by [building your own custom RancherOS ISO]({{}}/os/v1.x/en/installation/custom-builds/custom-rancheros-iso/).
-
-Create a clone of the main [RancherOS repository](https://github.com/rancher/os) to your local machine with a `git clone`.
-
-```
-$ git clone https://github.com/rancher/os.git
-```
-
-In the root of the repository, the "General Configuration" section of `Dockerfile.dapper` will need to be updated. Using your favorite editor, replace the appropriate `KERNEL_URL` value with a URL of your compiled custom kernel tarball. Ideally, the URL will use `HTTPS`.
-
-```
-# Update the URL to your own custom kernel tarball
-ARG KERNEL_VERSION_amd64=4.14.63-rancher
-ARG KERNEL_URL_amd64=https://link/xxxx
-```
-
-After you've replaced the URL with your custom kernel, you can follow the steps in [building your own custom RancherOS ISO]({{}}/os/v1.x/en/installation/custom-builds/custom-rancheros-iso/).
-
-> **Note:** `KERNEL_URL` settings should point to a Linux kernel, compiled and packaged in a specific way. You can fork [os-kernel repository](https://github.com/rancher/os-kernel) to package your own kernel.
diff --git a/content/os/v1.x/en/installation/custom-builds/custom-rancheros-iso/_index.md b/content/os/v1.x/en/installation/custom-builds/custom-rancheros-iso/_index.md
deleted file mode 100644
index 18f3ddafcbe..00000000000
--- a/content/os/v1.x/en/installation/custom-builds/custom-rancheros-iso/_index.md
+++ /dev/null
@@ -1,95 +0,0 @@
----
-title: Custom RancherOS ISO
-weight: 182
----
-
-It's easy to build your own RancherOS ISO.
-
-Create a clone of the main [RancherOS repository](https://github.com/rancher/os) to your local machine with a `git clone`.
-
-```
-$ git clone https://github.com/rancher/os.git
-```
-
-In the root of the repository, the "General Configuration" section of `Dockerfile.dapper` can be updated to use [custom kernels]({{}}/os/v1.x/en/installation/custom-builds/custom-kernels).
-After you've saved your edits, run `make` in the root directory. After the build has completed, a `./dist/artifacts` directory will be created with the custom built RancherOS release files.
-Build Requirements: `bash`, `make`, `docker` (Docker version >= 1.10.3)
-
-```
-$ make
-$ cd dist/artifacts
-$ ls
-initrd rancheros.iso
-iso-checksums.txt vmlinuz
-```
-
-If you need a compressed ISO, you can run this command:
-
-```
-$ make release
-```
-
-The `rancheros.iso` is ready to be used to [boot RancherOS from ISO]({{< baseurl >}}/os/v1.x/en/installation/workstation//boot-from-iso/) or [launch RancherOS using Docker Machine]({{< baseurl >}}/os/v1.x/en/installation/workstation//docker-machine).
-
-## Creating a GCE Image Archive
-
-Create a clone of the main [RancherOS repository](https://github.com/rancher/os) to your local machine with a `git clone`.
-
-```
-$ git clone https://github.com/rancher/os-packer.git
-```
-
-GCE supports KVM virtualization, and we use `packer` to build KVM images. Before building, you need to verify that the host can support KVM.
-If you want to build GCE image based on RancherOS v1.4.0, you can run this command:
-
-```
-RANCHEROS_VERSION=v1.4.0 make build-gce
-```
-
-## Custom Build Cases
-
-#### Reduce Memory Requirements
-
-With changes to the kernel and built Docker, RancherOS booting requires more memory. For details, please refer to the [memory requirements]({{}}/os/v1.x/en/#hardware-requirements).
-
-By customizing the ISO, you can reduce the memory usage on boot. The easiest way is to downgrade the built-in Docker version, because Docker takes up a lot of space.
-This can effectively reduce the memory required to decompress the `initrd` on boot. Using docker 17.03 is a good choice:
-
-```
-# run make
-$ USER_DOCKER_VERSION=17.03.2 make release
-```
-
-#### Building with a Different Console
-
-_Available as of v1.5.0_
-
-When building RancherOS, you have the ability to automatically start in a supported console instead of booting into the default console and switching to your desired one.
-
-Here is an example of building RancherOS and having the `alpine` console enabled:
-
-```
-$ OS_CONSOLE=alpine make release
-```
-
-#### Building with Predefined Docker Images
-
-If you want to use a custom ISO file to address an offline scenario, you can use predefined images for `system-docker` and `user-docker`.
-
-RancherOS supports `APPEND_SYSTEM_IMAGES`. It can save images to the `initrd` file, and is loaded with `system-docker` when booting.
-
-You can build the ISO like this:
-
-```
-APPEND_SYSTEM_IMAGES="rancher/os-openvmtools:10.3.10-1" make release
-```
-
-RancherOS also supports `APPEND_USER_IMAGES`. It can save images to the `initrd` file, and is loaded with `user-docker` when booting.
-
-You can build the ISO like this:
-
-```
-APPEND_USER_IMAGES="alpine:3.9 ubuntu:bionic" make release
-```
-
-Please note that these will be packaged into the `initrd`, and the predefined images will affect the resource footprint at startup.
diff --git a/content/os/v1.x/en/installation/running-rancheros/_index.md b/content/os/v1.x/en/installation/running-rancheros/_index.md
deleted file mode 100644
index 17f070f3636..00000000000
--- a/content/os/v1.x/en/installation/running-rancheros/_index.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-title: Running RancherOS
-weight: 100
----
-
-RancherOS runs on virtualization platforms, cloud providers and bare metal servers. We also support running a local VM on your laptop. To start running RancherOS as quickly as possible, follow our [Quick Start Guide]({{}}/os/v1.x/en/quick-start-guide/).
-
-### Platforms
-
-#### Workstation
-
-[Docker Machine]({{}}/os/v1.x/en/installation/running-rancheros/workstation/docker-machine)
-
-[Boot from ISO]({{}}/os/v1.x/en/installation/running-rancheros/workstation/boot-from-iso)
-
-
-#### Cloud
-
-[Amazon EC2]({{}}/os/v1.x/en/installation/running-rancheros/cloud/aws)
-
-[Google Compute Engine]({{}}/os/v1.x/en/installation/running-rancheros/cloud/gce)
-
-[DigitalOcean]({{}}/os/v1.x/en/installation/running-rancheros/cloud/do)
-
-[Azure]({{}}/os/v1.x/en/installation/running-rancheros/cloud/azure)
-
-[OpenStack]({{}}/os/v1.x/en/installation/running-rancheros/cloud/openstack)
-
-[VMware ESXi]({{}}/os/v1.x/en/installation/running-rancheros/cloud/vmware-esxi)
-
-[Aliyun]({{}}/os/v1.x/en/installation/running-rancheros/cloud/aliyun)
-
-#### Bare Metal & Virtual Servers
-
-[PXE]({{}}/os/v1.x/en/installation/running-rancheros/server/pxe)
-
-[Install to Hard Disk]({{}}/os/v1.x/en/installation/running-rancheros/server/install-to-disk)
-
-[Raspberry Pi]({{}}/os/v1.x/en/installation/running-rancheros/server/raspberry-pi)
diff --git a/content/os/v1.x/en/installation/server/install-to-disk/_index.md b/content/os/v1.x/en/installation/server/install-to-disk/_index.md
deleted file mode 100644
index 35f1010a6a6..00000000000
--- a/content/os/v1.x/en/installation/server/install-to-disk/_index.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-title: Installing to Disk
-weight: 111
-aliases:
- - /os/v1.x/en/installation/running-rancheros/server/install-to-disk
----
-
-RancherOS comes with a simple installer that will install RancherOS on a given target disk. To install RancherOS on a new disk, you can use the `ros install` command. Before installing, you'll need to have already [booted RancherOS from ISO]({{< baseurl >}}/os/v1.x/en/installation/workstation//boot-from-iso). Please be sure to pick the `rancheros.iso` from our release [page](https://github.com/rancher/os/releases).
-
-### Using `ros install` to Install RancherOS
-
-The `ros install` command orchestrates the installation from the `rancher/os` container. You will need to have already created a cloud-config file and found the target disk.
-
-#### Cloud-Config
-
-The easiest way to log in is to pass a `cloud-config.yml` file containing your public SSH keys. To learn more about what's supported in our cloud-config, please read our [documentation]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config).
-
-The `ros install` command will process your `cloud-config.yml` file specified with the `-c` flag. This file will also be placed onto the disk and installed to `/var/lib/rancher/conf/`. It will be evaluated on every boot.
-
-Create a cloud-config file with a SSH key, this allows you to SSH into the box as the rancher user. The yml file would look like this:
-
-```yaml
-#cloud-config
-ssh_authorized_keys:
- - ssh-rsa AAA...
-```
-
-
-
-You can generate a new SSH key for `cloud-config.yml` file by following this [article](https://help.github.com/articles/generating-ssh-keys/).
-
-Copy the public SSH key into RancherOS before installing to disk.
-
-Now that our `cloud-config.yml` contains our public SSH key, we can move on to installing RancherOS to disk!
-
-```
-$ sudo ros install -c cloud-config.yml -d /dev/sda
-INFO[0000] No install type specified...defaulting to generic
-Installing from rancher/os:v0.5.0
-Continue [y/N]:
-```
-
-For the `cloud-config.yml` file, you can also specify a remote URL, but you need to make sure you can get it:
-
-```
-$ sudo ros install -c https://link/to/cloud-config.yml
-```
-
-You will be prompted to see if you want to continue. Type **y**.
-
-```
-Unable to find image 'rancher/os:v0.5.0' locally
-v0.5.0: Pulling from rancher/os
-...
-...
-...
-Status: Downloaded newer image for rancher/os:v0.5.0
-+ DEVICE=/dev/sda
-...
-...
-...
-+ umount /mnt/new_img
-Continue with reboot [y/N]:
-```
-
-After installing RancherOS to disk, you will no longer be automatically logged in as the `rancher` user. You'll need to have added in SSH keys within your [cloud-config file]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config).
-
-#### Installing a Different Version
-
-By default, `ros install` uses the same installer image version as the ISO it is run from. The `-i` option specifies the particular image to install from. To keep the ISO as small as possible, the installer image is downloaded from DockerHub and used in System Docker. For example for RancherOS v0.5.0 the default installer image would be `rancher/os:v0.5.0`.
-
-You can use `ros os list` command to find the list of available RancherOS images/versions.
-
-```
-$ sudo ros os list
-rancher/os:v0.4.0 remote
-rancher/os:v0.4.1 remote
-rancher/os:v0.4.2 remote
-rancher/os:v0.4.3 remote
-rancher/os:v0.4.4 remote
-rancher/os:v0.4.5 remote
-rancher/os:v0.5.0 remote
-```
-
-Alternatively, you can set the installer image to any image in System Docker to install RancherOS. This is particularly useful for machines that will not have direct access to the internet.
-
-#### Caching Images
-
-_Available as of v1.5.3_
-
-Some configurations included in `cloud-config` require images to be downloaded from Docker to start. After installation, these images are downloaded automatically by RancherOS when booting. An example of these configurations are:
-
-- rancher.services_include
-- rancher.console
-- rancher.docker
-
-If you want to download and save these images to disk during installation, they will be cached and not need to be downloaded again upon each boot. You can cache these images by adding `-s` when using `ros install`:
-
-```
-$ ros install -d -c -s
-```
-
-### SSH into RancherOS
-
-After installing RancherOS, you can ssh into RancherOS using your private key and the **rancher** user.
-
-```
-$ ssh -i /path/to/private/key rancher@
-```
-
-### Installing with no Internet Access
-
-If you'd like to install RancherOS onto a machine that has no internet access, it is assumed you either have your own private registry or other means of distributing docker images to System Docker of the machine. If you need help with creating a private registry, please refer to the [Docker documentation for private registries](https://docs.docker.com/registry/).
-
-In the installation command (i.e. `sudo ros install`), there is an option to pass in a specific image to install. As long as this image is available in System Docker, then RancherOS will use that image to install RancherOS.
-
-```
-$ sudo ros install -c cloud-config.yml -d /dev/sda -i
-INFO[0000] No install type specified...defaulting to generic
-Installing from
-Continue [y/N]:
-```
diff --git a/content/os/v1.x/en/installation/server/pxe/_index.md b/content/os/v1.x/en/installation/server/pxe/_index.md
deleted file mode 100644
index c866a92c4e5..00000000000
--- a/content/os/v1.x/en/installation/server/pxe/_index.md
+++ /dev/null
@@ -1,75 +0,0 @@
----
-title: iPXE
-weight: 112
-aliases:
- - /os/v1.x/en/installation/running-rancheros/server/pxe
----
-
-```
-#!ipxe
-# Boot a persistent RancherOS to RAM
-
-# Location of Kernel/Initrd images
-set base-url http://releases.rancher.com/os/latest
-
-kernel ${base-url}/vmlinuz rancher.state.dev=LABEL=RANCHER_STATE rancher.state.autoformat=[/dev/sda] rancher.state.wait rancher.cloud_init.datasources=[url:http://example.com/cloud-config]
-initrd ${base-url}/initrd
-boot
-```
-
-If you want to autoformat the disk when booting by iPXE, you should add the `rancher.state.autoformat` part to kernel cmdline. However, this does not install the bootloader to disk, so you cannot upgrade RancherOS.
-
-If you don't add `rancher.state.autoformat`, RancherOS will run completely in memory, you can execute `ros install` to install to disk.
-
-### Hiding sensitive kernel commandline parameters
-
-From RancherOS v0.9.0, secrets can be put on the `kernel` parameters line afer a `--` double dash, and they will be not be shown in any `/proc/cmdline`. These parameters
-will be passed to the RancherOS init process and stored in the `root` accessible `/var/lib/rancher/conf/cloud-init.d/init.yml` file, and are available to the root user from the `ros config` commands.
-
-For example, the `kernel` line above could be written as:
-
-```
-kernel ${base-url}/vmlinuz rancher.state.dev=LABEL=RANCHER_STATE rancher.state.autoformat=[/dev/sda] -- rancher.cloud_init.datasources=[url:http://example.com/cloud-config]
-```
-
-The hidden part of the command line can be accessed with either `sudo ros config get rancher.environment.EXTRA_CMDLINE`, or by using a service file's environment array.
-
-An example service.yml file:
-
-```
-test:
- image: alpine
- command: echo "tell me a secret ${EXTRA_CMDLINE}"
- labels:
- io.rancher.os.scope: system
- environment:
- - EXTRA_CMDLINE
-```
-
-When this service is run, the `EXTRA_CMDLINE` will be set.
-
-
-### cloud-init Datasources
-
-Valid cloud-init datasources for RancherOS.
-
-| type | default |
-|---|---|
-| ec2 | Default metadata address |
-| digitalocean | Default metadata address |
-| packet | Default metadata address |
-| cloudstack | Default metadata address |
-| aliyun | Default metadata address |
-| gce | Default metadata address |
-| file | Path |
-| cmdline | Kernel command line: `cloud-config-url=http://link/user_data` |
-| configdrive | /media/config-2 |
-| url | URL address |
-| vmware| Set `guestinfo` cloud-init or interface data as per [VMware ESXi]({{< baseurl >}}/os/v1.x/en/installation/cloud/vmware-esxi) |
-| * | This will add ["configdrive", "vmware", "ec2", "digitalocean", "packet", "gce"] into the list of datasources to try |
-
-The vmware datasource was added as of v1.1.
-
-### Cloud-Config
-
-When booting via iPXE, RancherOS can be configured using a [cloud-config file]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config).
diff --git a/content/os/v1.x/en/installation/server/raspberry-pi/_index.md b/content/os/v1.x/en/installation/server/raspberry-pi/_index.md
deleted file mode 100644
index a540afe8f89..00000000000
--- a/content/os/v1.x/en/installation/server/raspberry-pi/_index.md
+++ /dev/null
@@ -1,69 +0,0 @@
----
-title: Raspberry Pi
-weight: 113
-aliases:
- - /os/v1.x/en/installation/running-rancheros/server/raspberry-pi
----
-
-As of v0.5.0, RancherOS releases include a Raspberry Pi image that can be found on our [releases page](https://github.com/rancher/os/releases). The official Raspberry Pi documentation contains instructions on how to [install operating system images](https://www.raspberrypi.org/documentation/installation/installing-images/).
-
-When installing, there is no ability to pass in a [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config). You will need to boot up, change the configuration and then reboot to apply those changes.
-
-Currently, only Raspberry Pi 3 is tested and known to work.
-
-> **Note:** It is not necessary to run `ros install` after installing RancherOS to an SD card.
-
-### Using the entire SD Card
-
-RancherOS does not currently expand the root partition to fill the remainder of the SD card automatically. Instead, the following workaround can be used to store Docker containers on a larger partition that fills the remainder.
-
-1. `sudo fdisk /dev/mmcblk0`
-2. Create a `n`ew partition
-3. Press `[Enter]` four (4x) times to accept the defaults
-4. Then `w`rite the table and exit
-5. `sudo reboot` to reboot and reload the new partition table
-6. `sudo mkdir /mnt/docker` to create the directory to be used as the new Docker root
-7. `sudo ros config set rancher.docker.extra_args [-g,/mnt/docker]` to configure Docker to use the new root
-8. `sudo mkfs.ext4 /dev/mmcblk0p3` to format the disk
-9. `sudo ros config set mounts "[['/dev/mmcblk0p3','/mnt/docker','ext4','']]"` to preserve this mount after reboots
-10. `sudo mount /dev/mmcblk0p3 /mnt/docker` to mount the Docker root
-11. `sudo system-docker restart docker` to restart Docker using the new root
-If this is not a new installation, you'll have to copy over your existing Docker root (`/var/lib/docker`) to the new root (`/mnt/docker`).
-1. `sudo cp -R /var/lib/docker/* /mnt/docker` to recursively copy all files
-2. `sudo system-docker restart docker` to restart Docker using the new root
-
-### Using Wi-Fi
-
-_Available as of v1.5.2_
-
-Here are steps about how to enable Wi-Fi on a Raspberry Pi:
-
-```
-modprobe brcmfmac
-wpa_passphrase > /etc/wpa_supplicant.conf
-wpa_supplicant -iwlan0 -B -c /etc/wpa_supplicant.conf
-# wait a few seconds, then
-dhcpcd -MA4 wlan0
-```
-
-You can also use cloud-config to enable Wi-Fi:
-
-```
-#cloud-config
-rancher:
- network:
- interfaces:
- wlan0:
- wifi_network: network1
- wifi_networks:
- network1:
- ssid: "Your wifi ssid"
- psk: "Your wifi password"
- scan_ssid: 1
-```
-
-Raspberry Pi will automatically drop Wi-Fi connection after a while, this is due to power management. To fix this problem, you can try this:
-
-```
-iwconfig wlan0 power off
-```
diff --git a/content/os/v1.x/en/installation/workstation/boot-from-iso/_index.md b/content/os/v1.x/en/installation/workstation/boot-from-iso/_index.md
deleted file mode 100644
index 28f3a8a7fc2..00000000000
--- a/content/os/v1.x/en/installation/workstation/boot-from-iso/_index.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-title: Booting from ISO
-weight: 102
-aliases:
- - /os/v1.x/en/installation/running-rancheros/workstation/boot-from-iso
----
-
-The RancherOS ISO file can be used to create a fresh RancherOS install on KVM, VMware, VirtualBox, Hyper-V, Proxmox VE, or bare metal servers. You can download the `rancheros.iso` file from our [releases page](https://github.com/rancher/os/releases/).
-
-Some hypervisors may require a built-in agent to communicate with the guest, for this, RancherOS precompiles some ISO files.
-
-Hypervisor | ISO
--------- | ----------------
-VMware | [rancheros-vmware.iso](https://releases.rancher.com/os/latest/vmware/rancheros.iso)
-Hyper-V | [rancheros-hyperv.iso](https://releases.rancher.com/os/latest/hyperv/rancheros.iso)
-Proxmox VE | [rancheros-proxmoxve.iso](https://releases.rancher.com/os/latest/proxmoxve/rancheros.iso)
-
-You must boot with enough memory which you can refer to [here]({{}}/os/v1.x/en/overview/#hardware-requirements). If you boot with the ISO, you will automatically be logged in as the `rancher` user. Only the ISO is set to use autologin by default. If you run from a cloud or install to disk, SSH keys or a password of your choice is expected to be used.
-
-### Install to Disk
-
-After you boot RancherOS from ISO, you can follow the instructions [here]({{< baseurl >}}/os/v1.x/en/installation/server/install-to-disk/) to install RancherOS to a hard disk.
diff --git a/content/os/v1.x/en/installation/workstation/docker-machine/_index.md b/content/os/v1.x/en/installation/workstation/docker-machine/_index.md
deleted file mode 100644
index 1595b668383..00000000000
--- a/content/os/v1.x/en/installation/workstation/docker-machine/_index.md
+++ /dev/null
@@ -1,147 +0,0 @@
----
-title: Using Docker Machine
-weight: 101
-aliases:
- - /os/v1.x/en/installation/running-rancheros/workstation/docker-machine
----
-
-Before we get started, you'll need to make sure that you have docker machine installed. Download it directly from the docker machine [releases](https://github.com/docker/machine/releases).
-You also need to know the [memory requirements]({{}}/os/v1.x/en/#hardware-requirements).
-
-> **Note:** If you create a RancherOS instance using Docker Machine, you will not be able to upgrade your version of RancherOS.
-
-### Downloading RancherOS
-
-Get the latest ISO artifact from the RancherOS [releases](https://github.com/rancher/os).
-
-Machine Driver | Recommended RancherOS version | ISO File
--------------- | ----------------------------- | -------------------------------------------------------------
-VirtualBox | >=v1.0.0 | [rancheros.iso](https://releases.rancher.com/os/latest/rancheros.iso)
-VMWare VSphere | >=v1.4.0 | [rancheros-autoformat.iso](https://releases.rancher.com/os/latest/vmware/rancheros-autoformat.iso)
-VMWare Fusion | >=v1.4.0 | [rancheros-autoformat.iso](https://releases.rancher.com/os/latest/vmware/rancheros-autoformat.iso)
-Hyper-V | >=v1.5.0 | [rancheros.iso](https://releases.rancher.com/os/latest/hyperv/rancheros.iso)
-Proxmox VE | >=v1.5.1 | [rancheros-autoformat.iso](https://releases.rancher.com/os/latest/proxmoxve/rancheros-autoformat.iso)
-
-### Using Docker Machine
-
-You can use Docker Machine to launch VMs for various providers. Currently VirtualBox and VMWare(VMWare VSphere, VMWare Fusion) and AWS are supported.
-
-#### Using Docker Machine with VirtualBox
-
-Before moving forward, you'll need to have VirtualBox installed. Download it directly from [VirtualBox](https://www.virtualbox.org/wiki/Downloads). Once you have VirtualBox and Docker Machine installed, it's just one command to get RancherOS running.
-
-Here is an example about using the RancherOS latest link:
-
-```
-$ docker-machine create -d virtualbox \
- --virtualbox-boot2docker-url https://releases.rancher.com/os/latest/rancheros.iso \
- --virtualbox-memory \
-
-```
-
-> **Note:** Instead of downloading the ISO, you can directly use the URL for the `rancheros.iso`.
-
-That's it! You should now have a RancherOS host running on VirtualBox. You can verify that you have a VirtualBox VM running on your host.
-
-> **Note:** After the machine is created, Docker Machine may display some errors regarding creation, but if the VirtualBox VM is running, you should be able to [log in](#logging-into-rancheros).
-
-```
-$ VBoxManage list runningvms | grep
-```
-
-This command will print out the newly created machine. If not, something went wrong with the provisioning step.
-
-#### Using Docker Machine with VMWare VSphere
-
-_Available as of v1.4_
-
-Before moving forward, you’ll need to have VMWare VSphere installed. Once you have VMWare VSphere and Docker Machine installed, it’s just one command to get RancherOS running.
-
-Here is an example about using the RancherOS latest link:
-
-```
-$ docker-machine create -d vmwarevsphere \
- --vmwarevsphere-username \
- --vmwarevsphere-password \
- --vmwarevsphere-memory-size \
- --vmwarevsphere-boot2docker-url https://releases.rancher.com/os/latest/vmware/rancheros-autoformat.iso \
- --vmwarevsphere-vcenter \
- --vmwarevsphere-vcenter-port \
- --vmwarevsphere-disk-size \
-
-```
-
-That’s it! You should now have a RancherOS host running on VMWare VSphere. You can verify that you have a VMWare(ESXi) VM running on your host.
-
-#### Using Docker Machine with VMWare Fusion
-
-_Available as of v1.4_
-
-Before moving forward, you’ll need to have VMWare Fusion installed. Once you have VMWare Fusion and Docker Machine installed, it’s just one command to get RancherOS running.
-
-Here is an example about using the RancherOS latest link:
-
-```
-$ docker-machine create -d vmwarefusion \
- --vmwarefusion-no-share \
- --vmwarefusion-memory-size \
- --vmwarefusion-boot2docker-url https://releases.rancher.com/os/latest/vmware/rancheros-autoformat.iso \
-
-```
-
-That’s it! You should now have a RancherOS host running on VMWare Fusion. You can verify that you have a VMWare Fusion VM running on your host.
-
-#### Using Docker Machine with Hyper-V
-
-_Available as of v1.5_
-
-You should refer to the documentation of [Hyper-V driver](https://docs.docker.com/machine/drivers/hyper-v/), here is an example of using the latest RancherOS URL. We recommend using a specific version so you know which version of RancherOS that you are installing.
-
-```
-$ docker-machine.exe create -d hyperv \
- --hyperv-memory 2048 \
- --hyperv-boot2docker-url https://releases.rancher.com/os/latest/hyperv/rancheros.iso
- --hyperv-virtual-switch \
-
-```
-#### Using Docker Machine with Proxmox VE
-
-_Available as of v1.5.1_
-
-There is currently no official Proxmox VE driver, but there is a [choice](https://github.com/lnxbil/docker-machine-driver-proxmox-ve) that you can refer to.
-
-### Logging into RancherOS
-
-Logging into RancherOS follows the standard Docker Machine commands. To login into your newly provisioned RancherOS VM.
-
-```
-$ docker-machine ssh
-```
-
-You'll be logged into RancherOS and can start exploring the OS, This will log you into the RancherOS VM. You'll then be able to explore the OS by [adding system services]({{< baseurl >}}/os/v1.x/en/system-services/), [customizing the configuration]({{< baseurl >}}/os/v1.x/en/configuration/), and launching containers.
-
-If you want to exit out of RancherOS, you can exit by pressing `Ctrl+D`.
-
-### Docker Machine Benefits
-
-With Docker Machine, you can point the docker client on your host to the docker daemon running inside of the VM. This allows you to run your docker commands as if you had installed docker on your host.
-
-To point your docker client to the docker daemon inside the VM, use the following command:
-
-```
-$ eval $(docker-machine env )
-```
-
-After setting this up, you can run any docker command in your host, and it will execute the command in your RancherOS VM.
-
-```
-$ docker run -p 80:80 -p 443:443 -d nginx
-```
-
-In your VM, a nginx container will start on your VM. To access the container, you will need the IP address of the VM.
-
-```
-$ docker-machine ip
-```
-
-Once you obtain the IP address, paste it in a browser and a _Welcome Page_ for nginx will be displayed.
diff --git a/content/os/v1.x/en/networking/dns/_index.md b/content/os/v1.x/en/networking/dns/_index.md
deleted file mode 100644
index 725a4f109fc..00000000000
--- a/content/os/v1.x/en/networking/dns/_index.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: Configuring DNS
-weight: 171
-aliases:
- - /os/v1.x/en/installation/networking/dns
----
-
-If you wanted to configure the DNS through the cloud config file, you'll need to place DNS configurations within the `rancher` key.
-
-```yaml
-#cloud-config
-
-#Remember, any changes for rancher will be within the rancher key
-rancher:
- network:
- dns:
- search:
- - mydomain.com
- - example.com
-```
-
-Using `ros config`, you can set the `nameservers`, and `search`, which directly map to the fields of the same name in `/etc/resolv.conf`.
-
-```
-$ sudo ros config set rancher.network.dns.search "['mydomain.com','example.com']"
-$ sudo ros config get rancher.network.dns.search
-- mydomain.com
-- example.com
-```
diff --git a/content/os/v1.x/en/networking/interfaces/_index.md b/content/os/v1.x/en/networking/interfaces/_index.md
deleted file mode 100644
index cdbc82eaa70..00000000000
--- a/content/os/v1.x/en/networking/interfaces/_index.md
+++ /dev/null
@@ -1,271 +0,0 @@
----
-title: Configuring Network Interfaces
-weight: 170
-aliases:
- - /os/v1.x/en/installation/networking/interfaces
----
-
-Using `ros config`, you can configure specific interfaces. Wildcard globbing is supported so `eth*` will match `eth1` and `eth2`. The available options you can configure are `address`, `gateway`, `mtu`, and `dhcp`.
-
-```
-$ sudo ros config set rancher.network.interfaces.eth1.address 172.68.1.100/24
-$ sudo ros config set rancher.network.interfaces.eth1.gateway 172.68.1.1
-$ sudo ros config set rancher.network.interfaces.eth1.mtu 1500
-$ sudo ros config set rancher.network.interfaces.eth1.dhcp false
-```
-
-If you wanted to configure the interfaces through the cloud config file, you'll need to place interface configurations within the `rancher` key.
-
-```yaml
-#cloud-config
-rancher:
- network:
- interfaces:
- eth1:
- address: 172.68.1.100/24
- gateway: 172.68.1.1
- mtu: 1500
- dhcp: false
-```
-
-> **Note:** The `address` item should be the CIDR format.
-
-### Multiple NICs
-
-If you want to configure one of multiple network interfaces, you can specify the MAC address of the interface you want to configure.
-
-Using `ros config`, you can specify the MAC address of the NIC you want to configure as follows:
-
-```
-$ sudo ros config set rancher.network.interfaces.�mac=ea:34:71:66:90:12:01�.dhcp true
-```
-
-Alternatively, you can place the MAC address selection in your cloud config file as follows:
-
-```yaml
-#cloud-config
-rancher:
- network:
- interfaces:
- "mac=ea:34:71:66:90:12:01":
- dhcp: true
-```
-
-### NIC bonding
-
-You can aggregate several network links into one virtual link for redundancy and increased throughput. For example:
-
-```yaml
-#cloud-config
-rancher:
- network:
- interfaces:
- bond0:
- addresses:
- - 192.168.101.33/31
- - 10.88.23.129/31
- gateway: 192.168.101.32
- bond_opts:
- downdelay: "200"
- lacp_rate: "1"
- miimon: "100"
- mode: "4"
- updelay: "200"
- xmit_hash_policy: layer3+4
- post_up:
- - ip route add 10.0.0.0/8 via 10.88.23.128
- mac=0c:c4:d7:b2:14:d2:
- bond: bond0
- mac=0c:c4:d7:b2:14:d3:
- bond: bond0
-```
-
-In this example two physical NICs (with MACs `0c:c4:d7:b2:14:d2` and `0c:c4:d7:b2:14:d3`) are aggregated into a virtual one `bond0`.
-
-During the bootup process, RancherOS runs cloud-init. It automatically detects the data sources of cloud-init, but sometimes a data source requires a network connection. By default, in cloud-init, we open `rancher.network.interfaces.eth*.dhcp=true`, which may affect the bonding NIC. If you do not require the network connection for your data-source, use `rancher.network.interfaces.eth*.dhcp=false` in the kernel cmdline to disable DHCP for all NICs.
-
-### VLANS
-
-In this example, you can create an interface `eth0.100` which is tied to VLAN 100 and an interface `foobar` that will be tied to VLAN 200.
-
-```
-#cloud-config
-rancher:
- network:
- interfaces:
- eth0:
- vlans: 100,200:foobar
-```
-
-### Bridging
-
-In this example, you can create a bridge interface.
-
-```
-#cloud-config
-rancher:
- network:
- interfaces:
- br0:
- bridge: true
- dhcp: true
- eth0:
- bridge: br0
-```
-
-### Run custom network configuration commands
-
-_Available as of v1.1_
-
-You can configure `pre` and `post` network configuration commands to run in the `network` service container by adding `pre_cmds` and `post_cmds` array keys to `rancher.network`, or `pre_up` and`post_up` keys for specific `rancher.network.interfaces`.
-
-For example:
-
-```
-#cloud-config
-write_files:
- - container: network
- path: /var/lib/iptables/rules.sh
- permissions: "0755"
- owner: root:root
- content: |
- #!/bin/bash
- set -ex
- echo $@ >> /var/log/net.log
- # the last line of the file needs to be a blank line or a comment
-rancher:
- network:
- dns:
- nameservers:
- - 8.8.4.4
- - 4.2.2.3
- pre_cmds:
- - /var/lib/iptables/rules.sh pre_cmds
- post_cmds:
- - /var/lib/iptables/rules.sh post_cmds
- interfaces:
- lo:
- pre_up:
- - /var/lib/iptables/rules.sh pre_up lo
- post_up:
- - /var/lib/iptables/rules.sh post_up lo
- eth0:
- pre_up:
- - /var/lib/iptables/rules.sh pre_up eth0
- post_up:
- - /var/lib/iptables/rules.sh post_up eth0
- eth1:
- dhcp: true
- pre_up:
- - /var/lib/iptables/rules.sh pre_up eth1
- post_up:
- - /var/lib/iptables/rules.sh post_up eth1
- eth2:
- address: 192.168.3.13/16
- mtu: 1450
- pre_up:
- - /var/lib/iptables/rules.sh pre_up eth2
- post_up:
- - /var/lib/iptables/rules.sh post_up eth2
-```
-
-### WiFi
-
-_Available as of v1.5_
-
-In order to enable WiFi access, update the `cloud-config` with the WiFi network information. You can use `DHCP` or `STATIC` mode.
-
-#### Example of a wireless adapter using DHCP
-
-```yaml
-#cloud-config
-rancher:
- network:
- interfaces:
- wlan0:
- wifi_network: network1
- wifi_networks:
- network1:
- ssid: "Your wifi ssid"
- psk: "Your wifi password"
- scan_ssid: 1
-```
-
-#### Example of a wireless adapter using STATIC
-
-
-```yaml
-rancher:
- network:
- dns:
- nameservers:
- - 8.8.8.8
- - 8.8.4.4
- interfaces:
- wlan0:
- wifi_network: network1
- wifi_networks:
- network1:
- ssid: "Your wifi ssid"
- psk: "Your wifi password"
- scan_ssid: 1
- address: 192.168.1.78/24
- gateway: 192.168.1.1
-```
-
-#### Example using two wireless adapters with DHCP
-
-```yaml
-rancher:
- network:
- interfaces:
- wlan0:
- wifi_network: network1
- wlan1:
- wifi_network: network2
- wifi_networks:
- network1:
- ssid: "Your wifi ssid"
- psk: "Your wifi password"
- scan_ssid: 1
- network2:
- ssid: "Your wifi ssid"
- psk: "Your wifi password"
- scan_ssid: 1
-```
-
-When adding in WiFi access, you do not need a system reboot, you only need to restart the `network` service in System Docker.
-
-```
-$ sudo system-docker restart network
-```
-
-> **Note:** For Intel wireless adapters, there are some built-in firmware and modules, which prevents requiring to install any new modules or firmware. For other adapters, you may need to install additional os kernel-extras.
-
-### 4G-LTE
-
-_Available as of v1.5_
-
-In order to support 4G-LTE, 4G-LTE module will need to be connected to the motherboard and to get a good signal, an external antenna will need to be added. You can assemble such a device, which supports USB interface and SIM cards slot:
-
-
-
-In order to use RancherOS, you will need to use the ISO built for 4G-LTE support. This ISO has a built-in `modem-manager` service and is available with each release.
-
-After booting the ISO, there will be a 4G NIC, such as `wwan0`. Use the following `cloud-config` to set the APN parameter.
-
-```yaml
-rancher:
- network:
- modem_networks:
- wwan0:
- apn: xxx
-```
-
-After any configuration changes, restart the `modem-manager` service to apply these changes.
-
-```
-$ sudo system-docker restart modem-manager
-```
-
-> **Note:** Currently, RancherOS has some built-in rules in `udev` rules to allow RancherOS to recognize specific 4G devices, but there are additional vendors that may be missing. If you need to add these in, please file an issue.
diff --git a/content/os/v1.x/en/networking/proxy-settings/_index.md b/content/os/v1.x/en/networking/proxy-settings/_index.md
deleted file mode 100644
index 09698194c9c..00000000000
--- a/content/os/v1.x/en/networking/proxy-settings/_index.md
+++ /dev/null
@@ -1,35 +0,0 @@
----
-title: Configuring Proxy Settings
-weight: 172
-aliases:
- - /os/v1.x/en/installation/networking/proxy-settings
----
-
-HTTP proxy settings can be set directly under the `network` key. This will automatically configure proxy settings for both Docker and System Docker.
-
-```yaml
-#cloud-config
-rancher:
- network:
- http_proxy: https://myproxy.example.com
- https_proxy: https://myproxy.example.com
- no_proxy: localhost,127.0.0.1
-```
-
-
-
-> **Note:** System Docker proxy settings will not be applied until after a reboot.
-
-To add the `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` environment variables to a system service, specify each under the `environment` key for the service.
-
-```yaml
-#cloud-config
-rancher:
- services:
- myservice:
- ...
- environment:
- - HTTP_PROXY
- - HTTPS_PROXY
- - NO_PROXY
-```
diff --git a/content/os/v1.x/en/overview/_index.md b/content/os/v1.x/en/overview/_index.md
deleted file mode 100644
index a2936d617c0..00000000000
--- a/content/os/v1.x/en/overview/_index.md
+++ /dev/null
@@ -1,49 +0,0 @@
----
-title: Overview of RancherOS
-shortTitle: RancherOS
-description: RancherOS is a simplified Linux distribution built from containers, for containers. These documents describe how to install and use RancherOS.
-weight: 1
----
-
-RancherOS is the smallest, easiest way to run Docker in production. Every process in RancherOS is a container managed by Docker. This includes system services such as `udev` and `syslog`. Because it only includes the services necessary to run Docker, RancherOS is significantly smaller than most traditional operating systems. By removing unnecessary libraries and services, requirements for security patches and other maintenance are also reduced. This is possible because, with Docker, users typically package all necessary libraries into their containers.
-
-Another way in which RancherOS is designed specifically for running Docker is that it always runs the latest version of Docker. This allows users to take advantage of the latest Docker capabilities and bug fixes.
-
-Like other minimalist Linux distributions, RancherOS boots incredibly quickly. Starting Docker containers is nearly instant, similar to starting any other process. This speed is ideal for organizations adopting microservices and autoscaling.
-
-Docker is an open-source platform designed for developers, system admins, and DevOps. It is used to build, ship, and run containers, using a simple and powerful command line interface (CLI). To get started with Docker, please visit the [Docker user guide](https://docs.docker.com/config/daemon/).
-
-### Hardware Requirements
-
-* Memory Requirements
-
-Platform | RAM requirement(>=v1.5.x) | RAM requirement(v1.4.x)
--------- | ------------------------ | ---------------------------
-Baremetal | 1GB | 1280MB
-VirtualBox | 1GB | 1280MB
-VMWare | 1GB | 1280MB (rancheros.iso) 2048MB (rancheros-vmware.iso)
-GCE | 1GB | 1280MB
-AWS | 1GB | 1.7GB
-
-You can adjust memory requirements by custom building RancherOS, please refer to [reduce-memory-requirements]({{}}/os/v1.x/en/installation/custom-builds/custom-rancheros-iso/#reduce-memory-requirements)
-
-### How RancherOS Works
-
-Everything in RancherOS is a Docker container. We accomplish this by launching two instances of Docker. One is what we call **System Docker** and is the first process on the system. All other system services, like `ntpd`, `syslog`, and `console`, are running in Docker containers. System Docker replaces traditional init systems like `systemd` and is used to launch [additional system services]({{< baseurl >}}/os/v1.x/en/system-services/).
-
-System Docker runs a special container called **Docker**, which is another Docker daemon responsible for managing all of the user’s containers. Any containers that you launch as a user from the console will run inside this Docker. This creates isolation from the System Docker containers and ensures that normal user commands don’t impact system services.
-
- We created this separation not only for the security benefits, but also to make sure that commands like `docker rm -f $(docker ps -qa)` don't delete the entire OS.
-
-{{< img "/img/os/rancheroshowitworks.png" "How it works">}}
-
-### Running RancherOS
-
-To get started with RancherOS, head over to our [Quick Start Guide]({{}}/os/v1.x/en/quick-start-guide/).
-
-### Latest Release
-
-Please check our repository for the latest release in our [README](https://github.com/rancher/os/blob/master/README.md).
-
-
-
diff --git a/content/os/v1.x/en/quick-start-guide/_index.md b/content/os/v1.x/en/quick-start-guide/_index.md
deleted file mode 100644
index cbd93c68ef4..00000000000
--- a/content/os/v1.x/en/quick-start-guide/_index.md
+++ /dev/null
@@ -1,131 +0,0 @@
----
-title: Quick Start
-weight: 1
----
-
-If you have a specific RanchersOS machine requirements, please check out our [guides on running RancherOS]({{< baseurl >}}/os/v1.x/en/installation/). With the rest of this guide, we'll start up a RancherOS using [Docker machine]({{< baseurl >}}/os/v1.x/en/installation/workstation//docker-machine/) and show you some of what RancherOS can do.
-
-### Launching RancherOS using Docker Machine
-
-Before moving forward, you'll need to have [Docker Machine](https://docs.docker.com/machine/) and [VirtualBox](https://www.virtualbox.org/wiki/Downloads) installed. Once you have VirtualBox and Docker Machine installed, it's just one command to get RancherOS running.
-
-```
-$ docker-machine create -d virtualbox \
- --virtualbox-boot2docker-url https://releases.rancher.com/os/latest/rancheros.iso \
- --virtualbox-memory 2048 \
-
-```
-
-That's it! You're up and running a RancherOS instance.
-
-To log into the instance, just use the `docker-machine` command.
-
-```
-$ docker-machine ssh
-```
-
-### A First Look At RancherOS
-
-There are two Docker daemons running in RancherOS. The first is called **System Docker**, which is where RancherOS runs system services like ntpd and syslog. You can use the `system-docker` command to control the **System Docker** daemon.
-
-The other Docker daemon running on the system is **Docker**, which can be accessed by using the normal `docker` command.
-
-When you first launch RancherOS, there are no containers running in the Docker daemon. However, if you run the same command against the System Docker, you’ll see a number of system services that are shipped with RancherOS.
-
-> **Note:** `system-docker` can only be used by root, so it is necessary to use the `sudo` command whenever you want to interact with System Docker.
-
-```
-$ sudo system-docker ps
-CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-6f56057cf5ba rancher/os-base:v0.5.0 "/usr/sbin/entry.sh /" 16 seconds ago Up 15 seconds docker
-bd5376830237 rancher/os-console:v0.5.0 "/usr/sbin/entry.sh /" 16 seconds ago Up 15 seconds console
-ede8ce39fff5 rancher/os-base:v0.5.0 "/usr/sbin/entry.sh n" 16 seconds ago Up 15 seconds network
-9e5d18bca391 rancher/os-base:v0.5.0 "/usr/sbin/entry.sh n" 17 seconds ago Up 16 seconds ntp
-393b9fb7e30a rancher/os-udev:v0.5.0 "/usr/sbin/entry.sh /" 18 seconds ago Up 16 seconds udev
-dc2cafca3c69 rancher/os-syslog:v0.5.0 "/usr/sbin/entry.sh /" 18 seconds ago Up 17 seconds syslog
-439d5535fbfa rancher/os-base:v0.5.0 "/usr/sbin/entry.sh /" 18 seconds ago Up 17 seconds acpid
-```
-
-Some containers are run at boot time, and others, such as the `console`, `docker`, etc. containers are always running.
-
-## Using RancherOS
-
-### Deploying a Docker Container
-
-Let's try to deploy a normal Docker container on the Docker daemon. The RancherOS Docker daemon is identical to any other Docker environment, so all normal Docker commands work.
-
-```
-$ docker run -d nginx
-```
-
-You can see that the nginx container is up and running:
-
-```
-$ docker ps
-CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-e99c2c4b8b30 nginx "nginx -g 'daemon off" 12 seconds ago Up 11 seconds 80/tcp, 443/tcp drunk_ptolemy
-```
-
-### Deploying A System Service Container
-
-The following is a simple Docker container to set up Linux-dash, which is a minimal low-overhead web dashboard for monitoring Linux servers. The Dockerfile will be like this:
-
-```
-FROM hwestphal/nodebox
-MAINTAINER hussein.galal.ahmed.11@gmail.com
-
-RUN opkg-install unzip
-RUN curl -k -L -o master.zip https://github.com/afaqurk/linux-dash/archive/master.zip
-RUN unzip master.zip
-WORKDIR linux-dash-master
-RUN npm install
-
-ENTRYPOINT ["node","server"]
-```
-
-Using the `hwestphal/nodebox` image, which uses a Busybox image and installs `node.js` and `npm`. We downloaded the source code of Linux-dash, and then ran the server. Linux-dash will run on port 80 by default.
-
-To run this container in System Docker use the following command:
-
-```
-$ sudo system-docker run -d --net=host --name busydash husseingalal/busydash
-```
-In the command, we used `--net=host` to tell System Docker not to containerize the container's networking, and use the host’s networking instead. After running the container, you can see the monitoring server by accessing `http://`.
-
-{{< img "/img/os/Rancher_busydash.png" "System Docker Container">}}
-
-To make the container survive during the reboots, you can create the `/opt/rancher/bin/start.sh` script, and add the Docker start line to launch the Docker at each startup.
-
-```
-$ sudo mkdir -p /opt/rancher/bin
-$ echo "sudo system-docker start busydash" | sudo tee -a /opt/rancher/bin/start.sh
-$ sudo chmod 755 /opt/rancher/bin/start.sh
-```
-
-### Using ROS
-
-Another useful command that can be used with RancherOS is `ros` which can be used to control and configure the system.
-
-```
-$ sudo ros -v
-ros version 0.0.1
-```
-
-RancherOS state is controlled by a cloud config file. `ros` is used to edit the configuration of the system, to see for example the dns configuration of the system:
-
-```
-$ sudo ros config get rancher.network.dns.nameservers
-- 8.8.8.8
-- 8.8.4.4
-```
-
-
-When using the native Busybox console, any changes to the console will be lost after reboots, only changes to `/home` or `/opt` will be persistent. You can use the `ros console switch` command to switch to a [persistent console]({{}}/os/v1.x/en/installation/custom-builds/custom-console/#console-persistence) and replace the native Busybox console. For example, to switch to the Ubuntu console:
-
-```
-$ sudo ros console switch ubuntu
-```
-
-### Conclusion
-
-RancherOS is a simple Linux distribution ideal for running Docker. By embracing containerization of system services and leveraging Docker for management, RancherOS hopes to provide a very reliable, and easy to manage OS for running containers.
diff --git a/content/os/v1.x/en/storage/additional-mounts/_index.md b/content/os/v1.x/en/storage/additional-mounts/_index.md
deleted file mode 100644
index cdbd75fa638..00000000000
--- a/content/os/v1.x/en/storage/additional-mounts/_index.md
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: Additional Mounts
-weight: 161
-aliases:
- - /os/v1.x/en/installation/storage/additional-mounts
----
-
-Additional mounts can be specified as part of your [cloud-config]({{< baseurl >}}/os/v1.x/en/configuration/#cloud-config). These mounts are applied within the console container. Here's a simple example that mounts `/dev/vdb` to `/mnt/s`.
-
-```yaml
-#cloud-config
-mounts:
-- ["/dev/vdb", "/mnt/s", "ext4", ""]
-```
-
-**Important**: Be aware, the 4th parameter is mandatory and cannot be omitted (server crashes). It also yet cannot be `defaults`
-
-As you will use the `ros` cli most probably, it would look like this:
-
-```
-ros config set mounts '[["/dev/vdb","/mnt/s","ext4",""]]'
-```
-
-**hint**: You need to pre-format the disks, rancher-os will not do this for you. The mount will not work (silently) until you formatted the disk, e.g. using:
-
-```
-mkfs.ext4 /dev/vdb
-```
-
-
-
-The four arguments for each mount are the same as those given for [cloud-init](https://cloudinit.readthedocs.io/en/latest/topics/examples.html#adjust-mount-points-mounted). Only the first four arguments are currently supported. The `mount_default_fields` key is not yet implemented.
-
-RancherOS uses the mount syscall rather than the `mount` command behind the scenes. This means that `auto` cannot be used as the filesystem type (third argument) and `defaults` cannot be used for the options (forth argument).
-
-With rancher 1.1.1+ you do no longer need to create the mount-point folder, it will be created automatically.
-
-### Shared Mounts
-
-By default, `/media` and `/mnt` are mounted as shared in the console container. This means that mounts within these directories will propagate to the host as well as other system services that mount these folders as shared.
-
-See [here](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) for a more detailed overview of shared mounts and their properties.
diff --git a/content/os/v1.x/en/storage/state-partition/_index.md b/content/os/v1.x/en/storage/state-partition/_index.md
deleted file mode 100644
index f5ae065cd12..00000000000
--- a/content/os/v1.x/en/storage/state-partition/_index.md
+++ /dev/null
@@ -1,37 +0,0 @@
----
-title: Persistent State Partition
-weight: 160
-aliases:
- - /os/v1.x/en/installation/storage/state-partition
----
-
-RancherOS will store its state in a single partition specified by the `dev` field. The field can be a device such as `/dev/sda1` or a logical name such `LABEL=state` or `UUID=123124`. The default value is `LABEL=RANCHER_STATE`. The file system type of that partition can be set to `auto` or a specific file system type such as `ext4`.
-
-```yaml
-#cloud-config
-rancher:
- state:
- fstype: auto
- dev: LABEL=RANCHER_STATE
-```
-
-For other labels such as `RANCHER_BOOT` and `RANCHER_OEM` and `RANCHER_SWAP`, please refer to [Custom partition layout]({{}}/os/v1.x/en/about/custom-partition-layout/).
-
-### Autoformat
-
-You can specify a list of devices to check to format on boot. If the state partition is already found, RancherOS will not try to auto format a partition. By default, auto-formatting is off.
-
-RancherOS will autoformat the partition to `ext4` (_not_ what is set in `fstype`) if the device specified in `autoformat`:
-
-* Contains a boot2docker magic string
-* Starts with 1 megabyte of zeros and `rancher.state.formatzero` is true
-
-
-```yaml
-#cloud-config
-rancher:
- state:
- autoformat:
- - /dev/sda
- - /dev/vda
-```
diff --git a/content/os/v1.x/en/storage/using-zfs/_index.md b/content/os/v1.x/en/storage/using-zfs/_index.md
deleted file mode 100644
index 1247accff85..00000000000
--- a/content/os/v1.x/en/storage/using-zfs/_index.md
+++ /dev/null
@@ -1,123 +0,0 @@
----
-title: Using ZFS
-weight: 162
-aliases:
- - /os/v1.x/en/installation/storage/using-zfs
----
-
-#### Installing the ZFS service
-
-The `zfs` service will install the kernel-headers for your kernel (if you build your own kernel, you'll need to replicate this service), and then download the [ZFS on Linux](https://zfsonlinux.org/) source, and build and install it. Then it will build a `zfs-tools` image that will be used to give you access to the zfs tools.
-
-The only restriction is that you must mount your zpool into `/mnt`, as this is the only shared mount directory that will be accessible throughout the system-docker managed containers (including the console).
-
-
-```
-$ sudo ros service enable zfs
-$ sudo ros service up zfs
-# you can follow the progress of the build by running the following command in another ssh session:
-$ sudo ros service logs --follow zfs
-# wait until the build is finished.
-$ lsmod | grep zfs
-```
-
-> *Note:* if you switch consoles, you may need to re-run `sudo ros service up zfs`.
-
-#### Creating ZFS pools
-
-After it's installed, it should be ready to use. Make a zpool named `zpool1` using a device that you haven't yet partitioned (you can use `sudo fdisk -l` to list all the disks and their partitions).
-
-> *Note:* You need to mount the zpool in `/mnt` to make it available to your host and in containers.
-
-
-```
-$ sudo zpool list
-$ sudo zpool create zpool1 -m /mnt/zpool1 /dev/