ウェブサイト検索

開発マシンでKubernetesクラスターを実行するためにK3sを使う方法


K3sは、開発用に理想的な軽量Kubernetesディストリビューションです。現在はCloud Native Computing Foundation(CNCF)の一部ですが、元々はRancherによって開発されました。

K3sは、50MB未満のファイルサイズで単一のバイナリとして提供されます。その小さな外見にもかかわらず、K3sには本番環境に適したKubernetesクラスターを運用するために必要なすべてが含まれています。このプロジェクトは、信頼性と保守の容易さが重要な懸念事項であるリソース制約のあるハードウェアに焦点を当てています。K3sは現在、IoTデバイスのエッジで一般的に見られますが、これらの特性は開発者によるローカル使用にも適している良い選択肢となっています。

K3sの始め方

K3sバイナリを実行すると、ホストマシン上にKubernetesクラスタが起動します。主要なK3sプロセスは、コントロールプレーンのAPIサーバー、Kubeletワーカーインスタンス、containerdコンテナランタイムを含むすべてのKubernetesコンポーネントを起動して管理します。

実際には、K3sをサービスとして自動的に開始させることが通常望まれます。K3sをシステム上で迅速に実行するためには、公式のインストールスクリプトを使用することをお勧めします。これにより、バイナリがダウンロードされ、パスに移動され、システムに適したsystemdまたはopenrcサービスが登録されます。K3sは、プロセスがクラッシュしたりホストが再起動した後に自動的に再起動するように構成されます。

curl -sfL https://get.k3s.io | sh -

インストールが成功したことを確認するには、k3sサービスの状態を確認してください。

sudo service k3s status

クラスタを使用する準備ができているのは、active (running) が緑色で表示されている場合です。

クラスタとの対話

K3sは、提供されたスクリプトを使用してインストールすると、Kubectlをバンドルします。それはk3sコマンドの下にネストされています。

k3s kubectl get pods

No resources found in default namespace.

次のようなエラーが表示されることがあります:

k3s kubectl get pods

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 644 /etc/rancher/k3s/k3s.yaml

これで、sudoを使用することなくKubectlコマンドを実行できるようになるはずです。

K3sの統合版に依存したくない場合は、スタンドアロンのKubectlインストールを使用し続けることができます。ベアのkubectlコマンドを実行する際に、K3sの設定ファイルを参照するには、KUBECONFIG環境変数または--kubeconfigフラグを使用してください:

export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

kubectl get pods

No resources found in default namespace.

例としての作業負荷

クラスタをテストするために、シンプルなデプロイメントを追加できます:

k3s kubectl create deployment nginx --image=nginx:latest

deployment.apps/nginx created

k3s kubectl expose deployment nginx --type=LoadBalancer --port=80

service/nginx exposed

作成されたサービスのIPアドレスを発見するためにKubectlを使用します。

k3s kubectl get services

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 35m

nginx LoadBalancer 10.43.49.20 <pending> 80:30968/TCP 17s

この例では、NGINXサービスは10.43.49.20でアクセス可能です。このURLをウェブブラウザで訪れて、デフォルトのNGINXランディングページを確認してください。

Kubernetesオプションの設定

K3sを実行するときに、個々のKubernetesコンポーネントのカスタム引数を設定できます。値はK3sバイナリへのコマンドラインフラグとして指定する必要があります。環境変数もサポートされていますが、フラグから変数名への変換は必ずしも一貫しているわけではありません。

こちらは、インストールを設定するために一般的に使用されるフラグです:

  • --etcd-arg - Etcd に引数を渡します。
  • --kube-apiserver-arg - Kubernetes APIサーバーに引数を渡します。
  • --kube-controller-manager-arg - Kubernetes コントローラーマネージャーコンポーネントに引数を渡します。
  • --kubelet-arg - Kubeletワーカープロセスに引数を渡します。

K3sやKubernetesクラスターの操作をカスタマイズするための他の多くのオプションが利用可能です。これには、Traefik Ingressコントローラー(--disable traefik)などのバンドルされたコンポーネントを無効にするための機能も含まれており、代わりに他の実装に置き換えることができます。

フラグや変数に加えて、K3sはより維持管理しやすいYAML設定ファイルもサポートしています。これを/etc/rancher/k3s/config.yamlに配置することで、K3sは起動するたびに自動的にこのファイルを使用します。フィールド名は、--プレフィックスを取り除いたCLI引数であるべきです。

node-name: first-worker

bind-address: 1.2.3.4

マルチノードクラスタ

