これは、Kubernetes関連のもう1つのノートブックエントリであり、Canonicalのマルチパスで作成された仮想マシンでK3Sを使用してKubernetesクラスタを設定する手順を説明します。さらに、クラスターが実行される仮想マシンの外部からK3Sクラスターを管理するためのKubernetesコマンドラインクラスター管理ツールであるkubectlを構成する方法についても説明します。
マルチパスはWindows、Mac OS X、Linuxで実行できるため、この記事で説明する手順は、Mac OS Xでのみテストしましたが、上記のすべての環境に適用できます。
背景
賢明な読者は、DockerでKubernetesクラスターを実行する方法を説明した最近の記事を思い出し、KindではなくK3Sに移行した理由を疑問に思うかもしれません。
これには2つの理由があります:
- K3Sは本番環境に対応していると主張しています。
おそらくGoogle規模の本番環境には対応していませんが、私のニーズには十分だと思います。 - K3Sは、実際のKubernetesクラスターに似ています。
Kindと一緒に仕事をしていた短い時間の間に、K3Sを見るようになった2つの問題に遭遇しました。 - –種類のクラスターを再起動できません。
- –種類はLoadBalancerタイプをサポートしていません。
前提条件
K3Sの準備として、必要なツールをいくつかインストールしてから、K3Sを実行する仮想マシンを作成します。
ツール
K3Sをインストールする前に、仮想マシンのホストとして機能するコンピューターに次のツールをインストールする必要があります。
- マルチパス
Ubuntuのインスタンスを実行できるCanonicalの仮想マシン。
マルチパスのインストール方法については、こちらをご覧ください。 - kubectl
以前と同様に、kubectlはKubernetesコマンドラインクラスター管理ツールです。
kubectlのインストール方法については、こちらをご覧ください。
仮想マシン
2つのノードで構成されるKubernetesクラスターを作成します。 1人のマスターと1人のエージェント。このために、2台の仮想マシンが必要になります。

