1. 程式人生 > >容器、虛擬化技術

容器、虛擬化技術

網絡 幫我 meta unit all graph -h 流操作 rom

什麽是容器?

對軟件和其依賴環境的標準化打包
應用之間相互隔離
共享一個OS Kernel
可以運行在很多主流操作系統上
技術分享圖片

什麽是虛擬化技術?

虛擬化技術會在本地操作系統之上加多一層 Hypervisor層,Hypervisor是一種運行在物理服務器和操作系統之間的中間軟件層,可以虛擬化硬件資源,例如cpu、硬盤、內存資源等。然後我們可以基於通過虛擬化出來的資源之上安裝操作系統,這也就是所謂的虛擬機。
通過Hypervisor層,我們可以創建不同的虛擬機,並且可以限定每個虛擬機的物理資源,並且每個虛擬機都是分離、獨立的。例如A虛擬機給它使用2個cpu、8g內存、100g磁盤,B虛擬機給它使用4個cpu、16g內存、300g磁盤。。。等等,這樣就可以實現物理資源利用率的最大化。

一臺物理機就可以部署多個應用
每個應用都可以獨立運行在一個虛擬機裏

虛擬化技術的優點:

資源池——一個物理機的資源分配到了不同的虛擬機裏
很容易擴展——增加物理機或者虛擬機即可,因為虛擬機是可以復制的
很容易雲化——亞馬孫AWS,阿裏雲,谷歌雲等
每一個虛擬機都是一個完整的操作系統,所以需要給其分配物理資源,當虛擬機數量增多時,操作系統本身消耗的資源勢必增多

容器可以幫我們把開發環境及應用整個打包帶走,打包好的容器可以在任何的環境下運行,這樣就可以解決開發與運維環境不一致的問題了,

所以:容器解決了開發和運維之間的矛盾
在開發和運維之間搭建了一個橋梁,是實現devops的最佳解決方案

容器和虛擬機的區別:

技術分享圖片

容器可以和虛擬機結合在一起使用,而且這也是目前主流的做法:
技術分享圖片

總結:虛擬機是基於物理機的虛擬技術,容器是基於操作系統的虛擬技術

一、kvm簡介

基於內核的虛擬機(英語:Kernel-based Virtual Machine,縮寫為KVM),是一種用於Linux內核中的虛擬化基礎設施,可以將Linux內核轉化為一個虛擬機監視器(Hypervisor)。KVM在2007年2月被導入Linux 2.6.20核心中,以可加載核心模塊的方式被移植到FreeBSD及illumos上。
kvm:kernel-based vm。
CPU和內存的虛擬化由kvm負責,IO虛擬化由qemu負責。
主機級虛擬化:
xen
kvm

容器級虛擬化:
lxc
openvz

二、kvm安裝

1、確認內核是否支持kvm

modinfo kvm

2、確認CPU是否支持kvm

grep -i -E ‘(vmx|svm|lm)‘ /proc/cpuinfo

         vmx:intel
         svm:amd
         lm:x64

3、安裝kvm

yum install libvirt-daemon-kvm qemu-kvm virt-manager libvirt -y

4、啟動服務

systemctl start libvirtd

  #systemctl enable libvirtd

5、啟動圖形接口

virt-manager &

配置橋接
#virsh iface-bridge ens32 br0 || systemctl restart network
需要修改ifcfg-br0配置文件

三、使用cirros鏡像測試

1、準備一個cirros

mkdir -p /data/VMs/c1/

#cd /data/VMs/c1/
#wget https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img
 mv cirros-0.3.0-x86_64-disk.img c1.img
 qemu-img info c1.img

2、啟動virt-manager

virt-manager &

新建——導入現有磁盤映像——》
3、使用virsh連接
查看:
virsh # list
virsh # console c1
使用"Ctrl+]"剝離會話

四、vrish命令

