歡迎光臨
每天分享高質量文章

如何在 CentOS 7 / RHEL 7 終端伺服器上安裝 KVM | Linux 中國

基於內核的虛擬機器(KVM)是 CentOS 或 RHEL 7 的虛擬化軟體。KVM 可以將你的伺服器變成虛擬機器管理器。
— Vivek Gite


致謝
編譯自 | https://www.cyberciti.biz/faq/how-to-install-kvm-on-centos-7-rhel-7-headless-server/ 
 作者 | Vivek Gite
 譯者 | MjSeven ? ? 共計翻譯:10 篇 貢獻時間:47 天

如何在 CnetOS 7 或 RHEL 7(Red Hat 企業版 Linux)伺服器上安裝和配置 KVM(基於內核的虛擬機器)?如何在 CentOS 7 上設定 KVM 並使用雲映象 / cloud-init 來安裝客戶虛擬機器?

基於內核的虛擬機器(KVM)是 CentOS 或 RHEL 7 的虛擬化軟體。KVM 可以將你的伺服器變成虛擬機器管理器。本文介紹如何在 CentOS 7 或 RHEL 7 中使用 KVM 設定和管理虛擬化環境。還介紹瞭如何使用命令列在物理伺服器上安裝和管理虛擬機器(VM)。請確保在伺服器的 BIOS 中啟用了虛擬化技術(VT)。你也可以執行以下命令測試 CPU 是否支援 Intel VT 和 AMD_V 虛擬化技術[1]

  1. $ lscpu | grep Virtualization

  2. Virtualization: VT-x

按照 CentOS 7/RHEL 7 終端伺服器上的 KVM 安裝步驟進行操作。

步驟 1: 安裝 kvm

輸入以下 yum 命令[2]:

  1. # yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-install

How to install KVM on CentOS 7 RHEL 7 Headless Server

啟動 libvirtd 服務:

  1. # systemctl enable libvirtd

  2. # systemctl start libvirtd

步驟 2: 確認 kvm 安裝

使用 lsmod 命令和 grep命令[3] 確認載入了 KVM 模組:

  1. # lsmod | grep -i kvm

步驟 3: 配置橋接網路

預設情況下,由 libvirtd 配置基於 dhcpd 的網橋。你可以使用以下命令驗證:

  1. # brctl show

  2. # virsh net-list

KVM default networking

所有虛擬機器(客戶機)只能對同一臺伺服器上的其它虛擬機器進行網路訪問。為你建立的私有網路是 192.168.122.0/24。驗證:

  1. # virsh net-dumpxml default

如果你希望你的虛擬機器可用於 LAN 上的其他伺服器,請在連線到你的 LAN 的伺服器上設定一個網橋。更新你的網絡卡配置檔案,如 ifcfg-enp3s0 或 em1:

  1. # vi /etc/sysconfig/network-scripts/ifcfg-enp3s0

新增一行:

  1. BRIDGE=br0

使用 vi 儲存並關閉檔案[4]。編輯 /etc/sysconfig/network-scripts/ifcfg-br0

  1. # vi /etc/sysconfig/network-scripts/ifcfg-br0

新增以下內容:

  1. DEVICE="br0"

  2. # I am getting ip from DHCP server #

  3. BOOTPROTO="dhcp"

  4. IPV6INIT="yes"

  5. IPV6_AUTOCONF="yes"

  6. ONBOOT="yes"

  7. TYPE="Bridge"

  8. DELAY="0"

重新啟動網路服務(警告:ssh 命令將斷開連線,最好重新啟動該裝置):

  1. # systemctl restart NetworkManager

用 brctl 命令驗證它:

  1. # brctl show

步驟 4: 建立你的第一個虛擬機器

我將會建立一個 CentOS 7.x 虛擬機器。首先,使用 wget 命令獲取 CentOS 7.x 最新的 ISO 映象:

  1. # cd /var/lib/libvirt/boot/

  2. # wget https://mirrors.kernel.org/centos/7.4.1708/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso

驗證 ISO 映象:

  1. # wget https://mirrors.kernel.org/centos/7.4.1708/isos/x86_64/sha256sum.txt

  2. # sha256sum -c sha256sum.txt

