この記事は「RookだらけのAdvent Calender」20日目の記事です。
昨日までの4日間、makotowさんによるEdgeFSの解説をお楽しみ頂きました。Cephと並んでRook内でStableであるEdgeFSは国内での情報が非常に少なく、概要レベルの解説や「試してみた」という記事も殆ど見た覚えがありません。
Cephとは異なるCloud NativeなSDSとして期待している人も多いと思いますので、ぜひこうした情報が拡がっていくことを期待しています。
さて、今日からはRookからNFSを利用する手順を解説していきたいと思います。
が、その前に!
Rook v1.2がリリースされました
Rook 1.2 is now available! Thank you to everyone in the @rook_io community for getting another great release out. You can read more details in the latest https://t.co/8ctu2a0Mdr blog post 🤓🎉https://t.co/YTNQHHK46Z
— rook (@rook_io) December 20, 2019
こちらの解説もしたいと思っていたのですが、Advent Calenderには間に合わない!
なので、次回のJapan Rook Meetup#2でお話したいと思っています。
NFSとは
これは改めて説明することでもないですね。
NetWork File Systemの略で、古くから使われている分散ファイルシステムとそのプロトコルです。
コンテナやKubernetesの時代にあってもファイル格納や共有に利用されており、その存在が忘れられることはありません。しかし、一方でNFSが便利すぎる余り、「全部NFSで良いんじゃないの?」という議論も良く聞かれます(稀ではないのです)。
NFS(ファイルストレージ)と他のIFの差異については、ysakashitaさんのこちらの資料や先日Openshift.runでRed Hat宇都宮さんのセッションが参考になります。
また、宇都宮さんの資料はまだ公開されていないため、NFSの問題点として指摘されていたこちらのツイートを共有しておきます。
スタティックプロビジョニングを倒してから行け! #openshiftjp pic.twitter.com/rCD5emk3KJ
— SAKON (@sakon310) December 20, 2019
RookでのNFS環境構築
話が逸れました。ここからはRookを使ったNFSの環境構築の解説をしていきます。
例によって、ドキュメントのQuickstartのNFSのページに沿ってインストールをしていきます。
nfs-operatorのインストール
まずはRookのnfs-operatorをインストールします。これにより、nfs-operatorとnfs-provisionerが立ち上がってきます。
$ kubectl apply -f cluster/examples/kubernetes/nfs/operator.yaml
(略)
# 起動されたPodを確認
$ kubectl get pod -n rook-nfs-system
NAME READY STATUS RESTARTS AGE
rook-nfs-operator-65548dcccf-8td6v 1/1 Running 0 2h
rook-nfs-provisioner-6b97f4d658-5zfbr 1/1 Running 0 2h
nfs-serverの構築
次に先ほどのnfs-operatorを使って、NFSサーバをPodとして起動します。Quickstartのnfs.yamlでStorageClass周りの設定を少々修正して、applyしていきます。
修正後のyamlは以下になります。
apiVersion: v1
kind: Namespace
metadata:
name: rook-nfs
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-default-claim
namespace: rook-nfs
spec:
storageClassName: standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: nfs.rook.io/v1alpha1
kind: NFSServer
metadata:
name: rook-nfs
namespace: rook-nfs
spec:
serviceAccountName: rook-nfs
replicas: 1
exports:
- name: share1
server:
accessMode: ReadWrite
squash: "none"
# A Persistent Volume Claim must be created before creating NFS CRD instance.
persistentVolumeClaim:
claimName: nfs-default-claim
こちらをapplyしていきます。
$ kubectl apply -f nfs-standard.yaml
# Podの起動状況とそこで利用しているPVCを確認
$ kubectl get pod,pvc -n rook-nfs
NAME READY STATUS RESTARTS AGE
pod/rook-nfs-0 1/1 Running 0 5m22s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/nfs-default-claim Bound pvc-b8cea7eb-bd59-4815-82ea-e1a69cf90911 1Gi RWO standard 5m22s
上記から分かるようにrook-nfsでは1GBのボリューム(EBS)をアタッチし、それをExportする設定となっています。
今日は構築ということでここまでにしたいと思います。
まとめ
さて、どうだったでしょうか。
ここからNFSサーバ側の確認をしようと思ったのですが、そもそもNFSのオペレーションを結構忘れていました。明日、クライアント側から利用する際にその辺りも見ていきたいと思います。
よろしくお願いします。