1、域管理命令
virsh # domstate c1
virsh # domstats c1
virsh # dominfo c1
virsh # domiflist c1
virsh # domblklist c1
#virsh dumpxml c1
#virsh create --console /etc/libvirt/qemu/c2.xml
#virsh shutdown c2
virsh destroy c2 強制關閉虛擬機
#virsh define /etc/libvirt/qemu/c2.xml 定義域
virsh save c1 /tmp/c1.snap 將狀態保存到文件
#virsh restore /tmp/c1.snap 從文件載回
start
reboot
undefine 刪除虛擬機
suspend/resume 暫停和繼續
#virsh setmem centos7.0 1024 修改內存大小
增加/拆除磁盤
#cd /data/VMs/c1/
c1]# qemu-img create -f qcow2 -o size=20G,preallocation=metadata ./second.img
c1]# qemu-img info second.img
#virsh attach-disk c1 /data/VMs/c1/second.img vdb 為c1附加磁盤
virsh detach-disk c1 vdb 拆除
增加/拆除網卡
#virsh attach-interface c1 bridge virbr0
#virsh detach-interface c1 bridge --mac 52:54:00:db:7b:65
2、域監控命令
3、查看宿主機和虛擬機相關信息
4、管理網絡接口
5、管理網絡防火墻規則
6、管理虛擬網絡
7、管理節點設備
8、遠程連接認證
9、管理快照
10、管理存儲池
圖形管理工具:
kimchi
OpenStack
oVirt
proxmox
管理工具棧:http://www.linux-kvm.org/page/Management_Tools

五、brctl工具

安裝:
#yum install bridge-utils
查看
#brctl show
添加橋
brctl addbr mybr0
ip link set mybr0 up
#ip addr add 10.0.0.1/8 dev mybr0

六、qemu-kvm工具

安裝
yum install qemu-kvm
ln -sv /usr/libexec/qemu-kvm /usr/bin/
查看可以模擬的架構和CPU
#qemu-kvm -machine ?
qemu-kvm -cpu ?
指定CPU核心樹
-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
指定引導選項
-boot [order=drives][,once=drives][,menu=on|off]
[,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
塊設備
-hda/-hdb file:
-hdc/-hdd file:
-cdrom file.iso:
-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
顯示
-display type: sdl,curses,none,vnc
-nographic:不使用圖形接口
-vga [std|cirrus|vmware|qxl|xenfb|none]
-vnc
-monitor stdio
ctrl-a,c
ctrl-a,h
網絡選項
-net nic
-net tap
/etc/qemu-ifup
#!/bin/bash

bridge=br0
if [ -n "$1" ];then
ip link set $1 up
sleep 1
brctl addif $bridge $1
[ $? -eq 0] && exit 0 || exit 1
else
echo "Error: on interface specified"
exit 2
fi
示例:
[root@p-kvm ~]# vim /etc/qemu-ifup
#!/bin/bash

bridge=br0
if [ -n "$1" ];then
ip link set $1 up
sleep 1
brctl addif $bridge $1
[ $? -eq 0] && exit 0 || exit 1
else
echo "Error: on interface specified"
exit 2
fi
chmod -x /etc/qemu-ifup
[root@p-kvm ~]# mkdir /data/VMs/c1 -p
[root@p-kvm ~]# cd /data/VMs/c1/
下載cirros
[root@p-kvm c1]# mv cirros-no_cloud-0.3.0-x86_64-disk.img c1.img
[root@kvm ~]# qemu-kvm -name c1 -m 128 -cpu host -smp 2 -drive file=/data/VMs/c1/c1.img,if=virtio,media=disk,cache=writeback,format=qcow2 -net nic,macaddr=52:54:00:00:00:00,model=virtio -net tap,script=/etc/qemu-ifup -vnc :0

批量獲取kvm虛擬機IP的腳本:

#!/bin/bash
#ping當前網段內在線的主機,以便產生arp記錄.
for ip in 172.20.128.{1..253};do
{ ping -c1 $ip >/dev/null 2>&1
}&
done
#依次查找arp記錄.
running_vms=virsh list |grep running
echo -ne "共有echo "$running_vms"|wc -l個虛擬機在運行.\n"
for i in echo "$running_vms" | awk ‘{ print $2 }‘;do
mac=virsh dumpxml $i |grep "mac address"|sed "s/.*‘\(.*\)‘.*/\1/g"
ip=arp -ne |grep "$mac" |awk ‘{printf $1}‘
printf "%-30s %-30s\n" $i $ip
done

批量創建kvm

#for i in {1..30}; do virt-clone --connect=qemu:///system -o temp -n node$i -f /data/node$i.img ;done

容器、虛擬化技術