背景
閉域(インターネットへ疎通ができない)環境に対して、k3sをインストールすることがあったので、備忘録として書きます。
*閉域環境を英語ではair-gapと呼ばれることがある。Rancher公式サイトにはair-gapと記載されている。
環境
- ラズパイ4
- Ubuntu 18.04
- aarch64 (arm64)
- k3s v1.23.6+k3s1
閉域環境へk3sインスール
1. k3sのimage/バイナリとinstall.shをダウンロード
GitHubからローカル環境に手動でk3sのimageとバイナリをダウンロードします。本環境では、現時点(2022/05/10)で最新のv1.23.6+k3s1を使用します。
https://github.com/k3s-io/k3s/releases

次に、ローカル環境にラズパイサーバーで実行するk3sインストール用スクリプトをダウンロードします。
# get.k3s.ioからスクリプトをダウンロード
% curl https://get.k3s.io -o ~/Downloads/install.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 27501 100 27501 0 0 26412 0 0:00:01 0:00:01 --:--:-- 26622
# ローカル環境にダウンロードできたか確認
% ls ~/Downloads/install.sh
/Users/****/Downloads/install.sh
2. ラズパイサーバーへ転送
先ほどダウンロードしたものをラズパイサーバーへ転送します。
# localからラズパイサーバーへimageを転送
% scp ~/Downloads/k3s-airgap-images-arm64.tar ubuntu@192.168.3.101:/home/ubuntu
ubuntu@192.168.3.101's password:
k3s-airgap-images-arm64.tar 100% 462MB 4.5MB/s 01:42
% scp ~/Downloads/k3s ubuntu@192.168.3.101:/home/ubuntu
ubuntu@192.168.3.101's password:
k3s 100% 60MB 6.1MB/s 00:09
% scp ~/Downloads/install.sh ubuntu@192.168.3.101:/home/ubuntu
ubuntu@192.168.3.101's password:
install.sh 100% 27KB 2.2MB/s 00:00
# ラズパイサーバーでファイルを確認
ubuntu@ras01:~$ ls -lh
total 522M
-rw-r--r-- 1 ubuntu ubuntu 27K Dec 15 19:39 install.sh
-rw-r--r-- 1 ubuntu ubuntu 60M Dec 15 19:37 k3s
-rw-r--r-- 1 ubuntu ubuntu 462M Dec 15 19:25 k3s-airgap-images-arm64.tar
# /usr/local/bin配下にk3sバイナリを格納
ubuntu@ras01:~$ sudo mv k3s-arm64 /usr/local/bin/k3s
ubuntu@ras01:~$ ls /usr/local/bin/
k3s
# /var/lib/rancher/k3s/agent/images配下にk3s imageをコピー
sudo mkdir -p /var/lib/rancher/k3s/agent/images/
sudo cp k3s-airgap-images-arm64.tar /var/lib/rancher/k3s/agent/images/
3. スクリプトとk3sバイナリに実行権限を付与
# install.shに実行権限を付与
ubuntu@ras01:~$ sudo chmod +x install.sh
ubuntu@ras01:~$ ls -lh install.sh
-rwxr-xr-x 1 ubuntu ubuntu 27K Dec 15 19:39 install.sh
# k3sバイナリに実行権限を付与
ubuntu@ras01:~$ sudo chmod +x /usr/local/bin/k3s
ubuntu@ras01:~$ ls -lh /usr/local/bin/
total 60M
-rwxr-xr-x 1 ubuntu ubuntu 60M Dec 15 19:37 k3s
4. k3sインストールを実行
install.sh
を実行して、ラズパイサーバーにk3sをインストールします。
# インストールの実行
ubuntu@ras01:~$ INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
[INFO] Skipping k3s download and verify
[INFO] Skipping installation of SELinux RPM
[INFO] Skipping /usr/local/bin/kubectl symlink to k3s, command exists in PATH at /usr/bin/kubectl
[INFO] Skipping /usr/local/bin/crictl symlink to k3s, command exists in PATH at /usr/bin/crictl
[INFO] Skipping /usr/local/bin/ctr symlink to k3s, command exists in PATH at /usr/bin/ctr
[INFO] Creating killall script /usr/local/bin/k3s-killall.sh
[INFO] Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s.service
[INFO] systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO] systemd: Starting k3s
# k3sのステータス確認
ubuntu@ras01:~$ systemctl status k3s
● k3s.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-12-15 19:54:15 JST; 1min 44s ago
Docs: https://k3s.io
Process: 18730 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Process: 18725 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
Process: 18723 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exited, status=0/SUCCESS)
Main PID: 18733 (k3s-server)
Tasks: 65
CGroup: /system.slice/k3s.service
├─18733 /usr/local/bin/k3s server
└─18894 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/rancher/k3s
Dec 15 19:55:37 ras01 k3s[18733]: E1215 19:55:37.805540 18733 remote_runtime.go:209] "RunPodSandbox from runtime service failed" err="rpc error: code = Unknown desc = failed to ge
Dec 15 19:55:37 ras01 k3s[18733]: E1215 19:55:37.805691 18733 kuberuntime_sandbox.go:70] "Failed to create sandbox for pod" err="rpc error: code = Unknown desc = failed to get san
Dec 15 19:55:37 ras01 k3s[18733]: E1215 19:55:37.805771 18733 kuberuntime_manager.go:833] "CreatePodSandbox for pod failed" err="rpc error: code = Unknown desc = failed to get san
Dec 15 19:55:37 ras01 k3s[18733]: E1215 19:55:37.805964 18733 pod_workers.go:951] "Error syncing pod, skipping" err="failed to \"CreatePodSandbox\" for \"metrics-server-7cd5fcb6b7
Dec 15 19:55:45 ras01 k3s[18733]: E1215 19:55:45.015469 18733 resource_quota_controller.go:413] unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the se
Dec 15 19:55:45 ras01 k3s[18733]: W1215 19:55:45.523766 18733 garbagecollector.go:707] failed to discover some groups: map[metrics.k8s.io/v1beta1:the server is currently unable to
Dec 15 19:55:46 ras01 k3s[18733]: W1215 19:55:46.502560 18733 handler_proxy.go:104] no RequestInfo found in the context
Dec 15 19:55:46 ras01 k3s[18733]: E1215 19:55:46.502809 18733 controller.go:116] loading OpenAPI spec for "v1beta1.metrics.k8s.io" failed with: failed to retrieve openAPI spec, ht
Dec 15 19:55:46 ras01 k3s[18733]: , Header: map[Content-Type:[text/plain; charset=utf-8] X-Content-Type-Options:[nosniff]]
Dec 15 19:55:46 ras01 k3s[18733]: I1215 19:55:46.502881 18733 controller.go:129] OpenAPI AggregationController: action for item v1beta1.metrics.k8s.io: Rate Limited Requeue.
5. kubectlの確認
この段階ではPATH設定などを行なっていないため、kubectl が使えません。最後に、kubectlコマンドが使えるように以下を設定していきます。
# kubectlの実行 (この段階ではrefusedとなる)
ubuntu@ras01:~$ kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?
# kubectlのパスを設定
ubuntu@ras01:~$ echo "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml" >> ~/.bashrc
ubuntu@ras01:~$ source ~/.bashrc
# ファイル所有者を一般ユーザーに変更
ubuntu@ras01:~$ sudo chown ubuntu /etc/rancher/k3s/k3s.yaml
ubuntu@ras01:~$ ls -lh /etc/rancher/k3s/k3s.yaml
-rw------- 1 ubuntu root 2.9K Dec 15 19:54 /etc/rancher/k3s/k3s.yaml
# kubectlの実行
ubuntu@ras01:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
ras01 Ready control-plane,master 6m55s v1.23.6+k3s1
6. お片付け
k3sをアンインストールしたい場合は、以下のスクリプトを実行すれば、アンインストールが実行されます。
ubuntu@ras01: /usr/local/bin/k3s-uninstall.sh
参照
Rancher Docs: Air-Gap Install
https://github.com/k3s-io/k3s/releases