注) 本記事で取り扱っている CoreOS のバージョンは stable (835.9.0) です.
CoreOS に限らず,Linux カーネルを用いたシステムでロードバランシングを行う場合,最もお手軽な手段として LVS があります.
しかしながら,CoreOS に含まれる Linux カーネルは,LVS を担う ip_vs がカーネルモジュールとなっています.
# lsmod | grep ip_vs
#
もちろん,modprobe でロード可能です.
# modprobe ip_vs
# lsmod | grep ip_vs
ip_vs 135168 0
nf_conntrack 90112 1 ip_vs
libcrc32c 16384 1 ip_vs
#
しかし,このままでは再起動したとき, ip_vs モジュールはロードされません.
起動時に ip_vs モジュールをロードさせる
cloud-config.yml を編集します.
ip_vs.conf の書き出し
まず,先頭付近で下記のように記述して,/etc/module-load.d/ip_vs.conf を書きます.
write_files:
- path: /etc/modules-load.d/ip_vs.conf
content: ip_vs
サービスの実行指示
次に,coreos: の下に, systemd-modules-load.service を置きます.
coreos:
units:
- name: systemd-modules-load.service
command: restart
クラウド事業者など OEM 先の手が入っている場合には,もしかしたら既に記述があるかもしれません.(Azure の場合にはありませんでした)
再起動と確認
cloud-config.yml をセーブして閉じたら,リブートしてください.
再度ログインして,ip_vs モジュールがロードされていることが確認できたら,作業は終了です.
# lsmod | grep ip_vs
ip_vs 135168 0
nf_conntrack 90112 1 ip_vs
libcrc32c 16384 1 ip_vs
#
LVS を使う
LVS は有効になりましたが,CoreOS には LVS の基本的な操作を行うためのコマンドである ipvsadm
コマンドが含まれていません.
CoreOS で LVS を効果的に使うための方法は,こちらに書きました.