DevOps Nomad

Hướng dẫn Nomad Phần 6: Triển Khai và quản lý ứng dụng

congdonglinux.com nomad

Các nhà lập trình triển khai và quản lý các ứng dụng trong Nomad thông qua các Job. Trong phần trước, chúng tôi đã cung cấp một luyện tập và hướng dẫn trong việc vận hành các Job trong Nomad.

Triển Khai Một Job Mới

Việc vận hành Job trong Nomad bao gồm:

  1. Xây dựng một tệp tin Job theo job specification.
  2. Kiểm tra lại các thay đổi trên Nomad server
  3. Áp dụng tệp tin job vào Nomad server.
  4. Kiểm tra lại trạng thái và Log của Job.

Cập Nhật Lại Job Đang  Ở Trạng Thái Hoạt Động

Khi cập nhật một Job, sẽ có nhiều cách để thực hiện, được miêu tả trong Job file. Các bước cập nhật một Job gồm:

  1. Thay đổi Job file cho phù hợp với nhu cầu.
  2. Kiểm tra thay đổi với Nomad server.
  3. Áp dụng file Job vừa sửa đến Nomad server.
  4. Kiểm tra trạng thái và Logs

Vì việc định nghĩa job file có nhiều cách khác nhau ( blue-green, rolling update, …), nên các qui trình vẫn được giữ nguyên bất kể là job được triển khai ngay từ lúc đầu hay đã thực thi một thời gian dài.

Cấu Hình Các Tác Vụ ( Task )

Hầu hết các ứng dụng yêu cầu một vài cấu hình ở cục bộ. Phương pháp đang giản nhất là sử dụng câu lệnh ( command line ). Có nhiều ứng dụng yêu cầu việc cấu hình phức tạp hơn, bằng việc thông qua biến môi trường hoặc tệp tin cấu hình. Trong phần này, chúng ta sẽ tìm hiểu việc cấu hình Nomad Job để áp dụng cho nhiều trường hợp thông dụng.

Sử Dụng Câu Lệnh Với Tham Số

Nhiều tác vụ chấp nhận việc cấu hình thông qua câu lệnh. Ví dụ, Server http-echo thực thi bởi một file nhị phân Go kích thước nhỏ, dùng để hiển thị văn bản dưới dạng website. File nhị phân này chấp nhận 2 tham số:

  • Cờ -listen chứa address:port :
  • Cờ -text sẽ kết xuất nội dung hiển thị như trang HTML

Server khi được start sẽ trông giống như sau:

$ http-echo -listen=":5678" -text="hello world"

File Job sẽ nhìn giống như sau:

job "docs" {
  datacenters = ["dc1"]

  group "example" {
    task "server" {
      driver = "exec"

      config {
        command = "/bin/http-echo"

        args = [
          "-listen",
          ":5678",
          "-text",
          "hello world",
        ]
      }

      resources {
        network {
          mbits = 10

          port "http" {
            static = "5678"
          }
        }
      }
    }
  }
}

job "docs" {
  datacenters = ["dc1"]

  group "example" {
    task "server" {
      driver = "exec"

      config {
        command = "/bin/http-echo"

        args = [
          "-listen",
          ":${NOMAD_PORT_http}",
          "-text",
          "hello world",
        ]
      }

      resources {
        network {
          mbits = 10
          port  "http"{}
        }
      }
    }
  }
}

Biến Môi Trường

Một vài ứng dụng có thể được cấu hình thông qua biến môi trường. Theo tài liệu Twelve-Factor App  đề nghị, việc cấu hình các ứng dụng nên thông qua biến môi trường. Nomad hỗ trợ việc tùy biến biến môi trường trong 2 cách:

  • Tùy biến trong env
  • Sử dụng  template

env

Mỗi tác vụ sẽ có một đoạn cấu hình env   để chỉ định biến môi trường:

task "server" {
  env {
    my_key = "my-value"
  }
}

env cũng hỗ trợ interpolation:

task "server" {
  env {
    LISTEN_PORT = "${NOMAD_PORT_http}"
  }
}

Thao khảo thêm tài liệu của env  tại đây.

Template Môi Trường

Template của Nomad có thể sinh ra biến môi trường. Biến môi trường này có thể tạo mẫu với Node attributes and metadata , chứa nội dung của tệp tin trên disk, Consul key, và secret từ Vault.

template {
  data = <<EOH
LOG_LEVEL="{{key "service/geo-api/log-verbosity"}}"
API_KEY="{{with secret "secret/geo-api-key"}}{{.Data.key}}{{end}}"
CERT={{ file "path/to/cert.pem" | to JSON }}
NODE_ID="{{ env "node.unique.id" }}"
EOH

  destination = "secrets/config.env"
  env         = true
}

Template này sẽ ghi vào disk, sau đó chúng sẽ nạp biến môi trường trước khi các tác vụ được thực thi.

Tệp Tin Cấu Hình

Nhiều ứng dụng sử dụng những tệp tin này cho việc cấu hình. Nomad hỗ trợ việc tải các tệp tin này và thiết lập artifact  và template trước khi thực thi các tác vụ. Điều này cho phép vận chuyển các tệp cấu hình mà tác vụ cần để vận hành.

Dưới đây là một Job ví dụ được tải về, hãy chú ý phần artifacttemplates của nó:

job "docs" {
  datacenters = ["dc1"]

  group "example" {
    task "server" {
      driver = "exec"

      artifact {
        source      = "http://example.com/config.hcl.tmpl"
        destination = "local/config.hcl.tmpl"
      }

      template {
        source      = "local/config.hcl.tmpl"
        destination = "local/config.hcl"
      }

      config {
        command = "my-app"
        args = [
          "-config", "local/config.hcl",
        ]
      }
    }
  }
}

Để biết thêm thông tin về artifact resource, bạn có thể tham khảo tại đây.

Người Viết:
LK

 

 

Đăng ký liền tay Nhận Ngay Bài Mới

Subscribe ngay

Cám ơn bạn đã đăng ký !

Lỗi đăng ký !

Add Comment

Click here to post a comment

Đăng ký liền tay
Nhận Ngay Bài Mới

Subscribe ngay

Cám ơn bạn đã đăng ký !

Lỗi đăng ký !