使用vagrant安装虚拟机环境

安装virtualbox和vagrant

开启CPU虚拟化,win电脑开机前先进入bios查看Virtualization Support是否enable

下载安装virtualbox,记得要配置到环境变量里
https://www.virtualbox.org/wiki/Downloads

微信图片_20200805100531.png

下载安装vagrant,下载比较慢,安装包我存百度云盘了,有需要可以问我要链接
官方下载地址 https://www.vagrantup.com/downloads

安装完vagrant后重启电脑,然后打开cmd输入 vagrant -v 查看版本号,有版本号就表示安装成功。

使用vagrant快速创建virtualbox虚拟机
进入https://app.vagrantup.com/boxes/search,查看vagrant镜像。
在cmd输入 vagrant init centos/7

微信图片_20200805141259.png

$ vagrant init centos/7
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

执行完上面的命令后,会在用户的家目录下生成Vagrantfile文件,接下来使用 vagrant up或者vagrant up --provider=virtualbox 命令启动虚拟环境。
结果报错了

微信图片_20200805142346.png

看样子是virtualbox版本太高了,我卸载了,重新安装了一个低版本的,再次执行 vagrant up,挂机一天,终于启动起来了。Vagrant 安装VirtualBox等虚拟机镜像.box下载缓慢问题
先用下载工具下载到本地后,然后使用“ vagrant box add ”添加,再“vagrant up”即可。

#将下载的镜像添加到virtualBox中
$ vagrant box add centos/7 E:\迅雷下载\CentOS-7-x86_64-Vagrant-1905_01.VirtualBox.box
#启动
$ vagrant up

虚拟机网络设置

在win电脑的cmd输入ipconfig命令,查看虚拟机的ip地址

微信截图_1596688701622.png

在Vagrantfile文件里打开注释,修改ip为

config.vm.network "private_network", ip: "192.168.56.10"

ip前面保持一致即可。
然后在cmd执行 vagrant reload 重启虚拟机,然后 vagrant ssh 进入虚拟机,在虚拟机执行 ip addr

微信截图_15966891635191.png

然后虚拟机里面ping windows电脑的ip,在windows电脑cmd里ping虚拟机的ip,检查宿主机和virtualBox之间的通信是否正常。

开启远程登陆,修改“/etc/ssh/sshd_config”
PermitRootLogin yes  (这个文件里好像没有,有的话就修改下)
PasswordAuthentication yes

然后重启SSHD

systemctl restart sshd

使用Xshell或SecureCRT进行远程连接。

使用vagrant安装三台虚拟机

我们搞集群环境时需要多台机器,使用vagrant可以很方便的创建出多个虚拟机。

在virtualbox的全局设定中,找到一个空间比较大的磁盘用用来存放镜像。
使用我们提供的vagrant文件,复制到非中文无空格目录下,运行vagrant up启动三个虚拟机。
下面是vagrantfile,使用它来创建三个虚拟机,分别为k8s-node1,k8s-node2和k8s-node3

Vagrant.configure("2") do |config|
   (1..3).each do |i|
        config.vm.define "k8s-node#{i}" do |node|
            # 设置虚拟机的Box
            node.vm.box = "centos/7"

            # 设置虚拟机的主机名
            node.vm.hostname="k8s-node#{i}"

            # 设置虚拟机的IP
            node.vm.network "private_network", ip: "192.168.56.#{99+i}", netmask: "255.255.255.0"

            # 设置主机与虚拟机的共享目录
            # node.vm.synced_folder "~/Documents/vagrant/share", "/home/vagrant/share"

            # VirtaulBox相关配置
            node.vm.provider "virtualbox" do |v|
                # 设置虚拟机的名称
                v.name = "k8s-node#{i}"
                # 设置虚拟机的内存大小
                v.memory = 4096
                # 设置虚拟机的CPU个数
                v.cpus = 4
            end
        end
   end
end

进入到三个虚拟机,开启root的密码访问权限

Vagrant ssh k8s-node1
Vagrant ssh k8s-node2
Vagrant ssh k8s-node3

su root 密码为vagrant
vi /etc/ssh/sshd_config

修改
# PermitRootLogin yes (这个文件里好像没有,有的话就修改下)
PasswordAuthentication yes

systemctl restart sshd.service

设置完后就可以用Xshell进行连接三台虚拟机了。

关于在"网络地址转换"的连接方式下,三个节点的eth0,IP地址相同的问题。

问题描述:查看k8s-node1的路由表:

