k3os 高可用性(HA)インストール
はじめに
自宅環境にkubernetesを構築して、いろいろ検証していますが、環境を作ったり壊したりするのも段々面倒になってきました。
RancherLabsからは OS+k3s がセットになった k3os(ややこしい) がリリースされていますが、高可用性(High Availability)の設定方法の情報が少なかったのでまとめておきます。
環境
今回の環境はマスターノード3台を立ち上げます。ワーカーノードの追加は説明しません。
- ノード3台(仮想環境でも、物理環境でも。今回は192.168.1.199 - 201 を割り当てます。ホスト名はnode01 - node03とします。)
- ネットワーク(DHCPサーバ。コンフィグをHTTPで取得する時に一時的にDHCPで仮のIPを取得します。)
- HTTPサーバ(IPが届けば、オンプレ、クラウド問いません。 今回は 192.168.1.80 ポート 8081にhttpで接続)
作業の流れ
- k3osのISOファイル入手
- コンフィグファイルの作成
- node01ブート&インストール
- noer02,node03ブート&インストール
- 確認
1. k3osの入手
ISOファイルを入手する
-
https://github.com/rancher/k3os
執筆時点での最新は、v0.22.2-k3s2r0
https://github.com/rancher/k3os/releases/download/v0.22.2-k3s2r0/k3os-amd64.iso
2. コンフィグファイルの作成
マスターノード内のリーダーをnode01とする。残りのノードはリーダーに接続して情報を同期する動きになる。
node01のコンフィグ: k3os.k3s_args の引数に --cluster-initを設定する。k3os.token はクラスタ内で共通とする。
このファイルをWebサーバに設置する。 URLはhttp://192.168.1.80:8081/k3os/node01/user-data
hostname: node01
ssh_authorized_keys:
- ssh-rsa #SSH公開鍵
boot_cmd:
- "ln -sv /usr/share/zoneinfo/Asia/Tokyo /etc/localtime"
init_cmd:
run_cmd:
write_files:
- content: |
[service_eth0]
Type = ethernet
IPv4 =192.168.1.199/255.255.255.0/192.168.1.254
IPv6 = off
Nameservers = 192.168.1.1,192.168.1.2,192.168.1.3
Timeservers = ntp1.jst.mfeed.ad.jp,ntp2.jst.mfeed.ad.jp,ntp3.jst.mfeed.ad.jp
owner: root:root
path: /var/lib/connman/eth0.config
permissions: '0600'
k3os:
data_sources:
- cdrom
environment: {}
password: #openssl passwd -1 で出力された文字列
k3s_args:
- server
- --no-deploy=traefik
- --cluster-init
modules:
- kvm
- nvme
token: cluster01-token
node02,node03のコンフィグ: ホスト名、IPアドレス以外は共通。 k3os.k3s_args の引数に --server http://node01のIP:6443 を設定
hostname: node02
ssh_authorized_keys:
- ssh-rsa #SSH公開鍵
boot_cmd:
- "ln -sv /usr/share/zoneinfo/Asia/Tokyo /etc/localtime"
init_cmd:
run_cmd:
write_files:
- content: |
[service_eth0]
Type = ethernet
IPv4 =192.168.1.200/255.255.255.0/192.168.1.254
IPv6 = off
Nameservers = 192.168.1.1,192.168.1.2,192.168.1.3
Timeservers = ntp1.jst.mfeed.ad.jp,ntp2.jst.mfeed.ad.jp,ntp3.jst.mfeed.ad.jp
owner: root:root
path: /var/lib/connman/eth0.config
permissions: '0600'
k3os:
data_sources:
- cdrom
environment: {}
password: #openssl passwd -1 で出力された文字列
k3s_args:
- server
- --server
- https://192.168.1.199:6443
modules:
- kvm
- nvme
token: cluster01-token
3. node01ブート&インストール
仮想環境であれば、k3os-amd64.isoファイルをCD-ROMマウントし、物理環境であれば、isoファイルをCD-R、USBメモリに焼いてブートし、K3os LiveLive CD & Installerを選択してブートする
立ち上がったら、ユーザー rancher (パスワードなし)でログインする
sudo k3os installを実行する
-
- Install to disk を選択
- cloud-init file location(file path or http URL) に http://192.168.1.80:8081/k3os/node01/user-data を入力
- continue? に y を入力
数分するとインストールを終了し、自動的にリブートする。
ホスト名、IPアドレスを確認する。
noer02,node03ブート&インストール
node01と同じようにインストールする。
コンフィグファイルを指定する部分で、各ノードのコンフィグファイルのURLを指定する。
確認
- kubectl で node の状態を確認
node01 [~]$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
node01 Ready control-plane,etcd,master 157m v1.22.2+k3s2
node02 Ready control-plane,etcd,master 152m v1.22.2+k3s2
node03 Ready control-plane,etcd,master 146m v1.22.2+k3s2
その他
kubeconfigファイルは、各ノードの /etc/rancher/k3s/k3s.yaml に出力されている。
まとめ
HA構成も簡単に構築できますね。 k3os や kubernetes のアップデートも簡単にできるようです。