Running When Offline
Rancher Desktop can be run when offline, aka in air-gapped mode. This document covers requirements and possible problems when running in air-gapped mode.
A Note for Windows users​
This document uses Powershell syntax for environment variables. If you're using the Command shell
instead, where you see an environment variable reference of $env:FOO, please substitute it with %FOO%.
Network-Sensitive areas​
There are two areas where Rancher Desktop assumes network availability and will recover in an air-gapped situation:
-
Pulling Kubernetes
k3simages into thek3scache directory -
Using
kuberlras a version-aware wrapper aroundkubectl, so the client never differs from the Kubernetes server by more than one minor version.
Existing Deployments​
If Rancher Desktop has been installed on a machine initially with networked access, it can be run subsequently on that machine after network connectivity has been turned off. The main difference in core functionality is that the list of versions of Kubernetes available in drop-down menus is limited to those versions that have actually been downloaded and stored in the cache.
There is a problem using the kubectl client, because of the kuberlr wrapper (Windows users should add the .exe suffix to each executable utility file).
In this case, we're discussing a system that was initialized when connected to the internet, but we're about to take the machine offline for future use.
Suppose there are three versions of k3s in the rancher-desktop cache.
-
1.24.3
-
1.21.14
-
1.19.16
But suppose that on this system we only ran kubectl when using versions 1.24.3 and 1.21.14. This means that
the ~/.kuberlr/PLATFORM-ARCH/ directory ($env:HOMEDRIVE%\$env:HOMEPATH/.kuberlr/windows-amd64 on Windows) will contain only two files:
-
kubectl1.24.3
-
kubectl1.21.14
If we go offline and use the UI to switch to Kubernetes 1.19.16, when kubectl is run, the system will fail.
The problem is that kubectl is an alias for kuberlr, which will try to download kubectl 1.19.16 and install it
in the .kuberlr directory, but won't be able to access it.
So in this case, it would be best to prepare a connected system for disconnecting by selecting each available version of
Kubernetes currently in the cache, and running kubectl --context rancher-desktop cluster-info to ensure that an appropriate
version of the kubectl client is installed.
You could install versioned kubectls manually. This is covered in the next section.
Preparing an Air-Gapped System​
Here we assume you have some kind of removable media which you can populate on an internet-connected system, and then move over to the air-gapped system.
There are two directories that need to be populated in order for Rancher Desktop to function off-line:
The Cache Directory​
To populate a source disk (which we refer to here as %SOURCEDISK%, although it is probably some kind of removable medium like a USB thumb drive), you need the following files:
k3s-versions.json-- this file is created by Rancher Desktop. It reads a raw JSON file fromhttps://update.k3s.io/v1-release/channelsand converts it into a different kind of JSON file. Currently there is no utility to do that conversion; the easiest way to get this file is to run Rancher Desktop on a connected system and save theCACHE/k3s-versions.jsonfile (see below for whereCACHEexists on different platforms).- Tar archives of Kubernetes K3s images. These are listed at https://github.com/k3s-io/k3s/releases. You'll want to download either the
k3s-airgap-images-amd64.tarfor AMD/Intel machines,k3s-airgap-images-arm64.tarfor M1 machines, or the respective*.tar.zstcompressed tarball if you are usingk3sv1.26.1 and above. Finally you'll need to download thek3sexecutable for the selected version. For example, the following commands will let you work with K3s v1.24.3 build 1 offline:
cd .../CACHE
mkdir v1.24.3+k3s1
cd v1.24.3+k3s1
wget https://github.com/k3s-io/k3s/releases/download/v1.24.3%2Bk3s1/k3s-airgap-images-amd64.tar
wget https://github.com/k3s-io/k3s/releases/download/v1.24.3%2Bk3s1/sha256sum-amd64.txt
wget https://github.com/k3s-io/k3s/releases/download/v1.24.3%2Bk3s1/k3s
- Windows
- macOS
- Linux
On Windows, the cache directory is at $env:HOMEDRIVE%\$env:HOMEPATH\AppData\Local\rancher-desktop\cache\k3s, and can be created with the command
mkdir -Force $env:HOMEDRIVE%\$env:HOMEPATH\AppData\Local\rancher-desktop\cache\k3s
Assuming you have some source media, you would also run the following commands to pre-populate the cache:
copy-item -Force $env:SOURCEDISK\k3s-versions.json $env:HOMEDRIVE%\$env:HOMEPATH\AppData\Local\rancher-desktop\cache\
copy-item -Recurse -Force $env:SOURCEDISK\v<MAJOR>.<MINOR>.<PATCH>+k3s<BUILD> $env:HOMEDRIVE%\$env:HOMEPATH\AppData\Local\rancher-desktop\cache\k3s\
On macOS, the cache directory is at ~/Library/Caches/rancher-desktop and the commands to populate it would be
CACHEDIR=~/Library/Caches/rancher-desktop
mkdir -p $CACHEDIR/k3s
cp $SOURCEDISK/k3s-versions.json $CACHEDIR/
cp -r $SOURCEDISK/v<MAJOR>.<MINOR>.<PATCH>+k3s<BUILD> $CACHEDIR/k3s/
On Linux, the cache directory is at ~/.cache/rancher-desktop and the commands to populate it would be
CACHEDIR=~/.cache/rancher-desktop
mkdir -p $CACHEDIR/k3s
cp $SOURCEDISK/k3s-versions.json $CACHEDIR/
cp -r $SOURCEDISK/v<MAJOR>.<MINOR>.<PATCH>+k3s<BUILD> $CACHEDIR/k3s/
The kuberlr Directory​
The location of this directory is more straightforward. On all platforms, it's at HOME/.kuberlr/PLATFORM-ARCH where:
HOMEis the home directory: usually$env:HOMEDRIVE%\$env:HOMEPATHon Windows, and~or$HOMEon macOS and Linux.PLATFORMis one ofwindows,linux, ordarwin.ARCHisaarch64on M1 machines, andamd64everywhere else.
To populate it, determine which versions of Kubernetes you'll be using, and download the appropriate executables from the internet. These would be in:
- Windows
- macOS & Linux
https://dl.k8s.io/VERSION/bin/PLATFORM/CPU/kubectl.exe
https://dl.k8s.io/VERSION/bin/PLATFORM/CPU/kubectl
Where:
VERSIONwill have the formvMAJOR.MINOR.PATCH(likev1.22.1),PLATFORMwill be one ofdarwin,linux, orwindows,CPUwillarm64on M1 machines andamd64everywhere else.
For example, to get a kubectl for Windows that will work with Kubernetes v1.22, this Windows command-shell (not PowerShell) command will put it on the SOURCEDISK:
wget -O %SOURCEDISK/kubectl1.22.1.exe https://dl.k8s.io/v1.22.1/bin/windows/amd64/kubectl.exe
A Note on Versions​
Kubectl clients are guaranteed to work with servers that are running the same MAJOR version and differ in the MINOR version by at most 1. So for example, if your organization is working with Kubernetes versions v1.21.x, v1.22.x, and v1.23.x, for any patch-version of x, you would only need to install kubectl1.22.x in the .kuberlr directory. But if you copy a v1.24.x of Kubernetes into the CACHE directory, you'll need to ensure there's a compatible kubectl in the .kuberlr directory as well (any of v1.23.x, v1.24.x, or v1.25.x would suffice).