Saturday, November 23, 2024

Chuyển đổi VM sang Template Proxmox 

-

1. Tổng quan.

Trong ngữ cảnh của ảo hóa, một template là một bản sao của một máy ảo đã được cấu hình và chuẩn bị sẵn để tạo ra các máy ảo mới từ đó. Thay vì tạo máy ảo từ đầu và cấu hình lại từng phần, bạn có thể tạo một template từ một máy ảo đã được cấu hình sẵn và sử dụng nó để tạo ra các bản sao máy ảo mới một cách nhanh chóng.

2. Lợi ích của việc chuyển đổi máy ảo sang template.

  • Tiết kiệm thời gian và công sức: Khi bạn đã cấu hình một máy ảo theo yêu cầu và chức năng cụ thể, việc chuyển đổi nó thành một template sẽ giúp bạn tiết kiệm thời gian khi tạo các máy ảo mới. Thay vì phải cấu hình từng chi tiết cho từng máy ảo, bạn có thể tạo nhanh các bản sao từ template đã có sẵn.
  • Đảm bảo tính đồng nhất: Bằng cách sử dụng template, bạn đảm bảo rằng các máy ảo mới được tạo ra từ cùng một template sẽ có cấu hình và thiết lập giống nhau. Điều này đảm bảo tính đồng nhất trong môi trường ảo hóa và giúp quản lý và duy trì hệ thống dễ dàng hơn.
  • Tiết kiệm tài nguyên: Khi sử dụng template, bạn có thể chia sẻ các bản sao của các máy ảo đã được cấu hình sẵn mà không cần sao lưu và lưu trữ các bản sao đầy đủ của từng máy ảo. Điều này giúp tiết kiệm không gian lưu trữ và tài nguyên hệ thống.
  • Linh hoạt và dễ dàng quản lý: Việc sử dụng template cho phép bạn nhanh chóng tạo, sao chép và xóa các máy ảo. Bạn cũng có thể dễ dàng cập nhật và mở rộng các template để đáp ứng nhu cầu của hệ thống.

3. Quy trình chuyển đổi máy ảo thành template trên Proxmox.

  • Cập nhật tên máy chủ (hostname): Bước này giúp bạn cập nhật tên máy chủ mới cho máy ảo trước khi chuyển đổi thành template.
  • Xóa máy-id (machine-id): Máy-id là một file duy nhất được tạo ra cho mỗi máy ảo. Trong trường hợp chuyển đổi thành template, việc xóa máy-id là cần thiết để tránh xung đột khi tạo các máy ảo mới từ template.
  • Xóa SSH host keys: Bước này giúp xóa các khóa SSH host đã được tạo ra cho máy ảo. Điều này đảm bảo rằng các máy ảo mới từ template sẽ tạo ra các khóa SSH host mới và tránh xung đột với các máy ảo khác trong cùng mạng.
  • Thay thế cấu hình mạng: Bước này nhằm chỉnh sửa cấu hình mạng để xóa các giá trị không cần thiết, bao gồm PREFIX và thay thế bằng NETMASK.
  • Chỉnh sửa cấu hình mạng: Bước này giúp chỉnh sửa cấu hình mạng để loại bỏ các giá trị không cần thiết, bao gồm HWADD.
  • Xóa các bản ghi log: Bước này giúp xóa các bản ghi log của máy ảo trước khi chuyển đổi thành template. Điều này giúp giảm dung lượng lưu trữ và bảo mật thông tin.
  • Cài đặt gói ovirt-guest-agent-common: Bước này giúp cài đặt gói ovirt-guest-agent-common trên máy ảo. Gói này cung cấp các chức năng tương tác giữa máy ảo và môi trường ảo hóa.
  • Hoàn tất các cấu hình và cài đặt bổ sung: Bước này cho phép bạn hoàn thiện các cấu hình và cài đặt khác mà bạn mong muốn trên máy ảo trước khi chuyển đổi thành template. Bạn có thể thực hiện các tùy chỉnh và cài đặt phù hợp với nhu cầu của hệ thống.
  • Sys-unconfig: Bước này sẽ xóa thông tin cụ thể của máy chủ và tắt nguồn máy ảo. Điều này giúp đảm bảo rằng máy ảo mới từ template sẽ bắt đầu với thông tin mặc định và có thể được cấu hình lại theo nhu cầu.
  • Chuyển đổi máy ảo thành template: Sau khi hoàn thành các bước trên, bạn có thể chuyển đổi máy ảo thành template trên Proxmox. Điều này cho phép bạn tạo các máy ảo mới từ template đã được cấu hình sẵn và tiết kiệm thời gian trong quá trình triển khai.
  • Triển khai máy ảo bằng template: Sau khi máy ảo đã được chuyển đổi thành template, bạn có thể triển khai các máy ảo mới từ template đó. Quá trình triển khai này sẽ tạo ra các bản sao của template với các cấu hình và thiết lập đã được định sẵn, giúp bạn nhanh chóng tạo ra các máy ảo mới và tiết kiệm thời gian cấu hình.

