1. Giới thiệu Docker Swarm
Trước hết ta cần biết Docker swarm là gì? Docker Swarm là một công cụ quản lý và triển khai container, được tích hợp sâu trong hệ sinh thái Docker. Với Docker Swarm, bạn có thể quản lý một cụm máy chủ (cluster) của các máy chủ Docker, tạo nên một môi trường linh hoạt và mở rộng cho việc triển khai ứng dụng.
2. Tại Sao Chúng Ta Cần Docker Swarm?
Hay nói cách khác, Docker Swarm có những ưu điểm gì khiến tôi cần đến?
- Tự động hóa triển khai
- Quản lý tài nguyên hiệu quả
- Linh hoạt trong việc mở rộng ứng dụng theo nhu cầu
Ok, nói sơ qua là vậy, nếu các bạn muốn tìm hiểu kỹ hơn thì có thể sử dụng ChatGPT hoặc Google để biết thêm.
3. Thực hành
Ta sẽ thực hành bằng việc triển khai bài tập trên các máy ảo, cụ thể ở đây là 3 máy ảo linux ubuntu. Hãy cứ tưởng tượng bạn đang có 3 VPS để làm việc.
3.1. Oracle VM Virtual Box
Và để có được các máy ảo thì ta sẽ cần đến một số phần mềm tạo máy ảo. Cụ thể trong series này tôi sẽ dùng Oracle VM Virtual Box.
Các bạn có thể tại VM Virtual Box tại đây.
3.2. Vagrant
Bình thường chúng ta muốn có một cái máy ảo, sẽ cần có phần mềm và file cài đặt với đuôi .iso
. Rồi sau đó cài đặt thủ công, setup môi trường, cấu hình của máy ảo.
Với một máy thì không nói làm gì, bây giờ ta có 3 máy, thậm chí 5 máy thì chẳng lẽ ta cứ ngồi tạo từng cái máy ảo với file .iso
đó, đợi cài xong máy này mới tới máy tiếp theo thì đến bao giờ?
Không nên, hãy để những công việc lặp đi lặp lại đó được làm một cách tự động hóa, và lúc này chúng ta có Vagrant.
Vagrant là 1 công cụ xây dựng và quản lý các máy ảo, có thể chạy trên Ubuntu, MacOS và cả Windows.
Thay vì chúng ta phải tải iso của ubuntu về rồi ném vào trong VM virtual box để cài hệ điều hành, thì ta sẽ dùng luôn Vagrant để setup cấu hình cho một hoặc nhiều máy chỉ trong một file Vagrantfile.
Các bạn có thể cài đặt Vagrant tại đây.
3.3. Tạo máy ảo
Ok, sau khi tải và cài đặt VM Virtual Box và Vagrant. Các bạn hãy tạo một thư mục, mở Terminal hoặc CMD tại thư mục đó lên và gõ lệnh:
vagrant init
Với lệnh này, ta sẽ có một file Vagrantfle
mặc định của Vagrant, file này cũng không có gì đặc biệt ngoài các cấu hình cơ bản mà Vagrant setup sẵn. Tuy nhiên ta sẽ không dùng file này.
Các bạn sẽ copy nội dung dưới đây vào Vagrantfile
của các bạn:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
# Cấu hình chung cho tất cả máy ảo
config.vm.box = "ubuntu/bionic64"
config.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 1
end
# Cài đặt Docker và Docker Compose
$script = <<-SCRIPT
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
SCRIPT
# Cấu hình cho từng máy ảo
config.vm.define "manager01" do |manager01|
manager01.vm.hostname = "manager01"
manager01.vm.network "private_network", ip: "192.168.56.101"
manager01.vm.provision "shell", inline: $script
end
config.vm.define "manager02" do |manager02|
manager02.vm.hostname = "manager02"
manager02.vm.network "private_network", ip: "192.168.56.102"
manager02.vm.provision "shell", inline: $script
end
config.vm.define "worker01" do |worker01|
worker01.vm.hostname = "worker01"
worker01.vm.network "private_network", ip: "192.168.56.103"
worker01.vm.provision "shell", inline: $script
end
end
Giải thích một chút với file này, ta có thể tạo ra được:
- Ba máy ảo ubuntu trên Oracle Virtual Box.
- Mỗi máy được tạo cấu hình 2GB ram, 1 CPU.
- Bên cạnh đó đã được cài sẵn Docker.
- Ta sẽ gán luôn cho mỗi máy một địa chỉ ip tĩnh để sau này dễ thao tác.
Sau khi có file Vagrantfile
này rồi, các bạn mở terminal lên (nơi có chứa file này). Với hệ điều hành Windows, các ta nên dùng PowerShell hoặc CMD chạy dưới quyền admin. Còn đối với Linux/MacOS thì nên chạy dưới quyền root rồi chạy lệnh:
vagrant up
Manager01:
Manager02:
Worker01:
Lần sau khi đã tạo được máy ảo rồi thì vẫn dùng lệnh này để khởi động máy ảo, bởi lệnh này vừa để khởi động, vừa có thể cập nhật mới.
Nếu muốn tắt máy ảo đi thì dùng lệnh:
vagrant halt
Muốn xóa hẳn máy ảo thì dùng lệnh:
vagrant destroy
Sau khi khởi tạo được 3 máy ảo, vẫn tại terminal đó, ta dùng lệnh để truy cập vào máy ảo:
vagrant ssh <tên/ địa chỉ ip của máy ảo>
Ví dụ ở đây ta có ba máy tên là: manager01
, manager02
, worker01
. Ta sẽ truy cập vào manager01
, nhớ là chuyển sang root
để có quyền cao nhất:
sudo -i
Các lệnh cơ bản của Vagrant có thể tham khảo thêm ở đây.
4. Khởi tạo Swarm Cluster
4.1. Yêu cầu
Tạo ra một Swarm với 3 node, trong đó có hai máy là manager và một máy worker. Trong ba máy ảo ubuntu đã tạo ở trên đã đặt tên sẵn là manager01
, manager02
và worker01
.
Hãy khởi tạo Docker Swarm Cluster tại máy manager01
rồi cho hai máy còn lại join vào swarm này.
4.2. Thực hành
Truy cập vào máy manager01
với lệnh:
vagrant ssh manager01
Chuyển sang root
:
sudo -i
Sau đó khởi tạo Docker Swarm với lệnh:
docker swarm init --advertise-addr 192.168.56.101
Trong đó 192.168.56.101
là ip của máy manager01
(Trong Vagrantfile đã cấu hình sẵn ip tĩnh cho các máy).
Sau khi lệnh được thực thi, sẽ có một câu lệnh được trả về có dạng:
Swarm initialized: current node (9i36eagxmf4rsvvv0r1de0ohi) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1r2qrwy1rqnxbpwqhyqri02fntj9m0c97hx1ryeyzhb5in2x38-6hp9e1ggpvw53ka021nqnxwf1 192.168.56.101:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Các bạn thể copy luôn đoạn token ở trên để cho các máy với role là worker join vào:
docker swarm join --token SWMTKN-1-1r2qrwy1rqnxbpwqhyqri02fntj9m0c97hx1ryeyzhb5in2x38-6hp9e1ggpvw53ka021nqnxwf1 192.168.56.101:2377
Hoặc có thể lấy token cho worker với lệnh:
docker swarm join-token worker
Lấy token dành cho manager:
docker swarm join-token manager
Truy cập vào hai máy manager02
và worker01
để join vào swarm:
Sau khi hai máy ảo manager02
và worker01
đã join vào Swarm. Ta có thể kiểm tra thông tin các node:
root@manager01:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
9i36eagxmf4rsvvv0r1de0ohi * manager01 Ready Active Leader 24.0.2
i335m41xjobcp1yb2ir0cpm24 manager02 Ready Active Reachable 24.0.2
oeihwep66ziq90i34qhwofi41 worker01 Ready Active 24.0.2
5. Kết
Vậy là ta đã thực hành xong bước đầu tiên trong bài tập thực hành Docker Swarm. Cảm ơn các bạn đã dành thời gian đọc bài viết của mình. Nếu có vấn đề gì thắc mắc, hãy bình luận phía dưới nhé.
Bình luận