前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s 系列教程-Vagrant

k8s 系列教程-Vagrant

作者头像
六个核弹
发布2022-12-23 21:17:12
6860
发布2022-12-23 21:17:12
举报

vagrant是开源的虚拟机技术,相对于 vmware 而言更轻量级,操作更简便移植性更强,如果我们需要学习k8s或者搭建一些集群的话建议使用 Virtualbox+Vagrant。Vagrant 是创建虚拟机的工具,Virtualbox 是vagrant 管理工具,而且这两个软件是开源的,不需要我去付费或者破解。掌握 Vagrant技术对我们后续学习k8s会有很大的帮助

环境准备

vagrant 下载地址:https://www.vagrantup.com virtualbox 下载地址:https://www.virtualbox.org/wiki/Downloads

下载安装完成后,我们还需要下载vagrant镜像 镜像下载地址:https://app.vagrantup.com/boxes/search

打开cmd 窗口,添加本地镜像:

代码语言:javascript
复制
vagrant box add --name 镜像名称 E:data/centos7.box

## 查看所有镜像
vagrant box list 

## 初始化Vagrantfile
vagarnt init 镜像名称

执行 vagarnt init 指令会根据镜像在当前文件夹生成一个Vagrantfile文件,这个文件是创建虚拟机的配置文件。

打开 virtualbox,管理->常规->默认虚拟电脑位置,设置虚拟机存储文件夹。

打开cmd 输入 ipconfig 查看VirtualBox 的虚拟网卡ip:

代码语言:javascript
复制
以太网适配器 VirtualBox Host-Only Network:

   连接特定的 DNS 后缀 . . . . . . . :
   本地链接 IPv6 地址. . . . . . . . : fe80::85e5:a582:5c5a:bb5b%15
   IPv4 地址 . . . . . . . . . . . . : 192.168.56.1

修改 Vagrantfile文件,指定其虚拟机的内网ip,需要和虚拟网卡一个网段:

代码语言:javascript
复制
### 配置位置可文件中搜索该配置项,有相应的提示
  config.vm.network "private_network", ip: "192.168.56.10"

Vagrantfile所在文件夹打开powershell或者cmd 执行指令vagrant up 启动一个虚拟机。

待虚拟机启动完成后执行 vagrant ssh 进入虚拟机,该虚拟机的root默认密码为vagrant,进入时的账号也是vagrant:

代码语言:javascript
复制

PS E:\vagrant\cent1> vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: No guest additions were detected on the base box for this VM! Guest
    default: additions are required for forwarded ports, shared folders, host only
    default: networking, and more. If SSH fails on this machine, please install
    default: the guest additions and repackage the box to continue.
    default:
    default: This is not an error message; everything may continue to work properly,
    default: in which case you may ignore this message.
==> default: Configuring and enabling network interfaces...
==> default: Rsyncing folder: /cygdrive/e/vagrant/cent1/ => /vagrant
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
PS E:\vagrant\cent1> vagrant ssh
[vagrant@localhost ~]$ whoami
vagrant
[vagrant@localhost ~]$ ls /
bin   dev  home  lib64  mnt  proc  run   srv       sys  usr      var
boot  etc  lib   media  opt  root  sbin  swapfile  tmp  vagrant
[vagrant@localhost ~]$

多机启动

我们在搭建一些环境时往往需要启动多台虚拟机,接下来我们将介绍如何创建多台虚拟机并进行相关的配置。

我们修改Vagrantfile 内容:

代码语言:javascript
复制
Vagrant.configure("2") do |config| 
   (1..3).each do |i| 
       
      #定义节点变量 
      config.vm.define "node#{i}" do |node| 
      
      # box配置 
      node.vm.box = "centos7" 
 
      # 设置虚拟机的主机名 
      node.vm.hostname = "node#{i}" 
 
      # 设置虚拟机的IP 
      node.vm.network "private_network", ip: "192.168.56.#{10+i}" 
 
      # 设置主机与虚拟机的共享目录 
      #node.vm.synced_folder "/Users/meetmax", "/home/vagrant/code" 
      node.vm.synced_folder "E:/volum/data", "/share", create:true, owner: "root", group: "root"
      # VirtaulBox相关配置 
      node.vm.provider "virtualbox" do |v| 
 
          # 设置虚拟机的名称 
          v.name = "node#{i}" 
 
          # 设置虚拟机的内存大小 
          v.memory = 2048 
 
          # 设置虚拟机的CPU个数 
          v.cpus = 2 
      end 
  end 
