Logo

Personal Ops Runbook

Personal runbook covering infrastructure operations for Cloud, Kubernetes, OpenStack, and Ceph environments. Includes deployment and teardown procedures, node management, cluster monitoring setup, and incident response workflows compiled from day-to-day operational work. Intended strictly for personal reference — configurations and scripts are environment-specific and not guaranteed to work as-is elsewhere.

Lightbits Private Cloud — Volume Resizing và Discovery-client (bản dịch tiếng Việt)

Mục lục


Volume Shrinking and Expansion — Thu nhỏ và mở rộng volume

Tính năng thu nhỏ volume (có từ Lightbits Version 3.0 trở lên) phải được thực hiện theo đúng thứ tự. Các lớp nằm trên block volume (chẳng hạn filesystem) phải được thu nhỏ trước. Nếu volume bị thu nhỏ trước, filesystem có thể bị hỏng - và điều đó có thể dẫn tới mất dữ liệu.

Để thu nhỏ volume đúng cách, trước tiên hãy thu nhỏ filesystem (hoặc bất kỳ lớp nào nằm trên), rồi thu nhỏ Lightbits volume ở bước cuối cùng.

Mặc dù có rất nhiều use case khả dĩ với NVMe, chúng ta sẽ dùng ví dụ sau: một filesystem ext4 đơn giản nằm trên một NVMe volume. Tuy nhiên, lưu ý rằng cùng một trình tự logic đó cũng áp dụng cho các trường hợp còn lại (thu nhỏ từ trên xuống dưới).

Lưu ý: Một use case phổ biến là dùng filesystem XFS trên một NVMe volume. Tuy nhiên, do XFS không hỗ trợ thu nhỏ trực tiếp, quy trình sẽ phức tạp hơn: back up dữ liệu, thu nhỏ volume, cài mới XFS trên volume, rồi copy dữ liệu trở lại.

Trong ví dụ này, hãy giả sử có một Lightbits volume tên vol01, dung lượng 2 TiB, được kết nối tới một client dưới dạng /dev/nvme0n1. Volume này có filesystem ext4 trên đó. Hãy dùng các bước sau để thu nhỏ nó xuống 1 TiB.

Lưu ý: Trong các thao tác này, bạn sẽ không phải NVMe disconnect volume. Có thể thực hiện trong khi volume vẫn đang kết nối. Tuy nhiên, filesystem phải được unmount trước, vì resize2fs không hỗ trợ thu nhỏ online (nó chỉ hỗ trợ mở rộng online - xem phần sau để biết thêm chi tiết).

  1. Unmount filesystem:
umount /dev/nvme0n1
  1. Từ phía client, thu nhỏ filesystem xuống 1 TiB:
# resize2fs -p /dev/nvme0n1 1T
resize2fs 1.45.5 (07-Jan-2020)
Note: Run 'e2fsck -f /dev/nvme0n1' first.

Thao tác này sẽ không chạy, và resize2fs sẽ yêu cầu kiểm tra filesystem để đảm bảo không có lỗi filesystem nào trước khi bắt đầu thao tác thu nhỏ.

Lưu ý: Mặc dù resize2fs yêu cầu chạy e2fsck với tùy chọn -f (buộc quét filesystem ngay cả khi nó đang khỏe mạnh), đừng làm vậy. Thay vào đó, trước tiên hãy chạy e2fsck ở chế độ read-only bằng flag -n. Sau khi kết quả cho thấy không có lỗi, mới chạy lại với flag -f. Lý do là các công cụ kiểm tra filesystem có thuật toán sửa chữa filesystem mà đôi khi gây hại nhiều hơn lợi, và có thể khiến filesystem hỏng nặng hơn và không mount được. Tuy nhiên, nếu đó là lựa chọn duy nhất của bạn (tức là kết quả read-only cho thấy có lỗi), hãy back up filesystem rồi chạy e2fsck với tùy chọn -f và tự chịu rủi ro.

Khởi động một lượt kiểm tra filesystem ở chế độ read-only.

# e2fsck -n /dev/nvme0n1
e2fsck 1.45.5 (07-Jan-2020)
/dev/nvme0n1: clean, 20/134217728 files, 10806308/536870912 blocks

