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:
- Xây dựng một tệp tin Job theo job specification.
- Kiểm tra lại các thay đổi trên Nomad server
- Áp dụng tệp tin job vào Nomad server.
- 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:
- Thay đổi Job file cho phù hợp với nhu cầu.
- Kiểm tra thay đổi với Nomad server.
- Áp dụng file Job vừa sửa đến Nomad server.
- 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ứaaddress: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"
}
}
}
}
}
}
Nomad có nhiều Driver, và đa phần để tương tác với những driver này đều sử dụng tham sốargs
. Tham số này cũng hỗ trợ Nomad Biến interpolation. Ví dụ, nếu bạn muốn Nomad cấp phát động một Port để liên kết Service thay vì phải dựa vào một Port cố định như bài trước:
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 artifact và templates 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