更新時間:2017-12-22 來源:黑馬程序員 瀏覽量:
1、虛擬化是什么
虛擬化是指計算元件在虛擬的基礎上而不是真實的基礎上運行,是一個為了簡化管理,優(yōu)化資源的解決方案,通過模擬不同的元件做到資源的隔離和資源的充分利用。例如CPU的虛擬化技術可以單CPU模擬多CPU并行,允許一個平臺同時運行多個操作系統(tǒng),并且應用程序都可以在相互獨立的空間內(nèi)運行而互不影響,從而顯著提高計算機的工作效率。
2、虛擬化發(fā)展的階段
到目前為止,虛擬化經(jīng)歷了五個比較明顯的階段,分別是全模擬、分層模擬、半虛擬化、全虛擬化、容器虛擬化。全模擬是指CPU、網(wǎng)卡、芯片、磁盤都是通過軟件模擬的,特點是慢;分層模擬采用的是捕獲和翻譯技術,對全虛擬化進行組合或虛擬化的不同層次;半虛擬化通過改造虛擬機器,讓虛擬機明白自己就是一個虛擬機從而執(zhí)行一些指令;全虛擬化是指2005英特爾支持硬件層面(主要是CPU)的虛擬化之后的時間段,容器虛擬化是現(xiàn)在比較火的虛擬化技術,以docker為代表,主要是進程間的隔離,資源消耗低且具備資源隔離的特性。
3、主流虛擬化軟件
目前主流的虛擬化技術主要有: KVM 、 Xen 、 VMware(VirtualBox)、Hyper-v。
Xen 和KVM ,是開源免費的虛擬化軟件。
VMware是付費的虛擬化軟件。
Hyper-v是微軟windows 2008 R2附帶的虛擬化組件,需要花錢買授權。
虛擬Linux用哪些軟件?
如果是虛擬Linux,建議首先使用Xen ,支持Linux的半虛擬化,可以直接使用主系統(tǒng)的CPU和磁盤及網(wǎng)絡資源,達到較少的虛擬化調(diào)度操作,可以達到非常高的性能,但Xen 操作復雜,維護成本較高。其次我們推薦KVM 來虛擬Linux,Linux本身支持KVM 的virtio技術,可以達到少量的虛擬化調(diào)度操作,得到較高的系統(tǒng)性能。
虛擬windows用那些軟件?
在有授權的情況下,虛擬windows,建議使用hyper-v。
沒有授權的情況下,實驗環(huán)境使用VMware,企業(yè)生產(chǎn)環(huán)境建議使用KVM,可以從redhat那里免費拿到針對windows優(yōu)化過的磁盤和網(wǎng)絡的驅(qū)動程序,可以達到較高的性能(幾乎與hyper-v性能持平)
不打算買廠商支持,其中vmware和hyper-v,是不建議使用的,主要是授權問題。
4、KVM虛擬化
KVM是指基于Linux內(nèi)核的虛擬機(Kernel-base Virtual Machine),2010年4月發(fā)布的RHEL6.0,將KVM增加到Linux內(nèi)核是Linux發(fā)展的一個重要里程碑,這也是第一個整合到Linux主線內(nèi)核的虛擬化技術。
一個普通的Linux進程有兩種運行模式:內(nèi)核模式和用戶模式( 用戶模式是指進程在用戶代碼中運行。內(nèi)核模式是指進程進入內(nèi)核代碼,執(zhí)行內(nèi)核的代碼),KVM增加了第三種模式:客戶模式(有自己的內(nèi)核和用戶模式)。這里的客戶模式,就相當于你在VMware中安裝了自己的某個windows操作系統(tǒng)一樣。在KVM模型中,每一個虛擬機都是一個由Linux調(diào)度程序管理的標準進程,你可以在用戶空間啟動客戶機操作系統(tǒng)。
簡單的類比關系就是,KVM相當于是windows版本的VMware,我們可以在KVM中創(chuàng)建很多其他版本的操作系統(tǒng)實例,只不過KVM在創(chuàng)建實例的時候,需要一些輔助的工具,比如QEMU-KVM和Virt-manager。
5、KVM 的管理工具
KVM僅僅是Linux內(nèi)核的一個模塊
在 Linux 系統(tǒng)中,首先我們可以用modprobe(modprobe是linux的一個命令,可載入指定的個別模塊,或是載入一組相依的模塊)系統(tǒng)工具去加載 KVM 模塊,如果用 RPM 安裝 KVM 軟件包,系統(tǒng)會在啟動時自動加載模塊。加載了模塊后,才能進一步通過其他工具創(chuàng)建虛擬機。
但KVM僅僅是Linux內(nèi)核的一個模塊,僅有 KVM 模塊是遠遠不夠的,因為用戶無法直接控制內(nèi)核模塊去做事情,還必須有一個用戶空間的工具。
用戶工具QEMU-KVM
QEMU是一套模擬CPU的開源軟件。KVM作為內(nèi)核的一個模塊,可以通過QEMU提供的模擬方式,來使用處理器。這樣,KVM就提供了一個模擬的(虛擬的)硬件層,虛擬機就運行在這個模擬的硬件層之上。
上圖,是KVM虛擬機的整體架構。KVM內(nèi)核模塊在運行時按需加載進入內(nèi)核空間運行。KVM本身不執(zhí)行任何硬件設備模擬,需要用戶空間程序QEMU通過/dev/kvm接口設置一個虛擬客戶機的地址空間,向它提供模擬的I/O等硬件設備。
Libvirt/Virsh/Virt-manager:
盡管 QEMU-KVM 工具可以創(chuàng)建和管理 KVM 虛擬機,RedHat為 KVM 開發(fā)了更通用的輔助工具libvirt。Libvirt是一套提供了多種語言接口的 API,為各種虛擬化工具提供一套方便、可靠的編程接口,不僅支持 KVM,而且支持Xen等其他虛擬機。
使用libvirt,你只需要通過libvirt提供的函數(shù)連接到 KVM 或Xen宿主機,便可以用同樣的命令控制不同的虛擬機了。
Libvirt不僅提供了API,還自帶一套基于文本的管理虛擬機的命令virsh,你可以通過使用virsh命令來使用libvirt的全部功能。
同時還能使用圖形界面進行管理操作,其工具是Virt-manager。他是一套用 python 編寫的虛擬機管理圖形界面,用戶可以通過它直觀地操作不同的虛擬機。Virt-manager 就是利用libvirt的 API 實現(xiàn)的。
6、KVM安裝說明
KVM的安裝步驟大致如下:
1、準備一臺物理機,并安裝CentOS 6.x以上的Linux的發(fā)行版
這臺可以運行最新linux內(nèi)核的Intel處理器(含VT虛擬化技術)或AMD處理器(含SVM安全虛擬機技術的AMD處理器,也叫AMD-V)
2、安裝KVM對應的軟件包
3、在KVM中創(chuàng)建虛擬機
通過QEMU-IMG命令創(chuàng)建一個硬盤,第一次接觸請選擇raw格式
通過virt-install命令安裝并啟動虛擬機
指定虛擬機的內(nèi)存、CPU、網(wǎng)絡信息
指定虛擬機的網(wǎng)絡模式,生產(chǎn)環(huán)境使用橋接模式
指定VNC的端口及密碼信息
4、下載VNC軟件server--client
5、配置VNC軟件信息
主要是解決VNC閃退的問題
6、通過VNC連接新創(chuàng)建的虛擬機
根據(jù)端口號進行配置
7、在虛擬機中安裝系統(tǒng)
8、配置虛擬機的IP地址
7、KVM部署實踐
7.1、安裝Cent OS 6.X系統(tǒng)
[root@localhost ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
7.2、檢查系統(tǒng)是否支持虛擬化
cat /proc/cpuinfo |grep 'vmx'
cat /proc/cpuinfo |grep 'svm'
依次執(zhí)行以上兩條命令,看看是否有返回值。返回值參考如下:
如果輸出的結(jié)果包含VMX,它是Intel處理器虛擬機技術標志;
如果包含SVM,它是AMD處理器虛擬機技術的標志,
如果你什么都沒有得到,那應你的系統(tǒng)并沒有支持虛擬化的處理,不能使用KVM,
另處linux發(fā)行版本必須在64bit環(huán)境中才能使用KVM。
7.3、更新Linux操作系統(tǒng)軟件
yum update
yum upgrade
這兩個命令會下載大量的安裝包,根據(jù)網(wǎng)速不同,需要等待的時長不一。
如果對網(wǎng)速有要求,建議換成國內(nèi)的yum源地址。
網(wǎng)易Yum源配置
---------------------------------------------------------------
首先備份/etc/yum.repos.d/CentOS-Base.repo
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
下載對應版本repo文件, 放入/etc/yum.repos.d/(操作前請做好相應備份)
CentOS7 wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
CentOS6 wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
CentOS5 wget http://mirrors.163.com/.help/CentOS5-Base-163.repo
運行以下命令生成緩存
yum clean all
yum makecache
7.4、關閉防火墻
(1) 重啟后永久性生效:
開啟:chkconfig iptables on
關閉:chkconfig iptables off
(2) 即時生效,重啟后失效:
開啟:service iptables start
關閉:service iptables stop
內(nèi)部環(huán)境建議永久關閉,永久關閉之后,需要重啟
7.5、關閉selinux
(1) 重啟后永久性生效:
vi /etc/sysconfig/selinux
SELINUX=disabled
編輯/etc/sysconfig/selinux文件,將文件中的SELINUX配置項改成disabled。
(2) 即時生效,重啟后失效:
setenforce 0
SELINUX作為軍用級別的防火墻,一般在生產(chǎn)環(huán)境中都會關閉掉,不關掉會有很多異常。
建議永久關閉,永久關閉之后,需要重啟
7.6、安裝KVM相關軟件包
yum -y install kvm python-virtinst libvirt bridge-utils virt-manager qemu-kvm-tools virt-viewer virt-v2v
7.7、確認libvirtd是否正常啟動
[root@node-3 ~]# /etc/init.d/libvirtd status
libvirtd (pid 3793) is running...
如果沒有啟動,可以嘗試手動啟動
/etc/init.d/libvirtd restart
回顧:
RedHat為 KVM 開發(fā)了更通用的輔助工具libvirt。Libvirt是一套提供了多種語言接口的 API,為各種虛擬化工具提供一套方便、可靠的編程接口,不僅支持 KVM,而且支持Xen等其他虛擬機。詳見章節(jié)5。
7.8、檢查KVM是否加載成功
顯示結(jié)果如下表示kvm模塊已經(jīng)加載,如果沒有輸出信息,則表示沒有加載成功
[root@node-3 ~]# lsmod | grep kvm
kvm_intel 55464 30
kvm 345070 1 kvm_intel
7.9、檢查KVM是否成功安裝
[root@node-3 ~]# virsh list --all
Id Name State
----------------------------------------------------
7.10、查看工具版本信息
各版本查詢
[root@node-3 ~]# virt-install --version
0.600.0
[root@node-3 ~]# virsh --version
0.10.2
7.11、下載安裝VNC-Server服務
目的:通過Windows/Linux上的VNC客戶端來遠程訪問服務器,并且可使服務器的圖形化交互界面可見。前提需要在服務器端安裝并配置vncserver,在客戶端安裝vncview。
(1)、VNC-Server的安裝
yum -y install vnc *vnc-server*
(2)、修改配置文件
vim /etc/sysconfig/vncservers
VNCSERVERS="1:root 2:lisi"
VNCSERVERARGS[1]="-geometry 1024x768"
上面第一行是設定可以使用VNC服務器的帳號,可以設定多個,但中間要用空格隔開。注意前面的數(shù)字“1”或是“2”,當你要從其它電腦來訪問VNC服務器時,就需要用IP:1這種方法,而不能直接用IP。
(3)、配置會話密碼:
執(zhí)行命令:vncpasswd
123456
123456
(4)、啟動VNC服務:
/etc/init.d/vncserver start
7.12、修改VNC連接權限
通過KVM可以創(chuàng)建虛擬機,在給虛擬機安裝操作系統(tǒng)時,有些操作系統(tǒng)的安裝需要人為干預進行界面操作,所以我們需要通過遠程桌面的方式連接到這些虛擬機。
由于這些虛擬機是使用QEMU-KVM進行管理的,所以我們需要在QEMU的配置文件中進行VNC IP地址的修改。
修改qemu.conf配置
vi /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0"
打開vnc_listen = "0.0.0.0"選項,否則默認綁定的IP地址是127.0.0.1,遠程無法訪問。
重要說明
通過以上的步驟,我們就能準備好KVM的環(huán)境,接下來,我們需要通過工具創(chuàng)建一個基于KVM的虛擬機。
在創(chuàng)建虛擬機之前,我們有個問題要解決,就是橋接網(wǎng)絡的設置。
一般在生產(chǎn)環(huán)境中,我們通過KVM虛擬機出來的虛擬機,是需要通過IP地址對外直接提供服務的,這就需要我們配置橋接模式。
回顧
網(wǎng)絡鏈接有幾種方式,我們比較常用的有兩種,一種是通過NAT(網(wǎng)絡地址轉(zhuǎn)換),另一種是橋接的方式。兩種鏈接方式的區(qū)別,簡單說就是橋接使用的是虛擬機獨立的網(wǎng)卡,具有獨立的IP地址,該ip地址和虛擬機所在的物理機是同等級的。NAT翻譯過來就是網(wǎng)絡地址轉(zhuǎn)換,相當于是把虛擬機所在的物理機當做路由器在使用。
7.13、上傳鏡像文件到宿主機
下載winscp或者是使用yum -y install lrzsz* 安裝lrzsz軟件,將鏡像文件上傳到宿主機上。
目標地址:/export/iso/
7.14、在宿主機上配置橋接網(wǎng)絡
cp ifcfg-eth0 ifcfg-br0
修改網(wǎng)橋的網(wǎng)絡信息,注意看紅色字段
[root@node-3 network-scripts]# vi ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPV6INIT=no
ONBOOT=yes
IPADDR=172.16.0.201
NETMASK=255.255.254.0
GATEWAY=192.168.0.1
DNS1=8.8.8.8
DELAY=0
修改當前宿主機的網(wǎng)絡信息,注意看紅色字段
[root@node-3 network-scripts]# vi ifcfg-eth0
HWADDR=00:25:90:AE:21:C0
DEVICE=eth0
TYPE=Ethernet
BRIDGE=br0
BOOTPROTO=none
IPV6INIT=no
ONBOOT=yes
疑問:宿主機怎么沒有設置IP地址,我以后想訪問宿主機怎么辦?
訪問網(wǎng)橋的IP地址就可以訪問宿主機,他們是同一臺機器。
疑問:是否可以給宿主機單獨設置一個IP地址?
也可以,去掉上文配置文件的BOOTPROTO=none
回顧:
BOOTPROTO網(wǎng)絡配置參數(shù):
BOOTPROTO=static 靜態(tài)IP
BOOTPROTO=dhcp 動態(tài)IP
BOOTPROTO=none 無(不指定)
通常情況下是dhcp或者static,通過指定方式的辦法來獲得地址,如果沒有指定的話可能會出現(xiàn)問題。
7.15、通過KVM創(chuàng)建虛擬機硬盤
先為虛擬機創(chuàng)建一個硬盤
qemu-img create -f raw /export/vm/devEnv-01.vm.itcast.img 200G
硬盤格式說明:
raw 格式的硬盤,會在創(chuàng)建的時候就占200G的空間
qcow2 格式的硬盤,會隨著系統(tǒng)的數(shù)據(jù)逐漸占用200G的空間
初次使用KVM的時候,建議使用raw格式創(chuàng)建硬盤,不會后期安裝操作系統(tǒng)是可能會出現(xiàn)錯誤。錯誤如下:
7.16、通過KVM創(chuàng)建虛擬機
virt-install --name=devEnv-01.vm.itcast --ram=8192 --vcpus=4 --disk path=/export/vm/devEnv-01.vm.itcast.img --accelerate --cdrom /export/iso/CentOS-6.5-x86_64-bin-DVD1.iso --graphics vnc,password=123456,port=5992 --network bridge=br0 --force --autostart
運行以上命令,會創(chuàng)建一個虛擬機。創(chuàng)建成功界面如下
出現(xiàn)以上界面,表示虛擬機創(chuàng)建成功,緊接著我們需要通過VNC遠程連接新創(chuàng)建的虛擬機進行操作系統(tǒng)的安裝。
VNC的IP地址:172.16.0.201
當前宿主機的IP地址,也就是網(wǎng)橋的IP地址
VNC的PORT端口號:5992
見命令腳本vnc,password=123456,port=5992
VNC的Password密碼:123456
有必要一提的是上文的腳本中有bridge=br0的配置,表示我們新創(chuàng)建的虛擬機使用橋接的網(wǎng)絡模式。
7.17、下載安裝VNC客戶端
https://www.realvnc.com/download/file/vnc.files/VNC-6.0.1-Windows.exe
7.18、解決VNC軟件的閃退問題
用VNC Viewer來連接一臺服務器,輸入密碼連上后直接閃退,可能是ColourLevel的問題。
依次點Option-->Advanced-->Expert找到ColourLevel,默認值是pal8,修改為rgb222或full。
重新連接,沒有問題了。
7.19、VNC軟件連接新創(chuàng)建的虛擬機
連接成功后,需要輸入密碼。密碼是123456
點擊OK按鈕之后,就進入了我們熟悉的界面
7.20、再次啟動虛擬機器
安裝完系統(tǒng)之后,需要reboot。一旦執(zhí)行reboot,虛擬機并不會啟動,需要手動在KVM管理工具中啟動。
[root@node-3 ~]# virsh
Welcome to virsh, the virtualization interactive terminal.
Type: 'help' for help with commands
'quit' to quit
virsh # list --all
Id Name State
----------------------------------------------------
1 centos64 running
2 centos642 running
3 centos643 running
6 centos648 running
8 centos649 running
- devEnv-01.vm.itcast shut off
virsh # start devEnv-01.vm.itcast
Domain devEnv-01.vm.itcast started
7.21、為虛擬機配置網(wǎng)絡
通過VNC創(chuàng)建繼續(xù)訪問
為新創(chuàng)建的虛擬機安裝完操作系統(tǒng)之后,修改網(wǎng)絡配置如下:
[root@devEnv-01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=52:54:00:1A:CC:96
TYPE=Ethernet
UUID=d00f89f0-49b0-4252-a6a3-61575e49d8d8
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
重啟網(wǎng)絡
Service network restart
8、KVM常用管理命令
8.1創(chuàng)建虛擬機
[root@localhost ~]# virt-install --name=centos1 \ #生成一個虛擬機
--ram 1024 \ #分配內(nèi)存大小(默認大小MB)
--vcpus=1 \ #分配CPU核心數(shù)
--disk path=/root/centos1.img \ #指定虛擬機鏡像(size單位為GB)
--accelerate \ #加速
--cdrom /root/CentOS-6.5-x86_64-bin-DVD1.iso \ # 指定安裝鏡像iso
--graphics vnc,password=123456,port=5921 \ # 指定vnc的連接密碼和監(jiān)聽端口
--network bridge=br0 \ #指定網(wǎng)絡
--autostart \ ##自動開啟
8.2 virsh的其他操作
[root@localhost /]# virsh start centos1 #啟動虛擬機
[root@localhost /]# virt-viewer centos1 #如果有圖形界面的話,可以進入虛擬機的界面
[root@localhost ~]# virsh shutdown centos1 #關閉虛擬機
注意:shutdown使用發(fā)送acpid指令來控制虛擬機的電源,而KVM虛擬機安裝Linux系統(tǒng)時默認沒有安裝acpid服務,反以導致不能關閉虛擬機,需要安裝acpid。
查看acpid服務是否開啟:/etc/init.d/acpid status
啟動acpid服務:/etc/init.d/acpid start
[root@localhost /]# virsh reboot centos1 #重啟虛擬機
[root@localhost /]# virsh suspend centos1 #暫停虛擬機
[root@localhost /]# virsh resume centos1 #恢復虛擬機
[root@localhost /]# virsh autostart centos1 #自動加載虛擬機
[root@localhost /]# virsh undefine centos1 #刪除一個虛擬機
virsh參數(shù)說明如下:
autostart自動加載指定的一個虛擬機
connect重新連接到hypervisor
console連接到客戶會話
create從一個SML文件創(chuàng)建一個虛擬機
start開始一個非活躍的虛擬機
destroy刪除一個虛擬機
define從一個XML文件定義一個虛擬機
domid 把一個虛擬機名或UUID轉(zhuǎn)換為ID
domuuid把一個郁悶或ID轉(zhuǎn)換為UUID
dominfo查看虛擬機信息
domstate查看虛擬機狀態(tài)
domblkstat獲取虛擬機設備快狀態(tài)
domifstat獲取虛擬機網(wǎng)絡接口狀態(tài)
dumpxmlXML中的虛擬機信息
edit編輯某個虛擬機的XML文件
list列出虛擬機
migrate將虛擬機遷移到另一臺主機
quit退出非交互式終端
reboot重新啟動一個虛擬機
resume重新恢復一個虛擬機
save把一個虛擬機的狀態(tài)保存到一個文件
dump把一個虛擬機的內(nèi)核dump到一個文件中以方便分析
shutdown關閉一個虛擬機
setmem改變內(nèi)存的分配
setmaxmem改變最大內(nèi)存限制值
suspend掛起一個虛擬機
vcpuinfo虛擬機的cpu信息
version顯示virsh版本
8.3 virt-clone克隆
當安裝完一臺后,如何快速的虛擬出第二臺呢?
這里就可以采用克隆這種方式
(1)通過命令:
virt-clone -o devEnv-01.vm.itcast -n devEnv-02.vm.itcast -f /home/kvm/centos02.img
參數(shù)說明:
-o :指定源虛擬機
-n :命名新克隆的虛擬機
-f :指定新克隆虛擬機的位置
(2)克隆完成后,在生成硬盤映像文件的同時,也會克隆虛擬機的配置文件
(3) 修改克隆出來的心虛擬機的配置文件
通過命令:virsh edit devEnv-02.vm.itcast
修改此處的vnc監(jiān)控的端口號,避免與克隆前的虛擬機端口一樣,而出現(xiàn)端口地址被占用。
(4)啟動克隆出來的新的虛擬機devEnv-02.vm.itcast
通過命令: virsh start devEnv-02.vm.itcast
(5) 通過用VNC Viewer來連接該虛擬機
由于是克隆出來的,跟之前我們使用VMware克隆效果是一樣的,需要進行相應的修改。
a:修改對應的主機名
進入/etc/sysconfig/network進行相應的修改
b:因為克隆改變新虛擬機的MAC地址,故eth0無法啟動,新的虛擬機后網(wǎng)卡變成了 eth1
進入/etc/udev/rules.d/70-persistent-net.rules文件刪除之前的eth0這個網(wǎng)卡記錄,保留eth1。
進入到/etc/sysconfig/network-scripts/,執(zhí)行命令mv ifcfg-eth0 ifcfg-eth1 重命名
vi ifcfg-eth1 修改配置
c: 重啟網(wǎng)卡,通過命令service network restart
8.4 libguestfs-tools安裝和使用
libguestfs-tools是虛擬機一個管理包,很有用的工具。
(1)安裝
yum -y install libguestfs-tools
(2)使用
查看虛擬機的分區(qū)情況
[root@node-1 home]# virt-filesystems -d devEnv-01.vm.itcast
[root@node-1 home]# virt-list-partitions /home/kvm/devEnv-01.vm.itcast.img
[root@node-1 home]# virt-df /home/kvm/devEnv-01.vm.itcast.img
8.5 kvm虛擬機參數(shù)修改
(1) 修改kvm虛擬機的內(nèi)存大小
[root@node-1 home]# virsh edit devEnv-01.vm.itcast
注意不可直接修改devEnv-01.vm.itcast.xml 文件
查看內(nèi)存:free
(2)修改kvm虛擬機的cpu核數(shù)大小
[root@node-1 home]# virsh edit devEnv-01.vm.itcast
查看cpu核數(shù): cat /proc/cpuinfo |grep "processor"|sort -u|wc -l
注意:修改完成之后,都要重啟虛擬機
先關閉:virsh shutdown devEnv-01.vm.itcast
再啟動:virsh start devEnv-01.vm.itcast
其他參數(shù)修改相同。
本文版權歸黑馬程序員云計算大數(shù)據(jù)學院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:黑馬程序員云計算大數(shù)據(jù)培訓學院
首發(fā):http://cloud.itheima.com/