Vì kết quả là "clean", chúng ta có thể chạy kiểm tra filesystem với tùy chọn -f.

# e2fsck -f /dev/nvme0n1
e2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/nvme0n1: 20/134217728 files (0.0% non-contiguous), 10806308/536870912 blocks

Giờ chúng ta có thể chạy lại thao tác resize2fs thành công.

# resize2fs -p /dev/nvme0n1 1T
resize2fs 1.45.5 (07-Jan-2020)
Resizing the filesystem on /dev/nvme0n2 to 268435456 (4k) blocks.
Begin pass 2 (max = 262145)
Relocating blocks XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Begin pass 3 (max = 16384)
Scanning inode table XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/nvme0n2 is now 268435456 (4k) blocks long.
  1. Lấy chính xác kích thước của filesystem mới theo byte. Có nhiều cách để làm việc này. Dưới đây là một trong số đó:
# dumpe2fs -h /dev/nvme0n1 2>&1 | awk -F: '/Block count/{count=$2} /Block size/{size=$2} END{print count*size}'
1099511627776

Lưu ý rằng 1099511627776 byte đúng bằng 1 TiB.

Lưu ý:
- Để tính chính xác kích thước filesystem, đừng dùng "df -B1", vì nó không tính phần overhead của filesystem.
- Ngoài ra, đừng dùng "nvme list" hay "lsblk", vì chúng cho ra kích thước ở mức volume chứ không phải kích thước filesystem.
- Output của thao tác resize2fs thực chất đã hiển thị kích thước filesystem cuối cùng: "the filesystem on /dev/nvme0n2 is now 268435456 (4k) blocks long". Hãy tính kích thước filesystem theo byte bằng cách nhân hai giá trị: 268435456 x 4096 = 1099511627776.

  1. Từ một Lightbits server, thu nhỏ volume tương ứng xuống 1 TiB. Lưu ý rằng với thao tác thu nhỏ, bắt buộc phải dùng flag --force.

Lưu ý: Volume phải được thu nhỏ về đúng bằng kích thước của filesystem hoặc lớn hơn. Nghĩa là nó không được nhỏ hơn filesystem dù chỉ một byte.

  1. Từ phía client, xác nhận rằng kích thước nhỏ hơn đã được báo cáo ở mức block thông qua lsblk hoặc nvme list. Để lấy kích thước byte chính xác, dùng blockdev --getsize64.
# blockdev --getsize64 /dev/nvme0n1
1099511627776

Volume Expansion — Mở rộng volume

Việc mở rộng volume được thực hiện theo thứ tự ngược lại so với thu nhỏ. Trước tiên, volume được mở rộng qua lbcli, sau đó mới mở rộng các lớp bên trên. Nếu bạn thử mở rộng sai thứ tự, lệnh sẽ chỉ báo lỗi mà không gây hại gì.

Mặc dù có rất nhiều use case khả dĩ với NVMe, chúng ta sẽ chỉ xét ví dụ sau: một filesystem ext4 đơn giản nằm trên một NVMe volume. Tuy nhiên, cùng một trình tự logic đó cũng áp dụng cho các trường hợp còn lại. Hãy mở rộng từ dưới lên trên.

Lưu ý: Một use case phổ biến là dùng filesystem XFS trên một NVMe volume. XFS hỗ trợ mở rộng online qua "xfs_growfs /mount/point -D size" (nghĩa là nó có thể ở trạng thái mount trong khi mở rộng). Yêu cầu duy nhất là đảm bảo NVME block device bên dưới cũng đã được mở rộng.

Theo một cấu hình tương tự như ở trên, giả sử có một Lightbits volume tên vol01, dung lượng 2 TiB, được kết nối tới một client dưới dạng /dev/nvme0n1. Volume này có filesystem ext4 trên đó. Hãy dùng các bước sau để mở rộng nó lên 3 TiB.

  1. Từ một Lightbits server, mở rộng volume. Lưu ý rằng với thao tác mở rộng, không cần flag --force.
lbcli update volume --name vol01 --project-name default --size "3 TiB"
  1. Từ phía client, mở rộng volume.

Lưu ý: Bạn không cần unmount filesystem, vì resize2fs hỗ trợ mở rộng online.

  1. Xác nhận kích thước mới ở mức block và mức filesystem (xem phần ở trên để tham khảo).
