K3sとは(https://www.rancher.com/products/k3s)
K3sは、Rancher Labs, Inc. がIoTやエッジコンピューティング向けに、開発した軽量かつ認定済みのKubernetesディストリビューションです。K3sは軽量のKubernetes(K8s)であり、簡単にインストールでき、メモリ使用量もK8sの半分、バイナリサイズも50MB未満です。
ちなみに、Kubernetesの一般的な短縮形が「K8s」であることから、それをもじって「K3s」と命名されました。8はkとsの間の文字数(k「ubernete」s)を表します。K3sという言葉は、K3sの要件である「K8sから5つの要素を変更(削除)して軽量化(5 less than K8s)した」ことを表すために8を3に置き換えられています。
ここでは、シングルサーバーへのセットアップ方法を記録します。 私はもともとdocker にて環境構築をしていたのですが、Rootlessモードで使用しており、時折Rootモードに必要になったりと環境を使い分けていました。
Kubernetesはコンテナをrootユーザー、非ルートユーザー自由に変更し起動できるので、シングルサーバーであってもかなり重宝しています。
インストール手順
1. インストールスクリプトの実行
curl -sfL https://get.k3s.io | sh -s - server --cluster-cidr=<your-cluster-cidr> --service-cidr=<your-service-cidr> --node-ip=<your-internal-node-ip> --node-external-ip=<your-external-node-ip> --cluster-domain="<your-cluster-domain>" --write-kubeconfig-mode 644
- server:
K3sをサーバーモードでインストールすることを指定します。K3sにはサーバーとエージェントの2つのモードがあり、サーバーはKubernetesのコントロールプレーンを提供します。 - --cluster-cid:
クラスタのPodネットワークのCIDR(Classless Inter-Domain Routing)を設定します。クラスター内のすべてのPodに対して使用されるIPアドレス範囲を定義します。 - --service-cidr:
クラスタ内のサービスのCIDRを設定します。クラスター内のすべてのサービスに対して使用されるIPアドレス範囲を定義します。 - --node-ip:
現在のノードの内部IPアドレスを指定します。 この設定により、ノードがクラスターに参加する際に、このIPアドレスを使用するように指示されます。この設定は、例えば、ローカル環境時での構築時にノードPCがローカルIPアドレスを複数持つ場合に指定すると便利です。 - --node-external-ip:
現在のノードの外部IPアドレスを指定します。
この設定により、ノードに外部からアクセスする際に、このIPアドレスを使用するように指示されます。 - --cluster-domain:
クラスタ内のDNS検索のデフォルトドメインを設定します。デフォルトでKubernetesクラスターはcluster.localという内部ドメインを使用します。 - --write-kubeconfig-mode 644:
kubeconfigファイルのパーミッションを設定します。644はファイルの読み書き権限を意味し、オーナーは読み書きができ、グループおよびその他のユーザーは読み取りのみが可能です kubeconfigファイルは、Kubernetesクラスターにアクセスするための設定ファイルです。
2. サービスの再起動と設定のコピー
sudo systemctl daemon-reload
sudo systemctl restart k3s
sudo cp /etc/rancher/k3s/k3s.yaml ~/<dir>/.kube/config
sudo chown $(id -u):$(id -g) ~/<dir>/.kube/config
chmod 600 ~/<dir>/.kube/config
sudo systemctl daemon-reload と sudo systemctl restart k3s:
K3sサービスの再起動を行います。sudo cp /etc/rancher/k3s/k3s.yaml ~/(dir)/.kube/config:
Kubeconfigファイルをユーザーのディレクトリに配置することで、そのユーザー専用の設定が行われ、複数のユーザーが異なる設定でクラスターにアクセスすることができます。sudo chown $(id -u):$(id -g) ~/(dir)/.kube/config:
Kubeconfigファイルの所有者を現在のユーザーに変更することで、そのユーザーがファイルにアクセスできるようにします。これにより、ファイルの管理と使用が安全に行えます。chmod 600 ~/(dir)/.kube/config:
ファイルのパーミッションを設定することで、ファイルの所有者のみが読み取りと書き込みを行えるようにします。他のユーザーにはアクセス権が与えられないため、ファイルのセキュリティが確保されます。Kubeconfigファイルにはクラスターへのアクセス情報(認証情報やAPIサーバーのエンドポイント)が含まれているため、適切な権限設定により、情報漏洩や不正アクセスを防ぐことができます。
インストール後
kubectl, crictl, ctr, k3s-killall, k3s-uninstall.sh などのユーティリティがインストールされます。
インストール後の確認
kubectl get node -o wide
NAMEにホストPC名、STATUSがReadyと出力されれば、インストール完了です。
アンインストール(必要時)
sudo /usr/local/bin/k3s-uninstall.sh
CoreDNS
CoreDNSは、Kubernetesクラスター内でDNSサービスを提供する軽量なDNSサーバーです。クラスター内のサービスやポッドの名前解決をサポートし、DNSクエリを処理します。
Traefikイングレスコントローラー
Kubernetesでは、良く用いられるNGINX Ingress ControllerやIngress NGINX Controllerとは異なり、Traefikイングレスコントローラーが標準装備されています。
圧倒的に情報量が多いは、NGINX Ingress ControllerやIngress NGINX Controllerですので、Traefikイングレスコントローラをinstallしたくなければ、インストール時にdisable traefikをオプションで指定します。
私は以前、Ingress NGINX Controllerを使用していましたが、あるときよりTraefikイングレスコントローラーに切り替えました。慣れてしまえば、特段不便はありません。しかし、終端SSLをする際にちょっとしたコツが必要になります。詳細は後日まとめます。もし、ロードバランサ終端で気持ち悪くなければ、標準装備のTraefikイングレスコントローラーを利用するのが簡単でおすすめです。
ファイアーフォールの設定
イングレスコントローラーをインストールしたので、ポート80, 443を開放します。
sudo ufw allow from any to any port 80,443 proto tcp
sudo ufw reload
sudo ufw status verbose
以上で、K3sのインストールは完了です。お疲れ様でした。