虚拟化
大机器不灵活, 因此诞生在物理机上搭建虚拟机的方法.
资源大小不灵活
资源申请不灵活
资源共享不灵活
搭建虚拟机的问题是: 虚拟机软件必定是运行在用户态, 虚拟机中的内核无法运行内核指令.
在虚拟化层, 例如桌面应用 VritualBox 中有三种虚拟化方式:
完全虚拟化
由虚拟化软件(例如 VirtualBox) 模拟假的 CPU, 内存, 硬盘等待资源, 将虚拟机的内核指令转发给外部系统运行, 将结果返还给虚拟机.
缺点: 执行速度很慢.
硬件虚拟化
为了提高运行速率, 让虚拟机大部分内核指令都能直接在 CPU 上执行, 部分敏感指令还是通过中转的方式执行. Intel VT-
X 和 AMD AMD-
V 提供硬件支持. 通过添加标志位来标识当前虚拟机的指令是否直接在 CPU 上执行.
半虚拟化
网络/硬盘可以加载针对虚拟机特殊优化的驱动, 通过内存缓存等方式优化资源的访问.
虚拟化工具
桌面虚拟化软件用 VirtualBox, 服务器上用 qemu
qemu 采用完全虚拟化的模式. 可在 BIOS 中打开硬件辅助虚拟化, 虚拟机 CPU 指令通过 KVM 直接运行, 提高运行速率.
KVM 是一个内核模块. 通过 /dev/kvm 暴露接口, 用户态程序可以通过 ioctl 访问这个接口直接运行 CPU 指令.
Qemu 整合 KVM, 将 CPU 指令交由 KVM 运行. 即 qemu-kvm (或 qemu-system-XXX)
Qemu-kvm 只解决 CPU 性能问题, qemu 让虚拟机加载特殊驱动, 实现半虚拟化. 例如网络驱动 , 存储驱动 virtio_blk.
使用 Qemu
需要先创建一个虚拟硬盘. 有两种模式: 动态分配(用多少占多少, qcow2), 固定分配(raw).
qemu-img create -f qcow2 ubuntutest.img 8G
运行以下命令创建虚拟机
qemu-system-x86_64 -enable-kvm-name ubuntutest -m 2048 -hda ubuntutest.img -cdromubuntu-14.04-server-amd64.iso -boot d -vnc :19
其中 -m 设置内存大小; -hda 设置虚拟硬盘, cdrom 将 iso 挂载为光盘; 设置 -vnc :19 可以看安装过程.
需要创建桥接网络, 让虚拟机连接到外网.
桌面虚拟化软件会创建虚拟交换机, 虚拟机的虚拟网卡和宿主机的物理网卡都会连接到虚拟交换机, 虚拟网卡和物理网卡为在同一网段中.
数据中心采用类似的方式, 创建网桥 br0 .
创建桥接网络步骤
brctl addbr br0 # 创建网桥
ip link set br0 up # 启动
tunctl -b # 创建 tap device
ip link set tap0 up # 启动 tap0
brctl addif br0 tap0 # tap0 添加到 br0
qemu-system-x86_64 -enable-kvm -name ubuntutest -m 2048 -hda ubuntutest.qcow2 -vnc :19 nic,model=virtio tap,ifname=tap0,script=no,downscript=no # 启动虚拟机, 虚拟机连接 tap0
ifconfig br0 网页链接 # 给 br0 设置个 IP
VNC 连接虚拟机, 给虚拟机设个 IP
在 VMware Workstation 虚拟机软件中,DHCP 服务总是分配错误 IP 地址的原因可能是什么?
虚拟机的虚拟网络编辑器中自带的 DHCP 服务可能没有关闭,由此产生了错误分配IP 地址的情况。
有这两个小插曲,
1,虚拟机的IP地址和宿主机ip地址在同一网段,且采用的是NAT模式,但依然无法访问外网,我们可以在文件/etc/resolv.conf中添加一行:nameserver 后面跟上常用的域名解析地址保存即可,
例如:nameserver 114.114.114.114
2,今天在安装完并初始化k8s集群后,master和node节点也都是正常加入和运行的,此时想查看下pod资源占用情况,而k8s同样可以通命令查看node和pod对象的资源信息,于是就进行了相应的配置。
命令依赖于metrics接口,而k8s系统默认是没有安装的,需要单独去部署,yaml资源文件下载地址:wget 网页链接 -O ponents.yaml。
下载到之后,需要更改第140行左右的镜像文件,更改后为:image: 网页链接,只需把原来的镜像文件替换掉即可。通过资源文件创建pod:
kubectl apply -f ponents.yaml
发现pod状态是runing,但其实并没有启动起来,通过查看pod信息和日志得知是kubectl证书需要由集群证书颁发机构签名,也就是需要认证才可以正常安装使用,这时我们可以让metrics server传递一个参数:
--kubelet-insecure-tls
来禁用证书的验证,在资源文件对应位置追加参数再次运行资源文件即可。
没有必要吧!?!
可以用虚拟机解决这个问题:
1、每个网络一个vlan。
2、trunk 到虚拟机服务器。
3、虚拟交换机设置VLAN分开流量
4、针对每个VLAN启用一个虚拟机(可以用最轻的 photon os,100m内存即可),虚机设置同网段IP。
5、虚拟机采用双网卡形式,所有虚机另一个网卡在一个局域网内,IP不同
6、虚机内部用docker装nginx 做转发。(nginx 可以4层和7层转发)
ps:每个虚机消耗大改 150m内存+200m硬盘,随便一个小机器就可以做了。平静如水的温柔
内网工业设备地址相同无网关统一管理——HUAWEI VFW NAT的特殊应用