建立 CentOS 7.x 虛擬機器

在這個例子中,我建立了 2GB RAM,2 個 CPU 核心,1 個網絡卡和 40 GB 磁碟空間的 CentOS 7.x 虛擬機器,輸入:

  1. # virt-install \

  2. --virt-type=kvm \

  3. --name centos7 \

  4. --ram 2048 \

  5. --vcpus=1 \

  6. --os-variant=centos7.0 \

  7. --cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-1708.iso \

  8. --network=bridge=br0,model=virtio \

  9. --graphics vnc \

  10. --disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2

從另一個終端透過 ssh 配置 vnc 登入,輸入:

  1. # virsh dumpxml centos7 | grep v nc

  2. <graphics type='vnc' port='5901' autoport='yes' listen='127.0.0.1'>

請記錄下埠值(即 5901)。你需要使用 SSH 客戶端來建立隧道和 VNC 客戶端才能訪問遠端 vnc 伺服器。在客戶端/桌面/ macbook pro 系統中輸入以下 SSH 埠轉發命令:

  1. $ ssh vivek@server1.cyberciti.biz -L 5901:127.0.0.1:5901

一旦你建立了 ssh 隧道,你可以將你的 VNC 客戶端指向你自己的 127.0.0.1 (localhost) 地址和埠 5901,如下所示:

你應該看到 CentOS Linux 7 客戶虛擬機器安裝螢幕如下:

現在只需按照螢幕說明進行操作並安裝CentOS 7。一旦安裝完成後,請繼續並單擊重啟按鈕。 遠端伺服器關閉了我們的 VNC 客戶端的連線。 你可以透過 KVM 客戶端重新連線,以配置伺服器的其餘部分,包括基於 SSH 的會話或防火牆。

使用雲映象

以上安裝方法對於學習目的或單個虛擬機器而言是可行的。你需要部署大量的虛擬機器嗎? 可以試試雲映象。你可以根據需要修改預先構建的雲映象。例如,使用 Cloud-init[5] 新增使用者、ssh 金鑰、設定時區等等,這是處理雲實體的早期初始化的事實上的多分發包。讓我們看看如何建立帶有 1024MB RAM,20GB 磁碟空間和 1 個 vCPU 的 CentOS 7 虛擬機器。(LCTT 譯註: vCPU 即電腦中的虛擬處理器)

獲取 CentOS 7 雲映象

  1. # cd /var/lib/libvirt/boot

  2. # wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2

建立所需的目錄

  1. # D=/var/lib/libvirt/images

  2. # VM=centos7-vm1 ## vm name ##

  3. # mkdir -vp $D/$VM

  4. mkdir: created directory '/var/lib/libvirt/images/centos7-vm1'

建立元資料檔案

  1. # cd $D/$VM

  2. # vi meta-data

新增以下內容:

  1. instance-id: centos7-vm1

  2. local-hostname: centos7-vm1

建立使用者資料檔案

我將使用 ssh 金鑰登入到虛擬機器。所以確保你有 ssh 金鑰:

  1. # ssh-keygen -t ed25519 -C "VM Login ssh key"

ssh-keygen command

請參閱 “如何在 Linux/Unix 系統上設定 SSH 金鑰[6]” 來獲取更多資訊。編輯使用者資料如下:

  1. # cd $D/$VM

  2. # vi user-data

新增如下(根據你的設定替換 hostnameusersssh-authorized-keys):

  1. #cloud-config

  2. # Hostname management

  3. preserve_hostname: False

  4. hostname: centos7-vm1

  5. fqdn: centos7-vm1.nixcraft.com

  6. # Users

  7. users:

  8.    - default

  9.    - name: vivek

  10.      groups: ['wheel']

  11.      shell: /bin/bash

  12.      sudo: ALL=(ALL) NOPASSWD:ALL

  13.      ssh-authorized-keys:

  14.        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIMP3MOF2ot8MOdNXCpHem0e2Wemg4nNmL2Tio4Ik1JY VM Login ssh key

  15. # Configure where output will go

  16. output:

  17.  all: ">> /var/log/cloud-init.log"

  18. # configure interaction with ssh server

  19. ssh_genkeytypes: ['ed25519', 'rsa']

  20. # Install my public ssh key to the first user-defined user configured

  21. # in cloud.cfg in the template (which is centos for CentOS cloud images)

  22. ssh_authorized_keys:

  23.  - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIMP3MOF2ot8MOdNXCpHem0e2Wemg4nNmL2Tio4Ik1JY VM Login ssh key

  24. # set timezone for VM

  25. timezone: Asia/Kolkata

  26. # Remove cloud-init

  27. runcmd:

  28.  - systemctl stop network && systemctl start network

  29.  - yum -y remove cloud-init

