---
id: kubernetes-nomad
title: "Nomad"
shortTitle: "Nomad"
track: kubernetes
trackTitle: "Kubernetes"
order: 13
level: normal
status: published
estimatedMinutes: 25
prerequisites:
  - kubernetes-swarm
next: cicd-github-actions
reviewedAgainst: 2026-10-12
sources:
  - title: "Nomad job specification"
    url: https://developer.hashicorp.com/nomad/docs/job-specification
  - title: "nomad job run"
    url: https://developer.hashicorp.com/nomad/docs/commands/job/run
---

# Nomad

Nomad chạy job: container hoặc process, theo một file đặc tả. Không phải Kubernetes. Bài này đọc một job file. Không tải Nomad và không `nomad agent -dev` nếu bạn không sẵn sàng mở cổng 4646 trên máy.

## Để làm gì

Đọc `job`, `group`, `task`, và biết lệnh nào sẽ nộp job lên một agent đã có.

## Gồm những gì

- Stanza HCL của một job Docker.
- `nomad job run` và `nomad job stop`.
- Khác Deployment: không có object Service của Kubernetes trong file này.

Không gồm Consul và Vault.

## Dùng khi nào

Một đội đã chạy Nomad cho worker. Không chuyển app đang học trên Kubernetes sang Nomad. Đọc file để khỏi sửa nhầm bằng kubectl.

## Kiến thức cốt lõi

File gồm một `job`. Trong job có `group`: Nomad đặt cả group lên cùng một node. Trong group có `task`. Task với `driver = "docker"` chạy container. `config.image` là image cần chạy. `resources` khai CPU và bộ nhớ để Nomad xếp chỗ.

`nomad job run app.nomad.hcl` nộp job. Agent xếp task lên client. `nomad job stop` dừng. Không có agent thì lệnh không có chỗ gửi.

Restart policy trong group quyết định task lỗi thì Nomad có chạy lại không. Khác Deployment Kubernetes, nơi replica nằm ở spec của Deployment.

## Lệnh và code mẫu

`app.nomad.hcl`, chỉ đọc:

```hcl
job "lab" {
  datacenters = ["dc1"]
  group "web" {
    count = 1
    task "nginx" {
      driver = "docker"
      config {
        image = "nginx:alpine"
      }
      resources {
        cpu    = 100
        memory = 64
      }
    }
  }
}
```

Lệnh không chạy:

```bash
nomad job run app.nomad.hcl
```

## Thực hành

1. Chỉ image task sẽ chạy.
2. Chỉ đơn vị nào có `count`.
3. Không tải binary Nomad.

## Kết quả mong đợi

Image `nginx:alpine`. `count` nằm ở group `web`.

## Checklist

- [ ] Không sửa job production từ máy học.
- [ ] Không mở agent `-dev` trên máy đang dùng mạng chung mà không đọc cổng nó bind.
- [ ] App mới cần Kubernetes thì ở lại các bài manifest.

## Lỗi thường gặp

**Đặt `count` trong task.** Trong spec này count thuộc group. Đặt sai chỗ thì file không hợp lệ hoặc không nhân bản như bạn tưởng. Đối chiếu job specification.

**Tưởng Nomad đọc YAML Kubernetes.** Driver và file khác. `kubectl apply` không nộp job Nomad.

## Nguồn

1. [Job specification](https://developer.hashicorp.com/nomad/docs/job-specification) — `job`, `group`, `task`.
2. [nomad job run](https://developer.hashicorp.com/nomad/docs/commands/job/run) — nộp file lên agent.

## Tiếp theo

[GitHub Actions](../cicd-iac/01-github-actions.md)
