Tạo Placement Group & thêm Linode vào nhóm

Tạo placement group và thêm các Linode hiện có

Kết hợp các thao tác API để tạo placement group mới và gán Linode vào nhóm.

Trước khi bắt đầu

  • Xem lại phần Placement groups & compliance để hiểu khái niệm.
  • Xem Thông số kỹ thuật (Technical specifications) để biết phạm vi hỗ trợ.
  • Tài khoản chạy workflow này cần quyền add_linodes và quyền read-write trên các Linode sẽ thêm vào nhóm.

Lấy thông tin cần thiết

  1. 1) Liệt kê vùng (List regions)

    Lưu id làm regionId và lưu label của region nơi các Linode mục tiêu đang chạy.

    {
      "data": [
        {
          "capabilities": [
            "Linodes",
            "NodeBalancers",
            "Block Storage",
            "Object Storage",
            "Placement Groups",
            "Block Storage Encryption",
            "Linode Interfaces"
          ],
          "country": "us",
          "id": "us-mia",        <== Lưu
          "label": "Miami, FL, USA", <== Lưu
          "placement_group_limits": {
            "maximum_linodes_per_flexible_pg": 5,
            "maximum_linodes_per_pg": 5,
            "maximum_pgs_per_customer": 10
          },
          "status": "ok"
        }
      ]
    }
    Hiện chỉ một số region hỗ trợ Placement Groups.
  2. 2) Lấy chi tiết region (Get a region)

    Sử dụng regionId đã lưu để truy vấn và lưu các giới hạn dành cho placement group:

    "placement_group_limits": {
      "maximum_linodes_per_pg": 5,          <== Lưu
      "maximum_linodes_per_flexible_pg": 5, <== Lưu
      "maximum_pgs_per_customer": 10
    }
    Hiện tối đa 5 Linode trong một placement group.
  3. 3) Lọc danh sách Linode theo region

    Gọi List Linodes với header lọc theo region: X-Filter: 'region: <regionId>'. Chọn tối đa theo giới hạn đã lưu và lưu id cho từng Linode.

    {
      "data": [
        {
          "id": 123, <== Lưu
          "hypervisor": "kvm",
          "created": "2018-01-01T00:01:01",
          "capabilities": ["Block Storage Encryption"],
          ...
        }
      ]
    }

Tạo placement group

Gọi API Create placement group với các giá trị sau:

  • label: tên dễ nhận biết cho nhóm.
  • region: id của region đã lưu (ví dụ: us-mia).
  • placement_group_type: kiểu sắp xếp. Hiện chỉ hỗ trợ anti_affinity:local.
  • placement_group_policy: chế độ tuân thủ khi thêm Linode về sau: strict hoặc flexible.
Sau khi tạo, không thể đổi placement_group_policy.
{
  "placement_group_policy": "strict",
  "placement_group_type": "anti_affinity:local",
  "label": "PG_Miami_failover",
  "region": "us-mia"
}

Từ phản hồi, lưu id làm placementId:

{
  "id": 528, <== Lưu
  "is_compliant": true,
  "label": "PG_Miami_failover",
  "members": [
    { "is_compliant": true, "linode_id": 123 }
  ],
  "placement_group_policy": "strict",
  "placement_group_type": "anti-affinity:local",
  "region": "us-mia"
}

Thêm Linode vào nhóm

Gọi API Assign a placement group với placementId, đưa mảng linodes là danh sách id đã lưu:

{
  "linodes": [123, 456, 789]
}

Chờ vài phút rồi gọi Get a placement group bằng placementId để kiểm tra trạng thái:

{
  "id": 528,
  "is_compliant": true,
  "label": "PG_Miami_failover",
  "members": [
    { "is_compliant": true, "linode_id": 123 }
  ],
  "migrations": {
    "inbound": [
      { "linode_id": 456 },
      { "linode_id": 789 }
    ],
    "outbound": []
  },
  "placement_group_policy": "strict",
  "placement_group_type": "anti-affinity:local",
  "region": "us-mia"
}
  • members: các Linode đã được thêm thành công (kèm trạng thái is_compliant).
  • migrations.inbound: các Linode đang di chuyển vào nhóm; khi xong sẽ xuất hiện trong members.

Hoàn tất! Bạn đã tạo và gán Linode vào placement group.