安装virtualbox和vagrant
开启CPU虚拟化,win电脑开机前先进入bios查看Virtualization Support是否enable
下载安装virtualbox,记得要配置到环境变量里
https://www.virtualbox.org/wiki/Downloads
下载安装vagrant,下载比较慢,安装包我存百度云盘了,有需要可以问我要链接
官方下载地址 https://www.vagrantup.com/downloads
安装完vagrant后重启电脑,然后打开cmd输入 vagrant -v 查看版本号,有版本号就表示安装成功。
使用vagrant快速创建virtualbox虚拟机
进入https://app.vagrantup.com/boxes/search,查看vagrant镜像。
在cmd输入 vagrant init centos/7
$ 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 命令启动虚拟环境。
结果报错了
看样子是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地址
在Vagrantfile文件里打开注释,修改ip为
config.vm.network "private_network", ip: "192.168.56.10"
ip前面保持一致即可。
然后在cmd执行 vagrant reload 重启虚拟机,然后 vagrant ssh 进入虚拟机,在虚拟机执行 ip addr
然后虚拟机里面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的安装位置