[root@k8s-node1 ~]# ip route show
default via 10.0.2.2 dev eth0 proto dhcp metric 100 
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 100 
192.168.56.0/24 dev eth1 proto kernel scope link src 192.168.56.100 metric 101 
[root@k8s-node1 ~

能够看到路由表中记录的是,通过端口eth0进行数据包的收发。

分别查看k8s-node1,k8s-node2和k8s-node3的eth0所绑定的IP地址,发现它们都是相同的,全都是10.0.2.15,这些地址是供kubernetes集群通信用的,区别于eth1上的IP地址,是通远程管理使用的。

[root@k8s-node1 ~]# ip addr
...
2: eth0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:8a:fe:e6 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
       valid_lft 84418sec preferred_lft 84418sec
    inet6 fe80::5054:ff:fe8a:fee6/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:a3:ca:c0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.100/24 brd 192.168.56.255 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fea3:cac0/64 scope link 
       valid_lft forever preferred_lft forever
[root@k8s-node1 ~]# 

原因分析:这是因为它们使用是端口转发规则,使用同一个地址,通过不同的端口来区分。但是这种端口转发规则在以后的使用中会产生很多不必要的问题,所以需要修改为NAT网络类型。

解决方法:

  • 先关闭三个节点。
  • 在virtualbox里选择三个节点,然后执行“管理”->"全局设定"->“网络”,添加一个NAT网络。
  • 分别修改每台设备的网络类型,选择NAT网络,并在高级选项中刷新重新生成MAC地址,然后再无界面启动三个节点。
  • 再次查看三个节点的IP,互相能ping通,并且ping baidu.com 也要能通。

虚拟机安装docker

https://docs.docker.com/engine/install/centos/

如果有老版本先执行卸载

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装依赖

$ sudo yum install -y yum-utils

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

Optional: Enable the nightly or test repositories.可选的命令就先不执行

安装docker

$ sudo yum install -y docker-ce docker-ce-cli containerd.io
$ docker -v
$ sudo systemctl start docker

设置docker开机自动启动

sudo systemctl enable docker

配置docker镜像加速
在阿里云控制台找到容器镜像服务,找到镜像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://这里需要登陆阿里云获取.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker安装mysql

sudo docker pull mysql:8.0
在centos系统中先创建几个文件夹

sudo  rm -r /mydata
sudo mkdir -p /mydata/mysql/data
sudo mkdir -p /mydata/mysql/log
sudo mkdir -p /mydata/mysql/conf

启动容器

sudo docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0 

发现启动了mysql后自动退出了,百度了下说是mysql占用内存过多,那我删除容器,重建/mydata再试一下

sudo docker ps -a
sudo docker rm 容器id

sudo docker run -it -m 300M --memory-reservation 200M \
-p 3306:3306 --name mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0 /bin/bash

进入mysql容器内部
sudo docker exec -it mysql /bin/bash
输入exit退出容器。

添加mysql配置文件 sudo vi /mydata/mysql/conf/my.cnf
重启mysql
sudo docker restart mysql
重启后进入mysql容器,发现 /etc/mysql 目录下也多了一个my.cnf文件

设置启动docker时,即运行mysql

docker update mysql --restart=always

执行 mysql -uroot -p 报下面错误,百度试了一些方法还没解决先放着。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

docker安装redis

sudo docker pull redis
sudo mkdir -p /mydata/redis/data
sudo mkdir -p /mydata/redis/conf
sudo touch /mydata/redis/conf/redis.conf
echo "appendonly yes"  >> /mydata/redis/conf/redis.conf

sudo docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis \
redis-server /etc/redis/redis.conf

sudo docker exec -it redis redis-cli

127.0.0.1:6379> set key1 v1
OK
127.0.0.1:6379> get key1
"v1"
127.0.0.1:6379> 

设置redis持久化,sudo vi /mydata/redis/conf/redis.conf

appendonly yes

设置redis容器在docker启动的时候启动

docker update redis --restart=always

其他配置按需添加,然后就可以使用客户端工具进行连接。

docker安装nacos

docker pull nacos/nacos-server
docker run -d -p 8848:8848 \
-e MODE=standalone \
-v /mydata/nacos/init.d:/home/nacos/init.d \
-v /mydata/nacos/logs:/home/nacos/logs \
--restart always --name nacos nacos/nacos-server

页面访问http://你的ip地址:8848/nacos 用户名:nacos 密码:nacos

docker安装RabbitMQ

docker run -d --name rabbitmq \
-p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management

docker update rabbitmq --restart=always

启动容器后访问:http://192.168.56.10:15672,默认登录名和密码都是 guest

docker安装zipkin

docker run -d -p 9411:9411 openzipkin/zipkin

浏览器访问:192.168.56.10:9411,上面链路追踪数据默认是存在内存里的。
生产环境需要把数据存到es里,所以用以下命令启动容器。

docker run --env STORAGE_TYPE=elasticsearch \
--env ES_HOST=192.168.56.10:9200 openzipkin/zipkin-dependencies

设置防火墙

#查看防火墙状态
systemctl status firewalld  
#查看防火墙是否是开机启动
systemctl list-unit-files|grep firewalld 
#关闭开机启动防火墙
systemctl disable firewalld 
#停止防火墙
systemctl stop firewalld 

whereis mysql:查看mysql的安装位置

你可能感兴趣的:(使用vagrant安装虚拟机环境)