メインコンテンツまでスキップ

クラスター・ロードバランサー

このセクションでは、外部ロードバランサーを高可用性(HA)K3sクラスターのサーバーノードの前にインストールする方法について説明します。NginxとHAProxyの2つの例が提供されています。

ヒント

外部ロードバランサーは、Kubernetes LoadBalancerサービスをサードパーティのロードバランサーコントローラーをデプロイせずに使用できるようにする組み込みコントローラーであるServiceLBと混同しないでください。詳細については、Service Load Balancerを参照してください。

外部ロードバランサーは、ノードの登録用の固定登録アドレスを提供したり、Kubernetes APIサーバーへの外部アクセスを提供するために使用できます。LoadBalancerサービスを公開するために、外部ロードバランサーはServiceLBと一緒に、または代わりに使用できますが、ほとんどの場合、MetalLBやKube-VIPなどの代替ロードバランサーコントローラーの方が良い選択です。

前提条件

この例のすべてのノードはUbuntu 20.04を実行しています。

両方の例では、組み込みetcdを使用したHA K3sクラスターが3つのノードにインストールされていると仮定します。

各k3sサーバーは次のように構成されています:

# /etc/rancher/k3s/config.yaml
token: lb-cluster-gd
tls-san: 10.10.10.100

ノードのホスト名とIPは次の通りです:

  • server-1: 10.10.10.50
  • server-2: 10.10.10.51
  • server-3: 10.10.10.52

ロードバランシング用に追加の2つのノードがホスト名とIPで構成されています:

  • lb-1: 10.10.10.98
  • lb-2: 10.10.10.99

追加の3つのノードがホスト名とIPで存在します:

  • agent-1: 10.10.10.101
  • agent-2: 10.10.10.102
  • agent-3: 10.10.10.103

ロードバランサーのセットアップ

HAProxyは、TCPロードバランサーを提供するオープンソースのオプションです。また、ロードバランサー自体のHAをサポートし、すべてのレベルで冗長性を確保します。詳細については、HAProxy Documentationを参照してください。

さらに、クラスターにアクセスするために使用される仮想IP(VIP)を生成するためにKeepAlivedを使用します。詳細については、KeepAlived Documentationを参照してください。

  1. HAProxyとKeepAlivedをインストールします:
sudo apt-get install haproxy keepalived
  1. lb-1とlb-2の/etc/haproxy/haproxy.cfgに次の内容を追加します:
frontend k3s-frontend
bind *:6443
mode tcp
option tcplog
default_backend k3s-backend

backend k3s-backend
mode tcp
option tcp-check
balance roundrobin
default-server inter 10s downinter 5s
server server-1 10.10.10.50:6443 check
server server-2 10.10.10.51:6443 check
server server-3 10.10.10.52:6443 check
  1. lb-1とlb-2の/etc/keepalived/keepalived.confに次の内容を追加します:
vrrp_script chk_haproxy {
script 'killall -0 haproxy' # pidofよりも高速
interval 2
}

vrrp_instance haproxy-vip {
interface eth1
state <STATE> # lb-1ではMASTER、lb-2ではBACKUP
priority <PRIORITY> # lb-1では200、lb-2では100

virtual_router_id 51

virtual_ipaddress {
10.10.10.100/24
}

track_script {
chk_haproxy
}
}
  1. lb-1とlb-2でHAProxyとKeepAlivedを再起動します:
systemctl restart haproxy
systemctl restart keepalived
  1. agent-1、agent-2、およびagent-3で次のコマンドを実行してk3sをインストールし、クラスターに参加します:
curl -sfL https://get.k3s.io | K3S_TOKEN=lb-cluster-gd sh -s - agent --server https://10.10.10.100:6443

サーバーノードからkubectlを使用してクラスターと対話できます。

root@server-1 $ k3s kubectl get nodes -A
NAME STATUS ROLES AGE VERSION
agent-1 Ready <none> 32s v1.27.3+k3s1
agent-2 Ready <none> 20s v1.27.3+k3s1
agent-3 Ready <none> 9s v1.27.3+k3s1
server-1 Ready control-plane,etcd,master 4m22s v1.27.3+k3s1
server-2 Ready control-plane,etcd,master 3m58s v1.27.3+k3s1
server-3 Ready control-plane,etcd,master 3m12s v1.27.3+k3s1