クラスター・ロードバランサー
このセクションでは、外部ロードバランサーを高可用性(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
- Nginx
HAProxyは、TCPロードバランサーを提供するオープンソースのオプションです。また、ロードバランサー自体のHAをサポートし、すべてのレベルで冗長性を確保します。詳細については、HAProxy Documentationを参照してください。
さらに、クラスターにアクセスするために使用される仮想IP(VIP)を生成するためにKeepAlivedを使用します。詳細については、KeepAlived Documentationを参照してください。
- HAProxyとKeepAlivedをインストールします:
sudo apt-get install haproxy keepalived
- 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
- 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
}
}
- lb-1とlb-2でHAProxyとKeepAlivedを再起動します:
systemctl restart haproxy
systemctl restart keepalived
- 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