マルチパスをインストールしたら、ターミナルウィンドウを開きます:
- マスターノード仮想マシンを作成して起動します:
multipass launch --name k3s-master --mem 4G --disk 5G 18.04
multipass launch --name k3s-agent --mem 4G --disk 5G 18.04
- 2つの仮想マシンを確認します:
multipass list
出力は次のようになります。
Name State IPv4 Image
k3s-agent Running 192.168.64.10 Ubuntu 18.04 LTS
k3s-master Running 192.168.64.7 Ubuntu 18.04 LTS
k3s-masterのIPアドレスに注意してください。後でエージェントノードにK3Sをインストールするときに必要になります。
K3Sをインストールする
次に、マスターノードとエージェントノードにK3Sをインストールする方法について説明します。
マスターノードにK3Sをインストールする
このステップでは、マスターノードにK3Sをインストールし、マスターノードトークンを取得します。マスターノードトークンは、後でマネージャーが管理するK3Sノードを作成する必要があります。
- 必要に応じてターミナルウィンドウを開きます。
- k3s-master VMでシェルを開きます:
multipass shell k3s-master
curl -sfL https://get.k3s.io | sh -
次のような出力がコンソールに表示されます。
[INFO] Finding latest release
[INFO] Using v1.17.4+k3s1 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
chcon: can't apply partial context to unlabeled file '/usr/local/bin/k3s'
[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のインストールを確認します:
k3s -version
したがって、上記のコマンドの出力は次のようになります。
k3s version v1.17.4+k3s1 (3eee8ac3)
マスターノードトークンを取得します:
sudo cat /var/lib/rancher/k3s/server/node-token
K103a5c4b22b4de5715dff39d58b1325c38e84217d40146c0f65249d439cab1a531::server:271a74dadde37a98053a984a8dc676f8
k3s-master VMシェルを終了します:
exit
エージェントノードにK3Sをインストールする
K3SマスターのIPアドレスとノードトークンを使用して、エージェントノードにK3Sをインストールする準備が整いました。
- 必要に応じてターミナルウィンドウを開きます。
- k3s-agent VMでシェルを開きます:
multipass shell k3s-agent
- エージェントノードに最新バージョンのK3Sをインストールします。
K3S_URL変数のk3s-masterのIPアドレスとK3S_TOKEN変数のノードトークンを置き換えます。
curl -sfL https://get.k3s.io | K3S_URL="https://192.168.64.7:6443" K3S_TOKEN="K103a5c4b22b4de5715dff39d58b1325c38e84217d40146c0f65249d439cab1a531::server:271a74dadde37a98053a984a8dc676f8" sh -
これに似た出力がコンソールに表示されます:
[INFO] Finding latest release
[INFO] Using v1.17.4+k3s1 as release
[INFO] Downloading hash https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/sha256sum-amd64.txt
[INFO] Downloading binary https://github.com/rancher/k3s/releases/download/v1.17.4+k3s1/k3s
[INFO] Verifying binary download
[INFO] Installing k3s to /usr/local/bin/k3s
chcon: can't apply partial context to unlabeled file '/usr/local/bin/k3s'
[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-agent-uninstall.sh
[INFO] env: Creating environment file /etc/systemd/system/k3s-agent.service.env
[INFO] systemd: Creating service file /etc/systemd/system/k3s-agent.service
[INFO] systemd: Enabling k3s-agent unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s-agent.service → /etc/systemd/system/k3s-agent.service.
[INFO] systemd: Starting k3s-agent
k3s-agent VMシェルを終了します:
exit
クラスターを確認する
マルチパスVMホスト(またはK3S仮想マシンの外部)でkubectlを構成する前に、K3Sクラスターが適切にセットアップされていることをすばやく確認したいと思います。
- 必要に応じてターミナルウィンドウを開きます。
- k3s-master VMでシェルを開きます:
multipass shell k3s-master
クラスタ内のノードを一覧表示します:
sudo kubectl get nodes -o wide
私の場合、ノードリストは次のようになります。
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k3s-agent Ready <none> 5m31s v1.17.4+k3s1 192.168.64.10 <none> Ubuntu 18.04.4 LTS 4.15.0-91-generic containerd://1.3.3-k3s2
k3s-master Ready master 39m v1.17.4+k3s1 192.168.64.7 <none> Ubuntu 18.04.4 LTS 4.15.0-91-generic containerd://1.3.3-k3s2
exit
外部kubectlの構成
K3Sクラスターが稼働している状態で、開発用コンピューターであるVMホストにインストールしたkubectlを構成して、K3Sクラスターを管理できるようにします。
マスターノードのkubectl構成を取得する
作成したばかりのK3Sクラスターを管理するために外部kubectl管理ツールを構成できるようにするために、マスターノードからkubectl構成をコピーし、後でいくつかの変更を加えます。
- 必要に応じてターミナルウィンドウを開きます。
- k3s-master VMでシェルを開きます:
multipass shell k3s-master
- マスターノードのkubectl構成を表示します:
sudo kubectl config view
私の場合、次のようになります:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://127.0.0.1:6443
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
user:
password: ea3527757bd8c5c9ae8dbb00fef7595c
username: admin
構成ファイルは上記と同じではないことに注意してください。たとえば、パスワードは異なります。
- k3s-master VMシェルを終了します:
exit
kubectl構成を置き換えます
これで、VMホストのkubectl構成を、マスターノードからのkubectl構成の変更バージョンに置き換えることができます。
- 必要に応じてターミナルウィンドウを開きます。
- ローカルのkubectl構成を編集するか、存在しない場合は作成します。
vi ~/.kube/config
- コンテンツがある場合は、マスターノードのkubectl構成に置き換えます。
- クラスターのIPアドレスをk3s-masterVMのIPアドレスに変更し、TLS検証をスキップするように構成します。
結果は次のようになり、4行目と5行目が変更されます。
apiVersion: v1
clusters:
- cluster:
insecure-skip-tls-verify: true
server: https://192.168.64.7:6443
name: default
contexts:
- context:
cluster: default
user: default
name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
user:
password: ea3527757bd8c5c9ae8dbb00fef7595c
username: admin
- 構成を保存してviを終了します。
:wq - 構成を確認します:
kubectl get nodes
よりコンパクトなリストではありますが、マスターノード内からリストされたものと同じノードもリストされるはずです:
NAME STATUS ROLES AGE VERSION
k3s-master Ready master 66m v1.17.4+k3s1
k3s-agent Ready <none> 32m v1.17.4+k3s1
K3Sクラスターを再起動します
はじめにと同様に、KindからK3Sに切り替える理由の1つは、K3Sクラスターを再起動できることです。 Kubernetes関連の作業を中断する必要がある場合は、K3S仮想マシンのホストであるコンピューターをシャットダウンするだけです。後でコンピューターを再起動するときに、K3Sクラスターを再起動して以前の状態に復元するために必要なのは、次の2つのコマンドを使用してクラスターの仮想マシンを再起動することだけです。
multipass start k3s-master
multipass start k3s-agent