凡ジニアのtxt

エンジニアリングができない凡ジニア

閉域環境のラズパイ4にk3sをインストールする

背景

閉域(インターネットへ疎通ができない)環境に対して、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