DevOPS Nomad

Hướng dẫn Nomad Phần 4: Tạo Cluster

Bằng việc chạy các agent đầu tiên và các job trong chế độ development, Nomad đã cho thấy được sự dễ sử dụng và chỉ ra được quy trình làm việc. Tuy nhiên, việc cấu hình này không phù hợp cho môi trường production. Trong phần này sẽ là những hướng dẫn để tạo cluster với nhiều nodes.

Starting the Server

Tải tập tin từ repository và hoặc tạo file mới server.hcl và paste vào nội dung bên dưới,  để tạo tập tin cấu hình cho máy chủ:

# Increase log verbosity
log_level = "DEBUG"

# Setup data dir
data_dir = "/tmp/server1"

# Enable the server
server {
    enabled = true

    # Self-elect, should be 3 or 5 for production
    bootstrap_expect = 1
}

Đây là một tệp cấu hình máy chủ khá ngắn gọn, nhưng nó đủ để chạy agent với vai trò Leader. Sự khác biệt lớn đối với môi trường Production là sẽ có nhiều server hơn, và giá trị của tham số bootstrap_expect  cũng bị thay đổi tương ứng.

Một khi tập tin đã được tạo, hãy start agent ở tab mới:

$ nomad agent -config server.hcl
==> WARNING: Bootstrap mode enabled! Potentially unsafe operation.
==> Starting Nomad agent...
==> Nomad agent configuration:

                Client: false
             Log Level: DEBUG
                Region: global (DC: dc1)
                Server: true
               Version: 0.9.6

==> Nomad agent started! Log data will stream in below:

    [INFO] serf: EventMemberJoin: nomad.global 127.0.0.1
    [INFO] nomad: starting 4 scheduling worker(s) for [service batch _core]
    [INFO] raft: Node at 127.0.0.1:4647 [Follower] entering Follower state
    [INFO] nomad: adding server nomad.global (Addr: 127.0.0.1:4647) (DC: dc1)
    [WARN] raft: Heartbeat timeout reached, starting election
    [INFO] raft: Node at 127.0.0.1:4647 [Candidate] entering Candidate state
    [DEBUG] raft: Votes needed: 1
    [DEBUG] raft: Vote granted. Tally: 1
    [INFO] raft: Election won. Tally: 1
    [INFO] raft: Node at 127.0.0.1:4647 [Leader] entering Leader state
    [INFO] nomad: cluster leadership acquired
    [INFO] raft: Disabling EnableSingleNode (bootstrap)
    [DEBUG] raft: Node 127.0.0.1:4647 updated peer set (2): [127.0.0.1:4647]

Lúc này, chúng ta chỉ thực thi với vai trò như một server, chế độ client đã bị tắt. Server sẽ quản lý trạng thái và tạo lịch nhưng không thực hiện bất kỳ tác vụ nào. Bây giờ, chúng ta cần một vài agent để thực thi các tác vụ.

Starting the Clients

Tương tự như server, chúng ta cũng cần cấu hình cho Client trước tiên. Hoặc là download file cấu hình từ Repository, hoặc copy và paste vào nội dung sau vào file client1.hcl:

# Increase log verbosity
log_level = "DEBUG"

# Setup data dir
data_dir = "/tmp/client1"

# Give the agent a unique name. Defaults to hostname
name = "client1"

# Enable the client
client {
    enabled = true

    # For demo assume we are talking to server1. For production,
    # this should be like "nomad.service.consul:4647" and a system
    # like Consul used for service discovery.
    servers = ["127.0.0.1:4647"]
}

# Modify our port to avoid a collision with server1
ports {
    http = 5656
}

