#虛擬機版本
vmware workstation 15.5.0 pro (也就是linux版)
注:宿機需提前裝好vnc
cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
uname -r
3.10.0-693.el7.x86_64
該文章講解的是kvm和virtmgr在不同的服務器上部署,而非2個服務在同一台服務器上
|
|
IP |
網關 |
網絡 |
主機名 |
CPU |
內存 |
硬盤 |
服務 |
鏡像位置 |
| Node |
192.168.1.133/24 |
192.168.1.1/24 |
橋接 |
node |
4核 |
6G |
100G |
kvm |
|
| Master |
192.168.1.128/24 |
master |
2核 |
4G |
100G |
webvirtmgr |
/opop/CentOS-7-x86_64-DVD-1708.iso |
#檢查是否支持虛擬機(node端執行)
egrep '(vmx|svm)' --color=always /proc/cpuinfo
lsmod |grep kvm
如無開啟cpu支持vmx或svm,實體機需在bios中開啟,虛擬機開啟方法見下圖:

右下角打上對號后開機即可
#關閉防火牆和SELinux(兩端執行)
iptables -F && iptables-save
systemctl stop firewalld && systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl disable NetworkManager
#安裝kvm(node端執行)
yum -y install wget
mv /etc/yum.repos.d/CentOS-Base.repo{,.backup}
wget -O /CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
cd /etc/yum.repos.d/; for i in `ls`;do mv $i{,.bak};done
mv /CentOS-Base.repo /etc/yum.repos.d/
yum -y install epel-release && yum clean all && yum makecache
yum -y install qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer
systemctl start libvirtd && systemctl enable libvirtd
# 查看libvitd服務的狀態和開機啟動
systemctl status libvirtd && systemctl is-enabled libvirtd
#配置橋接網絡br0(node端執行)
vim /etc/sysconfig/network-scripts/ifcfg-br0 #新建該文件
DEVICE=br0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.133
GATEWAY=192.168.1.1
NETMASK=255.255.255.0
DNS1=192.168.1.1
NBOOT="yes"
TYPE="Bridge"
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
BRIDGE=br0
ZONE=public
#開啟轉發功能並修改ulimit參數(Node端執行)
echo 1 > /proc/sys/net/ipv4/ip_forward
echo -e "*\tsoft\tnproc\t65500" >>/etc/security/limits.conf
echo -e "*\thard\tnproc\t65500" >>/etc/security/limits.conf
echo -e "*\tsoft\tnofile\t65500" >>/etc/security/limits.conf
echo -e "*\thard\tnofile\t65500" >>/etc/security/limits.conf
#重啟服務器使網卡配置生效(重啟網卡有時候不管用)
reboot
注:這里有一個誤區,如果單獨只是重啟網卡的話ssh會斷開且會有其他問題,所以這里我reboot一下
#重啟libvirt(node端執行)
systemctl restart libvirtd && systemctl status libvirtd
#測試
virsh -c qemu:///system list
#查看virsh版本
virsh --version
#做個軟連接
ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm
lsmod |grep kvm
#查看網橋
brctl show
#設置權限
sed -i "s/#spice_listen/spice_listen/" /etc/libvirt/qemu.conf
sed -i "s/#spice_tls = 1/spice_tls = 1/" /etc/libvirt/qemu.conf
sed -i "s/#vnc_listen/vnc_listen/" /etc/libvirt/qemu.conf
sed -i "s/#user = \"root\"/user = \"root\"/" /etc/libvirt/qemu.conf
sed -i "s/#group = \"root\"/group = \"root\"/" /etc/libvirt/qemu.conf
sed -i "s/#dynamic_ownership = 1/dynamic_ownership = 1/" /etc/libvirt/qemu.conf
systemctl restart libvirtd
注:如需單獨安裝kvm虛擬機,請看我另一篇文章
部署webvirtmgr(master端執行)
這里使用腳本安裝前期少量的部分
#!/usr/bin/env bash
. /etc/init.d/functions
yum -y install wget
wget -O /CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
cd /etc/yum.repos.d/; for i in `ls`;do mv $i{,.bak};done
mv /CentOS-Base.repo /etc/yum.repos.d/
yum -y install epel-release && yum clean all && yum makecache
yum -y install https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-12.noarch.rpm
yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx gcc gcc-c++ python-devel
git clone --depth=1 git@github.com:retspen/webvirtmgr.git
if [ $? -ne 0 ];then
action "git clone" /bin/false
fi
cd webvirtmgr && pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
#腳本完
===============================================================================================
[root@master webvirtmgr]# python
>>> import sqlite3
>>> exit()
#初始化賬號
./manage.py syncdb
yes-->回車-->輸入自己的郵箱-->輸入自定義密碼-->確認自定義密碼
./manage.py collectstatic #配置數據庫的賬號
輸入yes
創建一個超級用戶(配置webvirtmgr 登錄賬號)
./manage.py createsuperuser
自定義用戶名(這里我用的admin)-->自己的郵箱-->密碼-->密碼確認
拷貝web到 相關目錄
cd .. && mkdir -p /var/www
cp -R webvirtmgr /var/www/webvirtmgr
配置nginx(master端執行)
sed -i "s/ access_log/# access_log/" /etc/nginx/nginx.conf
sed -i "s/80 default_server;/80; #default_server;/" /etc/nginx/nginx.conf
sed -i "s/ server_name _;/ server_name localhost;/" /etc/nginx/nginx.conf
sed -i '/location \/ {/a\ root html;' /etc/nginx/nginx.conf
sed -i '/ root html;/a\ index index.html index.htm;' /etc/nginx/nginx.conf
#添加 /etc/nginx/conf.d/webvirtmgr.conf 配置文件
vim /etc/nginx/conf.d/webvirtmgr.conf #新建該文件
server {
listen 80 default_server;
server_name $hostname;
location /static/ {
root /var/www/webvirtmgr/webvirtmgr;
expires max;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
client_max_body_size 1024M; # Set higher depending on your needs
}
}
#檢查nginx配置文件是否正常且重啟nginx
nginx -t
systemctl restart nginx
#配置 Supervisor
#注:該部分會有坑,就是因為字符編碼問題,如你在復制時有異常需自行排錯,排錯命令見下面附命令
echo '
[program:webvirtmgr]
command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
logfile=/var/log/supervisor/webvirtmgr.log
log_stderr=true
user=nginx
[program:webvirtmgr-console]
command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=nginx'>>/etc/supervisord.conf
#檢查
vim /var/www/webvirtmgr/conf/gunicorn.conf.py
#確保下面bind綁定的是本機的8000端口,這個在nginx配置中定義了,被代理的端口
bind = '127.0.0.1:8000'
#重啟supervisord(下圖屬正常,如不是顯示的下圖則需排錯)
systemctl restart supervisord && systemctl enable supervisord && systemctl status supervisord

