このブログを検索

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


2023年3月31日金曜日

やってみよう自動化ツール Ansible その6 動的PVCが使えるようにnfs-clientを自動で展開してみよう

今回は、Podに永久ストレージを自動で追加してくれる動的PVCを使えるように、nfs-clientの導入をやっていきます。
事前準備として、コントロールプレーンノード、ワーカーノードからNFSの領域がアクセスできるようにしておいてください。

NFS用意してないよっていう人は、以下の作業で検証用のNFSを適当に作ってください。
1. マウントする領域を作成する(mkdir /share/nfs)
2. yum install nfs-utils で nfs-utils をインストール
3. vi /etc/exports で通信設定を行う
/share/nfs NFSサーバーにアクセス可能にするネットワーク(rw,no_root_squash,async) 4. firewallを無効
5. サービスを起動する
systemctl start rpcbind systemctl start nfs
NFSを用意したら忘れずにWorkerノードにマウントしてください
1. マウントポイント作成(mkdir /share/nfs-client)
2. yum install nfs-utils で nfs-utils をインストール
3. mount -v -t nfs NFSのIPアドレス:/share/nfs /share/nfs-client
準備ができたら、次に進みましょう。
まず、手動でやる際のnfs-client導入手順確認です
1. nfs-clientをインストールするためにhelmを利用するので導入します

   curl -O https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
   bash ./get-helm-3

2. helmからnfs-clientをデプロイできるようにリポジトリを追加します

   helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

3. helmからnfs-clientをデプロイします

   helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
     --set nfs.server=NFSのIPアドレス \
     --set nfs.path=/share/nfs
手順としては上記で完了です。
これをもとにansible用のプレイブックを作成していきましょう。

まず、今回もrolesを使っていこうと思うので、roles/nfs_client/tasks/main.yaml を作成し以下の内容を記載します。
---
- name: helm get
  shell: curl -O https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3

- name: helm install
  shell: bash ./get-helm-3

- name: helm add repo
  shell: helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/

- name: nfs-client deploy
  shell: helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set nfs.server=NFSのIPアドレス --set nfs.path=/share/nfs
---
続いて前回作成したrolesを呼び出す用のプレイブック(k8s-add.yaml)に、このrolesを追加します。
- name: setup k8s
  hosts: kubectl
  remote_user: root

  tasks:
#    - name: metallb setup
#      include_role:
#        name: MetalLB

    - name: nfs-client setup
      include_role:
        name: nfs_client
前回作成済みのMetalLBがすでにあるので、MetalLBについての処理はコメントアウトしています。
あとは、ansibleからプレイブックを実行するだけです。

ansible-playbook k8s-add.yaml
正常に処理が行われたら、PVCが使えるか確認してみましょう。
まず、以下のコマンドで nfs-client を導入したことにより追加された storage class と pod を確認します。
kubectl get pod,sc
nfs-subdir-external-provisioner-xxxxx という pod と nfs-client というstorage class ができていると思います。
現時点では pvc も pv もないことを確認しておいてください。
kubectl get pv,pvc
No resources found
では、pvcを作成するyamlを作成します。
pvc.yaml
----
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-provisioner
  annotations:
    volume.beta.kubernetes.io/storage-class: nfs-client
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
----
以下のコマンドでPVCを作成します。
kubectl apply -f pvc.yaml
pvc とそれに Bound された pv が作成されていることを確認してください。
# kubectl get pv,pvc
今回は以上となります。