# Block Level Volume Size
# blockdev --getsize64 /dev/nvme0n3
3298534883328

# Filesystem Size
# dumpe2fs -h /dev/nvme0n3 2>&1 | awk -F: '/Block count/{count=$2} /Block size/{size=$2} END{print count*size}'
3298534883328

Nguồn: https://documentation.lightbitslabs.com/lightbits-private-cloud/volume-shrinking-and-expansion


Discovery-client Deployment and Usage — Triển khai và sử dụng discovery-client

Overview — Tổng quan

discovery-client là một service mã nguồn mở được quản lý bởi systemd. Discovery-client đóng vai trò trong việc điều phối môi trường lưu trữ Lightbits của bạn. Cụ thể, nó là cơ chế để discover các node và volume bên trong các Lightbits cluster.

Sau khi discover được, nó thiết lập và quản lý các kết nối tới những volume này, đảm bảo việc truyền dữ liệu liền mạch qua NVMe-over-Fabrics. discovery-client cũng được thiết kế để thích ứng với các môi trường động, tự động cập nhật kết nối mỗi khi có node được thêm vào hoặc gỡ khỏi cluster. Khả năng thích ứng này đảm bảo host của bạn duy trì giao tiếp hiệu quả với các Lightbits storage cluster và các volume của chúng.

discovery-client thực hiện một số tác vụ:

  • Duy trì một danh sách cập nhật các discovery controller NVMe-over-Fabrics. Mọi thay đổi trong các controller của Lightbits cluster sẽ tự động cập nhật danh sách này.

  • Thực thi lệnh nvme discover với các discovery controller đó để discover các subsystem nvme-over-fabrics khả dụng. Các lệnh này được kích hoạt hoặc bởi một Asynchronous Event Notification (AEN) nhận từ discovery controller từ xa, hoặc bởi một file cấu hình do người dùng chỉ định.

  • Tự động kết nối tới các subsystem NVMe-over-Fabrics khả dụng bằng cách chạy lệnh nvme connect.

Đặc tả NVMe-over-Fabrics định nghĩa khái niệm discovery controller mà một NVMe host có thể truy vấn trên một fabric network để discover các NVMe subsystem. Các subsystem này nằm trong các NVMe target có thể được kết nối từ mạng.

discovery-client là một service có thể triển khai, chạy dưới systemd. Cứ mỗi năm giây (có thể cấu hình), nó sẽ poll các discoveryservice trong cluster.

Lệnh discovery-client cần một số tham số mà bạn có thể truy vấn cho NVMe/TCP storage server cần được discover và kết nối tới. Lưu ý rằng đặc tả NVMe cơ bản định nghĩa định dạng NQN (NVMe Qualified Name) mà một NVMe endpoint (device, subsystem, v.v.) phải tuân theo để đảm bảo tên là duy nhất theo chuẩn NVMe. Cụ thể, host NQN nhận diện duy nhất NVMe host, và có thể được discovery controller dùng để kiểm soát những tài nguyên NVMe target nào được cấp cho NVMe host trong một kết nối.

Bạn có thể cấu hình discovery-client thông qua file cấu hình hoặc bằng các tùy chọn dòng lệnh. Bài viết này sẽ trình bày cả hai cách.

Setting up Repos for RPM and Debian — Thiết lập repo cho RPM và Debian

For Debian-Based Systems (Ubuntu, Debian, etc.) — Với hệ thống nền Debian

  1. Thu thập thông tin tham chiếu về phiên bản OS và codename của client:
lsb_release -a
  1. Cài đặt các package cần thiết:
apt-get install -y debian-keyring # debian only

apt-get install -y debian-archive-keyring # debian only

apt-get install -y apt-transport-https
  1. Đặt biến vị trí keyring, tùy theo phiên bản OS:
# For Debian Stretch, Ubuntu 16.04 and later
keyring_location=/usr/share/keyrings/lightbits-discovery-client-archive-keyring.gpg

# For Debian Jessie, Ubuntu 15.10 and earlier
keyring_location=/etc/apt/trusted.gpg.d/lightbits-discovery-client.gpg
  1. Tải GPG key:
