K3s は軽量の Kubernetes です。サーバーは最低でも 512M のメモリで動作します。
異なるアカウントや異なるクラウドサービスプロバイダー間では、内部ネットワークは接続できません。したがって、パブリックネットワークを介したコンテナネットワーク通信を実現し、任意のノード上の pod が任意のノード上の pod や service にアクセスできるようにし、通常の Kubernetes クラスターの体験と一致させる必要があります。
入門ガイドとマルチクラウドソリューションを参考にして再整理します。
目標:ハイブリッドクラウド(Tencent Cloud サーバー + Oracle サーバー + Microsoft Azure サーバー)環境での K3S クラスターを実現すること
サーバーのインストール#
# ローカルネットワークソリューション
curl -sfL https://get.k3s.io | sh -
# マルチクラウドインストールソリューション
curl -sfL https://get.k3s.io | sh -s - --node-external-ip=サーバーのパブリックアドレス --flannel-backend=wireguard-native
中国のユーザーは、以下の方法でインストールを加速できます:
# ローカルネットワークソリューション
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
# マルチクラウドインストールソリューション
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - --node-external-ip=サーバーのパブリックアドレス --flannel-backend=wireguard-native --flannel-external-ip
このインストールを実行後:
K3s サービスは、ノードが再起動したり、プロセスがクラッシュしたり、強制終了された場合に自動的に再起動するように構成されます。
他のユーティリティがインストールされます。これには ```kubectl```、```crictl```、```ctr```、```k3s-killall.sh```、および ```k3s-uninstall.sh``` が含まれます。
kubeconfig ファイルは ```/etc/rancher/k3s/k3s.yaml``` に書き込まれ、K3s によってインストールされた kubectl はこのファイルを自動的に使用します。
他のエージェントノードのインストール#
他のエージェントノードをインストールし、クラスターに追加するには、K3S_URL および K3S_TOKEN 環境変数を使用してインストールスクリプトを実行します。
# ローカルネットワークソリューション
curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -
# マルチクラウドインストールソリューション
curl -sfL https://get.k3s.io | K3S_URL=https://サーバーのパブリックアドレス:6443 K3S_TOKEN=mynodetoken sh -s - --node-external-ip=エージェントのパブリックアドレス
# ローカルネットワークソリューション
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -
# マルチクラウドインストールソリューション
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://サーバーのパブリックアドレス:6443 K3S_TOKEN=mynodetoken sh -s - --node-external-ip=エージェントのパブリックアドレス
備考:
K3S_URL
パラメータは、インストーラーが K3s をサーバーではなくエージェントとして構成する原因となります。K3s エージェントは、URL でリッスンしている K3s サーバーに登録されます。K3S_TOKEN
で使用される値は、サーバーノードの /var/lib/rancher/k3s/server/node-token
に保存されます。
各ホストは一意のホスト名を持っている必要があります。コンピュータに一意のホスト名がない場合は、K3S_NODE_NAME 環境変数を渡し、各ノードに有効かつ一意のホスト名を提供してください。
ローカルで k3s クラスターにアクセスする#
kubectl をインストールします。
brew install kubectl
サーバーの /etc/rancher/k3s/k3s.yaml
の内容をコピーします。
ローカルの ~/.kube/config
ファイルに書き込みます。
scp コピーコマンドの参考:
scp server:/etc/rancher/k3s/k3s.yaml ~/.kube/config
テストコマンド#
ノードの状態を確認します:
$ kubectl get node
NAME STATUS ROLES AGE VERSION
vm-4-10-debian Ready <none> 35m v1.27.6+k3s1
vm-4-9-debian Ready control-plane,master 39m v1.27.6+k3s1
クロスネットワーク通信を確認します:
$ kubectl get pod -A -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system local-path-provisioner-957fdf8bc-gcgj4 1/1 Running 0 38m 10.42.0.5 vm-4-9-debian <none> <none>
kube-system coredns-77ccd57875-vsxmt 1/1 Running 0 38m 10.42.0.6 vm-4-9-debian <none> <none>
kube-system helm-install-traefik-crd-sv9jh 0/1 Completed 0 38m 10.42.0.4 vm-4-9-debian <none> <none>
kube-system metrics-server-5f8b4ffd8-zd4db 1/1 Running 0 38m 10.42.0.3 vm-4-9-debian <none> <none>
kube-system helm-install-traefik-jp8sk 0/1 Completed 2 38m 10.42.0.2 vm-4-9-debian <none> <none>
kube-system svclb-traefik-0782c5d1-wr5kd 2/2 Running 0 37m 10.42.0.7 vm-4-9-debian <none> <none>
kube-system traefik-64f55bb67d-4lr2g 1/1 Running 0 37m 10.42.0.8 vm-4-9-debian <none> <none>
kube-system svclb-traefik-0782c5d1-444jv 2/2 Running 0 34m 10.42.1.2 vm-4-10-debian <none> <none>
ノードのリソース使用状況を確認します:
$ kubectl top node
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
vm-4-9-debian 24m 2% 1369Mi 69%
vm-4-10-debian <unknown> <unknown> <unknown> <unknown>
POD のリソース使用状況を確認します:
$ kubectl top pod -A
NAMESPACE NAME CPU(cores) MEMORY(bytes)
kube-system coredns-77ccd57875-vsxmt 1m 20Mi
kube-system local-path-provisioner-957fdf8bc-gcgj4 1m 14Mi
kube-system metrics-server-5f8b4ffd8-zd4db 3m 24Mi
kube-system svclb-traefik-0782c5d1-wr5kd 0m 0Mi
kube-system traefik-64f55bb67d-4lr2g 1m 33Mi
これで k3s クラスターのデプロイが完了しました。さらにホストがある場合は、エージェントの設定手順を繰り返して追加できます。
K3s サーバーノードのインバウンドルール#
プロトコル | ポート | ソース | 目標 | 説明 |
---|---|---|---|---|
TCP | 2379-2380 | サーバー | サーバー | 埋め込み etcd を持つ HA のみ必要 |
TCP | 6443 | エージェント | サーバー | K3s スーパーバイザーと Kubernetes API サーバー |
UDP | 8472 | すべてのノード | すべてのノード | Flannel VXLAN のみ必要 |
TCP | 10250 | すべてのノード | すべてのノード | Kubelet メトリクス |
UDP | 51820 | すべてのノード | すべてのノード | IPv4 を使用する Flannel Wireguard のみ必要 |
UDP | 51821 | すべてのノード | すべてのノード | IPv6 を使用する Flannel Wireguard のみ必要 |
すべてのアウトバウンドトラフィックは通常許可されています。