Ubuntu 22.04でK3s Kubernetesクラスタをセットアップする方法
紹介
Kubernetesは、コンテナオーケストレーションにおいて業界で好まれるツールの一つです。しかし、Kubernetesクラスターをゼロから設定することは、数多くの設定を必要とするため、手間がかかる作業になる可能性があります。また、Kubernetesクラスターの設定を開始する方法はいくつかありますが、大部分は生産グレードのクラスターを構築することを目指さない限り、時間がかかる可能性があります。
Kubernetes クラスターのセットアップを簡素化し、リモートのリソースが制約された場所へのデプロイの可能性を確保するため、Rancher Labs は K3s を開発しました。K3sは、数分以内に小さなバイナリを使用して Kubernetes クラスターをインストールできる軽量の Kubernetes ディストリビューションです。
このチュートリアルでは、UbuntuにK3sをインストールする方法とK3sで利用可能な追加の設定オプションについて学びます。
前提条件
このチュートリアルを完了するためには、次のものが必要です:
- Ubuntu 22.04の初期サーバー設定ガイドに従って設定された、少なくとも1GBのRAMを持つ1台のUbuntu 22.04サーバー
ステップ1— K3sのインストール
このステップでは、Ubuntuマシンに最新バージョンのK3sをインストールします。
パスワードベースのログインを使用している場合、次のコマンドを使用して、sudo権限のあるユーザー(このチュートリアルではsammy)としてサーバーにログインします:
- ssh sammy@your_server_ip
次に、以下のコマンドを使用してK3sをインストールします。
- curl -sfL https://get.k3s.io | sh -
スクリプトを実行するために、ユーザーのパスワードを入力するように求められます。
このコマンドは、curlを使用してhttps://get.k3s.ioにあるスクリプトをダウンロードし、そのスクリプトをsh -にパイプして実行します。スクリプトの実行後、K3sクラスターのインストールがデフォルトの設定オプションで開始され、一つのノードからなるKubernetesクラスターが作成されます。
このような出力を受け取ることになります:
[secondary_label Output]
[INFO] Finding release for channel stable
[INFO] Using v1.27.7+k3s2 as release
[INFO] Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.27.7+k3s2/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.27.7+k3s2/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
[INFO] Skipping installation of SELinux RPM
[INFO] Creating /usr/local/bin/kubectl symlink to k3s
[INFO] Creating /usr/local/bin/crictl symlink to k3s
[INFO] Creating /usr/local/bin/ctr symlink to k3s
[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サービスが実行されているかどうかを確認するためにsystemctlを使用して、サービスの状態を確認します。
- systemctl status k3s
このコマンドは状態を アクティブ(実行中) として表示します:
[secondary_label Output]
● k3s.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-11-27 16:52:01 UTC; 19s ago
Docs: https://k3s.io
Process: 8396 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exi>
Process: 8398 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
Process: 8399 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 8400 (k3s-server)
Tasks: 20
Memory: 467.3M
CPU: 12.952s
CGroup: /system.slice/k3s.service
├─8400 "/usr/local/bin/k3s server"
└─8421 "containerd " "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" >
...
このステップでは、UbuntuにK3sをインストールして、単一ノードのKubernetesクラスターを作成しました。次に、クラスターにデフォルトで展開されたKubernetesオブジェクトを見ていきます。
ステップ 2 — デフォルトの Kubernetes オブジェクトの確認
このステップでは、K3sのインストール後に展開されたデフォルトのKubernetesオブジェクトを確認します。
クラスタ内のkube-system名前空間に展開されているすべてのKubernetesオブジェクトを見るには、以下のコマンドを実行してください。kubectlはK3sのインストール時に自動的にインストールされるため、個別にインストールする必要はありません。
- sudo kubectl get all -n kube-system
このような出力を受け取ることになります:
[secondary_label Output]
NAME READY STATUS RESTARTS AGE
pod/local-path-provisioner-957fdf8bc-t8vpx 1/1 Running 0 4m34s
pod/coredns-77ccd57875-4hrd9 1/1 Running 0 4m34s
pod/helm-install-traefik-crd-j2sqs 0/1 Completed 0 4m34s
pod/helm-install-traefik-mvxhw 0/1 Completed 1 4m34s
pod/metrics-server-648b5df564-gqxcz 1/1 Running 0 4m34s
pod/svclb-traefik-18597fcd-2cf68 2/2 Running 0 4m6s
pod/traefik-768bdcdcdd-srb8d 1/1 Running 0 4m7s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP 4m44s
service/metrics-server ClusterIP 10.43.69.115 <none> 443/TCP 4m43s
service/traefik LoadBalancer 10.43.149.125 159.65.159.115 80:32266/TCP,443:32628/TCP 4m7s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/svclb-traefik-18597fcd 1 1 1 1 1 <none> 4m7s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/local-path-provisioner 1/1 1 1 4m44s
deployment.apps/coredns 1/1 1 1 4m44s
deployment.apps/metrics-server 1/1 1 1 4m44s
deployment.apps/traefik 1/1 1 1 4m7s
NAME DESIRED CURRENT READY AGE
replicaset.apps/local-path-provisioner-957fdf8bc 1 1 1 4m34s
replicaset.apps/coredns-77ccd57875 1 1 1 4m34s
replicaset.apps/metrics-server-648b5df564 1 1 1 4m34s
replicaset.apps/traefik-768bdcdcdd 1 1 1 4m7s
NAME COMPLETIONS DURATION AGE
job.batch/helm-install-traefik-crd 1/1 28s 4m41s
job.batch/helm-install-traefik 1/1 31s 4m41s
...
上記の出力は、Kubernetes クラスター内に展開されているさまざまなオブジェクトを示しています。例えば、coredns、local-path-provisioner、metrics-server、traefik のそれぞれのために 4 つのデプロイメントが実行されています。
もしsudoを使わずにコマンドを実行すると、以下のエラーが表示されることがあります。
WARN[0000] Unable to read /etc/rancher/k3s/k3s.yaml, please start server with --write-kubeconfig-mode to modify kube config permissions
error: error loading config file "/etc/rancher/k3s/k3s.yaml": open /etc/rancher/k3s/k3s.yaml: permission denied
...
実行中に sudo を必要としないようにするために、以下のように chmod を使用して設定ファイルの権限を変更します。
- sudo chmod 644 /etc/rancher/k3s/k3s.yaml
このステップでは、K3sクラスタにデフォルトでデプロイされたKubernetesオブジェクトの状態を確認しました。次に、インストール中のK3sの構成オプションを理解し、変更します。
ステップ3 — K3Sの構成オプションを理解し、変更する
デフォルト設定を使用してK3sをインストールしましたが、クラスタの特定のカスタム動作を達成するために設定を調整することは可能です。このステップでは、インストールスクリプトの設定を調整するためにK3sで環境変数を使用する方法を学びます。
例えば、デフォルトのセットアップでは、traefik イングレスコントローラーがインストールされますが、場合によっては、インストール中にイングレスコントローラーを無効にしたいことがあります。
環境変数 INSTALL_K3S_EXEC は、K3s サービスにフラグを渡すために使用できます。次のコマンドは、K3s インストール中に traefik を無効にするために使用できます。
- curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable=traefik" sh -
検証のためにKubernetesオブジェクトをチェックしてください; 今回はコントローラーリソースは存在しません。
- sudo kubectl get all -n kube-system
利用可能なフラグの完全なリストはここにあります。 https://docs.k3s.io/cli/server.
環境変数を使用して設定オプションを変更することに加えて、K3sの設定ファイル内でも変更できます。必要なオプションを設定ファイルに指定し、K3sサーバーを再起動して変更を適用します。
K3sは/etc/rancher/k3s/config.yamlにある設定ファイルを使用します。
次のコマンドを実行して、設定ファイルを作成し書き込みます。
- sudo nano /etc/rancher/k3s/config.yaml
次の内容を設定ファイルに書き込んでください。
- disable: traefik
Ctrl+Xを押してファイルを書き込み、終了します。disable: traefikという行は、K3sサービスにtraefikインストールに関連するリソースを削除するよう指示します。
次に、変更を適用するために、次のコマンドを使用してK3sサービスを再起動します。
- sudo systemctl restart k3s
今、kube-system 名前空間内のすべての Kubernetes オブジェクトをリストすることで確認できます。現在、traefik インストールに関連するリソースは存在しないはずです。
- sudo kubectl get all -n kube-system
このステップでは、インストール中およびインストール後にK3sの設定を変更する方法を学びました。次に、仮想マシンをクリーンアップするためにK3sクラスターをアンインストールします。
ステップ4 — K3sのアンインストール
K3Sをアンインストールするには、「/usr/local/bin/k3s-uninstall.sh」というシェルスクリプトを実行する必要があります。このスクリプトはK3sのインストール時に自動的に生成され、完全なクリーンアップを実行するために使用できます。アンインストール中に、K3sのインストール時に作成またはインストールされたすべてのK3sの設定およびクラスターツールが削除されます。
次のコマンドを実行してK3sをアンインストールしてください:
- /usr/local/bin/k3s-uninstall.sh
次のコマンドを使用してK3sサービスのステータスを確認することでアンインストールを確認してください:
- systemctl status k3s
このような出力を受け取ることになります:
[secondary_label Output]
Unit k3s.service could not be found.
結論
この記事では、Ubuntu に K3s クラスターをインストールし、K3s で利用可能な構成オプションとそれらを活用するためのメカニズムについて理解しました。自分の Kubernetes クラスターをセットアップしたので、Kubernetes 内のさまざまな種類のオブジェクトとその機能を探求する必要があります。
