このページでは、GKE On-Prem クラスタに Seesaw ロードバランサを構成する方法について説明します。
GKE On-Prem クラスタは、統合または手動のいずれかの負荷分散モードで実行できます。Seesaw ロードバランサを使用するには、手動負荷分散モードを使用します。
すべての手動負荷分散に共通の手順
Seesaw ロードバランサを構成する前に、手動の負荷分散設定に共通する次の手順を行います。
Seesaw VM の IP アドレスと VIP を予約する
Seesaw VM のペアに対して 2 つの IP アドレスを予約します。また、Seesaw VM のペアに対して 1 つの VIP を予約します。これら 3 つのアドレスはすべて、クラスタノードと同じ VLAN 上にある必要があります。
Seesaw VM を作成する
Seesaw のアクティブ / パッシブペアを実行するため、vSphere 環境に 2 つのクリーンな VM を作成します。Seesaw VM には、Ubuntu 18.04 および Linux カーネル 4.15 をおすすめしますが、他の OS バージョンも利用できます。
2 つの VM の要件は以下のとおりです。
各 VM に、ens192 という NIC がある。この NIC は VM の IP アドレスで構成されています。
各 VM に、ens224 という NIC がある。この NIC に IP アドレスは必要ありません。
VM はクラスタノードと同じ VLAN 上にある必要があります。
ens224 のポートグループは、MAC アドレスの変更と偽装転送を許可する必要がある。これは、Seesaw VM が Virtual Router Redundancy Protocol(VRRP)を使用するためです。つまり、Seesaw はネットワーク インターフェースの MAC アドレスを構成できる必要があります。具体的には、Seesaw は MAC アドレスを 00-00-5E-00-01- [VRID] の形式の VRRP MAC アドレスに設定する必要があります。ここで、[VIRD] は Seesaw ペアの仮想ルーター識別子です。
これは、ポートグループのポリシー設定にある vSphere ユーザー インターフェースで構成できます。
Seesaw をコンパイルする
Seesaw バイナリをビルドするには、Golang がインストールされているマシンで次のスクリプトを実行します。
#!/bin/bash
set -e
DEST=$PWD/seesaw_files
export GOPATH=$DEST/seesaw
SEESAW=$GOPATH/src/github.com/google/seesaw
mkdir -p $GOPATH
cd $GOPATH
sudo apt -y install libnl-3-dev libnl-genl-3-dev
git clone https://github.com/google/seesaw.git $SEESAW
cd $SEESAW
GO111MODULE=on GOOS=linux GOARCH=amd64 make install
cp -r $GOPATH/bin $DEST/
mkdir -p $DEST/cfg
cp etc/seesaw/watchdog.cfg etc/systemd/system/seesaw_watchdog.service $DEST/cfg/
sudo rm -rf $GOPATH
これにより、Seesaw バイナリと構成ファイルを格納する seesaw_files
ディレクトリが生成されます。このファイルを表示するには、tree
コマンドを実行します。
tree seesaw_files
出力には生成されたディレクトリとファイルが表示されます。
seesaw_files/ ├── bin │ ├── seesaw_cli │ ├── seesaw_ecu │ ├── seesaw_engine │ ├── seesaw_ha │ ├── seesaw_healthcheck │ ├── seesaw_ncc │ └── seesaw_watchdog └── cfg ├── seesaw_watchdog.service └── watchdog.cfg 2 directories, 9 files
環境変数をエクスポートする
Seesaw VM を構成する前に、いくつかの環境変数をエクスポートする必要があります。
各 Seesaw VM で、次の環境変数をエクスポートします。
NODE_IP
: Seesaw VM の IP アドレス。PEER_IP
: 他方の Seesaw VM の IP アドレス。NODE_NETMASK
: クラスタノードの CIDR 範囲の接頭辞の長さ。VIP
: VM の Seesaw ペア用に予約した VIP。VRID
: Seesaw ペアに使用する仮想ルーター識別子。
以下に例を示します。
export NODE_IP=203.0.113.2 export PEER_IP=203.0.113.3 export NODE_NETMASK=25 export VIP=203.0.113.4 export VIRD=128
Seesaw VM を構成する
seesaw_files
ディレクトリを 2 つの Seesaw VM にコピーします。
各 Seesaw VM 上の seesaw_files
ディレクトリで、次のスクリプトを実行します。
# execute_seesaw.sh
#!/bin/bash
set -e
# Tools
apt -y install ipvsadm libnl-3-dev libnl-genl-3-dev
# Module
modprobe ip_vs
modprobe nf_conntrack_ipv4
modprobe dummy numdummies=1
echo "ip_vs" > /etc/modules-load.d/ip_vs.conf
echo "nf_conntrack_ipv4" > /etc/modules-load.d/nf_conntrack_ipv4.conf
echo "dummy" > /etc/modules-load.d/dummy.conf
echo "options dummy numdummies=1" > /etc/modprobe.d/dummy.conf
# dummy interface
ip link add dummy0 type dummy || true
cat > /etc/systemd/network/10-dummy0.netdev <<EOF
[NetDev]
Name=dummy0
Kind=dummy
EOF
DIR=./seesaw_files
mkdir -p /var/log/seesaw
mkdir -p /etc/seesaw
mkdir -p /usr/local/seesaw
cp $DIR/bin/* /usr/local/seesaw/
chmod a+x /usr/local/seesaw/*
cp $DIR/cfg/watchdog.cfg /etc/seesaw
cat > /etc/seesaw/seesaw.cfg <<EOF
[cluster]
anycast_enabled = false
name = bundled-seesaw-onprem
node_ipv4 = $NODE_IP
peer_ipv4 = $PEER_IP
vip_ipv4 = $VIP
vrid = $VRID
[config_server]
primary = 127.0.0.1
[interface]
node = ens192
lb = ens224
EOF
cat > /etc/seesaw/cluster.pb <<EOF
seesaw_vip: <
fqdn: "seesaw-vip."
ipv4: "$VIP/$NODE_NETMASK"
status: PRODUCTION
>
node: <
fqdn: "node.$NODE_IP."
ipv4: "$NODE_IP/$NODE_NETMASK"
>
node: <
fqdn: "node.$PEER_IP."
ipv4: "$PEER_IP/$NODE_NETMASK"
>
EOF
cp $DIR/cfg/seesaw_watchdog.service /etc/systemd/system
systemctl --system daemon-reload
Seesaw を再構成する
以下の構成では、クラスタノードの IP アドレスを指定します。また、コントロール プレーンと Ingress コントローラの VIP も指定します。記載されているように、この構成では次のアドレスを指定します。
100.115.222.143 は、管理コントロール プレーンの VIP です。
100.115.222.144 は、管理クラスタ Ingress コントローラの VIP です。
100.115.222.146 は、ユーザー コントロール プレーンの VIP です。
100.115.222.145 は、ユーザー クラスタ Ingress コントローラの VIP です。
管理クラスタノードのアドレスは、100.115.222.163、100.115.222.164、100.115.222.165、100.115.222.166 です。
ユーザー クラスタ ノードのアドレスは、100.115.222.167、100.115.222.168、100.115.222.169 です。
管理クラスタとユーザー クラスタに選択した VIP と IP アドレスを含むように構成を編集します。次に、各 Seesaw VM で構成を /etc/seesaw/cluster.pb
に追加します。
ユーザー クラスタ コントロール プレーンは、管理クラスタの Service として実装されています。したがって、user-1-control-plane
の下のノード IP アドレスは管理クラスタノードのアドレスです。
vserver: <
name: "admin-control-plane"
entry_address: <
fqdn: "admin-control-plane"
ipv4: "100.115.222.143/32"
>
rp: "cloudysanfrancisco@gmail.com"
vserver_entry: <
protocol: TCP
port: 443
scheduler: WLC
mode: DSR
healthcheck: <
type: HTTP
port: 10256
mode: PLAIN
proxy: false
tls_verify: false
send: "/healthz"
>
>
backend: <
host: <
fqdn: "admin-1"
ipv4: "100.115.222.163/32"
>
>
backend: <
host: <
fqdn: "admin-2"
ipv4: "100.115.222.164/32"
>
>
backend: <
host: <
fqdn: "admin-3"
ipv4: "100.115.222.165/32"
>
>
backend: <
host: <
fqdn: "admin-4"
ipv4: "100.115.222.166/32"
>
>
>
vserver: <
name: "admin-ingress-controller"
entry_address: <
fqdn: "admin-ingress-controller"
ipv4: "100.115.222.144/32"
>
rp: "cloudysanfrancisco@gmail.com"
vserver_entry: <
protocol: TCP
port: 80
scheduler: WLC
mode: DSR
healthcheck: <
type: HTTP
port: 10256
mode: PLAIN
proxy: false
tls_verify: false
send: "/healthz"
>
>
vserver_entry: <
protocol: TCP
port: 443
scheduler: WLC
mode: DSR
healthcheck: <
type: HTTP
port: 10256
mode: PLAIN
proxy: false
tls_verify: false
send: "/healthz"
>
>
backend: <
host: <
fqdn: "admin-1"
ipv4: "100.115.222.163/32"
>
>
backend: <
host: <
fqdn: "admin-2"
ipv4: "100.115.222.164/32"
>
>
backend: <
host: <
fqdn: "admin-3"
ipv4: "100.115.222.165/32"
>
>
backend: <
host: <
fqdn: "admin-4"
ipv4: "100.115.222.166/32"
>
>
>
vserver: <
name: "user-1-control-plane"
entry_address: <
fqdn: "user-1-control-plane"
ipv4: "100.115.222.146/32"
>
rp: "cloudysanfrancisco@gmail.com"
vserver_entry: <
protocol: TCP
port: 443
scheduler: WLC
mode: DSR
healthcheck: <
type: HTTP
port: 10256
mode: PLAIN
proxy: false
tls_verify: false
send: "/healthz"
>
>
backend: <
host: <
fqdn: "admin-1"
ipv4: "100.115.222.163/32"
>
>
backend: <
host: <
fqdn: "admin-2"
ipv4: "100.115.222.164/32"
>
>
backend: <
host: <
fqdn: "admin-3"
ipv4: "100.115.222.165/32"
>
>
backend: <
host: <
fqdn: "admin-4"
ipv4: "100.115.222.166/32"
>
>
>
vserver: <
name: "user-1-ingress-controller"
entry_address: <
fqdn: "user-1-ingress-controller"
ipv4: "100.115.222.145/32"
>
rp: "cloudysanfrancisco@gmail.com"
vserver_entry: <
protocol: TCP
port: 80
scheduler: WLC
mode: DSR
healthcheck: <
type: HTTP
port: 10256
mode: PLAIN
proxy: false
tls_verify: false
send: "/healthz"
>
>
vserver_entry: <
protocol: TCP
port: 443
scheduler: WLC
mode: DSR
healthcheck: <
type: HTTP
port: 10256
mode: PLAIN
proxy: false
tls_verify: false
send: "/healthz"
>
>
backend: <
host: <
fqdn: "user-1"
ipv4: "100.115.222.167/32"
>
>
backend: <
host: <
fqdn: "user-2"
ipv4: "100.115.222.168/32"
>
>
backend: <
host: <
fqdn: "user-3"
ipv4: "100.115.222.169/32"
>
>
>
Seesaw サービスを開始する
各 Seesaw VM で、次のコマンドを実行します。
systemctl --now enable seesaw_watchdog.service
これで、両方の Seesaw VM で Seesaw が稼働します。/var/log/seesaw/
でログを確認できます。
クラスタの構成ファイルを変更する
クラスタを作成する前に、クラスタ構成ファイルを生成します。構成ファイルの変更の説明に沿って、クラスタ構成ファイルに入力します。
特に、lbmode
を「手動」に設定します。また、admincluster
と usercluster
の両方の下の manuallbspec
フィールドと vips
フィールドに入力します。次に例を示します。
admincluster: manuallbspec: ingresshttpnodeport: 32527 ingresshttpsnodeport: 30139 controlplanenodeport: 30968 vips: controlplanevip: "100.115.222.143" ingressvip: "100.115.222.144" usercluster: manuallbspec: ingresshttpnodeport: 30243 ingresshttpsnodeport: 30879 controlplanenodeport: 30562 vips: controlplanevip: "100.115.222.146" ingressvip: "100.115.222.145" lbmode: "Manual"
既知の問題
現在、gkectl
のロードバランサ検証では Seesaw はサポートされておらず、エラーが返される可能性があります。Seesaw を使用するクラスタをインストールまたはアップグレードする場合は、--skip-validation-load-balancer
フラグを渡します。
詳しくは、トラブルシューティングをご覧ください。