- vừa được xem lúc

000 Vagrant - Tạo và quản lý máy ảo Virtualbox

0 0 4

Người đăng: Hải Hoàng

Theo Viblo Asia

28/8/2024

000 Vagrant - Tạo và quản lý máy ảo Virtualbox

Ở đây có cái ảnh nhưng lỗi tải lên không thàng công, mượn tạm cái banner của viblo vậy

Ở đây có cái ảnh nhưng lỗi tải lên không thàng công, mượn tạm cái banner của viblo vậy.

Thật ra, sau khi làm việc với Vagrant một thời gian rồi mình mới viết bài này. Bài viết mang mục đích chia sẻ kiến thức và trải nghiệm cá nhân thôi, nếu kiến thức bị sai sót chỗ nào mong các anh chị có thể góp ý cho em để cải thiện!

Vagrant là gì?

Vagrant là một công cụ để xây dựng và quản lý môi trường máy ảo.

Ví dụ: mình đang làm lab và muốn cài thử nginx xem cách cấu hình nó ra làm sao, thay vì phải cài lên máy host thì mình muốn tạo một con máy ảo để làm, các bạn sẽ làm gì? tải iso ubuntu sau đó bỏ vào virtualbox và cấu hình nó, sau này muốn sử dụng cho việc khác hoặc lúc cần sử dụng nhiều máy ảo thì sao? clone hay snapshot, tất nhiên là nó vẫn hoạt động rồi, nhưng rất vất vả và công việc lặp lại nhiều lần, khó quản lý nữa. Đó, bây giờ ta dùng Vagrant để tự động hóa nó.

Những thứ cơ bản để sử dụng Vagrant

Để hiểu va sử dụng Vagrant một cách cơ bản chúng ta cần nắm bắt những thứ sau:

  1. Vagrant CLI
  2. Vagrant Box
  3. Vagrantfile

Vagrant CLI

Nhắc tới CLI thi ai cũng biết rồi, mọi hoạt động sẽ thực hiện qua CLI.

Để cài đặt Vagrant CLI:

wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install -y vagrant

Tham khảo thêm cách cài đặt cho các OS khác tại đây

Vagrant box

Là một file được đóng gói để sử dụng trong Vagrant. Nói dễ hiểu thì nó như một file snapshot trong đó có chứa OS và phần mềm.

Vagrant sẽ cấu hình ram, cpu, ip, ... rồi khởi động snapshot đó lên, thế là ta có một máy ảo.

Vagrantfile

Vagrantfile là một file mô tả cấu hình để xây dựng và quản lý máy ảo, nó sử dụng cú pháp của ngôn ngữ lập trình Ruby.

Đây là ví dụ về một Vagrantfile:

ENV["LC_ALL"] = "en_US.UTF-8" Vagrant.configure("2") do |config| config.vm.define "ubuntu" do |instance| instance.vm.box = "ubuntu/bionic64" instance.vm.hostname = "ubuntu" instance.vm.network "private_network", ip: "172.16.1.10" instance.vm.provider "virtualbox" do |vm| vm.name = "ubuntu" vm.memory = 2 * 1024 vm.cpus = 2 end end end

Đây là cấu hình tối thiểu và cũng là cấu hình thường xuyên sài nhất. Các bạn có thể thấy cấu hình máy ảo này có:

  • hostname: ubuntu
  • ip private: 172.16.1.10
  • ram: 2 GiB
  • cpu: 2

Về phần disk, mình có tìm hiểu nhưng vẫn chưa hiểu và thấy ít đụng đến nên mình bỏ qua.

Có hai cách để ssh vào máy ảo là sử dụng command của vagrant và sử dụng command ssh thông thường:

vagrant ssh ubuntu # ubuntu là tên máy ảo định nghĩa trong Vagrantfile ssh vagrant@172.16.1.10

Mặc định các box ở trên Vagrant Cloud đều có user mặc định là vagrant và password cho user đó là vagrant, thêm một điều nữa là có public key của Vagrant trong ~/.ssh/authorized_keys. Đây là quy định khi bạn muốn public một Vagrant box.

Tự tạo một Vagrant box

Lần đầu mình sử dụng vagrant có ấn tượng xấu nên mình đã tìm hiểu để tự tạo box luôn.

Đầu tiên chúng ta cần một file iso Ubuntu 24 Server. Các bạn thích gì thì chọn đấy.

Tiếp theo cài đặt như bình thường.

Có hai lưu ý:

  • Cài đặt openssh-server và cấu hình cho phép đăng nhập root và đăng nhập bằng public key: PermitRootLogin yes PubkeyAuthentication yes
  • Thay đổi mật khẩu root, mình để là root:root

Sau khi xong các bước trên, shutdown máy ảo.

Sử dụng câu lệnh sau để đóng gói máy ảo thành box:

# u24 là tên máy ảo
vagrant package --base u24 --output u24.box

File u24.box này có thể lưu lại và để sài sau này hoặc đưa cho ai đó cũng được.

Thêm box này này vào hệ thống để vagrant có thể hiểu được và được lưu ở ~/.vagrant.d/boxes với định dạng name/version/provider:

vagrant box add --name u24 --provider virtualbox u24.box
# ~/.vagrant.d/boxes/u24/0/virtualbox/

Kiểm tra bằng command:

$ vagrant box list
u24 (virtualbox, 0)
ubuntu/focal64 (virtualbox, 20240821.0.0)

Như thế là tạo thành công một box rồi! Mình không có nhu cầu public box nên cũng không tìm hiểu thêm về phần này nên tới đây thôi. Tuy nhiên, bạn nào muốn public box thì xem thêm tại tài liệu chính chủ nha.

Lưu ý: Mình đang thực hiện lab trên PopOS (base ubuntu) và sử dụng virtualbox. Vagrant có cái gọi là provider chỉ các nhà cung cấp ảo hóa như Virtualbox, VMWare, ... xem thêm tại đây, vì virtualbox dễ sài (lúc trước mình có thử VMWare nhưng rất khó cấu hình và tài liệu cũng hiếm) nên mình chỉ tập trung mỗi virtualbox.

Sử dụng custom box

Thử viết một Vagrant file và chạy xem thế nào:

ENV["LC_ALL"] = "en_US.UTF-8" Vagrant.configure("2") do |config| config.vm.define "u24-demo" do |instance| instance.vm.box = "u24" instance.vm.hostname = "u24-demo" instance.vm.network "private_network", ip: "172.16.1.10" instance.vm.provider "virtualbox" do |vm| vm.name = "u24-demo" vm.memory = 2 * 1024 vm.cpus = 2 end end config.ssh.username = "root" config.ssh.password = "root" config.vm.provision "shell" do |s| ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_ed25519.pub").first.strip s.inline = <<-SHELL echo #{ssh_pub_key} >> /root/.ssh/authorized_keys useradd --create-home --user-group --shell /bin/bash self echo "self ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/self chmod 0440 /etc/sudoers.d/self mkdir -p /home/self/.ssh echo #{ssh_pub_key} >> /home/self/.ssh/authorized_keys chmod 0600 /home/self/.ssh/authorized_keys chown -R self:self /home/self/.ssh SHELL end end

Sử dụng command vagrant up để khởi chạy.

$ vagrant up
Bringing machine 'u24-demo' up with 'virtualbox' provider...
==> u24-demo: Importing base box 'u24'...
==> u24-demo: Matching MAC address for NAT networking...
==> u24-demo: Setting the name of the VM: u24-demo
==> u24-demo: Clearing any previously set network interfaces...
==> u24-demo: Preparing network interfaces based on configuration...
u24-demo: Adapter 1: nat
u24-demo: Adapter 2: hostonly
==> u24-demo: Forwarding ports...
u24-demo: 22 (guest) => 2222 (host) (adapter 1)
==> u24-demo: Running 'pre-boot' VM customizations...
==> u24-demo: Booting VM...
==> u24-demo: Waiting for machine to boot. This may take a few minutes...
u24-demo: SSH address: 127.0.0.1:2222
u24-demo: SSH username: root
u24-demo: SSH auth method: password
u24-demo:
u24-demo: Inserting generated public key within guest...
u24-demo: Removing insecure key from the guest if it's present...
u24-demo: Key inserted! Disconnecting and reconnecting using new SSH key...
==> u24-demo: Machine booted and ready!
==> u24-demo: Checking for guest additions in VM...
u24-demo: The guest additions on this VM do not match the installed version of
u24-demo: VirtualBox! In most cases this is fine, but in rare cases it can
u24-demo: prevent things such as shared folders from working properly. If you see
u24-demo: shared folder errors, please make sure the guest additions within the
u24-demo: virtual machine match the version of VirtualBox you have installed on
u24-demo: your host and reload your VM.
u24-demo:
u24-demo: Guest Additions Version: 6.0.0 r127566
u24-demo: VirtualBox Version: 7.0
==> u24-demo: Setting hostname...
==> u24-demo: Configuring and enabling network interfaces...
==> u24-demo: Mounting shared folders...
u24-demo: /vagrant => /home/hehehe/workspaces/devops/003/vagrant
==> u24-demo: Running provisioner: shell...
u24-demo: Running: inline script

Bạn nào bị lỗi khi chạy vagrant up mà hiện Range network... gì gì đó thì các bạn có thể cấu hình như sau:

sudo mkdir -p /etc/vbox
echo '* 0.0.0.0/0 ::/0' | sudo tee /etc/vbox/networks.conf
sudo chmod 644 /etc/vbox/networks.conf

Lỗi đó tại đây, nó thuộc 6.7. Host-Only Networking

Vì tự tạo box và không sử dụng public key của vagrant nữa nên thay đổi phương thức đăng nhập mật khẩu, thêm hai dòng username với password đó.

Muốn thực hiện script sau khi chạy lên thì viết như ví dụ. Có thể chạy script bằng file nữa nhưng mình thấy ít khi dùng nên bỏ qua luôn. Bỏ qua thì sau sẽ học Ansible để cấu hình nhiều máy ảo cùng lúc, ví dụ như setup cụm k8s,...

Câu lệnh hay dùng

Xem thêm tại đây

# đóng gói máy ảo
vagrant package --base u24 --output u24.box # thêm box vào Vagrant
vagrant box add --name u24 --provider virtualbox u24.box # danh sách các box được thêm Vagrant
vagrant box list # xóa box khỏi Vagrant
vagrant box remove u24 # tạo và cấu hình máy ảo
vagrant up # xóa hết máy ảo
vagrant destroy -f # xóa máy ảo tên ubuntu
vagrant destroy ubuntu # shutdown tất cả máy ảo
vagrant halt # áp dụng những thay đổi trong Vagrantfile
# nó tương đương việc halt sau đó up
# vd: đổi 2cpu lên 4cpu, tăng giảm ram,...
vagrant reload

Đây sẽ là nền tảng cho những bài viết tiếp theo trong tương lai của mình, bài viết đến đây là hết! Cảm ơn các bạn đã đọc bài viết và nếu có gì sai sót, góp ý hãy bình luận nha!

Bình luận

Bài viết tương tự

- vừa được xem lúc

How to install Ubuntu on VirtualBox

Bạn đang tìm một bài hướng dẫn để cài đặt một máy tính ảo miễn phí trên máy tính của mình ? Vậy thì đây đúng là bài viết mà bạn cần rồi. Còn chần chừ gì nữa, cùng mình tạo ngay ra một con máy ảo Ubunt

0 0 28

- vừa được xem lúc

Bài 1 : Cài đặt Oracle VM VirtualBox 7 trên Ubuntu 22.04

Khi bắt đầu Series này phần không thể thiếu là mô hình máy chủ để mình thực hành, ở bài này mình sẽ hướng dẫn các bạn tạo 6 máy chủ ảo hóa bằng VirtualBox 7 theo kiến thức basic nhất. Bước 1.

0 0 23

- vừa được xem lúc

Bài 2: Tạo máy ảo ubuntu 22.04 bằng Oracle VM VirtualBox 7

Ở bài trước mình có hướng dẫn các bạn cài đặt Oracle VM VirtualBox 7 trên ubuntu 22.04, bài này mình sẽ hướng dẫn các bạn tạo các VM Ubuntu để thực hành series này.

0 0 21

- vừa được xem lúc

[DEVOPS] [VAGRANT] Vagrant đơn giản và cơ bản

Xin chào các mọi người. Trong bài viết này mình sẽ hướng dẫn sử dụng cơ bản với Vagrant.

0 0 24

- vừa được xem lúc

Bài 2.2 : Cài đặt và chạy môi trường ảo hoá Oracle VM VirtualBox 7 bằng Vagrant

Nếu bạn một Lập trình viên, nhà phát triển phần miềm, kiểm thử phần miềm, designer, một ngày đẹp trời đội dự án kiêu bạn vào và kiêu bạn chạy thử phần miềm trên máy bạn, bạn phải xây dựng 1 hệ thông y

0 0 24

- vừa được xem lúc

[K8s] Xây dựng Kubernetes cluster bằng công cụ kubeadm trên Virtual Box

GitHub repo: https://github.com/holdennguyen/kubernetes-install-cluster-with-kubeadm. . .

0 0 26