2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

k3os 高可用性(HA)インストール

Posted at

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で接続)

作業の流れ

  1. k3osのISOファイル入手
  2. コンフィグファイルの作成
  3. node01ブート&インストール
  4. noer02,node03ブート&インストール
  5. 確認

1. k3osの入手

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を選択してブートする
スクリーンショット 2022-10-13 11.36.45.png

立ち上がったら、ユーザー rancher (パスワードなし)でログインする
スクリーンショット 2022-10-13 11.41.22.png

sudo k3os installを実行する

スクリーンショット 2022-10-13 11.43.42.png

数分するとインストールを終了し、自動的にリブートする。

スクリーンショット 2022-10-13 11.44.05.png

ホスト名、IPアドレスを確認する。

スクリーンショット 2022-10-13 11.45.56.png

noer02,node03ブート&インストール

node01と同じようにインストールする。
コンフィグファイルを指定する部分で、各ノードのコンフィグファイルのURLを指定する。

スクリーンショット 2022-10-13 11.49.03.png

確認

  • 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 のアップデートも簡単にできるようです。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?