Linux中國

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

如何在 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 虛擬化技術

$ lscpu | grep Virtualization
Virtualization: VT-x

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

步驟 1: 安裝 kvm

輸入以下 [yum 命令](https://www.cyberciti.biz/faq/rhel-centos-fedora-linux-yum-command-howto/ "See Linux/Unix yum command examples for more info"):

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

How to install KVM on CentOS 7 RHEL 7 Headless Server

啟動 libvirtd 服務:

# systemctl enable libvirtd
# systemctl start libvirtd

步驟 2: 確認 kvm 安裝

使用 lsmod 命令和 [grep命令](https://www.cyberciti.biz/faq/howto-use-grep-command-in-linux-unix/ "See Linux/Unix grep command examples for more info") 確認載入了 KVM 模塊:

# lsmod | grep -i kvm

步驟 3: 配置橋接網路

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

# brctl show
# virsh net-list

KVM default networking

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

# virsh net-dumpxml default

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

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

添加一行:

BRIDGE=br0

使用 vi 保存並關閉文件。編輯 /etc/sysconfig/network-scripts/ifcfg-br0

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

添加以下內容:

DEVICE="br0"
# I am getting ip from DHCP server #
BOOTPROTO="dhcp"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
ONBOOT="yes"
TYPE="Bridge"
DELAY="0"

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

# systemctl restart NetworkManager

brctl 命令驗證它:

# brctl show

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

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

# cd /var/lib/libvirt/boot/
# wget https://mirrors.kernel.org/centos/7.4.1708/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso

驗證 ISO 鏡像:

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

創建 CentOS 7.x 虛擬機

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

# virt-install 
--virt-type=kvm 
--name centos7 
--ram 2048 
--vcpus=1 
--os-variant=centos7.0 
--cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-1708.iso 
--network=bridge=br0,model=virtio 
--graphics vnc 
--disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2

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

# virsh dumpxml centos7 | grep v nc
<graphics type=&apos;vnc&apos; port=&apos;5901&apos; autoport=&apos;yes&apos; listen=&apos;127.0.0.1&apos;>

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

$ 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 添加用戶、ssh 密鑰、設置時區等等,這是處理雲實例的早期初始化的事實上的多分發包。讓我們看看如何創建帶有 1024MB RAM,20GB 磁碟空間和 1 個 vCPU 的 CentOS 7 虛擬機。(LCTT 譯註: vCPU 即電腦中的虛擬處理器)

獲取 CentOS 7 雲鏡像

# cd /var/lib/libvirt/boot
# wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2

創建所需的目錄

# D=/var/lib/libvirt/images
# VM=centos7-vm1 ## vm name ##
# mkdir -vp $D/$VM
mkdir: created directory &apos;/var/lib/libvirt/images/centos7-vm1&apos;

創建元數據文件

# cd $D/$VM
# vi meta-data

添加以下內容:

instance-id: centos7-vm1
local-hostname: centos7-vm1

創建用戶數據文件

我將使用 ssh 密鑰登錄到虛擬機。所以確保你有 ssh 密鑰:

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

ssh-keygen command

請參閱 「如何在 Linux/Unix 系統上設置 SSH 密鑰」 來獲取更多信息。編輯用戶數據如下:

# cd $D/$VM
# vi user-data

添加如下(根據你的設置替換 hostnameusersssh-authorized-keys):

#cloud-config

# Hostname management
preserve_hostname: False
hostname: centos7-vm1
fqdn: centos7-vm1.nixcraft.com

# Users
users:
    - default
    - name: vivek
      groups: [&apos;wheel&apos;]
      shell: /bin/bash
      sudo: ALL=(ALL) NOPASSWD:ALL
      ssh-authorized-keys:
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIMP3MOF2ot8MOdNXCpHem0e2Wemg4nNmL2Tio4Ik1JY VM Login ssh key

# Configure where output will go
output:
  all: ">> /var/log/cloud-init.log"

# configure interaction with ssh server
ssh_genkeytypes: [&apos;ed25519&apos;, &apos;rsa&apos;]

# Install my public ssh key to the first user-defined user configured
# in cloud.cfg in the template (which is centos for CentOS cloud images)
ssh_authorized_keys:
  - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIMP3MOF2ot8MOdNXCpHem0e2Wemg4nNmL2Tio4Ik1JY VM Login ssh key

# set timezone for VM
timezone: Asia/Kolkata

# Remove cloud-init 
runcmd:
  - systemctl stop network && systemctl start network
  - yum -y remove cloud-init

複製雲鏡像

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

創建 20GB 磁碟映像

# cd $D/$VM
# export LIBGUESTFS_BACKEND=direct
# qemu-img create -f qcow2 -o preallocation=metadata $VM.new.image 20G
# virt-resize --quiet --expand /dev/sda1 $VM.qcow2 $VM.new.image

Set VM image disk size

用縮放後的鏡像覆蓋它:

# cd $D/$VM
# mv $VM.new.image $VM.qcow2

創建一個 cloud-init ISO

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

Creating a cloud-init ISO

創建一個池

# virsh pool-create-as --name $VM --type dir --target $D/$VM
Pool centos7-vm1 created

安裝 CentOS 7 虛擬機

# cd $D/$VM
# virt-install --import --name $VM 
--memory 1024 --vcpus 1 --cpu host 
--disk $VM.qcow2,format=qcow2,bus=virtio 
--disk $VM-cidata.iso,device=cdrom 
--network bridge=virbr0,model=virtio 
--os-type=linux 
--os-variant=centos7.0 
--graphics spice 
--noautoconsole

刪除不需要的文件:

# cd $D/$VM
# virsh change-media $VM hda --eject --config
# rm meta-data user-data centos7-vm1-cidata.iso

查找虛擬機的 IP 地址

# virsh net-dhcp-leases default

CentOS7-VM1- Created

登錄到你的虛擬機

使用 ssh 命令:

# ssh vivek@192.168.122.85

Sample VM session

有用的命令

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

列出所有虛擬機

# virsh list --all

獲取虛擬機信息

# virsh dominfo vmName
# virsh dominfo centos7-vm1

停止/關閉虛擬機

# virsh shutdown centos7-vm1

開啟虛擬機

# virsh start centos7-vm1

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

# virsh autostart centos7-vm1

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

# virsh reboot centos7-vm1

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

# virsh reset centos7-vm1

刪除虛擬機

# virsh shutdown centos7-vm1
# virsh undefine centos7-vm1
# virsh pool-destroy centos7-vm1
# D=/var/lib/libvirt/images
# VM=centos7-vm1
# rm -ri $D/$VM

查看 virsh 命令類型的完整列表:

# virsh help | less
# virsh help | grep reboot

關於作者

作者是 nixCraft 的創建者,也是經驗豐富的系統管理員和 Linux 操作系統/ Unix shell 腳本的培訓師。 他曾與全球客戶以及 IT,教育,國防和空間研究以及非營利部門等多個行業合作。 在 TwitterFacebookGoogle + 上關注他。

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

作者:Vivek Gite 譯者:MjSeven 校對:wxy

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


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國