创建虚拟机群
安装部署virtualbox、vagrant,安装完成后,准备创建虚拟机群,本次搭建规划为1个master + 2个slave + 1个docker-register
的模式。
虚拟机配置参数
hostname | IP | CPU | 内存 |
---|---|---|---|
master | 10.110.0.11 | 2 | 2G |
slave-1 | 10.110.0.12 | 1 | 2G |
slave-2 | 10.110.0.13 | 1 | 2G |
docker-register | 10.110.0.14 | 1 | 2G |
虚拟机群规划的资源完成后,我们在宿主机的目录下创建一个Vagrantfile的文件,这个文件就是创建虚拟机群组的配置文件。
编写配置文件
这里我们一步步编写Vagrantfile文件,以便于更好的理解该配置文件的意义以及作为参考:
Vagrant.configure("2") do |config|
config.vm.define "master" do |master|
end
config.vm.define "worker-1" do |worker_1|
end
config.vm.define "worker-2" do |worker_2|
end
config.vm.define "docker-register" do |docker-register|
end
end
-
Vagrant.configure("2")
是一个固定格式,不需要修改,其含义可以查看vagrant的文档获取; -
config.vm.define "master"
定义了一个虚拟机,为master;
配置虚拟机的参数都是大同小异,这里只列出master
这台虚拟机的配置信息,其他的虚拟机的配置参数可以根据前面规划的内容进行修改或根据自己实际情况做出修改,master的基本配置信息如下:
Vagrant.configure("2") do |config|
config.vm.define "master" do |master|
master.vm.box = "centos/7"
master.vm.hostname = "master"
master.vm.network "private_network", ip: "10.110.0.11"
master.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 2
end
end
end
-
master.vm.box = "centos/7"
定义了虚拟机采用的镜像文件是centos/7
。执行vagrant up
时,vagrant会根据Vagrantfile的内容,查看本地环境是否存在对应镜像,如果不存在则从vagrant的官方仓库中下载。还可以使用以下两种方式获取vagrant的镜像文件:- 使用
vagrant init centos/7
的方式下载镜像到本地; - 手动下载镜像,使用
vagrant add box <image_file> --name <local_image_name>
将下载的文件导入到本地的box列表中;
之后,可以使用
vagrant box list
查看本地环境的image列表。 - 使用
master.vm.hostname
和master.vm.network
是为虚拟机配置了hostname和私有网络,关于public_network的配置,后续有相关的说明;master.vm.provider "virtualbox"
该项配置则声明了vagrant使用的虚拟化后端是virtualbox,并且后续的配置项对虚拟机使用的计算资源做出了配置。
最后,我们为虚拟机配置public_network,以便于外网访问虚拟机:
Vagrant.configure("2") do |config|
config.vm.network "public_network", bridge: "eth0"
-
config.vm.network "public_network", bridge: "eth0"
该配置与private_network的配置类似,区别在与网络模式这里选择bridge
,参数则是宿主机上与外界连通的网卡的名称。
配置虚拟机支持root登录
一般来说,linux环境下的ssh都不支持root用户直接访问,但是,在后续创建集群的过程中,有许多的操作需要root权限才能执行,这样一来,直接使用root用户登录虚拟机对我们来说是十分方便的,这一步,我们在Vagrantfile文件中增加相应的配置,使得虚拟机在创建完成后既可以支持root用户通过ssh链接:
$sshd_change = <<-SCRIPT
echo change sshd_config to allow public key authentication & relaod sshd...
sed -i 's/\#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
sed -i 's/\#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
systemctl reload sshd
SCRIPT
Vagrant.configure("2") do |config|
config.vm.network "public_network", bridge: "eth0"
config.vm.define "master" do |master|
master.vm.box = "centos/7"
master.vm.hostname = "k8s-master-01"
master.vm.network "private_network", ip: "10.110.0.11"
master.vm.provision "shell", inline: $sshd_change
master.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 2
end
end
-
sshd_change
是一个我们编写的脚本名称,脚本内容就是SCRIPT
标签中的内容; -
master.vm.provision "shell", inline: $sshd_change
这一项配置表明创建虚拟机的过程中,修改了sshd_config文件中的信息,修改的内容就是脚本中描述的信息。
完成整个Vagrantfile的编写后,保存该文件,在该文件存在的路径执行vagrant up
命令,开始创建虚拟机群。创建过程中没有错误后,等待一段时间,终端没有输出信息后,则说明虚拟机群创建完成了,使用vagrant status
命令查看虚拟机状态及数量是否与期望的一致。
配置宿主免密登录虚拟机
创建好的虚拟机,可以使用用户名vagrant和密码vagrant通过ssh链接。但是,为了方便我们可以对虚拟机进行免密登录配置,配置方式和一般linux配置免密登录的方式一样,即将宿主机的ssh-id复制到各个虚拟机上,使用命令ssh-copy-id vagrant@<ip>
即可。也可以将虚拟机的hostname和IP映射,写入到宿主机的hosts文件中,即将下列内容追加到/etc/hosts文件中:
10.110.0.11 master
10.110.0.12 slave-1
10.110.0.13 slave-2
10.110.0.14 docker-register
在终端中输入ssh-copy-id root@master
就可以将宿主机的ssh_key
复制到对应的虚拟机master上,成功后就可以冲宿主机免密登录到虚拟机上。
结束
创建完虚拟机群之后,一个良好的习惯就是,为各个虚拟机创建快照,以便于后期在部署K8S集群的过程中,出现异常后,快速的恢复虚拟机,使用vagrant snapshot save master k8s-master
这种格式,就可以快速的创建虚拟机快照了。