1. 背景

进行k8s的练习,需要一个多台虚拟机的集群,要求:

  1. 虚拟机可以跟宿主机互通
  2. 虚拟机之间可以互通
  3. 虚拟机可以上网

因此决定在办公电脑上使用virtualbox(以下简称vbox)搭建多个虚拟机,并使用UbuntuServer或CentoOS作为虚拟机的操作系统。

这里说明下环境:

对象 版本
办公电脑(宿主) Windows 10
VirtualBox 6.0.8
虚拟机系统 Ubuntu Server 19.04 或 Cent OS 7

2. 第一台机器

2.1 准备

在办公电脑上安装好vbox后,在系统的网络连接中会出现一个叫做VirtualBox Host-Only Ethernet Adapter的设备,后面我们会用到这个设备。

右键点击这个设备,选择属性,在弹出的窗口中,双击Internet协议版本4(TCP/IPv4),又弹出个窗口,可以看到这个设备的网络配置。下面是我这里的情况:

属性
IP地址 192.168.56.1
网卡2 255.255.255.0

2.2 创建及配置虚拟机

虚拟机创建过程很简单不讲述,这里主要说网络配置的问题。

虚拟机创建完成后,需要设置网卡,关于vbox的网络模式的信息可以参看官方文档,官方文档里有个对比表把各个模式的能力讲的很清楚。

我们这里使用的是双网卡模式,按照下面这个表格配置网卡的连接方式:

网卡 连接方式
网卡1 网络地址转换(NAT)
网卡2 仅主机(Host-Only)网络

之所以不使用桥接方式,是因为桥接方式会使机器暴露在公司网络里,而且通常我们使用云服务时也是双网卡的形式。

这里的网卡1可以让虚拟机访问互联网,同时还不会暴露在公司办公网络里。网卡2使宿主系统和虚拟机可以互相访问,它对应的就是2.1节里提到的那个网络设备。

2.3 安装Linux

将Linux光盘镜像插入虚拟机,启动虚拟机,进入安装。

2.3.1 Ubuntu Server的安装

安装界面是文本UI,比较方便。除了网络配置,其他尽可能用默认就可以。

注意在网络配置的那一步,会显示有两个网络接口:

接口 状态
enp0s3 已经通过dhcp获取了地址(我这里是10.0.2.15),这个对应前面的网卡1
enp0s8 显示为not connected,对应的是前面的网卡2

此时使用键盘上下键选中enp0s8,敲回车,在出现的界面中选在manual(也就是手动配置这个网络接口的意思)。在弹出的表单中按照下面的表格进行配置:

取值 说明
Address 192.168.56.21 IP地址,要跟2.1节里提到的设备的IP地址在同一个子网里,所以IP的D段在2到254内选择。
Netmask 192.158.56.0/24 指定子网,我们只用IP的D段就足够了。
GateWay 留空 我们不通过这个接口连接互联网,所以不要设置网关。
NameServer 留空  
SearchServer 留空  

后面步骤就都很简单了,注意这么几点就可以:

  1. 有一步问你要不要安装SSH Server,最好安装上。
  2. 填写用户名密码那步,注意把机器名取的清晰些,因为后续还有好几台机器一起做集群。我这里用的node01

2.3.2 Cent OS的安装

安装界面是图形界面,非常方便。注意把时区设置成咱们中国,其他的除了网络配置都尽量使用默认。

网络配置这部分,会显示有两个网络接口。其中enp0s3对应网卡1enp0s8对应网卡2。这两个接口开始都是未连接状态(Disconnected)。

对于enp0s3,首先在界面上设置为打开(On),然后点击Configure,在配置窗口中的General选项卡中的Automatically connect....打上勾,然后Save保存。保存后就发现这个接口已经通过dhcp获取到地址了(我这里是10.0.2.15)。

对于enp0s8,也同样先设置为打开(On),然后点击Configure,在配置窗口中的General选项卡中的Automatically connect....打上勾,在IPv4 Settings选项卡中将Method设置为Manual,并按下表添加地址:

取值 说明
Address 192.168.56.21 IP地址,要跟2.1节里提到的设备的IP地址在同一个子网里,所以IP的D段在2到254内选择。
Netmask 255.255.255.0 指定子网,我们只用IP的D段就足够了。
GateWay 留空 我们不通过这个接口连接互联网,所以不要设置网关。

注意网络配置窗口最下面有个设置Host Name的地方,这里我设置成了node01,因为后续还有好几台机器一起做集群。

2.4 安装后的检查

安装完成后,虚拟机重启,这时可以登录系统了。

可以按下面这样检查下系统:

  1. 在虚拟机上执行ping qq.com,确认虚拟机可以访问互联网。
  2. 在虚拟机上执行ping 192.168.56.1,确认虚拟机可以访问宿主机。

    注意宿主机可能由于开启了防火墙而无法被ping到

  3. 在宿主系统执行ping 192.168.56.21,确认宿主机可以访问虚拟机。
  4. 如果虚拟机有安装SSH Server,可以在宿主机用SSH登录192.168.56.21:22。

3 第二台机器

3.1 复制虚拟机

关闭前面步骤创建的那个虚拟机。

在vbox界面上,右键点击那个虚拟机,选择复制,注意在弹出的选项框里的mac地址复制要选择全部重新生成。这样得到了第二台虚拟机。

启动新复制出来的虚拟机,会发现机器名仍然叫做node01enp0s8的IP也还是192.168.56.21,这跟前面第一台虚拟机冲突了。

Cent OS要先安装net-tools包才有ifconfig这类命令来查看网络。yum install net-tools -y

3.2 修改新虚拟机的配置

3.2.1 Ubuntu Server的配置修改

使用以下命令修改主机名:sudo hostnamectl set-hostname node02

接下来修改IP,进入/etc/netplan目录,里面有个50-cloud-init.yaml的配置文件。编辑这个文件,将里面的192.168.56.21/24改为192.168.56.22/24

改完后重启这台虚拟机,会发现机器名和IP都生效了。

3.2.2 Cent OS的配置修改

使用以下命令修改主机名:sudo hostnamectl set-hostname node02

接下来修改IP,进入/etc/sysconfig/network-scripts目录,里面有个ifcfg-enp0s8的配置文件。编辑这个文件,将里面的192.168.56.21改为192.168.56.22

改完后重启这台虚拟机,会发现机器名和IP都生效了。

3.3 修改配置后的检查

此时可根据2.4里的步骤,对这台机器进行检查。

同时也可以把第一台虚拟机启动,确认这两台虚拟机可以通过192.168.0.XXX的IP互相ping通。

按照上面的步骤,可以搞好更多的机器。