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

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 checking a shared sec

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 /opt/course/1/context_default_no_kubectl.sh , but without the use of k

标 题: 关于Daniel Guo 律师

发信人: q123452017 (水天一色), 信区: I140 标  题: 关于Daniel Guo 律师 关键字: Daniel Guo 发信站: BBS 未名空间站 (Thu Apr 26 02:11:35 2018, 美东) 这些是lz根据亲身经历在 Immigration版上发的帖以及一些关于Daniel Guo 律师的回 帖,希望大家不要被一些马甲帖广告帖所骗,慎重考虑选择律师。 WG 和Guo两家律师对比 1. fully refund的合约上的区别 wegreened家是case不过只要第二次没有file就可以fully refund。郭家是要两次case 没过才给refund,而且只要第二次pl draft好律师就可以不退任何律师费。 2. 回信速度 wegreened家一般24小时内回信。郭律师是在可以快速回复的时候才回复很快,对于需 要时间回复或者是不愿意给出确切答复的时候就回复的比较慢。 比如:lz问过郭律师他们律所在nsc区域最近eb1a的通过率,大家也知道nsc现在杀手如 云,但是郭律师过了两天只回复说让秘书update最近的case然后去网页上查,但是上面 并没有写明tsc还是nsc。 lz还问过郭律师关于准备ps (他要求的文件)的一些问题,模版上有的东西不是很清 楚,但是他一般就是把模版上的东西再copy一遍发过来。 3. 材料区别 (推荐信) 因为我只收到郭律师写的推荐信,所以可以比下两家推荐信 wegreened家推荐信写的比较长,而且每封推荐信会用不同的语气和风格,会包含lz写 的research summary里面的某个方面 郭家四封推荐信都是一个格式,一种语气,连地址,信的称呼都是一样的,怎么看四封 推荐信都是同一个人写出来的。套路基本都是第一段目的,第二段介绍推荐人,第三段 某篇或几篇文章的abstract,最后结论 4. 前期材料准备 wegreened家要按照他们的模版准备一个十几页的research summary。 郭律师在签约之前说的是只需要准备五页左右的summary,但是在lz签完约收到推荐信 ,郭律师又发来一个很长的ps要lz自己填,而且和pl的格式基本差不多。 总结下来,申请自己上心最重要。但是如果选律师,lz更倾向于wegreened,