パラボラアンテナと星の日記

あることないこと

CoreOSだけでNFSサーバー in EC2

CoreOSだけでNFS。dockerナシでできました。

CoreOSにはrpc-mountdやらnfsdやらが入ってて、いろいろやればできた。

以下、一応動作確認したサーバー側(EC2 1台)とクライアント側(EC2 1台)のyamlの中身です。

サーバー側

#cloud-config

hostname: nfs-server
write-files:
  - path: /etc/exports
    permissions: '0644'
    content: |
      /var/data    172.31.0.0/16(rw,async,no_subtree_check,no_root_squash,fsid=0)
coreos:
  units:
    - name: timezone.service
      command: start
      content: |
        [Unit]
        Description=timezone
        [Service]
        Type=oneshot
        RemainAfterExit=yes
        ExecStart=/usr/bin/ln -sf ../usr/share/zoneinfo/Japan /etc/localtime
    - name: volume.service
      command: start
      content: |
        [Unit]
        Description=mkdir -p /var/data
        [Service]
        Type=oneshot
        RemainAfterExit=yes
        ExecStart=/usr/bin/mkdir -p /var/data
    - name: rpc-mountd.service
      command: start
    - name: nfsd.service
      command: start

ポイント(?)

  • ExecStart=/usr/bin/mkdir -p /var/data
    • ディレクトリ作るやり方が分からず、こうなった。もっとスマートに書くやり方教えて欲しい…

クライアント側

サーバー側とは別のEC2インスタンス

#cloud-config

hostname: nfs-client01
write-files:
  - path: /etc/conf.d/nfs
    permissions: '0644'
    content: |
      OPTS_RPC_MOUNTD=""
coreos:
  units:
    - name: timezone.service
      command: start
      content: |
        [Unit]
        Description=timezone
        [Service]
        Type=oneshot
        RemainAfterExit=yes
        ExecStart=/usr/bin/ln -sf ../usr/share/zoneinfo/Japan /etc/localtime
    - name: rpc-statd.service
      command: start
      enable: true
    - name: mnt-data.mount
      command: start
      content: |
        [Mount]
        What=server.nfs.inner:/var/data
        Where=/mnt/data
        Type=nfs
    - name: chown-core-mnt-data.service
      command: start
      content: |
        [Unit]
        Description=chown core /mnt/data
        After=mnt-data.mount
        [Service]
        Type=oneshot
        RemainAfterExit=yes
        ExecStart=/usr/bin/chown core /mnt/data

ポイント(?)

  • What=server.nfs.inner:/var/data
    • サーバー名の部分、IPアドレスでも良い。
    • 今回はnfsサーバー側にRoute53でserver.nfs.innerって名前つけてる。
  • ExecStart=/usr/bin/chown core /mnt/data
    • chownしないと実用的じゃない。けどたったこれだけのために10行程度書かないといけないのがイケてない気がする

その他EC2周り設定

セキュリティグループ(サーバーもクライアントも)

こんなノリ

f:id:hoppie:20150923001751p:plain

ほんとは2049番だけでもいいかも。試してない。

サーバーの名前設定

こんなノリ

f:id:hoppie:20150923001804p:plain

所感

  • もちろんnfsdじゃなくて、docker + volumeでもなんか出来そう

参考にしたページ

How to deploy NFS Server in CoreOS_ - Google グループ

Enabling and Mounting NFS on CoreOS · Scott's Weblog · The weblog of an IT pro specializing in virtualization, networking, open source, and cloud computing