curl -1sLf 'https://dl.lightbitslabs.com/public/discovery-client/gpg.014E5C7FAFD89AEE.key' | gpg --dearmor > ${keyring_location}
  1. Tải file repo của discovery-client:
curl -1sLf 'https://dl.lightbitslabs.com/public/discovery-client/config.deb.txt?distro=ubuntu&codename=xenial' | sudo tee /etc/apt/sources.list.d/lightbits-discovery-client.list

Lưu ý: Nếu cần, hãy thay distribution và codename bằng hệ điều hành và codename thực tế của bạn (dựa trên output của lsb_release -a ở bước đầu tiên). Ví dụ, với Ubuntu 22, thay xenial bằng jammy.

  1. Cập nhật repo:
apt-get update

For RPM-based systems (Red Hat, etc.)

  1. Cài các thành phần tiên quyết:
yum install -y yum-utils
yum install -y pygpgme

Lưu ý: Hãy tiếp tục với hướng dẫn nếu không tìm thấy pygpgme. Các release mới hơn không cần nó.

  1. Tải và import GPG key:
rpm --import 'https://dl.lightbitslabs.com/public/discovery-client/gpg.014E5C7FAFD89AEE.key'
  1. Tải file repo:
curl -1sLf 'https://dl.lightbitslabs.com/public/discovery-client/config.rpm.txt?distro=el&codename=7' | sudo tee /etc/yum.repos.d/lightbits-discovery-client.repo
  1. Cập nhật repo cache:
yum makecache -y --disablerepo='*' --enablerepo='lightbits-discovery-client'

Installation — Cài đặt

For RPM-Based Systems:

yum install -y discovery-client

For Debian-Based Systems:

apt-get install -y discovery-client

Initial Setup — Thiết lập ban đầu

  1. Kiểm tra xem module nvme-tcp đã được load chưa:
lsmod | grep nvme
  1. Nếu chưa, hãy load nó:
modprobe nvme-tcp

Dùng hướng dẫn sau để bật module nvme-tcp một cách bền vững qua các lần reboot: Client Module Configurations.

  1. Kiểm tra xem nvme-core multipath đã được bật chưa:
cat /sys/module/nvme_core/parameters/multipath

Nếu đã bật ("Y"), hãy tiếp tục sang bước thiết lập ban đầu tiếp theo.

Nếu đang tắt ("N"), dùng hướng dẫn sau để bật nvme-core multipath cho phiên hiện tại và bền vững qua các lần reboot: Client Module Configurations.

  1. Khởi động service discovery-client:
systemctl start discovery-client
  1. Tìm hoặc sinh host NQN:

Để tìm nó, chạy:

cat /etc/nvme/hostnqn

Để sinh một cái mới, chạy:

nvme gen-hostnqn > /etc/nvme/hostnqn

Volume Creation — Tạo volume

Từ phía Lightbits, hãy tạo một volume và đặt ACL của nó bằng hostnqn. Ngoài ra, lấy cluster NQN, thứ sẽ cần cho phương pháp kết nối 1 và 2 bên dưới.

  1. Tạo volume với ACL là HostNQN:
lbcli create volume <parameters> --acl <hostnqn>
  1. Tìm Lightbits cluster NQN:
lbcli get cluster

Configuration For Persistence Across Reboots — Cấu hình để bền vững qua các lần reboot

Bạn có thể cấu hình discovery-client theo một trong ba cách.

Method 1: Using a Configuration File — Dùng file cấu hình

Phương pháp kết nối này sẽ kết nối tới một Lightbits volume dựa trên file config khi service discovery-client khởi động. Do đó, nếu service được bật để khởi động cùng hệ thống, kết nối cũng sẽ khởi động cùng hệ thống, khiến nó trở thành một kết nối bền vững qua reboot.

Create a Configuration File

File cấu hình phải được đặt tại /etc/discovery-client/discovery.d/<name>.conf. Trong file, hãy khai báo các entry cho những Lightbits cluster mà bạn muốn kết nối tới. Mỗi entry sẽ chỉ định target, address, port và các thông tin liên quan khác. Nếu thư mục chưa tồn tại, hãy tạo nó trước bằng mkdir /etc/discovery-client/discovery.d/