4. Thực hành chuyển đổi máy ảo sang template.

Tôi đã có sẵn một máy ảo chạy ubuntu1804 sạch, giờ tôi sẽ dùng máy ảo này và config chút xíu để chuyển nó thành template. Tôi vào phần Option chỉnh sửa Start at boot thành On, với tùy chọn “Start at boot” giúp tự động khởi động máy ảo sau khi hệ thống hoặc máy chủ vật lý được khởi động lại, đảm bảo sự khả dụng liên tục của máy ảo.

Tiếp theo mình gỡ bỏ toàn bộ ISO ra khỏi CD-Room tránh trường hợp khởi tạo máy ảo ở một môi trường khác mà không có ISO làm cho quá trình khởi tạo máy ảo từ template bị lỗi.

Kết quả sau khi gỡ xong ISO ra khởi CD-Room.

Hãy enable card mạng lên nếu nó đang ngắt kết nối (link_down=1).

Chọn card mạng và bấm Edit nó, bỏ tích ở Disconnect và bấm Ok.

Hãy khởi động máy ảo lên.

Hãy ssh vào server này.

$ ssh hoanghd@192.168.12.46
The authenticity of host '192.168.12.46 (192.168.12.46)' can't be established.
ED25519 key fingerprint is SHA256:QigHE3diPxo8MEjr0lInR3kAPRseYTlDShGPOfMp8UY.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.12.46' (ED25519) to the list of known hosts.
hoanghd@192.168.12.46's password:
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-20-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri May 26 07:28:32 UTC 2023

  System load:  0.07              Processes:            154
  Usage of /:   5.6% of 97.93GB   Users logged in:      1
  Memory usage: 2%                IP address for ens18: 192.168.12.46
  Swap usage:   0%


0 packages can be updated.
0 updates are security updates.

Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings


Last login: Fri May 26 07:28:09 2023
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

_____________________________________________________________________
WARNING! Your environment specifies an invalid locale.
 The unknown environment variables are:
   LC_CTYPE=UTF-8 LC_ALL=
 This can affect your user experience significantly, including the
 ability to manage packages. You may install the locales by running:

   sudo apt-get install language-pack-UTF-8
     or
   sudo locale-gen UTF-8

To see all available language packs, run:
   apt-cache search "^language-pack-[a-z][a-z]$"
To disable this message for all users, run:
   sudo touch /var/lib/cloud/instance/locale-check.skip
_____________________________________________________________________

Mình chuyển sang root xử lý cho nhanh, đỡ gõ pass.

hoanghd@ubuntu1804:~$ sudo -s
[sudo] password for hoanghd:
root@ubuntu1804:~#

Cài đặt lại tên hostname về một tên nào đó chung chung, không nên để tên riêng kỳ lắm.

root@ubuntu1804:~# hostnamectl set-hostname localhost.localdomain --static
root@ubuntu1804:~# hostnamectl 
   Static hostname: localhost.localdomain
Transient hostname: ubuntu1804
         Icon name: computer-vm
           Chassis: vm
        Machine ID: 41b609c625044484b1ccf1a5f5779ed8
           Boot ID: 819bad9132074ee7997822015cb25be1
    Virtualization: kvm
  Operating System: Ubuntu 18.04 LTS
            Kernel: Linux 4.15.0-20-generic
      Architecture: x86-64

Làm trống file machine-id.

root@ubuntu1804:~# cat /etc/machine-id 
41b609c625044484b1ccf1a5f5779ed8
root@ubuntu1804:~# echo '' > /etc/machine-id 
root@ubuntu1804:~# cat /etc/machine-id 

root@ubuntu1804:~#

Xoá các file có tên bắt đầu là ssh_host_ trong thử mục /etc/ssh/.

