事前準備として、コントロールプレーンノード、ワーカーノードからNFSの領域がアクセスできるようにしておいてください。
NFS用意してないよっていう人は、以下の作業で検証用のNFSを適当に作ってください。
1. マウントする領域を作成する(mkdir /share/nfs)NFSを用意したら忘れずにWorkerノードにマウントしてください
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
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,scnfs-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.yamlpvc とそれに Bound された pv が作成されていることを確認してください。
# kubectl get pv,pvc今回は以上となります。