Sao chép tập tin vừa tạo và đặt tên là client2.hcl. Bạn cần phải thay đổi những thông tin sau trước khi thực hiện bước tiếp theo:
– Thay đổi data_dir thành /tmp/client2
– Thay đổi name thành client2
– Thay đổi port http thành 5657
Những thông tin này thực hiện đối với cả client1 và client2, khi đó ta sẽ có client1.hclclient2.hcl hoàn chỉnh. Mở tab mới cho từng agent và bắt đầu agent trên từng client:

$ sudo nomad agent -config client1.hcl
==> Starting Nomad agent...
==> Nomad agent configuration:

                Client: true
             Log Level: DEBUG
                Region: global (DC: dc1)
                Server: false
               Version: 0.9.6

==> Nomad agent started! Log data will stream in below:

    [DEBUG] client: applied fingerprints [host memory storage arch cpu]
    [DEBUG] client: available drivers [docker exec]
    [DEBUG] client: node registration complete
    ...

Ngược lại với server, các agent chỉ chạy client mode sẽ thực hiện các tác vụ nhưng lại không tham gia vào tiến trình quản lý trạng thái hay đưa ra các quyết định tạo lịch.

Sử dụng lệnh node status để kiểm tra tính sẵn sàng của node. Như hình bên dưới có thể thấy cả hai node đang trong trạng thái ready:

$ nomad node status
ID        DC   Name     Class   Drain  Eligibility  Status
fca62612  dc1  client1  <none>  false  eligible     ready
c887deef  dc1  client2  <none>  false  eligible     ready

Sau các bước demo ở trên, ta có được 3 node cluster đơn giản đang chạy. Khi đưa vào vận hành trực tiếp với production cluster chúng ta nên có 3 hoặc 5 server thay vì chỉ 1 như hướng dẫn ở trên.

Submit a Job

Đến đây, với cluster đã tạo, bạn có thể tạo lịch job, kết hợp một tập tin công việc example.nomad đã có trước đó. Xác nhận bằng lệnh count. Sau đó, submit the job bằng nút lệnh job run.

$ nomad job run example.nomad
==> Monitoring evaluation "8e0a7cf9"
    Evaluation triggered by job "example"
    Evaluation within deployment: "0917b771"
    Allocation "501154ac" created: node "c887deef", group "cache"
    Allocation "7e2b3900" created: node "fca62612", group "cache"
    Allocation "9c66fcaf" created: node "c887deef", group "cache"
    Evaluation status changed: "pending" -> "complete"
==> Evaluation "8e0a7cf9" finished with status "complete"

Trên hình thể hiện hai tác vụ được gán lần lượt trên hai client.
Chúng ta xác nhận lại một lần nữa bằng nút lệnh status:

$ nomad status example
ID          = example
Name        = example
Submit Date   = 07/26/19 16:34:58 UTC
Type        = service
Priority    = 50
Datacenters = dc1
Status      = running
Periodic    = false
Parameterized = false

Summary
Task Group  Queued  Starting  Running  Failed  Complete  Lost
cache       0       0         3        0       0         0

Latest Deployment
ID          = fc49bd6c
Status      = running
Description = Deployment is running

Deployed
Task Group  Desired  Placed  Healthy  Unhealthy
cache       3        3       0        0

Allocations
ID        Eval ID   Node ID   Task Group  Desired  Status   Created At
501154ac  8e0a7cf9  c887deef  cache       run      running  08/08/19 21:03:19 CDT
7e2b3900  8e0a7cf9  fca62612  cache       run      running  08/08/19 21:03:19 CDT
9c66fcaf  8e0a7cf9  c887deef  cache       run      running  08/08/19 21:03:19 CDT

Trên hình, các tác vụ đều đã được phân bổ và đang chạy, để stop sử dụng lệnh nomad job stop. Cluster được quản lý hoàn toàn bằng các dòng lệnh, giao diện người dùng web thì được sử dụng thông qua API HTTP. Bạn có thể chạy lại example job nếu đã dừng trước đó, và cũng có thể chuyển sang phần tiếp theo.

Người viết:
LK

Add Comment

Click here to post a comment