102.6 Bài 1
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
102 Cài đặt Linux và Quản lý Gói |
Mục tiêu: |
102.6 Linux với tư cách là Máy khách Ảo hóa |
Bài: |
1 trên 1 |
Giới thiệu
Một trong những điểm mạnh lớn nhất của Linux là tính linh hoạt của nó. Một khía cạnh của tính linh hoạt này là khả năng sử dụng Linux như một phương tiện lưu trữ các hệ điều hành khác hoặc các ứng dụng riêng lẻ trong một môi trường hoàn toàn biệt lập và an toàn. Bài học này sẽ tập trung vào các khái niệm về ảo hóa (virtualization), công nghệ vùng chứa (container) cùng với một số chi tiết kỹ thuật cần được xem xét khi triển khai một máy ảo trên một nền tảng đám mây.
Tổng quan về Ảo hóa
Ảo hóa là một công nghệ cho phép một nền tảng phần mềm được gọi là trình giám sát máy ảo. Phần mềm này chạy các tiến trình có chứa một hệ thống máy tính được mô phỏng đầy đủ. Trình giám sát máy ảo chịu trách nhiệm quản lý tài nguyên của phần cứng vật lý có thể được sử dụng bởi các máy ảo riêng lẻ. Các máy ảo này được gọi là máy khách của trình giám sát máy ảo. Một máy ảo có nhiều tính chất của một máy tính vật lý được mô phỏng trong phần mềm (chẳng hạn như BIOS của hệ thống và bộ điều khiển ổ đĩa cứng cứng). Một máy ảo thường sẽ sử dụng hình hình ảnh ổ đĩa cứng được lưu trữ dưới dạng các tệp riêng lẻ và sẽ có quyền truy cập vào RAM và CPU của máy chủ thông qua phần mềm giám sát máy ảo. Trình giám sát máy ảo sẽ phân tách quyền truy cập vào tài nguyên phần cứng của hệ thống máy chủ giữa các khách; do đó, nó cho phép nhiều hệ điều hành chạy trên một hệ thống máy chủ.
Các trình giám sát máy ảo thường được sử dụng cho Linux bao gồm:
- Xen
-
Xen là một trình giám sát máy ảo max nguồn mở Loại 1, tức là nó không dựa vào một hệ điều hành cơ bản để hoạt động. Một trình giám sát máy ảo loại này được gọi là trình giám sát máy ảo vật lý vì máy tính có thể khởi động trực tiếp vào trình giám sát máy ảo.
- KVM
-
Kernel Virtual Machine là một mô-đun nhân Linux dành riêng cho ảo hóa. KVM là một trình giám sát máy ảo của dành cho cả Loại 1 và Loại 2 bởi dù nó cần một hệ điều hành Linux chung để hoạt động, nó vẫn có thể hoạt động như một trình giám sát máy ảo hoàn thiện bằng cách tích hợp với một bản cài đặt Linux đang chạy. Các máy ảo được triển khai với KVM sẽ sử dụng trình nền
libvirt
và các tiện ích phần mềm liên quan để tạo và quản lý. - VirtualBox
-
Một ứng dụng máy tính để bàn phổ biến giúp việc tạo và quản lý các máy ảo trở nên dễ dàng. Oracle VM VirtualBox là một trình đa nền tảng và sẽ hoạt động trên Linux, macOS và Microsoft Windows. Vì VirtualBox yêu cầu một hệ điều hành cơ bản để chạy nên nó là một trình giám sát máy ảo Loại 2.
Một số trình ảo hóa sẽ cho phép di chuyển động máy ảo. Quá trình di chuyển một máy ảo từ bản cài đặt bộ ảo hóa này sang một bản cài đặt bộ ảo hóa khác được gọi là di cư và các kỹ thuật liên quan sẽ khác nhau giữa các lần triển khai bộ ảo hóa. Một số phiên di cư chỉ có thể được thực hiện khi hệ thống máy khách đã tắt hoàn toàn và một số khác lại có thể được thực hiện trong khi máy khách đang chạy (được gọi là di cư trực tiếp). Những kỹ thuật như vậy có thể hỗ trợ việc bảo trì cho trình ảo hóa hoặc hỗ trợ khả năng phục hồi của hệ thống khi trình ảo hóa không hoạt động và máy khách có thể được chuyển sang một trình ảo hóa đang hoạt động.
Các loại Máy ảo
Có ba loại máy ảo chính là máy khách ảo hóa hoàn toàn, máy khách ảo hóa song song và máy khách lai.
- Ảo hoá hoàn toàn
-
Tất cả các hướng dẫn mà một hệ điều hành khách dự kiến sẽ thực thi phải có khả năng chạy trong quá trình cài đặt một hệ điều hành được ảo hóa hoàn toàn. Lý do cho điều này là không có trình điều khiển phần mềm bổ sung nào được cài đặt trong máy khách để dịch hướng dẫn sang phần cứng mô phỏng hoặc phần cứng thực. Máy khách được ảo hóa hoàn toàn là khi máy khách (hoặc HardwareVM) đó không biết rằng nó chính là một phiên bản máy ảo đang chạy. Để kiểu ảo hóa này diễn ra được trên các phần cứng dựa trên x86, các phần mở rộng CPU Intel VT-x hoặc AMD-V phải được kích hoạt trên hệ thống đã được cài đặt trình giám sát máy ảo. Điều này có thể được thực hiện từ menu cấu hình phần sụn BIOS hoặc UEFI.
- Ảo hoá song song
-
Máy khách được ảo hóa song song (hoặc PVM) là một máy mà hệ điều hành khách biết rằng đó là một phiên bản máy ảo đang chạy. Những loại máy khách này sẽ sử dụng một hạt nhân đã được sửa đổi và các trình điều khiển đặc biệt (được gọi là trình điểu khiển khách) để giúp hệ điều hành khách sử dụng tài nguyên phần mềm và phần cứng của trình giám sát máy ảo. Hiệu suất của máy khách được ảo hóa song song thường tốt hơn hiệu suất của máy khách được ảo hóa hoàn toàn do lợi thế mà các trình điều khiển phần mềm này mang lại.
- Ảo hoá lai
-
Ảo hóa song song và ảo hóa hoàn toàn có thể được kết hợp để cho phép các hệ điều hành chưa được sửa đổi nhận được hiệu suất I/O gần như gốc bằng cách sử dụng trình điều khiển ảo hóa song song trên các hệ điều hành ảo hóa hoàn toàn. Trình điều khiển ảo hóa song song sẽ chứa các trình điều khiển thiết bị lưu trữ và mạng với hiệu suất I/O của mạng và đĩa được nâng cao.
Các nền tảng ảo hóa thường cung cấp các trình điều khiển máy khách được đóng gói cho các hệ điều hành ảo hóa. KVM sử dụng trình điều khiển từ dự án Virtio, trong khi Oracle VM VirtualBox sử dụng Tiện ích mở rộng dành cho Máy khách có sẵn từ tệp ảnh ISO CD-ROM được cho phép tải xuống.
Ví dụ về Máy ảo libvirt
Chúng ta sẽ xem xét một ví dụ về máy ảo được quản lý bởi libvirt
và sử dụng trình giám sát máy ảo KVM. Một máy ảo thường bao gồm một nhóm tệp, chủ yếu là tệp XML dùng để_xác định_ máy ảo (chẳng hạn như cấu hình phần cứng, kết nối mạng, khả năng hiển thị, v.v.) và tệp hình ảnh ổ đĩa cứng được liên kết có chứa phần cài đặt của hệ điều hành và phần mềm của nó.
Trước tiên, chúng ta hãy bắt đầu kiểm tra một ví dụ về tệp cấu hình XML cho một máy ảo và môi trường mạng của nó:
$ ls /etc/libvirt/qemu total 24 drwxr-xr-x 3 root root 4096 Oct 29 17:48 networks -rw------- 1 root root 5667 Jun 29 17:17 rhel8.0.xml
Note
|
Phần |
Hãy lưu ý rằng có một thư mục có tên networks
. Thư mục này có chứa các tệp định nghĩa (cũng sử dụng XML) để tạo cấu hình mạng mà các máy ảo có thể sử dụng. Trình giám sát máy ảo này chỉ sử dụng một mạng và do đó, chỉ có một tệp định nghĩa chứa cấu hình cho phân đoạn mạng ảo mà các hệ thống này sẽ sử dụng.
$ ls -l /etc/libvirt/qemu/networks/ total 8 drwxr-xr-x 2 root root 4096 Jun 29 17:15 autostart -rw------- 1 root root 576 Jun 28 16:39 default.xml $ sudo cat /etc/libvirt/qemu/networks/default.xml <!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh net-edit default or other application using the libvirt API. --> <network> <name>default</name> <uuid>55ab064f-62f8-49d3-8d25-8ef36a524344</uuid> <forward mode='nat'/> <bridge name='virbr0' stp='on' delay='0'/> <mac address='52:54:00:b8:e0:15'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> </dhcp> </ip> </network>
Định nghĩa này bao gồm một mạng riêng Hạng C và một thiết bị phần cứng giả lập để hoạt động như một bộ định tuyến cho mạng. Ngoài ra còn có một dải địa chỉ IP để trình giám sát máy ảo sử dụng trong việc triển khai máy chủ DHCP có thể được gán cho các máy ảo sử dụng mạng này. Cấu hình mạng này cũng sử dụng trình dịch địa chỉ mạng (NAT) để chuyển tiếp các gói đến các mạng khác (chẳng hạn như mạng LAN của trình giám sát máy ảo).
Bây giờ, chúng ta sẽ cùng chuyển sự chú ý sang tệp định nghĩa máy ảo Red Hat Enterprise Linux 8 (các phần ghi chú đặc biệt sẽ được in đậm):
$ sudo cat /etc/libvirt/qemu/rhel8.0.xml <!-- WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh edit rhel8.0 or other application using the libvirt API. --> <domain type='kvm'> <name>rhel8.0</name> <uuid>fadd8c5d-c5e1-410e-b425-30da7598d0f6</uuid> <metadata> <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0"> <libosinfo:os id="http://redhat.com/rhel/8.0"/> </libosinfo:libosinfo> </metadata> <memory unit='KiB'>4194304</memory> <currentMemory unit='KiB'>4194304</currentMemory> <vcpu placement='static'>2</vcpu> <os> <type arch='x86_64' machine='pc-q35-3.1'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <vmport state='off'/> </features> <cpu mode='host-model' check='partial'> <model fallback='allow'/> </cpu> <clock offset='utc'> <timer name='rtc' tickpolicy='catchup'/> <timer name='pit' tickpolicy='delay'/> <timer name='hpet' present='no'/> </clock> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>destroy</on_crash> <pm> <suspend-to-mem enabled='no'/> <suspend-to-disk enabled='no'/> </pm> <devices> <emulator>/usr/bin/qemu-system-x86_64</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/rhel8'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </disk> <controller type='usb' index='0' model='qemu-xhci' ports='15'> <address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </controller> <controller type='sata' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/> </controller> <controller type='pci' index='0' model='pcie-root'/> <controller type='pci' index='1' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='1' port='0x10'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/> </controller> <controller type='pci' index='2' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='2' port='0x11'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/> </controller> <controller type='pci' index='3' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='3' port='0x12'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/> </controller> <controller type='pci' index='4' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='4' port='0x13'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/> </controller> <controller type='pci' index='5' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='5' port='0x14'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/> </controller> <controller type='pci' index='6' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='6' port='0x15'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/> </controller> <controller type='pci' index='7' model='pcie-root-port'> <model name='pcie-root-port'/> <target chassis='7' port='0x16'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/> </controller> <controller type='virtio-serial' index='0'> <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> </controller> <interface type='network'> <mac address='52:54:00:50:a7:18'/> <source network='default'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface> <serial type='pty'> <target type='isa-serial' port='0'> <model name='isa-serial'/> </target> </serial> <console type='pty'> <target type='serial' port='0'/> </console> <channel type='unix'> <target type='virtio' name='org.qemu.guest_agent.0'/> <address type='virtio-serial' controller='0' bus='0' port='1'/> </channel> <channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> <address type='virtio-serial' controller='0' bus='0' port='2'/> </channel> <input type='tablet' bus='usb'> <address type='usb' bus='0' port='1'/> </input> <input type='mouse' bus='ps2'/> <input type='keyboard' bus='ps2'/> <graphics type='spice' autoport='yes'> <listen type='address'/> <image compression='off'/> </graphics> <sound model='ich9'> <address type='pci' domain='0x0000' bus='0x00' slot='0x1b' function='0x0'/> </sound> <video> <model type='virtio' heads='1' primary='yes'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> </video> <redirdev bus='usb' type='spicevmc'> <address type='usb' bus='0' port='2'/> </redirdev> <redirdev bus='usb' type='spicevmc'> <address type='usb' bus='0' port='3'/> </redirdev> <memballoon model='virtio'> <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/> </memballoon> <rng model='virtio'> <backend model='random'>/dev/urandom</backend> <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/> </rng> </devices> </domain>
Tệp này xác định một số cài đặt phần cứng được sử dụng bởi máy khách này chẳng hạn như dung lượng RAM sẽ được gán cho nó, số lượng lõi CPU từ trình giám sát máy ảo mà máy khách sẽ có quyền truy cập, tệp hình ảnh ổ đĩa cứng được liên kết với máy khách này (trong phần disk
), khả năng hiển thị của nó (thông qua giao thức SPICE), quyền truy cập của máy khách vào thiết bị USB cũng như đầu vào chuột và bàn phím được mô phỏng.
Ví dụ về Lưu trữ Đĩa Máy ảo
Hình ảnh ổ đĩa cứng của máy ảo này nằm ở /var/lib/libvirt/images/rhel8
. Đây là hình ảnh đĩa trên trình giám sát máy ảo này:
$ sudo ls -lh /var/lib/libvirt/images/rhel8 -rw------- 1 root root 5.5G Oct 25 15:57 /var/lib/libvirt/images/rhel8
Kích thước hiện tại của hình ảnh đĩa này chỉ chiếm 5,5 GB dung lượng trên trình giám sát máy ảo. Tuy nhiên, hệ điều hành trong máy khách này nhận thấy một đĩa có kích thước 23,3 GB (bằng chứng là đầu ra của lệnh sau từ bên trong máy ảo đang chạy(:
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 252:0 0 23.3G 0 disk ├─vda1 252:1 0 1G 0 part /boot └─vda2 252:2 0 22.3G 0 part ├─rhel-root 253:0 0 20G 0 lvm / └─rhel-swap 253:1 0 2.3G 0 lvm [SWAP]
Điều này là do loại cung cấp đĩa được sử dụng cho máy khách này. Có nhiều loại ảnh đĩa mà máy ảo có thể sử dụng, nhưng hai loại chính là:
- COW (Copy-on-write)
-
Sao chép khi ghi (hay còn được gọi là phân bố mỏng hoặc hình ảnh rải rác) là phương pháp mà trong đó một tệp đĩa sẽ được tạo với giới hạn kích thước được xác định trước. Kích thước ảnh đĩa sẽ chỉ tăng lên khi dữ liệu mới được ghi vào đĩa. Giống như ví dụ trước, hệ điều hành khách sẽ thấy giới hạn đĩa được xác định trước là 23,3 GB nhưng sẽ chỉ ghi 5,5 GB dữ liệu vào tệp đĩa. Định dạng ảnh đĩa được sử dụng cho máy ảo ví dụ là
qcow2
(một định dạng tệp QEMU COW). - RAW
-
Loại đĩa thô hoặc đĩa toàn phần là một tệp mà toàn bộ dung lượng của nó đã được phân bổ từ trước. Ví dụ: tệp hình ảnh đĩa thô 10 GB sẽ tiêu thụ 10 GB dung lượng đĩa thực tế trên trình giám sát máy ảo. Kiểu đĩa này có lợi về hiệu suất vì tất cả dung lượng đĩa cần thiết đều đã tồn tại; vì vậy, trình giám sát máy ảo sẽ chỉ có thể ghi dữ liệu vào đĩa mà không cần mất hiệu suất cho việc theo dõi hình ảnh đĩa để đảm bảo rằng nó chưa đạt đến giới hạn và sẽ mở rộng kích thước của tệp khi dữ liệu mới được ghi vào nó.
Có các nền tảng quản lý ảo hóa khác như Red Hat Enterprise Virtualization và oVirt có thể sử dụng các đĩa vật lý để hoạt động như các vị trí lưu trữ dự phòng cho một hệ điều hành của máy ảo. Các hệ thống này có thể sử dụng mạng vùng lưu trữ (SAN) hoặc thiết bị lưu trữ gắn mạng (NAS) để ghi dữ liệu của chúng và trình giám sát máy ảo sẽ theo dõi vị trí lưu trữ nào thuộc về máy ảo nào. Các hệ thống lưu trữ này có thể sử dụng các công nghệ như Trình quản lý Ổ phân vùng logic (LVM) để tăng hoặc giảm kích thước lưu trữ đĩa của máy ảo khi cần và để hỗ trợ tạo và quản lý hình ảnh tức thời lưu trữ.
Làm việc với các bản mẫu Máy Ảo
Vì các máy ảo thường chỉ là các tệp chạy trên một trình giám sát máy ảo nên rất dễ để tạo các bản mẫu có thể tùy chỉnh cho các tình huống triển khai cụ thể. Thông thường, một máy ảo sẽ có một thiết lập hệ điều hành cơ bản và một số cài đặt cấu hình xác thực được định cấu hình sẵn để dễ dàng khởi chạy hệ thống trong tương lai. Điều này có thể cắt giảm đáng kể lượng thời gian xây dựng một hệ thống mới bằng cách giảm khối lượng của các công việc thường xuyên lặp lại (chẳng hạn như cài đặt gói cơ sở và cài đặt ngôn ngữ).
Bản mẫu máy ảo này sau đó có thể được sao chép sang một hệ thống máy khách mới. Trong trường hợp này, máy khách mới sẽ được đổi tên, một địa chỉ MAC mới sẽ được tạo cho giao diện mạng của nó và các sửa đổi khác có thể được thực hiện tùy thuộc vào mục đích sử dụng.
ID của máy D-Bus
Nhiều bản cài đặt Linux sẽ sử dụng số nhận dạng máy được tạo khi cài đặt. Số nhận dạng này được gọi là ID máy D-Bus. Tuy nhiên, nếu một máy ảo được nhân bản được dùng làm mẫu cho các cài đặt máy ảo khác, chúng ta sẽ phải tạo một ID máy D-Bus mới để đảm bảo rằng các tài nguyên hệ thống từ trình giám sát máy ảo được chuyển hướng đến hệ thống máy khách một cách thích hợp.
Lệnh sau có thể được sử dụng để xác thực rằng ID máy D-Bus có tồn tại cho hệ thống đang chạy:
$ dbus-uuidgen --ensure
Nếu không có thông báo lỗi nào được hiển thị thì tức là hệ thống có ID. Để xem ID máy D-Bus hiện tại, hãy chạy mã sau:
$ dbus-uuidgen --get 17f2e0698e844e31b12ccd3f9aa4d94a
Chuỗi văn bản hiển thị là số ID hiện tại. Các hệ thống Linux chạy trên cùng một trình giám sát máy ảo không được có cùng một ID máy D-Bus.
ID máy D-Bus nằm ở /var/lib/dbus/machine-id
và được liên kết tượng trưng với /etc/machine-id
. Việc thay đổi số ID này trên một hệ thống đang chạy không được khuyến khích vì hệ thống sẽ trở nên không ổn định và có thể xảy ra sự cố. Nếu hai máy ảo có cùng một ID máy D-Bus, hãy làm theo tiến trình bên dưới để tạo một máy mới:
$ sudo rm -f /etc/machine-id $ sudo dbus-uuidgen --ensure=/etc/machine-id
Trong trường hợp /var/lib/dbus/machine-id
không phải là một liên kết tượng trưng tương ứng với /etc/machine-id
thì /var/lib/dbus/machine-id
sẽ phải bị xóa.
Triển khai Máy ảo trên Đám mây
Có vô số nhà cung cấp IaaS (Cơ sở Hạ tầng dưới dạng Dịch vụ) chạy các hệ thống ảo hóa và có thể triển khai các hình ảnh máy khách ảo cho một tổ chức. Trên thực tế, tất cả các nhà cung cấp này đều có các công cụ cho phép quản trị viên xây dựng, triển khai và định cấu hình các máy ảo tùy chỉnh dựa trên nhiều bản phân phối Linux. Nhiều công ty trong số đó cũng có sẵn các hệ thống cho phép triển khai và di dời các máy ảo được xây dựng từ bên trong tổ chức của khách hàng.
Khi đánh giá việc triển khai một hệ thống Linux trong môi trường IaaS, có một số yếu tố chính mà quản trị viên nên biết:
- Máy ảo điện toán
-
Nhiều nhà cung cấp đám mây sẽ tính phí sử dụng dựa trên “máy ảo điện toán” hoặc lượng thời gian CPU mà cơ sở hạ tầng dựa trên đám mây của người dùng sẽ sử dụng. Việc lập kế hoạch cẩn thận về lượng thời gian xử lý mà các ứng dụng thực sự cần sẽ giúp duy trì chi phí của giải pháp đám mây ở trong tầm kiểm soát.
Phiên bản điện toán cũng thường đề cập đến số lượng máy ảo được cung cấp trong một môi trường đám mây. Một lần nữa, việc có nhiều phiên bản hệ thống đang chạy cùng một lúc cũng sẽ ảnh hưởng đến mức chi phi mà một tổ chức phải trả cho tổng thời gian CPU.
- Lưu trữ Khối
-
Các nhà cung cấp đám mây cũng có sẵn nhiều cấp độ lưu trữ khối khác nhau cho một tổ chức sử dụng. Một số dịch vụ chỉ đơn giản là lưu trữ mạng dựa trên web cho các tệp và các dịch vụ khác liên quan đến bộ nhớ ngoại vi dành cho máy ảo được cung cấp trên đám mây để sử dụng cho việc lưu trữ tệp.
Chi phí cho các dịch vụ như vậy sẽ thay đổi dựa trên dung lượng lưu trữ được sử dụng và tốc độ lưu trữ trong các trung tâm dữ liệu của nhà cung cấp. Truy cập bộ nhớ nhanh hơn thường sẽ tiêu tốn nhiều chi phí hơn và ngược lại, dữ liệu “ở trạng thái nghỉ” (như trong bộ nhớ lưu trữ) thường sẽ có chi phí rất thấp.
- Mạng
-
Một trong những vấn đề chính khi làm việc với nhà cung cấp giải pháp đám mây là cách thức cấu hình mạng ảo. Nhiều nhà cung cấp IaaS sẽ có một số dạng tiện ích dựa trên web có thể được sử dụng để thiết kế và triển khai các tuyến mạng, mạng con và cấu hình tường lửa khác nhau. Một số thậm chí sẽ cung cấp các giải pháp DNS để có thể chỉ định FQDN (Tên Miền đủ điều kiện) có thể được truy cập công khai bởi các hệ thống truy cập internet. Thậm chí còn có các giải pháp “hỗn hợp” có thể kết nối cơ sở hạ tầng mạng tại chỗ và hiện có với cơ sở hạ tầng dựa trên đám mây thông qua phương tiện VPN (mạng riêng ảo), từ đó liên kết hai cơ sở hạ tầng lại với nhau.
Truy cập an toàn vào Máy khách trên Đám mây
Phương pháp phổ biến nhất được sử dụng để truy cập một máy khách ảo từ xa trên nền tảng đám mây là thông qua việc sử dụng phần mềm OpenSSH. Một hệ thống Linux nằm trong đám mây sẽ có máy chủ OpenSSH đang chạy, trong khi quản trị viên sẽ sử dụng ứng dụng khách OpenSSH với các khóa được chia sẻ trước để truy cập từ xa.
Một quản trị viên sẽ chạy lệnh sau:
$ ssh-keygen
Sau đó là làm theo dấu nhắc để tạo cặp khóa SSH công khai và riêng tư. Khóa riêng tư vẫn còn trên hệ thống cục bộ của quản trị viên (được lưu trữ trong ~/.ssh/
) và khóa công khai sẽ được sao chép vào hệ thống đám mây từ xa. Đây cũng chính là phương pháp mà người dùng sẽ sử dụng khi làm việc với các máy được kết nối trong mạng LAN công ty.
Quản trị viên sẽ chạy lệnh sau:
$ ssh-copy-id -i <public_key> user@cloud_server
Thao tác này sẽ sao chép khóa SSH công khai từ cặp khóa vừa được tạo sang máy chủ đám mây từ xa. Khóa công khai sẽ được ghi vào tệp ~/.ssh/authorized_keys
của máy chủ đám mây và sẽ đặt các quyền thích hợp trên tệp.
Note
|
Nếu chỉ có một tệp khóa công khai trong thư mục |
Một số nhà cung cấp dịch vụ đám mây sẽ tự động tạo cặp khóa khi hệ thống Linux mới được cung cấp. Sau đó, quản trị viên sẽ phải tải xuống khóa riêng tư cho hệ thống mới từ nhà cung cấp đám mây và lưu trữ khóa đó trên hệ thống cục bộ của họ. Hãy lưu ý rằng quyền đối với khóa SSH phải là 0600
đối với khóa riêng tư và 0644
đối với khóa công khai.
Định cấu hình trước cho Hệ thống Đám mây
Một công cụ hữu ích giúp đơn giản hóa việc triển khai máy ảo dựa trên đám mây là tiện ích cloud-init
. Cùng với các tệp cấu hình được liên kết và hình ảnh máy ảo được xác định trước, lệnh này là phương pháp trung lập để triển khai máy khách Linux cho rất nhiều các nhà cung cấp IaaS. Bằng cách sử dụng các tệp văn bản thuần túy YAML (YAML không phải là Ngôn ngữ Đánh dấu), quản trị viên có thể định cấu hình trước thiết lập mạng, lựa chọn gói phần mềm, cấu hình khóa SSH, tạo tài khoản người dùng, cài đặt ngôn ngữ cùng với vô số các tùy chọn khác để nhanh chóng tạo các hệ thống mới.
Trong quá trình khởi động ban đầu của hệ thống mới, cloud-init
sẽ đọc cài đặt từ các tệp cấu hình YAML và áp dụng chúng. Quá trình này chỉ cần áp dụng cho thiết lập ban đầu của hệ thống và sẽ giúp việc triển khai một nhóm hệ thống mới trên nền tảng của nhà cung cấp đám mây trở nên dễ dàng hơn.
Cú pháp tệp YAML được sử dụng với cloud-init
được gọi là cloud-config. Sau đây là một tệp cloud-config
mẫu:
#cloud-config timezone: Africa/Dar_es_Salaam hostname: test-system # Update the system when it first boots up apt_update: true apt_upgrade: true # Install the Nginx web server packages: - nginx
Hãy lưu ý rằng ở dòng trên cùng không có khoảng cách giữa ký hiệu băm (#
) và thuật ngữ cloud-config
.
Note
|
|
Vùng Chứa
Công nghệ vùng chứa cũng tương tự như máy ảo ở một số khía cạnh. Đây là nơi người dùng sẽ có một môi trường biệt lập để dễ dàng triển khai một ứng dụng. Đối với một máy ảo, toàn bộ máy tính sẽ được mô phỏng. Trong khi đó, vùng chứa sẽ chỉ sử dụng vừa đủ các phần mềm để chạy một ứng dụng, từ đó có thể giảm thiểu được chi phí.
Các vùng chứa thường linh hoạt hơn so với máy ảo. Một vùng chứa ứng dụng có thể được di dời từ máy chủ này sang máy chủ khác, giống như một máy ảo có thể được di dời từ trình giám sát máy ảo này sang trình giám sát máy ảo khác. Tuy nhiên, đôi khi một máy ảo sẽ cần phải tắt nguồn trước khi có thể di dời; trong khi đó, đối với vùng chứa, ứng dụng sẽ luôn chạy kể cả trong khi nó đang được di dời. Vùng chứa cũng giúp ta dễ dàng triển khai các phiên bản ứng dụng mới song song với phiên bản hiện có. Khi người dùng đóng phiên của họ với các vùng chứa đang chạy, các vùng chứa này có thể được phần mềm điều phối vùng chứa tự động xóa khỏi hệ thống và được thay thế bằng phiên bản mới, từ đó giúp giảm thiểu thời gian chết.
Note
|
Có rất nhiều công nghệ vùng chứa có sẵn cho Linux (chẳng hạn như Docker, Kubernetes, LXD/LXC, systemd-nspawn, OpenShift, v.v.). Việc triển khai chính xác gói phần mềm vùng chứa nằm ngoài phạm vi của kỳ thi LPIC-1. |
Các vùng chứa sử dụng cơ chế nhóm kiểm soát (hay còn được gọi là cgroups) trong nhân Linux. Cgroups là một cách để phân vùng các tài nguyên hệ thống như bộ nhớ, thời gian của bộ xử lý cũng như băng thông mạng và đĩa cho một ứng dụng riêng lẻ. Quản trị viên có thể trực tiếp sử dụng cgroups để đặt giới hạn tài nguyên hệ thống trên một ứng dụng, hoặc một nhóm ứng dụng có thể tồn tại trong một cgroup duy nhất. Về bản chất, cùng với việc cung cấp các công cụ giúp dễ dàng quản lý và triển khai các cgroups, đây chính là nhiệm vụ của phần mềm vùng chứa.
Note
|
Hiện tại, kỳ thi LPIC-1 không cần tới kiến thức về cgroups. Khái niệm cgroups được đề cập tới ở đây để ứng viên có một số kiến thức cơ bản tối thiểu về cách một ứng dụng được phân tách vì mục đích sử dụng tài nguyên hệ thống. |
Bài tập Hướng dẫn
-
Phần mở rộng CPU nào là cần thiết trên nền tảng phần cứng dựa trên x86 chạy các máy khách được ảo hóa hoàn toàn?
-
Một phiên cài đặt máy chủ quan trọng yêu cầu hiệu suất nhanh nhất có thể sẽ sử dụng loại ảo hóa nào?
-
Hai máy ảo đã được sao chép từ cùng một bản mẫu và sử dụng D-Bus đang hoạt động không ổn định. Cả hai đều có tên máy chủ và cài đặt cấu hình mạng riêng biệt. Lệnh nào sẽ được sử dụng để xác định xem mỗi máy ảo có ID Máy D-Bus khác nhau hay không?
Bài tập Mở rộng
-
Hãy chạy lệnh sau để xem hệ thống đã kích hoạt phần mở rộng CPU để chạy máy ảo chưa (kết quả tùy thuộc vào CPU của bạn):
grep --color -E "vmx|svm" /proc/cpuinfo
Tùy thuộc vào đầu ra, bạn có thể đánh dấu
vmx
(đối với CPU hỗ trợ Intel VT-x) hoặcsvm
(đối với CPU hỗ trợ AMD SVM). Nếu bạn không nhận được kết quả, hãy tham khảo hướng dẫn phần sụn BIOS hoặc UEFI của bạn về cách kích hoạt ảo hóa cho bộ xử lý. -
Nếu bộ xử lý của bạn hỗ trợ ảo hóa, hãy tìm tài liệu về bản phân phối của bạn để chạy trình giám sát máy ảo KVM.
-
Hãy cài đặt các gói cần thiết để chạy trình giám sát ảo hoá KVM.
-
Nếu đang sử dụng môi trường máy tính để bàn đồ họa, bạn cũng nên cài đặt ứng dụng
virt-manager
- tức giao diện người dùng đồ họa có thể được sử dụng trên bản cài đặt KVM. Điều này sẽ hỗ trợ bạn trong việc cài đặt và quản lý máy ảo. -
Hãy tải xuống hình ảnh ISO của bản phân phối Linux mà bạn chọn và làm theo tài liệu về bản phân phối để tạo một máy ảo mới bằng cách sử dụng ISO này.
-
Tóm tắt
Trong bài học này, chúng ta đã đề cập đến các khái niệm cơ bản về máy ảo và vùng chứa cũng như cách sử dụng các công nghệ này với Linux.
Chúng ta đã mô tả ngắn gọn các lệnh sau:
dbus-uuidgen
-
Được sử dụng để xác minh và xem ID DBus của hệ thống.
ssh-keygen
-
Được sử dụng để tạo cặp khóa SSH công khai và riêng tư để sử dụng khi truy cập các hệ thống từ xa dựa trên đám mây.
ssh-copy-id
-
Được sử dụng để sao chép khóa SSH công khai của hệ thống sang hệ thống từ xa nhằm hỗ trợ xác thực từ xa.
cloud-init
-
Được sử dụng để hỗ trợ cấu hình và triển khai các máy ảo và vùng chứa vào môi trường đám mây.
Đáp án Bài tập Hướng dẫn
-
Phần mở rộng CPU nào là cần thiết trên nền tảng phần cứng dựa trên x86 chạy các máy khách được ảo hóa hoàn toàn?
VT-x cho CPU Intel hoặc AMD-V cho CPU AMD.
-
Một phiên cài đặt máy chủ quan trọng yêu cầu hiệu suất nhanh nhất có thể sẽ sử dụng loại ảo hóa nào?
Một hệ điều hành sử dụng ảo hóa song song (chẳng hạn như Xen) như một hệ điều hành khách có thể tận dụng tốt hơn các tài nguyên phần cứng có sẵn cho nó thông qua việc sử dụng các trình điều khiển phần mềm được thiết kế để hoạt động với trình giám sát máy ảo.
-
Hai máy ảo đã được sao chép từ cùng một bản mẫu và sử dụng D-Bus đang hoạt động không ổn định. Cả hai đều có tên máy chủ và cài đặt cấu hình mạng riêng biệt. Lệnh nào sẽ được sử dụng để xác định xem mỗi máy ảo có ID Máy D-Bus khác nhau hay không?
dbus-uuidgen --get
Đáp án Bài tập Mở rộng
-
Hãy chạy lệnh sau để xem hệ thống đã kích hoạt phần mở rộng CPU để chạy máy ảo chưa (kết quả tùy thuộc vào CPU của bạn):
Kết quả sẽ khác nhau tùy thuộc vào CPU mà bạn có. Sau đây là một ví dụ đầu ra từ một máy tính có CPU Intel với các tiện ích mở rộng ảo hóa được kích hoạt trong phần sụn UEFI:
$ grep --color -E "vmx|svm" /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d
-
Nếu bộ xử lý của bạn hỗ trợ ảo hóa, hãy tìm tài liệu về bản phân phối của bạn để chạy trình giám sát máy ảo KVM.
-
Hãy cài đặt các gói cần thiết để chạy trình giám sát ảo hoá KVM.
Kết quả sẽ khác nhau tùy thuộc vào bản phân phối của bạn. Sau đây là một số điểm bắt đầu:
Arch Linux — https://wiki.archlinux.org/index.php/KVM +* Nếu đang sử dụng môi trường máy tính để bàn đồ họa, bạn cũng nên cài đặt ứng dụng
virt-manager
- tức giao diện người dùng đồ họa có thể được sử dụng trên bản cài đặt KVM. Điều này sẽ hỗ trợ bạn trong việc cài đặt và quản lý máy ảo.
Một lần nữa, điều này sẽ thay đổi tuỳ theo bản phân phối. Một ví dụ sử dụng Ubuntu sẽ như sau:
+
$ sudo apt install virt-manager
+
-
Hãy tải xuống hình ảnh ISO của bản phân phối Linux mà bạn chọn và làm theo tài liệu về bản phân phối để tạo một máy ảo mới bằng cách sử dụng ISO này.
Nhiệm vụ này có thể được xử lý dễ dàng bởi gói
virt-manager
. Tuy nhiên, một máy ảo có thể được tạo từ dòng lệnh bằng cách sử dụng lệnhvirt-install
. Hãy thử cả hai phương pháp để hiểu cách các máy ảo được triển khai.
-