長い間、私はRaspberryPi上にKubernetesクラスターを構築することに非常に興味を持っていました。インターネットでいくつかのチュートリアルを見つけて実際の操作を行った後、Raspberry PiにKubernetesをインストールし、3つのPiクラスターで作業することができました。ただし、マスターノードのRAMとCPUの要件は、Raspberry Piが提供できる要件を超えているため、Kubernetesタスクを実行するときのパフォーマンスは優れていません。これにより、Kubernetesを適切にアップグレードすることも不可能になります。
そのため、業界で最も広く使用されているKubernetes管理プラットフォームの作成者であるRancher Labsが軽量のKubernetesリリースK3をリリースしたのを見て、私は非常に興奮しました。リソースに制約のあるシナリオ向けに設計され、ARMプロセッサ向けに最適化されています。これにより、RaspberryPiでKubernetesを実行することがより実現可能になります。この記事では、K3とRaspberryPiを使用してKubernetesクラスターを作成します。
準備
この記事でKubernetesクラスターを作成するには、以下を準備する必要があります。
-
少なくとも1つのRaspberryPi(SDカードと電源アダプター付き)
-
イーサネットケーブル
-
すべてのRaspberryPiを相互に接続するスイッチまたはルーター
インターネットからK3をインストールするので、ルーター経由でインターネットにアクセスする必要があります。
クラスターアーキテクチャ
このクラスターでは、3つのRaspberryPiを使用します。最初のRaspberryPiでは、kmasterという名前を付け、静的IP 192.168.0.50を割り当てました(ローカルネットワークが192.168.0.0/24であるため)。最初のワーカーノード(つまり、2番目のPi)は、knode1と呼ばれ、IP192.168.0.51を割り当てます。最後のワーカーノード。これをknode2と呼び、IP192.168.0.52を割り当てます。
もちろん、ネットワークが私のものと異なる場合は、ネットワークIPを取得するために使用できます。この記事でIPが使用されている場合は、独自の値を置き換えるだけです。
各ノードをIPで参照する必要がなくなるように、そのホスト名をPCの/ etc / hostsファイルに追加します。
echo -e "192.168.0.50\tkmaster" | sudo tee -a /etc/hosts
echo -e "192.168.0.51\tknode1" | sudo tee -a /etc/hosts
echo -e "192.168.0.52\tknode2" | sudo tee -a /etc/hosts
マスターノードをインストールします
これで、マスターノードのインストールを開始する準備が整いました。最初のステップは、最新のRaspbianミラーをインストールすることです。最新のミラーが必要な理由について詳細な記事を書きました。興味のある友達はリンクでそれをチェックできます:
https://carpie.net/articles/headless-pi-with-static-ip-wired-edition
次に、Raspbianのインストールを開始し、SSHサーバーを有効にして、kmasterのホスト名を設定し、静的IP192.168.0.50を割り当てます。
Raspbianがマスターノードにインストールされたので、マスターPiを有効にして、sshを介して入力します。
ssh pi@kmaster
これで、K3をインストールする準備が整いました。マスターPiで実行します。
curl -sfL https://get.k3s.io | sh -
コマンドが実行されると、シングルノードクラスターがセットアップされて実行されます。確認してみましょう。まだこのPiで、実行します。
sudo kubectl get nodes
次のようなものが表示されます。
NAME STATUS ROLES AGE VERSION
kmaster Ready master 2m13s v1.14.3-k3s.1
提取join token
ワーカーノードのペアを追加します。これらのノードにK3をインストールするには、結合トークンが必要です。結合トークンは、マスターノードのファイルシステムに存在します。コピーしてどこかに保存しましょう。後で入手できます。
sudo cat /var/lib/rancher/k3s/server/node-token
ワーカーノードをインストールします
2つのワーカーノード用にいくつかのSDカードを入手し、各ノードにRaspbianをインストールします。そのうちの1つについて、ホスト名をknode1に設定し、IP192.168.0.51を割り当てます。もう1つは、ホスト名をknode2に設定し、IP192.168.0.52を割り当てます。それでは、K3をインストールしましょう。
最初のワーカーノードを起動し、sshを介して入力します。
ssh pi@knode1
このPiでは、以前と同じようにK3をインストールしますが、インストーラーに追加のパラメーターを指定して、ワーカーノードをインストールし、既存のクラスターに参加することを通知します。
curl -sfL http://get.k3s.io | K3S_URL=https://192.168.0.50:6443 \
K3S_TOKEN=join_token_we_copied_earlier sh -
前のセクションから抽出した結合トークンに置き換えますjoin_token_we_copied_earlier
。knode2に対してこれらの手順を繰り返します。
PCからクラスターにアクセスする
クラスタをチェックまたは変更するときはいつでも、マスターノードにSSHで接続してkubectlを実行する必要がありますが、これは非常に面倒です。したがって、kubectlをPCに配置するのが好きですが、最初にマスターノードから必要な構成情報を取得しましょう。SSH経由でkmasterに入り、以下を実行します。
sudo cat /etc/rancher/k3s/k3s.yaml
構成情報をコピーして、PCに戻します。構成用のディレクトリを作成します。
mkdir ~/.kube
コピーした構成をとして保存します~/.kube/config
。次に、ファイルを編集して変更します。
server: https://localhost:6443
に:
server: https://kmaster:6443
安全のために、ファイルの読み取り/書き込み権限を自分自身に制限してください。
chmod 600 ~/.kube/config
それでは、kubectlをPCにインストールしましょう(まだインストールしていない場合)。KubernetesのWebサイトには、さまざまなプラットフォームでこれを行うための手順があります。Linux Mint(Ubuntu派生物)を実行しているので、ここでUbuntuの手順を示します。
sudo apt update && sudo apt install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | \
sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt update && sudo apt install kubectl
まだ慣れていない場合は、上記のコマンドでDebianリポジトリをKubernetesに追加し、セキュリティを確保するためにGPGキーを取得してから、パッケージリストを更新してkubectlをインストールします。これで、標準のソフトウェア更新メカニズムを介してkubectlの更新について通知されます。
これで、PCからクラスターを確認して、次のコマンドを実行できます。
kubectl get nodes
次のようなものが表示されます。
NAME STATUS ROLES AGE VERSION
kmaster Ready master 12m v1.14.3-k3s.1
knode1 Ready worker 103s v1.14.3-k3s.1
knode1 Ready worker 103s v1.14.3-k3s.1
おめでとう!これで、3ノードのKubernetesクラスターが機能します。
K3の追加ボーナスを使用する
kubectl get pods --all-namespacesを実行すると、Traefikからいくつかの追加のポッドが表示されます。Treafikは、単一のエントリポイントからクラスタにトラフィックを転送するために使用できるリバースプロキシおよびロードバランサです。もちろん、KubernetesはTraefikをインストールすることもできますが、デフォルトでは提供されていません。したがって、K3sでのTraefikのデフォルトのプロビジョニングは素晴らしいデザインです!