ps -ef|grep super
#確保8000和6080端口已經啟動
netstat -anpt|grep -E '(:8000|:6080)'
--------到這里webvirtmgr配置完成-----
附:
program的名字是:webvirtmgr、webvirtmgr-console
查看單個program的錯誤信息:supervisorctl tail <program_name> stderr
重新啟動配置中的所有程序:supervisorctl reload
更新新的配置到supervisord:supervisorctl update
啟動某個進程(program_name=你配置中寫的程序名稱): supervisorctl start <program_name>
停止全部進程: supervisorctl stop all
supervisorctl -c /etc/supervisord.conf #查看進程中的任務
webvirtmgr服務器(master端)與kvm服務器(node端)連接配置
(webvirtmgr與kvm之間使用ssh方式連接管理)
1、在kvm(node端)服務器上配置webvirt用戶
useradd webvirtmgr && echo "123456" | passwd --stdin webvirtmgr
usermod -G libvirt -a webvirtmgr
2、在webvirtmgr服務器上執行:(該目錄為所有鏡像存放的地方,生產中請按需取名)
mkdir /opop && chown nginx.nginx /opop && chmod 700 -R /opop
su - nginx -s /bin/bash
ssh-keygen
touch ~/.ssh/config && echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config
chmod 0600 ~/.ssh/config
#將ssh-key上傳到kvm服務器上
ssh-copy-id webvirtmgr@192.168.1.133
3、在kvm(node端)服務器上配置 libvirt ssh授權
vim /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla #新建該文件
[Remote libvirt SSH access]
Identity=unix-user:webvirtmgr
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes
#修改權限並重啟
chown -R webvirtmgr.webvirtmgr /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
service libvirtd restart 或者 systemctl restart libvirtd
webvirtmgr與kvm之間使用tcp方式連接管理(Node端執行)
1)Libvirtd服務監聽配置
修改/etc/sysconfig/libvirtd文件,去掉下面一行的注釋,使Libvirt服務處於監聽狀態
sed -i "s/^#LIBVIRTD_ARGS/LIBVIRTD_ARGS/" /etc/sysconfig/libvirtd
2)配置Libvirt服務
sed -i "s/^#listen_tls/listen_tls/" /etc/libvirt/libvirtd.conf
sed -i "s/^#listen_tcp/listen_tcp/" /etc/libvirt/libvirtd.conf #允許tcp監聽
sed -i "s/^#tcp_port/tcp_port/" /etc/libvirt/libvirtd.conf #開放tcp端口
sed -i "s/#listen_addr = \"192.168.0.1\"/listen_addr = \"0.0.0.0\"/" /etc/libvirt/libvirtd.conf #監聽地址修改為0.0.0.0
sed -i "s/^#auth_tcp/auth_tcp/" /etc/libvirt/libvirtd.conf #配置tcp通過sasl認證
3)創建libvirt管理用戶
saslpasswd2 -a libvirt admin
#這里輸入自定義密碼
#使用瀏覽器登錄
#登錄賬號和密碼為系統的登錄賬密

點擊Add Connection

注:Label要和IP相同,用戶不是root

點擊下圖中鉛筆前面的133地址進入配置:

點擊 "存儲池" ---New Storage(即創建磁盤鏡像存放的位置)

在下圖選擇 "路徑" 選項時需提前在Node節點上創建好該目錄,opop的目錄即所有的鏡像都應該放到該目錄中,必須!!!


點擊添加鏡像

鏡像名稱、容量可自定義,鏡像格式選擇qcow2,Metadata后面的勾默認是打着的,要去掉
刪除存儲池:
查看所有存儲池:virsh pool-list --all
取消存儲池的激活: virsh pool-destroy <存儲池名稱>
然后在webvirtmgr界面在“存儲池”里找到要刪除的存儲池先停止,再刪除
宿主機網卡的橋接模式設置
選擇“Interfaces”---New Interface

注:注意下面的“設備”一項要填寫橋接的物理網卡(即br0對應的那個網卡)
名稱可自定義,start mode是開機自啟動,類型選橋接,STP類似思科的生成樹協議
IPV4寫br0的IP地址和網關

創建網絡池
選擇“網絡池”---“New Network”

再點擊左邊的 "網絡池"----點擊br0,再進行下一步的操作

點擊下圖中New Instance

點擊Custom Instance進行配置虛擬機

名稱自定義,磁盤鏡像選擇上面創建的centos7.4.1708.img,網絡池選擇剛部署的br0,內存按需,其他不變,如下圖

點擊 設置---Media ,選擇要使用的鏡像---點擊連接
注:所有鏡像都必須放到/opop/目錄下(上面已定義好了),如果下載了各種鏡像版本放到里面,那么就可以在這里選擇你想安裝的版本!

點擊Power---啟動

啟動后的畫面,如下圖

點擊Access----控制台---控制台,進行連接到虛擬機中

往下的安裝和正常的一樣,此處略過去部分安裝過程..........
安裝完畢並成功登錄進來

注:這里因為我是在虛擬機中做到,網絡方面層次會有點多,按以上教程做出來后會連接不到互聯網,待我這邊有了真機后再做相對應的教程