root@ubuntu1804:/etc/ssh# cd /etc/ssh/
root@ubuntu1804:/etc/ssh# ll | grep  ssh_host_
-rw-------  1 root root    668 May 26 04:15 ssh_host_dsa_key
-rw-r--r--  1 root root    605 May 26 04:15 ssh_host_dsa_key.pub
-rw-------  1 root root    227 May 26 04:15 ssh_host_ecdsa_key
-rw-r--r--  1 root root    177 May 26 04:15 ssh_host_ecdsa_key.pub
-rw-------  1 root root    411 May 26 04:15 ssh_host_ed25519_key
-rw-r--r--  1 root root     97 May 26 04:15 ssh_host_ed25519_key.pub
-rw-------  1 root root   1679 May 26 04:15 ssh_host_rsa_key
-rw-r--r--  1 root root    397 May 26 04:15 ssh_host_rsa_key.pub
root@ubuntu1804:/etc/ssh# rm -rf ssh_host_*
root@ubuntu1804:/etc/ssh# ll | grep  ssh_host_
root@ubuntu1804:/etc/ssh# rm -rf /root/anaconda-ks.cfg

Xoá lịch sử dòng lệnh.

unset HISTFILE

Mình sẽ xoá các file log để template được nhẹ bớt nhưng mà mình sẽ không xoá các file mà thay vào đó là làm trắng các file này. Mình list tất cả các file mục đích lấy tên file cần làm trắng.

$ ls -al /var/log/
total 936
drwxrwxr-x   9 root      syslog            4096 May 26 06:37 .
drwxr-xr-x  13 root      root              4096 Apr 26  2018 ..
-rw-r--r--   1 root      root             17602 Apr 26  2018 alternatives.log
drwxr-xr-x   2 root      root              4096 Apr 26  2018 apt
-rw-r-----   1 syslog    adm               6953 May 26 06:33 auth.log
-rw-r--r--   1 root      root             56751 Apr 26  2018 bootstrap.log
-rw-rw----   1 root      utmp               384 May 26 06:08 btmp
-rw-r--r--   1 root      root              4935 May 26 06:14 cloud-init-output.log
-rw-r--r--   1 syslog    adm             143258 May 26 06:14 cloud-init.log
drwxr-xr-x   2 root      root              4096 Apr 17  2018 dist-upgrade
-rw-r--r--   1 root      root            330249 Apr 26  2018 dpkg.log
-rw-r--r--   1 root      root             32032 May 26 04:15 faillog
drwxr-xr-x   2 root      root              4096 May 26 04:13 installer
drwxr-sr-x+  3 root      systemd-journal   4096 May 26 04:15 journal
-rw-r-----   1 syslog    adm             130654 May 26 06:16 kern.log
drwxr-xr-x   2 landscape landscape         4096 May 26 04:16 landscape
drwxr-xr-x   2 root      root              4096 Apr 17  2018 lxd
-rw-r-----   1 syslog    adm             194073 May 26 06:29 syslog
-rw-------   1 root      root             64064 May 26 04:15 tallylog
drwxr-x---   2 root      adm               4096 May 26 06:08 unattended-upgrades
-rw-rw-r--   1 root      utmp              9600 May 26 06:18 wtmp

Sau khi xác định được các file cần làm trắng thì mình sử dụng lệnh dưới để làm trắng tất cả các file có đuôi mở rộng là logs, journal và các file có tên wtmp, btmp,…

find /var/log/ -type f \( -name "*.log" -o -name "tallylog" -o -name "btmp" -o -name "wtmp" -o -name "*.journal" \) -exec truncate -s 0 {} +

Sau khi làm trắng file, các bạn sẽ thấy các file này sẽ có dung lượng là 0 như dưới.

$ ls -al /var/log/
total 144
drwxrwxr-x   9 root      syslog            4096 May 26 07:26 .
drwxr-xr-x  13 root      root              4096 Apr 26  2018 ..
-rw-r--r--   1 root      root                 0 May 26 07:30 alternatives.log
drwxr-xr-x   2 root      root              4096 Apr 26  2018 apt
-rw-r-----   1 syslog    adm                  0 May 26 07:30 auth.log
-rw-r--r--   1 root      root                 0 May 26 07:30 bootstrap.log
-rw-rw----   1 root      utmp                 0 May 26 07:30 btmp
-rw-r--r--   1 root      root                 0 May 26 07:30 cloud-init-output.log
-rw-r--r--   1 syslog    adm                  0 May 26 07:30 cloud-init.log
drwxr-xr-x   2 root      root              4096 Apr 17  2018 dist-upgrade
-rw-r--r--   1 root      root                 0 May 26 07:30 dpkg.log
-rw-r--r--   1 root      root             32032 May 26 07:26 faillog
drwxr-xr-x   2 root      root              4096 May 26 07:18 installer
drwxr-sr-x+  3 root      systemd-journal   4096 May 26 07:26 journal
-rw-r-----   1 syslog    adm                  0 May 26 07:30 kern.log
drwxr-xr-x   2 landscape landscape         4096 May 26 07:26 landscape
-rw-rw-r--   1 root      utmp            292292 May 26 07:28 lastlog
drwxr-xr-x   2 root      root              4096 Apr 17  2018 lxd
-rw-r-----   1 syslog    adm             101762 May 26 07:30 syslog
-rw-------   1 root      root                 0 May 26 07:30 tallylog
drwxr-x---   2 root      adm               4096 Apr 17  2018 unattended-upgrades
-rw-rw-r--   1 root      utmp                 0 May 26 07:30 wtmp

Cài đặt cloud-init nếu nó chưa tồn tại.

apt install cloud-init -y

Enable dịch vụ này tự khởi động theo OS.

systemctl enable cloud-init

Hãy đảm bảo cài đặt network của bạn đang là DHCP, không gán tĩnh bất cứ giá trị nào mà chúng sẽ thay đổi khi chạy ở phần cứng mới (ví dụ mac address,…).

$ cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        ens18:
            addresses: []
            dhcp4: true
            optional: true
    version: 2


Lệnh apt clean all trong Ubuntu được sử dụng để xóa bỏ các gói cài đặt tạm thời đã được tải xuống và lưu trữ trong thư mục /var/cache/apt/archives. Điều này giúp giải phóng không gian đĩa và làm sạch bộ nhớ cache của apt.

apt clean all

Sau khi config xong hãy tắt máy ảo.

$ init 0
Connection to 192.168.12.46 closed by remote host.
Connection to 192.168.12.46 closed.

Chuột phải vào nó chọn Convert to template.

Xác nhận chuyển từ máy ảo qua template.

Chuyển máy ảo sang template thành công (1) để ý bạn sẽ thấy icon trước tên template sẽ khác với icon nằm trước máy ảo. Log báo convert thành công ở (2).

5. Sử dụng template sau khi convert xong.

Chọn template chúng ta muốn sử dụng, ví dụ của mình sẽ là Ubuntu 18.04, bấm chuột phải vào chọn Clone.

Tại phần Clone VM Template <template ID> bạn có 1 số thiết lập sau:

  • Target node: Node mục tiêu là nơi máy ảo sẽ được triển khai. Đây là một trong các node có sẵn trong hạ tầng Proxmox và được chọn để chạy máy ảo.
  • VM ID: VM ID là một số duy nhất được gán cho máy ảo trong hệ thống Proxmox. Nó được sử dụng để xác định và quản lý máy ảo trong môi trường Proxmox.
  • Name: Tên của máy ảo, đây là một tên duy nhất để xác định máy ảo trong hệ thống. Tên này có thể được tùy chỉnh để phù hợp với yêu cầu và sắp xếp hệ thống.
  • Resource Pool: Resource Pool là một nhóm tài nguyên trong hệ thống Proxmox, cho phép quản lý tài nguyên một cách thuận tiện và có cấu trúc. Máy ảo có thể được gán vào một Resource Pool để quản lý tài nguyên một cách hiệu quả.
  • Mode: Mode xác định cách máy ảo được triển khai. Có hai chế độ chính là “Full Clone” và “Linked Clone”. Full Clone tạo ra một bản sao hoàn chỉnh và độc lập của máy ảo, trong khi Linked Clone tạo ra một bản sao kết nối chia sẻ dữ liệu với máy ảo gốc.
  • Target Storage: Target Storage là không gian lưu trữ mà máy ảo sẽ được triển khai. Đây có thể là một hệ thống tệp hệ điều hành, một thiết bị lưu trữ mạng hoặc một phương pháp lưu trữ khác mà Proxmox hỗ trợ.
  • Format: Format xác định định dạng của file máy ảo trên target storage. Có nhiều định dạng được hỗ trợ như qcow2, raw, vmdk, vhd, vvfat, vvfat-readonly, và vvfat-compressed. Định dạng được chọn phụ thuộc vào yêu cầu và khả năng tương thích của hệ thống.

Mình lựa chọn Mode là Full Clone và tạo máy ảo trên pve-node1.

Mình lựa chọn Target Storage là ceph-vm.

Và đây là thiết lập cuối cùng của mình, bấm Clone để tạo máy ảo mới.

Chờ đợi một lát và quá trình clone thành 1 máy ảo mới thành công.

Start máy ảo mới này lên.

Bạn có thể thấy machine-id của máy ảo đã khác so với máy ảo trước khi tạo template.

Giả sử mình clone ra một máy ảo thứ 2, lúc này machine-id máy ảo thứ 2 cũng đã khác với máy ảo thứ 1.

Như vậy quá trình khởi tạo template và template đã tạo ra sử dụng thành công.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories