このブログを検索

この記事の内容は、個人の見解、検証の範囲のものであり、誤りがある可能性があります。
個人の責任において情報活用をお願いします。


2023年2月28日火曜日

やってみよう自動化ツール Ansible その5 タイプLBのSVCを使えるようにMetalLBを自動で展開してみよう

えー、残念ながらコントロールプレーンへワーカーの追加を自動で行うのはうまくいきませんでした。
できないときはすっぱりあきらめて次に進みましょう。
というわけで今回は、お手製k8sでは使えないLBの役割を満たしてくれるMetalLBの構築をやっていきましょう。

その前に、前回のままだとコントロールプレーンで以下のコマンドを実施し、接続用の情報を出力しましょう。
kubeadm token create --print-join-command
このコマンドの出力をワーカーで実行してクラスターへ追加します。

コントロールプレーンへワーカー追加後は、以下のコマンドでCNI(今回はflannnel)を追加しましょう。
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

ではMetalLBの作業を自動化するにあたってMetalLBのインストール作業を確認します。
作業する端末はansibleを実行するサーバに変更してください。

公式
https://metallb.universe.tf/installation/

手順的には、以下のコマンドでインストール
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-frr.yaml

IPアドレスのレンジ等を決めるには、以下のような構成ファイルをyamlで作成してこちらも apply する。
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: l2advertisement
  namespace: metallb-system
---
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: ipaddresspool
  namespace: metallb-system
spec:
  addresses:
  - xxx.xxx.xxx.xxx-xxx.xxx.xxx.xxx ★環境に合わせてレンジを設定してください。
手順的にはこれだけなのでひとまとめにしてしまいたいですが、k8sを作ってはMetaLBを設定するという作業はあり得るのでこちらもrolesで呼び出せるようにしておきましょう。
※新環境を作る際にはIPアドレスのレンジを変更しておくことを忘れないでください。

と、いうわけなんですが、kubectlを実行するのはansibleを実行する端末ではありません。
コマンド自体は ansible を実行する際に shell を利用してコマンドを実行すればいいのですが、構成ファイルの方はコントロールプレーンへ送る必要があります。
kubectl を ansible実行端末で使えるようにするという手もありますが、今回のシリーズは ansible を使っていくことを目的としているのでなるべく ansible で頑張ろうと思います。

というわけで、手順的には以下の順になります。
構成ファイルは MetalLB_conf.yaml として作成し、ansible 実行時のカレントディレクトリに作成します。

1. ファイルをコントロールプレーンへ送る
2. 構成ファイルを apply する
3. MetalLB を apply する

roles/MetalLB/tasks/main.yaml への記述内容としては以下になります。
- name: Config File Copy
  copy:
    src: MetalLB_conf.yaml
    dest: /root/MetalLB_conf.yaml

- name: Config apply
  shell : kubectl apply -f /root/MetalLB_conf.yaml

- name: MetalLB apply
  shell : kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-frr.yaml

そしてこれを呼び出す k8s-add.yaml を以下のように作成します。

- name: k8s add
  hosts: kubectl
  remote_user: root

  tasks:
    - name: setup
      include_role:
        name: MetalLB
今回は単品となりますが、この yaml に今回のように必要に応じて追加する機能への処理を足していくことで、k8s 構築後の作業が楽になるはずです。
準備ができたら以下のコマンドで処理を実行してみましょう。

ansible-playbook k8s-add.yaml

エラーにならなければ問題なく成功していると思いますが、確認したい場合はLBタイプのServiceを適当に作成して『EXTERNAL-IP』からLBに与えた範囲からIPアドレスが払い出されているか確認してください。
次は nfs-client の構築を自動化したいと思います。