DevOps/Vagrant 01: Vagrant là gì? Chơi Vagrant trên Mac và VMWare Fusion

23 tháng 08, 2024 - 148 lượt xem

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ểmVagrantAnsibleTerraform
Mục đíchTạo và quản lý môi trường máy ảo phát triểnQuản lý cấu hình và tự động hóa triển khaiQuản lý hạ tầng dưới dạng mã (IaC)
Công nghệMáy ảoAgentless, sử dụng SSHHạ tầng dưới dạng mã, sử dụng API
Tính nhất quánCao, do môi trường được định nghĩa rõ ràngCao, do cấu hình được định nghĩa rõ ràngCao, do hạ tầng được định nghĩa rõ ràng
Khả năng mở rộngHỗ trợ nhiều nhà cung cấp ảo hóaHỗ 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ụngDễ sử dụng cho môi trường phát triển nhỏDễ sử dụng, không cần cài đặt agentCần học cú pháp HCL, có thể phức tạp hơn
Hiệu suấtChậm hơn do sử dụng máy ảoNhanh hơn do không cần máy ảoTù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 VagrantGiải thích
vagrant initTạo một tệp Vagrantfile mới trong thư mục hiện tại.
vagrant upKhởi động và cấu hình máy ảo theo định nghĩa trong Vagrantfile.
vagrant sshKết nối SSH vào máy ảo đang chạy.
vagrant haltTắt máy ảo.
vagrant destroyXóa máy ảo và giải phóng tài nguyên.
vagrant reloadKhởi động lại máy ảo, áp dụng lại cấu hình từ Vagrantfile.
vagrant statusKiểm tra trạng thái hiện tại của máy ảo.
vagrant provisionChạ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 addThêm một box mới vào hệ thống Vagrant.
vagrant box listLiệt kê tất cả các box hiện có trên hệ thống.
vagrant box removeXóa một box khỏi hệ thống Vagrant.
vagrant suspendTạm dừng máy ảo, lưu trạng thái hiện tại để có thể tiếp tục sau.
vagrant resumeTiếp tục máy ảo từ trạng thái tạm dừng.
vagrant plugin installCài đặt một plugin Vagrant.
vagrant plugin listLiệt kê các plugin Vagrant đã cài đặt.
vagrant plugin uninstallGỡ bỏ một plugin Vagrant.

3.3 Tạo một máy ảo Ubuntu trong Mac

  1. Tạo một dự án vagrant
    $ mkdir virtualubuntu
    $ cd virtualubuntu
    $ vagrant init
    
  2. Sửa file Vagrantfile trong thư mục virtualubuntu
    # -*- 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
Vagrant Box Search

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

avatar
Nguyễn Văn Ánh 2024-09-12 10:33:22.685686 +0000 UTC

ok

Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  0 Thích
0