Dưới đây là một cấu hình mẫu kết nối tới tất cả các node hiện có của một cluster ví dụ. Về mặt kỹ thuật, chỉ cần một dòng kết nối là discovery đã hoạt động. Tuy nhiên, liệt kê tất cả không gây tác động tiêu cực nào và đảm bảo tính sẵn sàng cao cùng dự phòng.

-t tcp -a 172.16.176.11 -s 8009 -q host1 -n nqn.2016-01.com.lightbitslabs:uuid:3715aea0-2705-4a01-9357-c6a9f8009f09
-t tcp -a 172.16.175.11 -s 8009 -q host1 -n nqn.2016-01.com.lightbitslabs:uuid:3715aea0-2705-4a01-9357-c6a9f8009f09
-t tcp -a 172.16.175.10 -s 8009 -q host1 -n nqn.2016-01.com.lightbitslabs:uuid:3715aea0-2705-4a01-9357-c6a9f8009f09
-t tcp -a 172.16.176.12 -s 8009 -q host1 -n nqn.2016-01.com.lightbitslabs:uuid:3715aea0-2705-4a01-9357-c6a9f8009f09
-t tcp -a 172.16.176.10 -s 8009 -q host1 -n nqn.2016-01.com.lightbitslabs:uuid:3715aea0-2705-4a01-9357-c6a9f8009f09
-t tcp -a 172.16.175.12 -s 8009 -q host1 -n nqn.2016-01.com.lightbitslabs:uuid:3715aea0-2705-4a01-9357-c6a9f8009f09

Trong đó:

-t: Transport type (tcp)

-a: địa chỉ IP của Lightbits data network. Tất cả các IP có thể lấy từ output của lệnh "lbcli list nodes", ở cột NVMe endpoint.

-s: Port mà discovery-service sử dụng (8009).

-q: Tên hostnqn/ACL của client. Bạn có thể dùng giá trị lưu trong file /etc/nvme/hostnqn, hoặc chỉ định một chuỗi bất kỳ. Giá trị này phải khớp với thuộc tính acl được đặt trong lệnh "lbcli create volume".

-n Lightbits cluster hostnqn. Tham số này phải khớp với giá trị trong output của lệnh "lbcli get cluster", ở cột Subsystem NQN.

Restart the Discovery-Client Service

systemctl restart discovery-client

Method 2: Using the Command Line to add hostnqn — Dùng dòng lệnh để add hostnqn

Bạn có thể dùng lệnh discovery-client add-hostnqn để thiết lập một kết nối bền vững qua reboot. Lệnh này - giống như Method 1 ở trên - sẽ tạo ra một file cấu hình.

discovery-client add-hostnqn -a <ip>:8009 -n <clusternqn> -q <hostnqn> --name <config-file-name>

Method 3: Using the Command Line to connect-all — Dùng dòng lệnh với connect-all

Bạn có thể dùng lệnh discovery-client connect-all để thiết lập kết nối. Phương pháp này không bền vững qua reboot.

Dưới đây minh họa cách dùng mẫu:

discovery-client connect-all -t tcp -a <ip> -s 8009 -q <hostnqn> -p

Trong đó:

-t: Transport type (tcp)

-a: địa chỉ IP của Lightbits data network. Tất cả các IP có thể lấy từ output của lệnh "lbcli list nodes", ở cột NVMe endpoint.

-s: Port mà discovery-service sử dụng (8009).

-q: Tên hostnqn/ACL của client. Bạn có thể dùng giá trị lưu trong file /etc/nvme/hostnqn, hoặc chỉ định một chuỗi bất kỳ. Giá trị này phải khớp với thuộc tính acl được đặt trong lệnh "lbcli create volume".

-p: Kết nối discovery sẽ duy trì bền vững sau lần kết nối volume đầu tiên - do đó theo dõi được các thay đổi. Đây là hành vi mặc định của phương pháp kết nối 1 và 2 ở trên.

Usage — Sử dụng

  1. Liệt kê các Lightbits volume đang được kết nối:
nvme list
  1. Ngắt kết nối khỏi một controller cho trước:
discovery-client disconnect -d <dev>
  1. Ngắt kết nối tất cả các controller:
