Xin chào các bạn.
Một chiếc máy tính Pi nhỏ với cấu hình xíu xíu có thể không làm nên được việc gì mạnh mẽ; nhưng nếu nhiều chiếc máy tính Pi nhỏ cùng hợp lại thì sao nhỉ? Đã bao giờ bạn nghĩ đến điều đó chưa? Rất hay là Docker có thêm tính năng Docker Swarm cho phép bạn thực hiện điều này. Docker Swarm là công cụ native clustering cho Docker. Cho phép ta có thể gom một số Docker host lại với nhau thành dạng cụm (cluster) và ta có xem nó như một máy chủ Docker ảo (virtual Docker host) duy nhất. Và Swarm mode cung cấp cho ta các tính năng để quản lý và điều phối cluster.
(Xem thêm tại: https://viblo.asia/…/tim-hieu-docker-swarm-voi-vi-du-co…).
Sau khi nghiên cứu, tôi phát hiện ra hầu hết các sản phẩm Orange Pi đều có thể cài được docker (arm64/armhf), và như vậy cài được swarm và cho phép bạn tạo ra 1 cluster từ 4 đến 8 nodes để triển khai (deploy) một ứng dụng (stack) theo nhu cầu. Cách cài hết sức đơn giản. Đầu tiên bạn cần:
- Một số lượng Orange Pi từ 4 đến 8 cái, nhưng có thể 16 cái hoặc 32 cái tùy bạn. Tốt nhất bạn nên chọn đồng nhất các thiết bị, ví dụ như toàn bộ là Orange Pi Zero2, hoặc toàn bộ là Orange Pi PC Plus hoặc Orange PI Plus 2e. Nhưng nếu tận dụng các sản phẩm có sẵn, bạn có thể sử dụng các thiết bị khác nhau. Một chút thẩm mĩ, bạn cần thêm cọc đồng, khay và các phụ kiện lặt vặt làm thành 1 cái box đẹp khác.
- Một switch có đủ số lỗ mạng cho số lượng OPi trong cluster của bạn và thêm 1 cái cho đường Internet. Ví dụ cluster 8 cái thì bạn cần 1 cái switch 9 cổng. Như cái trong ảnh minh họa, có bán trên shopee link sau: Switch 9 cổng RJ45 lan ethernet
- Thẻ nhớ, Dây mạng và dây nguồn, đủ 8 cái
- Nguồn: cái này khá quan trọng, bạn cần đủ số lượng nguồn cho OPi, ngoài ra, nếu switch của bạn có thể dùng nguồn usb như ảnh minh họa, thì bạn cũng cần 1 bộ nguồn có đủ công suất và đủ số lượng cổng USB tương ứng. Ở đây tôi dùng nguồn 40A, 12 cổng USB có bán trên shopee link sau. Nguồn 12 cổng USB 3.5A 2.5A và 1.5A
Trong trường hợp không còn nguồn như vậy bạn có thể dùng 8 cái nguồn Orange Pi usb type C này, nhưng có vẻ sẽ rất là vướng víu
OK. Và chúng ta bắt đầu.
Cài hệ điều hành yêu thích của bạn vào thẻ nhớ, có thể là Ubuntu hoặc Debian, tôi khuyên nên dùng bản build trên Armbian cho tiện dụng. Trong ví dụ này tôi dùng ubuntu, debian cũng tương tự. Sau khi cài xong hệ điều hành vào thẻ nhớ, bạn khởi động cả 8 OPi, ssh vào, thay đổi mật khẩu root, thay đổi ngày giờ, đổi tên chúng theo thứ tự để dễ phân biệt. Ví dụ node0 là manager, các node khác tiếp tục từ 1 đến xx
Cài docker
Trong câu lệnh armbian-config
cũng có tùy chọn cài docker có sẵn, bạn có thể sử dụng nó nếu không muốn đánh câu lệnh. Nhưng tôi thấy hầu như khả năng thành công kém hơn là sử dụng câu lệnh trực tiếp như thế này
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
echo "deb [arch=arm64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
Đối với Orange Pi Zero2, bạn sử dụng arch=arm64, nhưng nếu là Orange PI PC hoặc các chip đời H2, H3 … thì bạn sử dụng arch=armhf như sau
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
echo "deb [arch=armhf] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list
Cập nhật repo và cài các ứng dụng cần thiết
apt-get update --fix-missing
apt-get install -y apparmor-utils apt-transport-https avahi-daemon ca-certificates curl dbus jq network-manager socat software-properties-common gnupg2
Nếu không có lỗi gì tiếp tục cài docker và docker-compose
apt-get install docker-ce docker-compose -y
Nếu mọi thứ suôn sẻ, bạn sẽ cài xong mà ko gặp lỗi gì. Tất cả mất chưa đầy 5p cho 1 bo mạch, tuy nhiên bạn cần lặp lại việc này từ 4 đến 8 lần, nghe có vẻ hơi nhàm chán đúng ko? Do vậy tôi đã viết sẵn một bash script sau. Bạn tải về, đẩy lên OPi và chạy lệnh sau ở mỗi bo mạch, thế là xong
bash docker-install.sh
Sau khi cài xong docker, bạn có thể kiểm tra bằng cách chạy lệnh docker version
. Nếu không báo lỗi “command not found” thì bạn đã cài xong.
Cài Portainer hoặc Swarmpit
Tiếp đến, bạn cài Portainer để quản lý docker. Portainer quả thực là một công cụ quản lý docker cực kì hiệu quả, giao diện trực quan, dễ quản lý và quan trọng là nó miễn phí. Công cụ này lại hoạt động trên chính một container được triển khai trên Docker. Bạn có thể tham khảo thêm thông tin của Portainer tại trang chủ của Portainer hoặc repository của Portainer trên Github.
docker pull portainer/portainer-ce
docker create --name=portainer \
--restart=always \
-v /home/docker/portainer/data:/data \
-v /var/run/docker.sock:/var/run/docker.sock \
-e TZ=Asia/Ho_Chi_Minh \
-p 9000:9000 \
portainer/portainer-ce
Bạn chỉ cần cài Portainer lên thiết bị Opi bạn muốn làm manager chính, không cần cài lên các node member, về sau Portainer quản lý chúng hết. Sau khi cài xong Portainer, bạn sẽ vào được giao diện Portainer ở địa chỉ https://IP_OPI:9000
Bạn sẽ thấy chưa có swarm hay cluster gì cả. OK giờ bắt đầu cài đây. Trên thiết bị làm manager, bạn chạy câu lệnh sau
docker swarm init --advertise-addr 192.168.x.x
192.168.x.x là địa chỉ IP của manager
Sau đó tại các node member, bạn chạy câu lệnh sau để add member
docker swarm join --token [một chuỗi mã rất dài] 192.168.x.x:2377
Trong đó chuỗi mã dài kia bạn sẽ thấy sau khi đánh lệnh init ở node manager. Docker Swarm cũng cho phép bạn cài nhiều manager trong 1 cluster, nếu muốn cài node khác thành manager, dùng câu lệnh
docker swarm join-token manager
và làm theo hướng dẫn
Sau khi cài xong, trên node manager bạn vào phần Stack và deploy thêm portainer-agent đến các node worker trong cluster để quản lý. Chi tiết xem trong video
Cài Swarmpit
Swarmpit thì hơi khác chút, swarmpit là stack quản lý và theo dõi Swarm Docker native luôn, tức là nó sinh ra để dùng cho quản lý Docker Swarm chứ không như POrtainer là quản lý docker rồi thêm phần Swarm. Bạn có thể tham khảo tại trnag chủ của Swarmpit hoặc github của swarmpit
Swarmpit có câu lệnh cài tự động trên trang chủ luôn
docker run -it --rm \
--name swarmpit-installer \
--volume /var/run/docker.sock:/var/run/docker.sock \
swarmpit/install:1.9
nhưng cá nhân tôi thấy cài bằng swarmpit-installer này khó thành công hơn là cài bằng cách deploy 1 stack trên node manager. Bạn cần chọn đúng file docker-composer của ARM trên github sau, và deploy trên phần quản lý stack của Portainer.
https://github.com/swarmpit/swarmpit/blob/master/docker-compose.arm.yml
Các bạn xem thêm trong video hướng dẫn dưới đây.