본문으로 건너뛰기

nomad csi (nfs)

약 3 분Nomadconfigcsinfs

nomad csi (nfs)

  • nomad에서 외부 storage를 사용하기 위한 plugin
    • 그 중에서도 접근성이 좋은 nfs를 사용, public cloud에서 제공하는 storage와는 사용법이 다를 수 있음
  • 구성환경은 아래와 같다.(사실 nfs server정보만 보면 될 거 같음)
    • nfs-server 10.0.0.151:/mnt/data

controller

  • 하나이상의 node에 storage를 배포할 수 있게 해주는 중앙관리 기능
  • 어느 node(client)에 띄어져도 상관없다.
job "plugin-nfs-controller" {
  datacenters = ["dc1"]

  group "controller" {
    task "plugin" {
      driver = "docker"

      config {
        image = "mcr.microsoft.com/k8s/csi/nfs-csi:latest"

        args = [
          "--endpoint=unix://csi/csi.sock",
          "--nodeid=${attr.unique.hostname}",
          "--logtostderr",
          "-v=5",
        ]
      }

      csi_plugin {
        id        = "nfs"
        type      = "controller"
        mount_dir = "/csi"
      }

      resources {
        cpu    = 250
        memory = 128
      }
    }
  }
}

node plugin

  • 컨테이너가 동작하는, 그리고 storage가 띄어져야 할 모든 node에 올라가야됨
job "plugin-nfs-nodes" {
  datacenters = ["dc1"]

  type = "system"

  group "nodes" {
    task "plugin" {
      driver = "docker"

      config {
        image = "mcr.microsoft.com/k8s/csi/nfs-csi:latest"

        args = [
          "--endpoint=unix://csi/csi.sock",
          "--nodeid=${attr.unique.hostname}",
          "--logtostderr",
          "--v=5",
        ]

        privileged = true
      }

      csi_plugin {
        id        = "nfs"
        type      = "node"
        mount_dir = "/csi"
      }

      resources {
        cpu    = 250
        memory = 128
      }
    }
  }
}

nomad volume

  • csi를 이용하여 실제 사용할 volume을 만든다.
  • cli: nomad volume register [파일명]
    • 다른 건 nomad doc에 다 나오지만 nfs 마운트 명령어에 던져 줄 parameter 값을 넣어줘야 할 경우에는 context에 넣어줘야한다.
id           = "nfs-vol"
name         = "nfs"
type         = "csi"
external_id  = "nfs"
plugin_id    = "nfs"
#snapshot_id  = "test" # or clone_id, see below
capacity_max = "20G"
capacity_min = "10G"

capability {
  access_mode     = "single-node-writer"
  attachment_mode = "file-system"
}

mount_options {
  fs_type     = "ext4"
  mount_flags = ["noatime"]
}

context {
  server  = "10.0.0.151"
  share   = "/mnt/data"
}

job에는 아래와 같이 추가하여 사용했다.

    volume "nfs-vol" {
      type            = "csi"
      source          = "nfs-vol"
      read_only       = false
      attachment_mode = "file-system"
      access_mode     = "single-node-writer"
    }

nomad volume페이지에서 확인

  • nomad ui에서 volume 페이지에서 alloc에서 사용 중인 volume을 볼 수 있다