ウェブサイト検索

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)としてサーバーにログインします:

  1. ssh sammy@your_server_ip

次に、以下のコマンドを使用してK3sをインストールします。

  1. 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を使用して、サービスの状態を確認します。

  1. 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のインストール時に自動的にインストールされるため、個別にインストールする必要はありません。

  1. 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 を使用して設定ファイルの権限を変更します。

  1. sudo chmod 644 /etc/rancher/k3s/k3s.yaml

このステップでは、K3sクラスタにデフォルトでデプロイされたKubernetesオブジェクトの状態を確認しました。次に、インストール中のK3sの構成オプションを理解し、変更します。

ステップ3 — K3Sの構成オプションを理解し、変更する

デフォルト設定を使用してK3sをインストールしましたが、クラスタの特定のカスタム動作を達成するために設定を調整することは可能です。このステップでは、インストールスクリプトの設定を調整するためにK3sで環境変数を使用する方法を学びます。

例えば、デフォルトのセットアップでは、traefik イングレスコントローラーがインストールされますが、場合によっては、インストール中にイングレスコントローラーを無効にしたいことがあります。

環境変数 INSTALL_K3S_EXEC は、K3s サービスにフラグを渡すために使用できます。次のコマンドは、K3s インストール中に traefik を無効にするために使用できます。

  1. curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable=traefik" sh -

検証のためにKubernetesオブジェクトをチェックしてください; 今回はコントローラーリソースは存在しません。

  1. sudo kubectl get all -n kube-system

利用可能なフラグの完全なリストはここにあります。 https://docs.k3s.io/cli/server.

環境変数を使用して設定オプションを変更することに加えて、K3sの設定ファイル内でも変更できます。必要なオプションを設定ファイルに指定し、K3sサーバーを再起動して変更を適用します。

K3sは/etc/rancher/k3s/config.yamlにある設定ファイルを使用します。

次のコマンドを実行して、設定ファイルを作成し書き込みます。

  1. sudo nano /etc/rancher/k3s/config.yaml

次の内容を設定ファイルに書き込んでください。

  1. disable: traefik

Ctrl+Xを押してファイルを書き込み、終了します。disable: traefikという行は、K3sサービスにtraefikインストールに関連するリソースを削除するよう指示します。

次に、変更を適用するために、次のコマンドを使用してK3sサービスを再起動します。

  1. sudo systemctl restart k3s

今、kube-system 名前空間内のすべての Kubernetes オブジェクトをリストすることで確認できます。現在、traefik インストールに関連するリソースは存在しないはずです。

  1. sudo kubectl get all -n kube-system

このステップでは、インストール中およびインストール後にK3sの設定を変更する方法を学びました。次に、仮想マシンをクリーンアップするためにK3sクラスターをアンインストールします。

ステップ4 — K3sのアンインストール

K3Sをアンインストールするには、「/usr/local/bin/k3s-uninstall.sh」というシェルスクリプトを実行する必要があります。このスクリプトはK3sのインストール時に自動的に生成され、完全なクリーンアップを実行するために使用できます。アンインストール中に、K3sのインストール時に作成またはインストールされたすべてのK3sの設定およびクラスターツールが削除されます。

次のコマンドを実行してK3sをアンインストールしてください:

  1. /usr/local/bin/k3s-uninstall.sh

次のコマンドを使用してK3sサービスのステータスを確認することでアンインストールを確認してください:

  1. systemctl status k3s

このような出力を受け取ることになります:

[secondary_label Output]

Unit k3s.service could not be found.

結論

この記事では、Ubuntu に K3s クラスターをインストールし、K3s で利用可能な構成オプションとそれらを活用するためのメカニズムについて理解しました。自分の Kubernetes クラスターをセットアップしたので、Kubernetes 内のさまざまな種類のオブジェクトとその機能を探求する必要があります。

関連記事: