什么是容器?
对软件和其依赖环境的标准化打包
应用之间相互隔离
共享一个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
示例:
[[email protected] ~]# 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
[[email protected] ~]# mkdir /data/VMs/c1 -p
[[email protected] ~]# cd /data/VMs/c1/
下载cirros
[[email protected] c1]# mv cirros-no_cloud-0.3.0-x86_64-disk.img c1.img
[[email protected] ~]# 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
原文地址:http://blog.51cto.com/13958408/2310424