虚拟机独立ip没有必要吧


因此诞生在物理机上搭建虚拟机的方法

虚拟化

大机器不灵活, 因此诞生在物理机上搭建虚拟机的方法.

资源大小不灵活

资源申请不灵活

资源共享不灵活

搭建虚拟机的问题是: 虚拟机软件必定是运行在用户态, 虚拟机中的内核无法运行内核指令.

在虚拟化层, 例如桌面应用 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 虚拟机软件中

在 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的特殊应用