K3sは、複数ノードクラスタの完全なサポートを提供します。インストールスクリプトを実行する前に、K3S_URLとK3S_TOKENの環境変数を設定することで、クラスタにノードを追加できます。

curl -sfL https://get.k3s.io | K3S_URL=https://192.168.0.1:6443 K3S_TOKEN=token sh -

このスクリプトはK3sをインストールし、IPアドレス192.168.0.1に接続するワーカーノードとして構成します。トークンを見つけるには、K3sサーバーが実行されているマシンから/var/lib/rancher/k3s/server/node-tokenファイルの値をコピーしてください。

プライベートレジストリでの画像の使用

K3sはプライベートレジストリの画像に対して良好な統合サポートを提供しています。レジストリの認証情報をクラスターに注入するための特別な設定ファイルを提供することができます。これらの認証情報はK3sサーバーが起動する際に読み込まれます。それは自動的にワーカーノードと共有されます。

/etc/rancher/k3s/registries.yamlファイルを次の内容で作成してください。

mirrors:

example-registry.com:

endpoint:

- "https://example-registry.com:5000"

これにより、クラスタはサーバーの example-registry.com:5000 から example-registry.com/example-image:latest などのイメージをプルすることができます。 endpoint フィールドの下に複数のURLを指定することができ、それらは成功したプルが発生するまで、記載された順序でフォールバックとして使用されます。

次の構文を使用して、レジストリ用のユーザー資格情報を提供してください:

mirrors:

example-registry.com:

endpoint:

- "https://example-registry.com:5000"

configs:

"example-registry.com:5000":

auth:

username: <username>

password: <password>

資格情報はエンドポイントごとに定義されます。複数のエンドポイントで定義されたレジストリには、それぞれのエンドポイントに対してconfigフィールドに個別のエントリが必要です。

SSLを使用するエンドポイントには、TLS構成も割り当てる必要があります。

configs:

"example-registry.com:5000":

auth:

username: <username>

password: <password

tls:

cert_file: /tls/cert

key_file: /tls/key

ca_file: /tls/ca

cert_file、key_file、およびca_fileフィールドを設定して、レジストリに対する正しい証明書ファイルを参照します。

クラスターのアップグレード

最新のインストールスクリプトを実行することで、新しいK3sリリースにアップグレードできます。これにより、既存のクラスターが自動的に検出され、新しいバージョンに移行されます。

curl -sfL https://get.k3s.io | sh -

インストーラーの環境変数を設定してクラスターをカスタマイズした場合は、アップグレードコマンドを実行する際にそれらを繰り返してください。

curl -sfL https://get.k3s.io | INSTALL_K3S_BIN_DIR=/usr/bin sh -

マルチノードクラスタは、同じ手順を使用してアップグレードされます。サーバーが新しいリリースを実行している後、各ワーカーノードを個別にアップグレードする必要があります。

スクリプトを実行する前に、INSTALL_K3S_VERSION変数を設定することで、特定のKubernetesバージョンをインストールできます:

curl -sFL https://get.k3s.io | INSTALL_K3S_VERSION=v1.23.0 sh -

INSTALL_K3S_CHANNEL バージョンは、不安定なバージョンやプレリリースビルドを選択できます:

curl -sFL https://get.k3s.io | INSTALL_K3S_CHANNEL=latest sh -

K3sは、これらの変数が設定されていない場合に最新の安定したKubernetesリリースをデフォルトで実行します。

K3sのアンインストール

K3sは自己完結型のバイナリとしてパッケージ化されているため、使用を停止したい場合は簡単にクリーンアップできます。インストールプロセスでは、システムサービスを削除し、バイナリを削除し、クラスターによって作成されたすべてのデータをクリアするアンインストールスクリプトが提供されます。

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

K3sワーカーノードを廃止するときは、/usr/local/bin/k3s-agent-uninstall.shのスクリプトを代わりに使用するべきです。

結論

K3sは、システムリソースに優しく、メンテナンスが容易なシングルバイナリKubernetesディストリビューションです。これは機能を犠牲にするものではありません。K3sはプロダクション対応とされ、Kubernetes APIオブジェクト、永続ストレージ、負荷分散ネットワークの完全サポートを提供しています。

K3sは、MinikubeやMicroK8sなどの他の開発者向けKubernetesフレーバーに対する良い代替手段です。クラスターを設定するために仮想マシンを実行したり、他のソフトウェアをインストールしたり、特別な構成を行ったりする必要はありません。特に、すでに本番環境でK3sを実行している場合に適しており、環境間の不一致を解消することができます。

関連記事: