Skip to main content

Vagrant 单机快速模拟集群


致谢
转载自 | 
https://imquanquan.net/archives/Vagrant-single-machine-fast-simulation-cluster.html

 作者 | Imquanquan
概述
在学生时代,如果想自学 Ansible Puppet 这种部署工具,或者说 Ceph、Kubernetes 这种分布式存储系统和容器编排工具。在实习或者工作以前可能会苦于没有实战的环境。这个时候虚拟机就因运而生了,而 Vagrant 正是快速的,便于管理的虚拟机管理工具,只要你机子资源足够,用它可以很快地模拟一个小型的集群环境。
logo
安装
在 ubuntu 下,Vagrant 的安装很简单,直接用包管理工具即可:
  1. sudo apt install virtualbox vagrant
Vagranfile
跟 Docker 与 Dockerfile 一样, Vagrant 中的虚拟机创建也需要 Vagrantfile。Vagranfile 用来定义你想要起多少台虚拟机,以及它们的配置怎样。
下面是的 Vagrantfile 演示了创建四台虚拟机来模拟集群环境。这四台虚拟机分别是一台 deploy,三个 node 节点,可以用于部署 ceph 的小型集群。
  1. Vagrant.configure("2") do |config|
  2.  config.vm.define "deploy" do |deploy|
  3.    deploy.vm.provider "virtualbox" do |v|
  4.        v.name = "deploy"
  5.        v.memory = 512
  6.        v.cpus = 1
  7.    end
  8.    deploy.vm.box = "debian/stretch64"
  9.    deploy.vm.hostname = "deploy"
  10.    deploy.vm.network :private_network, ip: "10.1.0.4"
  11.  end
  12. end
  13. Vagrant.configure("2") do |config|
  14.  (1..3).each do |i|
  15.    config.vm.define "node#{i}" do |node|
  16.      node.vm.box = "debian/stretch64"
  17.      node.vm.hostname="node#{i}"
  18.      node.vm.network "private_network", ip: "10.1.0.#{i}"
  19.      node.vm.provider "virtualbox" do |v|
  20.        v.name = "node#{i}"
  21.        v.memory = 512
  22.        v.cpus = 1
  23.      end
  24.    end
  25.  end
  26. end
语法还是比较易懂的,下面介绍其中几个比较关键的句法:
deploy.vm.provider
这句指定了虚拟机的提供者是。本例中是 virtualbox。需要注意的是 Vagrant 只是虚拟机的编排工具,而它本身并不提供虚拟技术,需要跟其他虚拟机软件结合,例如:virtualbox、libvirt。接下来的 v 就是对这台虚拟机的设置。
◈ v.name:virtualbox 中这台虚拟机的名字。
◈ v.memory:该虚拟机的内存大小,单位是 MB。
◈ v.cpus:该虚拟机的 CPU 核数。
vm.box
该虚拟机的初始化镜像名称,这里是 Debian9。
vm.hostname
该虚拟机的主机名,很重要,ssh 连接时用的就是这个名字。请起一个有意义的名字,不然以后又得重设啦。
vm.network
网络设置,Vagrant 有三种网络设置模式:
forwarded_port
这种方式把本机和虚拟机的端口进行映射,例如:
  1. config.vm.forwarded_port 80, 8080`
这是把虚拟机的 80 端口映射到宿主机的 8080 端口,这样访问宿主机的 8080 端口就相当于访问虚拟机的 80 端口了。
private_network
这种方式是私有网络,只允许宿主机访问虚拟机。如果多个虚拟机设定在同一个网段,那么几个虚拟机之间也可以互相访问。相当于搭建了个小型集群。
public_network
这种方式虚拟机的网络配置跟宿主机的网络配置一样,在外网别可以像访问宿主机一样访问虚拟机。
启动虚拟机
之前介绍的,就是本地搭建集群所需掌握的 Vagrantfile 文件格式的基本内容了。下面介绍如何从这个配置文件来启动这组虚拟机。
将上面的文件保存为 Vagranfile,然后在 Vagranfile 文件所在目录执行:
  1. vagrant up
启动虚拟机
喝一杯茶的时间,四台虚拟机就创建完毕了~是不是很简单呢。
启动结果
使用虚拟机
前面说过要连接虚拟机,是要使用虚拟机的主机名,比如:
  1. vagrant ssh deploy
这句命令会以 vagrant 的用户登录到 deploy 虚拟机节点,然后可以用 sudo su 命令获得 root 权限。
用一下指令可以查看虚拟机的 ssh 配置详细情况:
  1. vagrant ssh-config
ssh 配置
可以看到连接虚拟机的端口,密钥文件位置,因此我也可以用这条命令来连接 deploy:
  1. ssh -i /home/imquanquan/vagrant/.vagrant/machines/deploy/virtualbox/private_key vagrant@127.0.0.1 -p 2222
当我们想暂时关闭虚拟机时可以:
  1. vagrant halt
这个命令会关掉整组虚拟机,要是我们只想关掉 deploy 可以用:
  1. vagrant halt deploy
当我们玩腻了,想要删掉虚拟机可以:
  1. vagrant destroy
删除
Vagrant 会每台机子询问一遍,你需要打 4 个 y 来删除这四台机子。

Comments

Popular posts from this blog

CKA Simulator Kubernetes 1.22

  https://killer.sh Pre Setup Once you've gained access to your terminal it might be wise to spend ~1 minute to setup your environment. You could set these: alias k = kubectl                         # will already be pre-configured export do = "--dry-run=client -o yaml"     # k get pod x $do export now = "--force --grace-period 0"   # k delete pod x $now Vim To make vim use 2 spaces for a tab edit ~/.vimrc to contain: set tabstop=2 set expandtab set shiftwidth=2 More setup suggestions are in the tips section .     Question 1 | Contexts Task weight: 1%   You have access to multiple clusters from your main terminal through kubectl contexts. Write all those context names into /opt/course/1/contexts . Next write a command to display the current context into /opt/course/1/context_default_kubectl.sh , the command should use kubectl . Finally write a second command doing the same thing into ...

OWASP Top 10 Threats and Mitigations Exam - Single Select

Last updated 4 Aug 11 Course Title: OWASP Top 10 Threats and Mitigation Exam Questions - Single Select 1) Which of the following consequences is most likely to occur due to an injection attack? Spoofing Cross-site request forgery Denial of service   Correct Insecure direct object references 2) Your application is created using a language that does not support a clear distinction between code and data. Which vulnerability is most likely to occur in your application? Injection   Correct Insecure direct object references Failure to restrict URL access Insufficient transport layer protection 3) Which of the following scenarios is most likely to cause an injection attack? Unvalidated input is embedded in an instruction stream.   Correct Unvalidated input can be distinguished from valid instructions. A Web application does not validate a client’s access to a resource. A Web action performs an operation on behalf of the user without checkin...