discovery-client disconnect-all

Lưu ý: Để biết thêm chi tiết về cấu hình secret cho In-Band Authentication với discovery client, xem NVMe/TCP In-Band Authentication.

Logs and Troubleshooting — Log và xử lý sự cố

Log được lưu trong thư mục /var/log/discovery-client.log. Hãy tail log để phát hiện vấn đề:

tail -f /var/log/discovery-client.log

Nguồn: https://documentation.lightbitslabs.com/lightbits-private-cloud/discovery-client-deployment-and-usage


Discovery-client - Container Deployment — Triển khai discovery-client dạng container

Bạn có thể chạy discovery-client như một Docker container trên mọi node trong OpenStack cluster có giao tiếp với Lightbits storage. Các controller node, block (cinder-volume) node và compute node đều cần nó. Đây là một lựa chọn thay thế cho việc cài bằng package .deb / .rpm, và bạn có thể chọn cách nào phù hợp với mô hình quản lý host của mình. Hai phương pháp cài đặt này không được thiết kế để cùng tồn tại trên một host.

Hướng dẫn này trình bày việc cài đặt trên một host đơn lẻ. Hãy lặp lại các bước tương tự trên mọi node trong cluster.

Prerequisites — Điều kiện tiên quyết

Trên host:

  • Docker engine với plugin compose (lệnh docker compose version chạy được).

  • Quyền root - container chạy ở chế độ privileged và cần networking dạng host.

  • Module kernel NVMe/TCP đã được load:

modprobe nvme-tcp
echo nvme-tcp | tee /etc/modules-load.d/nvme-tcp.conf
  • /etc/nvme/hostid đã tồn tại (một lần cho mỗi host). Trên hầu hết các distribution, file này được package nvme-cli tạo tự động. Nếu file bị thiếu, hãy sinh nó theo quy trình chuẩn của distribution của bạn trước khi tiếp tục.

  • Kết nối mạng từ host tới registry chứa image discovery-client, và tới mọi Lightbits discovery endpoint (port mặc định 8009/tcp).

  • Không có bản cài đặt bằng package của discovery-client đang chạy trên host này. Nếu trước đó bạn đã làm theo hướng dẫn .deb / .rpm, hãy dừng và disable systemd service trước, rồi chuyển cấu hình hiện có sang chỗ khác:

systemctl disable --now discovery-client
mv /etc/discovery-client/discovery-client.yaml /etc/discovery-client/discovery-client.yaml.pkg-bak
  • Các file do consumer đặt trong /etc/discovery-client/discovery.d/ có thể giữ nguyên. Container sẽ nhận chúng.

Pulling the Image — Pull image

Image được publish lên một Lightbits registry. Hãy thay registry, tên image và tag bằng các giá trị được cấp cho release của bạn:

export DISCOVERY_CLIENT_IMG=docker.lightbitslabs.com/discovery-client/discovery-client:<version>

Đăng nhập vào Lightbits registry (việc này cần credential được cung cấp kèm release của bạn - một lần cho mỗi host):

docker login docker.lightbitslabs.com

Pull image:

docker pull "$DISCOVERY_CLIENT_IMG"

Configuring Discovery-client as a Container — Cấu hình discovery-client dạng container

discovery-client đọc một file cấu hình duy nhất tại /etc/discovery-client/discovery-client.yaml bên trong container. Lightbits bind-mount thư mục /etc/discovery-client/ của host vào đường dẫn đó, nên file thực chất nằm trên host.

/etc/discovery-client/discovery-client.yaml:

clientConfigDir: /etc/discovery-client/discovery.d/
internalDir: /etc/discovery-client/internal/
reconnectInterval: 5s
logPagePaginationEnabled: false
maxIOQueues: 0
nvmeHostIDPath: /etc/nvme/hostid
kato: 10
logging:
 filename: /etc/discovery-client/discovery-client.log
 maxAge: 96h
 maxSize: 100
 level: info
 reportCaller: true
debug:
 metrics: true
 enablepprof: true
 endpoint: '[::]:6060'

Các giá trị trên là một baseline tham chiếu; hãy tinh chỉnh cho môi trường của bạn. Chỉ đặt logging.level: debug khi cần xử lý sự cố.