end 
end 

执行 vagrant up 启动node1,node2,node3 三台虚拟机,在启动过程中可能会报挂载失败的错误:

代码语言:javascript
复制
node1: /share => E:/vagrant/data
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=0,gid=0,_netdev share /share

安装插件可以解决(如果还报错则卸载插件,换一个更低版本的):

代码语言:javascript
复制
## 安装插件
vagrant plugin install vagrant-vbguest

## 卸载插件
vagrant plugin uninstall vagrant-vbguest

## 安装指定版本插件
vagrant plugin install vagrant-vbguest --plugin-version 0.21

## 插件安装过程中可能出现联网失败的情况,可以修改下载国内镜像安装
vagrant plugin install vagrant-vbguest --plugin-clean-sources --plugin-source https://gems.ruby-china.com/

执行 vagrant status 查看虚拟机运行状态,也可以直接在virtualbox 界面上查看,在下次启动虚拟机的时候就不需要再在cmd窗口执行vagrant up指令,直接在virtualbox界面上选择启动方式。进入虚拟机的指令:

代码语言:javascript
复制
vagrant ssh '虚拟机名称'

虚拟机初始化配置

在我们虚拟机启动后,其中dns 服务器地址是有问题的,我们希望在创建虚拟机的时候,进行一些基础的配置,我们可以在Vagrantfile 中添加脚本实现这些配置:

代码语言:javascript
复制
Vagrant.configure("2") do |config| 
    (1..3).each do |i| 
       
        #定义节点变量 
        config.vm.define "node#{i}" do |node| 
      
        # box配置 
        node.vm.box = "centos7" 
 
        # 设置虚拟机的主机名 
        node.vm.hostname = "node#{i}" 
 
        # 设置虚拟机的IP 
        node.vm.network "private_network", ip: "192.168.56.#{10+i}" 
 
        # 设置主机与虚拟机的共享目录 
        #node.vm.synced_folder "E:\volum\data", "/share", create:true, owner: "root", group: "root"
        # VirtaulBox相关配置 
        node.vm.provider "virtualbox" do |v| 
 
          # 设置虚拟机的名称 
          v.name = "node#{i}" 
 
          # 设置虚拟机的内存大小 
          v.memory = 2048 
 
          # 设置虚拟机的CPU个数 
          v.cpus = 2 
        end
        node.vm.provision "shell", inline: <<-SHELL
            eh=$(nmcli connection show|awk -F "  " '{print $1}'|grep -v NAME|head -1)
            nmcli con mod "$eh" ipv4.dns "223.5.5.5"
            nmcli con up "$eh"
        SHELL
        end 
    end 
end 

在示例中,我通过配置项node.vm.provision "shell" 编写脚本设置了dns 服务器ip。通过这个方式我们可以实现预装docker等操作。我们还可以指定外部脚本,配置示例:

代码语言:javascript
复制
config.vm.provision "shell", path: "script.sh"

当然我们还可以制作自己的box 实现一键创建虚拟机。首先我们在原来的虚拟机中安装好软件并修改相关配置配置文件,然后清除掉private_network的网络规则:

代码语言:javascript
复制
sudo rm -f /etc/udev/rule.d/70-persistent-net.rules

检查 /etc/ssh/sshd_config文件PasswordAuthentication no 是否被注释掉,没有注释掉的话无法通过 vagrant ssh 登录。

然后执行指令:

代码语言:javascript
复制
vagrant package node1 

在当前文件夹下得到一个 package.box 。通过 package 指令,我们可以很方便的将集群布起来。

备注

vagrant 常用指令速查表:

代码语言:javascript
复制
# 查看box 
vagrant box list

# 添加box
vagrant box add --name path

# 移除box
vagrant box remove xxx

# 初始化 Vagrantfile
vagrant init xxx

# 启动虚拟机
vagrant up [name]

# ssh 连接虚拟机
vagrant ssh

# 重新加载虚拟机
vagrant reload

# 删除虚拟机
vagrant destroy

# 打包虚拟机为镜像
vagrant package 

# 查看虚拟机状态
vagrant status
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 六个核弹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境准备
  • 多机启动
  • 虚拟机初始化配置
    • 备注
    相关产品与服务
    命令行工具
    腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档