LoginSignup
12
9

More than 3 years have passed since last update.

NFS(1) Rookで環境を構築してみる

Last updated at Posted at 2019-12-21

この記事は「RookだらけのAdvent Calender」20日目の記事です。

昨日までの4日間、makotowさんによるEdgeFSの解説をお楽しみ頂きました。Cephと並んでRook内でStableであるEdgeFSは国内での情報が非常に少なく、概要レベルの解説や「試してみた」という記事も殆ど見た覚えがありません。
Cephとは異なるCloud NativeなSDSとして期待している人も多いと思いますので、ぜひこうした情報が拡がっていくことを期待しています。

さて、今日からはRookからNFSを利用する手順を解説していきたいと思います。

が、その前に!

Rook v1.2がリリースされました

こちらの解説もしたいと思っていたのですが、Advent Calenderには間に合わない!
なので、次回のJapan Rook Meetup#2でお話したいと思っています。

NFSとは

これは改めて説明することでもないですね。
NetWork File Systemの略で、古くから使われている分散ファイルシステムとそのプロトコルです。

コンテナやKubernetesの時代にあってもファイル格納や共有に利用されており、その存在が忘れられることはありません。しかし、一方でNFSが便利すぎる余り、「全部NFSで良いんじゃないの?」という議論も良く聞かれます(稀ではないのです)。

NFS(ファイルストレージ)と他のIFの差異については、ysakashitaさんのこちらの資料や先日Openshift.runでRed Hat宇都宮さんのセッションが参考になります。

また、宇都宮さんの資料はまだ公開されていないため、NFSの問題点として指摘されていたこちらのツイートを共有しておきます。

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は以下になります。

nfs-standard.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のオペレーションを結構忘れていました。明日、クライアント側から利用する際にその辺りも見ていきたいと思います。

よろしくお願いします。

12
9
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
12
9