複製雲映象

  1. # cd $D/$VM

  2. # cp /var/lib/libvirt/boot/CentOS-7-x86_64-GenericCloud.qcow2 $VM.qcow2

建立 20GB 磁碟映像

  1. # cd $D/$VM

  2. # export LIBGUESTFS_BACKEND=direct

  3. # qemu-img create -f qcow2 -o preallocation=metadata $VM.new.image 20G

  4. # virt-resize --quiet --expand /dev/sda1 $VM.qcow2 $VM.new.image

Set VM image disk size

用縮放後的映象改寫它:

  1. # cd $D/$VM

  2. # mv $VM.new.image $VM.qcow2

建立一個 cloud-init ISO

  1. # mkisofs -o $VM-cidata.iso -V cidata -J -r user-data meta-data

Creating a cloud-init ISO

建立一個池

  1. # virsh pool-create-as --name $VM --type dir --target $D/$VM

  2. Pool centos7-vm1 created

安裝 CentOS 7 虛擬機器

  1. # cd $D/$VM

  2. # virt-install --import --name $VM \

  3. --memory 1024 --vcpus 1 --cpu host \

  4. --disk $VM.qcow2,format=qcow2,bus=virtio \

  5. --disk $VM-cidata.iso,device=cdrom \

  6. --network bridge=virbr0,model=virtio \

  7. --os-type=linux \

  8. --os-variant=centos7.0 \

  9. --graphics spice \

  10. --noautoconsole

刪除不需要的檔案:

  1. # cd $D/$VM

  2. # virsh change-media $VM hda --eject --config

  3. # rm meta-data user-data centos7-vm1-cidata.iso

查詢虛擬機器的 IP 地址

  1. # virsh net-dhcp-leases default

CentOS7-VM1- Created

登入到你的虛擬機器

使用 ssh 命令:

  1. # ssh vivek@192.168.122.85

Sample VM session

有用的命令

讓我們看看管理虛擬機器的一些有用的命令。

列出所有虛擬機器

  1. # virsh list --all

獲取虛擬機器資訊

  1. # virsh dominfo vmName

  2. # virsh dominfo centos7-vm1

停止/關閉虛擬機器

  1. # virsh shutdown centos7-vm1

開啟虛擬機器

  1. # virsh start centos7-vm1

將虛擬機器標記為在引導時自動啟動

  1. # virsh autostart centos7-vm1

重新啟動(軟安全重啟)虛擬機器

  1. # virsh reboot centos7-vm1

重置(硬重置/不安全)虛擬機器

  1. # virsh reset centos7-vm1

刪除虛擬機器

  1. # virsh shutdown centos7-vm1

  2. # virsh undefine centos7-vm1

  3. # virsh pool-destroy centos7-vm1

  4. # D=/var/lib/libvirt/images

  5. # VM=centos7-vm1

  6. # rm -ri $D/$VM

檢視 virsh 命令型別的完整串列:

  1. # virsh help | less

  2. # virsh help | grep reboot

關於作者

作者是 nixCraft 的建立者,也是經驗豐富的系統管理員和 Linux 作業系統/ Unix shell 指令碼的培訓師。 他曾與全球客戶以及 IT,教育,國防和空間研究以及非營利部門等多個行業合作。 在 Twitter[7]Facebook[8]Google +[9] 上關註他。


via: https://www.cyberciti.biz/faq/how-to-install-kvm-on-centos-7-rhel-7-headless-server/

作者:Vivek Gite[11] 譯者:MjSeven 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂

© 2022 知識星球   網站地圖