混合云管理后端程序,通过Kubernetes框架实现 Docker/Containerd/RunC 容器与 libvirt KVM 虚拟机生命周期管理,支持虚拟机/容器在Overlay和Underlay网络互联互通,支持Ceph分布式存储。
- 支持的操作系统
- ubuntu22.04 (kernel 版本: 6.2.0-35-generic or 6.2.0-36-generic)
- centos7.9 (kernel 版本: 3.10.0-1160.102.1.el7.x86_64)
- 软件依赖
- Kubernetes/Docker: 1.23.6/20.10.15
- Libvirt/KVM: 4.5.0/2.12.0(centos7.9), 8.0.0/6.2.0(ubuntu22.04)
- Rook: v1.10.8
- Kube-ovn: 1.12.2
- Ansible: >=2.9.27
- 通过Ansible安装
uniVirt
后新增软件依赖:
- python: python3.9.7(centos7.9), python3.10.12(ubuntu22.04)
- go: 1.19.1
- 前端开发SDK —— java-sdk
https://github.com/kubesys/sdk
https://github.com/pixiu-io/kubez-ansible
cd $HOME
git clone https://github.com/kubesys/uniVirt
cd /path/to/your/uniVirt/directory
bash setup.sh
cp /etc/uniVirt/ansible/inventory.ini /path/to/your/inventory.ini
vi /path/to/your/inventory.ini
修改 inventory.ini
中的 master
和 worker
两个组将 Kuberentes 集群的所有服务器包含进来,请参考如下示例:
[master] # 主节点组
# 节点hostname 操作系统类型
node1 ubuntu
[worker] # 计算节点组
# 节点hostname 操作系统类型
node2 centos
- 通过
/path/to/your/inventory.ini
进行安装
ansible-playbook -i inventory.ini /etc/uniVirt/ansible/playbooks/install_packages_and_dependencies.yml
- 安装 golang 环境
ansible-playbook -i inventory.ini /etc/uniVirt/ansible/playbooks/install_go.yml
- 为计算节点打标签
ansible-playbook -i inventory.ini /etc/uniVirt/ansible/playbooks/label_k8s_nodes.yml
- 安装指定版本的
uniVirt
,例如:v1.0.0.lab,则修改 -e "ver=v1.0.0.lab" 参数
ansible-playbook -i localhost, -e "ver=v1.0.0.lab" /etc/uniVirt/ansible/playbooks/install_uniVirt.yml
kubectl get po -A | grep virt-tool
- 更新至指定版本,例如:v1.0.1.lab,则修改 -e "ver=v1.0.1.lab" 参数
ansible-playbook -i localhost, -e "ver=v1.0.1.lab" /etc/uniVirt/ansible/playbooks/update_uniVirt.yml
ansible-playbook -i localhost, -e "ver=v1.0.0.lab" /etc/uniVirt/ansible/playbooks/uninstall_uniVirt.yml
- (待支持)
- Python>=3.9.7
- libvirt-python==5.9.0
- kubernetes==26.1.0
- others: altgraph==0.17.3 cachetools==4.2.4 certifi==2023.5.7 charset-normalizer==2.0.12 google-auth==2.21.0 grpcio==1.48.2 grpcio-tools==1.48.2 idna==3.4 importlib-metadata==4.8.3 oauthlib==3.2.2 prometheus-client==0.17.0 protobuf==3.19.6 psutil==5.9.5 pyasn1==0.5.0 pyasn1-modules==0.3.0 pyinstaller==4.10 pyinstaller-hooks-contrib==2022.0 python-dateutil==2.8.2 PyYAML==6.0 requests==2.27.1 requests-oauthlib==1.3.1 rsa==4.9 six==1.16.0 threadpool==1.3.2 typing_extensions==4.1.1 urllib3==1.26.16 watchdog==2.3.1 websocket-client==1.3.1 xmljson==0.2.1 xmltodict==0.13.0 zipp==3.6.0
* ----core ## 核心模块,通过Kubernetes CRD方式实现了虚拟机生命周期管理
* ┝--libvirtwatcher ## 这个服务是DaemonSet virt-tool的一部分,监听libivrt-python中汇报的KVM虚拟机事件,包括虚拟机创建、删除、添加网卡等等。
* ┝--plugins ## 这个文件夹包含可编译的python3执行文件,实现了KVM虚拟机管理功能。
* ┝--utils ## 这个文件夹包含这个工程用到的工具方法。
* ┕-constants.py ## 核心参数配置文件。
* ┝--virtctl ## 这个服务是DaemonSet virt-tool的一部分,实现了k8s监听器watcher.py,命令转换器convertor.py,异步调用器executor.py,以及常规命令调用和RPC调用两种调用策略defaultPolicy.py和rpcPolicy.py。
* ┝--virtlet ## 这个服务是DaemonSet virt-tool的一部分,host_reporter.py负责统计当前KVM虚拟机占用资源情况,向K8s周期性推送KVM虚拟机资源用量;os_event_handler.py负责监听处理系统事件,包括存储文件状态变化。
* ┕--virtmonitor ## 这个服务是DaemonSet virt-tool的一部分,负责监听虚拟机的实时资源用量,包括CPU、内存、磁盘IO、网络IO,并将结果汇报给Prometheus。
* ----docker ## 容器镜像的build目录
* ┝--base ## `uniVirt`的基础运行环境Dockerfile。
* ┝--libvirtwatcher ## libvirtwatcher服务的Dockerfile。
* ┝--virtctl ## virtctl服务的Dockerfile。
* ┝--virtlet ## virtlet服务的Dockerfile。
* ┕--virtmonitor ## virtmonitor服务的Dockerfile。
* ----scripts ## 脚本。
* ┝--ansible ## Ansible安装脚本。
* ┝--examples ## Json示例,按照步骤在Kubernetes集群中创建一个虚拟机,用`kubectl apply -f`命令执行。
* ┝--plugins ## Yaml示例,用于部署 Prometheus, node-exporter 和 grafana。
* ┝--shells ## Shell脚本,用于发布版本。
* ┝--specs ## SPEC文件,用于生成 RPM 包。
* ┕--yamls ## Yaml示例,用于安装/卸载 DamonSet `virt-tool` 以及 CRD.
* ----docs ## 相关文档
* ----ovnctl ## 针对 KVM 虚拟机的 Open Virtial Network (OVN) 网络管理
* ┝--configs
* ┝--olds
* ┝--spec
* ┕--src
* ----sdsctl ## 通过 Rook 实现 KVM 虚拟机的磁盘、磁盘镜像、磁盘快照等管理。
* ┝--cmd
* ┝--docs
* ┝--ftp
* ┝--grpcservice
* ┝--pipe
* ┝--pkg
* ┝--rook
* ┕--test
- CRD —— 资源类型 —— 所属模块
virtualmachines —— 虚拟机 —— core/plugins/virshplus.py
virtualmachinedisks —— 虚拟机磁盘 —— sdsctl/cmd/sdsctl/main.go
virtualmachinediskimages —— 虚拟机磁盘镜像 —— sdsctl/cmd/sdsctl/main.go
virtualmachinedisksnapshots —— 虚拟机磁盘快照 —— sdsctl/cmd/sdsctl/main.go
virtualmachinepools —— 虚拟机存储池 —— sdsctl/cmd/sdsctl/main.go
virtualmachinenetworks —— 虚拟机网络 —— ovnctl/src/kubeovn-adm