docker-compose

Lưu nội dung sau thành $BASE_DIR/discovery-client-compose.yaml (đường dẫn nào cũng được, nhưng phần còn lại của bài viết này dùng đường dẫn đó):

services:
 discovery-client:
 image: ${DISCOVERY_CLIENT_IMG}
 container_name: discovery-client
 restart: unless-stopped
 privileged: true
 network_mode: host
 volumes:
 - /dev:/dev
 - /etc/discovery-client:/etc/discovery-client
 healthcheck:
 test: ["CMD", "curl", "-f", "http://localhost:6060/metrics"]
 interval: 10s
 timeout: 5s
 retries: 3

Start:

docker compose -f "$BASE_DIR/discovery-client-compose.yaml" up -d

Verify:

Container phải ở trạng thái Up và đạt tới healthy:

docker ps --filter name=discovery-client

Endpoint metrics phải phản hồi như sau:

curl -fsS http://localhost:6060/metrics | head

Để chuyển sang một image tag mới hơn, hãy cập nhật DISCOVERY_CLIENT_IMG và render lại file compose (hoặc sửa trực tiếp dòng image:). Sau đó:

docker compose -f "$BASE_DIR/discovery-client-compose.yaml" pull
docker compose -f "$BASE_DIR/discovery-client-compose.yaml" up -d

Thư mục host được bind-mount vẫn được giữ nguyên qua các lần nâng cấp, nên cache nội bộ và mọi file discovery.d/*.conf do consumer đặt đều được chuyển tiếp sang.

Stop/Remove

docker compose -f "$BASE_DIR/discovery-client-compose.yaml" down

Thư mục host /etc/discovery-client được giữ nguyên tại chỗ. Hãy xóa nó thủ công nếu bạn đang ngừng sử dụng host đó.

Nguồn: https://documentation.lightbitslabs.com/lightbits-private-cloud/discovery-client-container-deployment


Nguồn tham khảo

  1. Volume Shrinking and Expansion — https://documentation.lightbitslabs.com/lightbits-private-cloud/volume-shrinking-and-expansion
  2. Discovery-client Deployment and Usage — https://documentation.lightbitslabs.com/lightbits-private-cloud/discovery-client-deployment-and-usage
  3. Discovery-client - Container Deployment — https://documentation.lightbitslabs.com/lightbits-private-cloud/discovery-client-container-deployment

Ghi chú về nguồn

  • Cả 3 URL đều fetch thành công.
  • Nhãn phiên bản của các trang gốc: Volume Shrinking and Expansion3.20.x; hai trang discovery-client là 3.19.x.
  • Cấu trúc heading của từng trang được giữ nguyên theo bản gốc, kể cả các điểm không nhất quán:
  • Trong Discovery-client Deployment and Usage, bản gốc chỉ đặt heading ### cho "For Debian-Based Systems (Ubuntu, Debian, etc.)"; dòng "For RPM-based systems (Red Hat, etc.)" lại là văn bản thường, không phải heading. Bản dịch giữ nguyên như vậy, nên mục RPM không xuất hiện trong mục lục.
  • Cũng trong trang đó, heading "Configuration For Persistence Across Reboots" trong bản gốc là một link tự trỏ về chính nó; link được giữ nguyên.
  • Ở bước 2 và 4 của phần Volume Shrinking, bản gốc chỉ mô tả thao tác bằng lời mà không cung cấp lệnh lbcli cụ thể để thu nhỏ volume; bản dịch không viết bù lệnh nào.
  • Trong output mẫu của resize2fs, bản gốc hiển thị /dev/nvme0n2 trong khi lệnh chạy trên /dev/nvme0n1; ở phần Volume Expansion, output lại dùng /dev/nvme0n3 trong khi phần mô tả nói tới /dev/nvme0n1. Đây là nội dung của bản gốc và được giữ nguyên 100%.
  • Bản gốc dùng nhãn "Note"/"Notes"; đều được dịch thành > **Lưu ý:**.
  • Các đoạn YAML (discovery-client.yaml và docker-compose) trong bản gốc bị mất phần thụt lề chuẩn khi trích xuất; nội dung được giữ nguyên đúng như bản gốc, không tự căn chỉnh lại.