Centos7醉生梦死(2/N)KVM主机

后续需要倒腾 k8s 分布式部署,但是需要至少2台(master, node)机器。

不想多花钱去阿里云,腾讯云等买,正好利用手边的 centos7 做一下虚拟化,简单配置 3 台 kvm 虚拟机。

Master配置

当前物理主机配置 4 核心 8 线程的 centos7

准备工作

首先关闭 selinux, iptables/firewald,然后确保自己的 cpu 支持 kvm,即 vmx 或者 svm技术。

## 检查是否支持 kvm
$ cat /proc/cpuinfo | grep -Ei 'vmx|svm'

确认挂载点,这里我放置在 $HOME/kvms 下面:

$ mkdir master node1 node2

$ ls
master  node1  node2

最后,安装一下 kvm 需要的工具软件,这里我用非GUI的方式安装后面的虚拟机。

  • 如果您需要图形化安装,可能需要安装 vnc, 然后远程连接
# yum install -y  virt-*  libvirt  bridge-utils qemu-img

不放心的话,检查一下是否安装成功:

# 查看kvm模块是否被正确加载  
lsmod | grep kvm  
# 出现以下信息则表示正确加载  
# kvm_intel               162153 0  
# kvm                     525259 1 kvm_intel  
# irqbypass               13503  1 kvm  

# 开启kvm服务,并设置开机启动  
systemctl start libvirtd.service  
systemctl enable libvirtd.service  

# 查看操作结果,出现Active:active(running)字样则说明运行情况良好  
systemctl status libvirtd  
systemctl is-enabled libvirtd

# 重启宿主机,加载kvm相关模块  
reboot  

配置网桥

为了让所有的虚拟机具有独立 ip,这里需要配置一下桥接网卡(共用物理网卡做路由),原理大致如下:

桥接原理

查看并修改原有物理网卡,设置到相关网桥端口,即在原来物理网卡配置上增加 BRIDGE="bridge-master"

  • 同时也要保证 UUID 一致

直接拷贝,修改物理机网卡的配置:

$ cp ifcfg-eno1 ifcfg-bridge-master

大致配置如下:

TYPE="Bridge"
DEVICE="bridge-master"
NAME="bridge-master"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="no"
PEERDNS="no"
NM_CONTROLLED=no
UUID=和物理机保持一致
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
ONBOOT="yes"

然后激活网卡,重启一下 networksmanger:

ifup eno1
ifup bridge-master
systemctl stop NetworkManager.service
systemctl restart network.service

检验的话,可以用 ip a 或者 brctl show 进行查看,或者用另外一台机器 ping 也行。

这里网桥设置之后,原宿主机和网桥是同一个IP

这里最好不要设置 static,而是交给路由器去静态绑定,因为后面还要克隆这个虚拟机

(如果乱配置,这里肯定要折腾一番)

安装Centos

先拷贝 centos iso 文件到本地,安装命令如下:

$ sudo su
$ virt-install \
  --virt-type=kvm \ 
  --name=k8s-master  \
  --memory=4096,maxmemory=5102 \
  --vcpus=2,maxvcpus=4  \
  --os-type=linux \
  --location=/home/ch-yk/tmp/CentOS-7-x86_64-DVD-1810.iso \
  --disk path=/home/ch-yk/kvms/master/master.img,size=20 
  --bridge=bridge-master \
  --graphics=none \
  --console=pty,target_type=serial  \
  --extra-args="console=tty0 console=ttyS0"

# 写成下面的样子即可
$ virt-install --virt-type=kvm --name=k8s-master --memory=4096,maxmemory=5102 --vcpus=2,maxvcpus=4 --os-type=linux --location=/home/ch-yk/tmp/CentOS-7-x86_64-DVD-1810.iso --disk path=/home/ch-yk/kvms/master/master.img,size=20 --bridge=bridge-master --graphics=none --console=pty,target_type=serial --extra-args="console=tty0 console=ttyS0"
  • 具体配置后面可以用 virsh 进行调整

注意这里的 /home/ch-yk/tmp/ 目录需要给 qemu 读写的权限,比如 gpasswd -a qemu ch-yk

然后安装界面就是和物理机安装一样:

一系列安装

  • 虚拟主机的网络,需要登录进去再设置
  • 安装磁盘选择自动分配,LVM逻辑分卷或者普通分区都可以

安装完成,登录 root 进去,不小心关了虚拟机可以用 virsh console k8s-master 连接。

先检查网络是否可以开启 ip addr:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:5a:4d:7e brd ff:ff:ff:ff:ff:ff

一般是由于物理网卡没有 ONBOOT=true,所以还要要像配置物理机一样先配置一下。

之后设置一下 virsh autostart k8s-master 即可。(如果你乱配置就另当别说咯)

Node配置

此处就不需要再按照刚才的步骤一步步安装了,直接用克隆的方式。

[root@centos-dev ch-yk]# virt-clone -o k8s-master -n k8s-node1 -f /home/ch-yk/kvms/node1/node1.img
WARNING  /home/ch-yk/kvms/node1/node1.img 可能不能被管理程序访问。您将需要授予 'qemu' 用户搜索以下目录的权限: ['/home/ch-yk']
正在分配 'node1.img'                                                                                |  20 GB  00:00:05     

成功克隆 'k8s-node1'[root@centos-dev ch-yk]# virt-clone -o k8s-master -n k8s-node2 -f /home/ch-yk/kvms/node2/node2.img
WARNING  /home/ch-yk/kvms/node2/node2.img 可能不能被管理程序访问。您将需要授予 'qemu' 用户搜索以下目录的权限: ['/home/ch-yk']
正在分配 'node2.img'                                                                                |  20 GB  00:00:00     

成功克隆 'k8s-node2'[root@centos-dev ch-yk]# virsh dominfo k8s-node1
Id:             -
名称:       k8s-node1
UUID:           a6449a69-0556-4ab3-825b-1f978082fb58
OS 类型:    hvm
状态:       关闭
CPU:          2
最大内存: 5224448 KiB
使用的内存: 4194304 KiB
持久:       是
自动启动: 禁用
管理的保存: 否
安全性模式: none
安全性 DOI: 0

看看资源占用:

# virsh list --all
 Id    名称                         状态
----------------------------------------------------
 3     k8s-node1                      running
 4     k8s-node2                      running
 5     k8s-master                     running

目前占用的资源

之后的工作,设置为开机自动启动,同时绑定路由的静态IP即可。


这样就相当于初步拥有了 3 台主机了,但是 hostname 可能还需要修改一下。

  • 以后没有需要的话,可以不用连接宿主机器了,所以可以修改 client hosts

KVM或者其他虚拟技术很深,想研究可以有很多机会,但目前需要多台主机才是重点,故而到此为止。

参考资料


   转载规则


《Centos7醉生梦死(2/N)KVM主机》 欧文 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录