最近尝试学习Envoy,在物理server上创建一套k8s环境,组建一个集中式Envoy Gateway。
首先创建虚拟机。
(1)生成硬盘镜像文件:
格式:raw或qcow2
# qemu-img create -f raw fdisk.img 10G # qemu-img info fdisk.img
(2)编写xml配置文件,这一步在后面做详细介绍
(3)创建并运行虚拟机
# sudo apt-get install qemu-kvm
# virsh define vm0.xml //导入虚拟机配置
# virsh start vm0 //开启vm0
# virsh list --all // 显示所有虚拟机状态
# virsh destroy vm0 //销毁虚拟机
# virsh undefine vm1 //删除虚拟机配置
# virsh dumpxml vm0 //显示虚拟机xml配置
以下是实际创建虚拟机时使用的两个xml实例
cat vm_wangsk01.xml
<domain type='kvm'> //如果是Xen,则type=‘xen’
<name>CloudNative_MasterNode</name> //虚拟机名称,同一物理机唯一
<uuid>c223a8be-20dc-418f-8f49-7d9d256d9989</uuid> //同一物理机唯一,可用uuidgen生成,cat /proc/sys/kernel/random/uuid
<memory>8388608</memory>
<currentMemory>8388608</currentMemory> //memory这两个值最好设成一样
<vcpu>2</vcpu> //虚拟机可使用的cpu个数,查看物理机可用CPU个数:cat /proc/cpuinfo |grep processor | wc -l
<os>
<type arch='x86_64' machine='pc-i440fx-focal'>hvm</type> //arch指出系统架构类型,machine 则是机器类型,查看机器类型:qemu-system-x86_64 -M ?
<boot dev='hd'/> //启动介质,第一次需要装系统可以选择cdrom光盘启动
<bootmenu enable='yes'/> //表示启动按F12进入启动菜单
</os>
<features>
<acpi/> //Advanced Configuration and Power Interface,高级配置与电源接口
<apic/> //Advanced Programmable Interrupt Controller,高级可编程中断控制器
<pae/> //Physical Address Extension,物理地址扩展
</features>
<clock offset='localtime'/> //虚拟机时钟设置,这里表示本地本机时间
<on_poweroff>destroy</on_poweroff> //突发事件动作
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices> //设备配置
<emulator>/usr/bin/kvm</emulator> //如果是Xen则是/usr/lib/xen/binqemu-dm
<disk type='file' device='disk'> //硬盘
<driver name='qemu' type='raw'/>
<source file='/home/wangsk/master_node.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> //域、总线、槽、功能号,slot值同一虚拟机上唯一
</disk>
<disk type='file' device='cdrom'>//光盘
<driver name='qemu' type='raw'/>
<source file='/home/wangsk/ubuntu-20.04.4-desktop-amd64.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
</disk>
/* 利用Linux网桥连接网络 */
<interface type='bridge'>
<mac address='fa:92:01:33:d4:fd'/>
<source bridge='br_wangsk_ubunt'/> //配置的网桥网卡名称
<target dev='vnet0'/> //同一网桥下相同
<alias name='net0'/> //别名,同一网桥下相同
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> //注意slot值唯一
</interface>
<interface type='network'> //基于虚拟局域网的网络
<mac address='52:54:4a:e1:1c:84'/> //可用命令生成,见下面的补充
<source network='default'/> //默认
<target dev='vnet1'/> //同一虚拟局域网的值相同
<alias name='net1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> //注意slot值
</interface>
<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'> //配置vnc,windows下可以使用vncviewer登录,获取vnc端口号:virsh vncdisplay vm0
<listen type='address' address='0.0.0.0'/>
</graphics>
</devices>
</domain>
cat vm_wangsk02.xml
<domain type='kvm'> //如果是Xen,则type=‘xen’
<name>CloudNative_WorkerNode1</name> //虚拟机名称,同一物理机唯一
<uuid>7a4fb123-7406-4e26-ae40-d07b3ee61d6f</uuid> //同一物理机唯一,可用uuidgen生成,cat /proc/sys/kernel/random/uuid
<memory>8388608</memory>
<currentMemory>8388608</currentMemory> //memory这两个值最好设成一样
<vcpu>2</vcpu> //虚拟机可使用的cpu个数,查看物理机可用CPU个数:cat /proc/cpuinfo |grep processor | wc -l
<os>
<type arch='x86_64' machine='pc-i440fx-focal'>hvm</type> //arch指出系统架构类型,machine 则是机器类型,查看机器类型:qemu-system-x86_64 -M ?
<boot dev='hd'/> //启动介质,第一次需要装系统可以选择cdrom光盘启动
<bootmenu enable='yes'/> //表示启动按F12进入启动菜单
</os>
<features>
<acpi/> //Advanced Configuration and Power Interface,高级配置与电源接口
<apic/> //Advanced Programmable Interrupt Controller,高级可编程中断控制器
<pae/> //Physical Address Extension,物理地址扩展
</features>
<clock offset='localtime'/> //虚拟机时钟设置,这里表示本地本机时间
<on_poweroff>destroy</on_poweroff> //突发事件动作
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices> //设备配置
<emulator>/usr/bin/kvm</emulator> //如果是Xen则是/usr/lib/xen/binqemu-dm
<disk type='file' device='disk'> //硬盘
<driver name='qemu' type='raw'/>
<source file='/home/wangsk/worker1.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/> //域、总线、槽、功能号,slot值同一虚拟机上唯一
</disk>
<disk type='file' device='cdrom'>//光盘
<driver name='qemu' type='raw'/>
<source file='/home/wangsk/ubuntu-20.04.4-desktop-amd64.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
</disk>
/* 利用Linux网桥连接网络 */
<interface type='bridge'>
<mac address='fa:92:01:33:d4:fb'/>
<source bridge='br_wangsk_ubunt'/> //配置的网桥网卡名称
<target dev='vnet0'/> //同一网桥下相同
<alias name='net0'/> //别名,同一网桥下相同
<address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/> //注意slot值唯一
</interface>
<interface type='network'> //基于虚拟局域网的网络
<mac address='52:54:4a:e1:1c:85'/> //可用命令生成,见下面的补充
<source network='default'/> //默认
<target dev='vnet1'/> //同一虚拟局域网的值相同
<alias name='net1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> //注意slot值
</interface>
<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'> //配置vnc,windows下可以使用vncviewer登录,获取vnc端口号:virsh vncdisplay vm0
<listen type='address' address='0.0.0.0'/>
</graphics>
</devices>
</domain>
cat vm_wangsk03.xml
<domain type='kvm'> //如果是Xen,则type=‘xen’
<name>CloudNative_WorkerNode2</name> //虚拟机名称,同一物理机唯一
<uuid>6659f2a2-2707-48e6-bdd0-3b73f0e1ec7b</uuid> //同一物理机唯一,可用uuidgen生成,cat /proc/sys/kernel/random/uuid
<memory>8388608</memory>
<currentMemory>8388608</currentMemory> //memory这两个值最好设成一样
<vcpu>2</vcpu> //虚拟机可使用的cpu个数,查看物理机可用CPU个数:cat /proc/cpuinfo |grep processor | wc -l
<os>
<type arch='x86_64' machine='pc-i440fx-focal'>hvm</type> //arch指出系统架构类型,machine 则是机器类型,查看机器类型:qemu-system-x86_64 -M ?
<boot dev='hd'/> //启动介质,第一次需要装系统可以选择cdrom光盘启动
<bootmenu enable='yes'/> //表示启动按F12进入启动菜单
</os>
<features>
<acpi/> //Advanced Configuration and Power Interface,高级配置与电源接口
<apic/> //Advanced Programmable Interrupt Controller,高级可编程中断控制器
<pae/> //Physical Address Extension,物理地址扩展
</features>
<clock offset='localtime'/> //虚拟机时钟设置,这里表示本地本机时间
<on_poweroff>destroy</on_poweroff> //突发事件动作
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices> //设备配置
<emulator>/usr/bin/kvm</emulator> //如果是Xen则是/usr/lib/xen/binqemu-dm
<disk type='file' device='disk'> //硬盘
<driver name='qemu' type='raw'/>
<source file='/home/wangsk/vm_wangsk03_fdisk.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/> //域、总线、槽、功能号,slot值同一虚拟机上唯一
</disk>
<disk type='file' device='cdrom'>//光盘
<driver name='qemu' type='raw'/>
<source file='/home/wangsk/ubuntu-20.04.4-desktop-amd64.iso'/>
<target dev='hdc' bus='ide'/>
<readonly/>
</disk>
/* 利用Linux网桥连接网络 */
<interface type='bridge'>
<mac address='fa:92:01:33:d4:fc'/>
<source bridge='br_wangsk_ubunt'/> //配置的网桥网卡名称
<target dev='vnet0'/> //同一网桥下相同
<alias name='net0'/> //别名,同一网桥下相同
<address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/> //注意slot值唯一
</interface>
<interface type='network'> //基于虚拟局域网的网络
<mac address='52:54:4a:e1:1c:86'/> //可用命令生成,见下面的补充
<source network='default'/> //默认
<target dev='vnet1'/> //同一虚拟局域网的值相同
<alias name='net1'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/> //注意slot值
</interface>
<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'> //配置vnc,windows下可以使用vncviewer登录,获取vnc端口号:virsh vncdisplay vm0
<listen type='address' address='0.0.0.0'/>
</graphics>
</devices>
</domain>
启动好之后,可以用virsh list命令查看当前server上拉起的虚拟机
/*获取Qemu的vnc端口号*/
root@master-node:/home/wangsk# virsh list
Id Name State
------------------------------------------
37 CloudNative_WorkerNode1 running
38 CloudNative_WorkerNode2 running
39 CloudNative_MasterNode running
在windows下可以通过VNC Viewer来登录Qemu虚拟机。我们之前在xml中定义了vnc,Server服务器(192.168.2.51)相当于vnc server, 在windows上安装vnc viewer作为vnc client,client通过访问server提供的5900+vnc端口号的映射来和指定的qemu虚拟机通信。
/*获取Qemu的vnc端口号*/
root@master-node:/home/wangsk# virsh list
Id Name State
------------------------------------------
37 CloudNative_WorkerNode1 running
38 CloudNative_WorkerNode2 running
39 CloudNative_MasterNode running
root@master-node:~# virsh vncdisplay 39
:0
root@master-node:~# virsh vncdisplay 37
:2
root@master-node:~# virsh vncdisplay 38
:4
在window上创建一个qemu虚拟机的连接实例
通过vnc viewer图形化界面安装Ubuntu(过程略),安装后Ubuntu默认是不开启ssh的,通过terminal开启Ubuntu ssh
sudo apt-get install openssh-server
sudo /etc/init.d/ssh start
查看Qemu虚拟机的ip
sudo apt-get install net-tools
wangsk@master-node:~$ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:a6:e2:c8:38 txqueuelen 0 (以太网)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether fa:92:01:33:d4:fa txqueuelen 1000 (以太网)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.122.189 netmask 255.255.255.0 broadcast 192.168.122.255
inet6 fe80::9e51:9ae1:6831:30ca prefixlen 64 scopeid 0x20<link>
ether 52:54:4a:e1:1c:84 txqueuelen 1000 (以太网)
RX packets 49147 bytes 68489497 (68.4 MB)
RX errors 0 dropped 331 overruns 0 frame 0
TX packets 22423 bytes 1727201 (1.7 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 109061
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (本地环回)
RX packets 8484964 bytes 1331883528 (1.3 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8484964 bytes 1331883528 (1.3 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
然后接可以从192.168.2.51通过ssh 192.168.122.189连接到Qemu虚拟机了