1. Câu chuyện DevOps
Hệ thống web site của khách hàng cần 3 con máy chủ VPS để chạy hệ thống microservice, database, video streaming và landing pages. Đội phần mềm cần tạo môi trường dev, kiểm thử gần giống production nhất. Cài đặt 3 máy ảo này thủ công cũng khá lâu, nếu hệ thống có 100 máy ảo thì chắc chết. Do đó tôi quyết định tìm một công cụ Infrastructure As Code để tự động hóa cấu hình ngay từ bước đầu dựng hệ thống.
2. Vagrant là công cụ gì?
Vagrant là một công cụ mã nguồn mở được sử dụng để xây dựng và quản lý các môi trường máy ảo phát triển. Nó giúp đơn giản hóa quá trình thiết lập môi trường phát triển bằng cách sử dụng các file cấu hình để tự động hóa việc tạo và cấu hình máy ảo.
Nhiệm vụ của Vagrant
- Tự động hóa môi trường phát triển: Vagrant cho phép các nhà phát triển tạo ra các môi trường phát triển nhất quán và có thể tái sử dụng.
- Tích hợp với các nhà cung cấp ảo hóa: Vagrant hỗ trợ nhiều nhà cung cấp ảo hóa như VirtualBox, VMware, AWS, v.v.
- Quản lý cấu hình: Sử dụng các công cụ như Shell, Ansible, Chef, hoặc Puppet để tự động hóa cấu hình máy ảo.
Ưu điểm của Vagrant
- Dễ sử dụng: Cung cấp một giao diện dòng lệnh đơn giản và dễ hiểu.
- Tính nhất quán: Đảm bảo rằng tất cả các nhà phát triển đều làm việc trên cùng một môi trường.
- Khả năng mở rộng: Hỗ trợ nhiều nhà cung cấp ảo hóa và công cụ quản lý cấu hình.
Nhược điểm của Vagrant
- Hiệu suất: Có thể chậm hơn so với việc sử dụng container do phải chạy toàn bộ hệ điều hành.
- Tài nguyên: Yêu cầu nhiều tài nguyên hệ thống hơn so với các giải pháp nhẹ hơn như Docker.
- Phức tạp: Có thể trở nên phức tạp khi quản lý nhiều máy ảo và cấu hình phức tạp.
Bảng so sánh Vagrant với Ansible và Terraform
Đặc điểm | Vagrant | Ansible | Terraform |
---|---|---|---|
Mục đích | Tạo và quản lý môi trường máy ảo phát triển | Quản lý cấu hình và tự động hóa triển khai | Quản lý hạ tầng dưới dạng mã (IaC) |
Công nghệ | Máy ảo | Agentless, sử dụng SSH | Hạ tầng dưới dạng mã, sử dụng API |
Tính nhất quán | Cao, do môi trường được định nghĩa rõ ràng | Cao, do cấu hình được định nghĩa rõ ràng | Cao, do hạ tầng được định nghĩa rõ ràng |
Khả năng mở rộng | Hỗ trợ nhiều nhà cung cấp ảo hóa | Hỗ trợ nhiều nền tảng và dịch vụ | Hỗ trợ nhiều nhà cung cấp đám mây và dịch vụ |
Dễ sử dụng | Dễ sử dụng cho môi trường phát triển nhỏ | Dễ sử dụng, không cần cài đặt agent | Cần học cú pháp HCL, có thể phức tạp hơn |
Hiệu suất | Chậm hơn do sử dụng máy ảo | Nhanh hơn do không cần máy ảo | Tùy thuộc vào nhà cung cấp và cấu hình |
3. Cài đặt Vagrant trong Mac, kết hợp với VMware Fusion
3.1 Cài đặt Vagrant trong Mac
$ brew update
$ brew install --cask vagrant
$ vagrant --version
Vagrant 2.4.1
Chú ý: chỉ gõ lệnh phía sau dấu nhắc , phiên bản trả về là Vagrant 2.4.1 hoặc mới hơn.
3.1 Cài đặt VMWare Fusion
Mình muốn dùng VMWareFusion để tạo các máy ảo. Do đó mình sẽ cài đặt VMWare Fusion phiên bản VMWare dành riêng và miễn phí cho MacOSX.
Tiếp đến cài phần mềm kết nối cho phép vagrant quản lý VMWare Fusion
$ brew install --cask vagrant-vmware-utility
3.3 Tập lệnh căn bản của Vagrant
Lệnh Vagrant | Giải thích |
---|---|
vagrant init | Tạo một tệp Vagrantfile mới trong thư mục hiện tại. |
vagrant up | Khởi động và cấu hình máy ảo theo định nghĩa trong Vagrantfile . |
vagrant ssh | Kết nối SSH vào máy ảo đang chạy. |
vagrant halt | Tắt máy ảo. |
vagrant destroy | Xóa máy ảo và giải phóng tài nguyên. |
vagrant reload | Khởi động lại máy ảo, áp dụng lại cấu hình từ Vagrantfile . |
vagrant status | Kiểm tra trạng thái hiện tại của máy ảo. |
vagrant provision | Chạy lại các script cấu hình mà không cần khởi động lại máy ảo. |
vagrant box add | Thêm một box mới vào hệ thống Vagrant. |
vagrant box list | Liệt kê tất cả các box hiện có trên hệ thống. |
vagrant box remove | Xóa một box khỏi hệ thống Vagrant. |
vagrant suspend | Tạm dừng máy ảo, lưu trạng thái hiện tại để có thể tiếp tục sau. |
vagrant resume | Tiếp tục máy ảo từ trạng thái tạm dừng. |
vagrant plugin install | Cài đặt một plugin Vagrant. |
vagrant plugin list | Liệt kê các plugin Vagrant đã cài đặt. |
vagrant plugin uninstall | Gỡ bỏ một plugin Vagrant. |
3.3 Tạo một máy ảo Ubuntu trong Mac
- Tạo một dự án vagrant
$ mkdir virtualubuntu $ cd virtualubuntu $ vagrant init
- Sửa file
Vagrantfile
trong thư mụcvirtualubuntu
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "bento/ubuntu-20.04" config.vm.provider "vmware_desktop" do |vm| vm.vmx['displayname'] = "Ubuntu Docker" vm.gui = false vm.memory = "2048" vm.cpus = 2 end config.vm.provision "shell",inline: $install_docker_script, privileged: true end $install_docker_script = <<SCRIPT echo "Installing dependencies ..." sudo apt-get update echo Installing Docker... apt install -y docker.io sudo usermod -aG docker vagrant SCRIPT
config.vm.box = "bento/ubuntu-20.04"
: mình chọn trong link này
https://portal.cloud.hashicorp.com/vagrant/discover?architectures=arm64&query=ubuntu
config.vm.provider "vmware_desktop"
: do mình dùng VMWare Fusion nên sẽ chọn provider là vmware_desktop
config.vm.provision "shell",inline: $install_docker_script, privileged: true
: sẽ chạy đoạn mã lệnh cài đặt Docker ngay sau khi máy ảo được dựng
3. Chạy vagrant để khởi động máy ảo và kết nối SSH
$ vagrant up
$ vagrant ssh
Nếu kết nối thành công bạn sẽ thấy dấu nhắcvagrant@vagrant
Bình luận
ok