kubevirt.kubevirt-modules
Ansible KubeVirt 模块
Ansible KubeVirt 模块使以下 Kubernetes 集群对象类型的管理自动化:
- 虚拟机(包括 VM 模板和 VM 预设),
- VM 副本集,
- 持久卷声明(包括 容器化数据导入器 功能)。
自 Ansible 2.8 发布以来,这些模块、库存插件和相关单元测试已成为 上游 Ansible git 仓库 的一部分,而这个仓库仅包含集成测试和示例 Playbook。
目录
快速入门
有关快速介绍,请查看以下 kubevirt.io 的博客文章:
需求
- Ansible >= 2.8
pip3 --user install ansible
- openshift-restclient-python >= 0.8.2
pip3 --user install openshift
源代码
测试
这里有两个测试目标:
- 模块测试在 tests/playbooks
- 角色测试在 tests/roles
要运行给定目标的完整测试,请使用相关的 all.yml
Playbook。
自动测试
单元测试
上游 Ansible 仓库 包含涵盖 KubeVirt 模块的单元测试。
集成测试
模块测试(tests/playbooks/all.yml)是在实际集群上运行的,部署有 KubeVirt 和 CDI,运行环境包括:
- TravisCI(ubuntu 虚拟机,仅支持 minikube;KubeVirt 虚拟机没有 KVM 加速)
- oVirt Jenkins(运行任何 kubevirtci 支持的集群的物理服务器)
模块测试使用:
- 最近发布的 Ansible(使用
pip install ansible
安装的版本) - Ansible 稳定分支
- Ansible 开发分支
角色测试(tests/roles/all.yml)仅在 TravisCI 上使用开发分支运行。
为尽早发现回归,Travis 每 24 小时将在新克隆的 ansible.git 上运行所有测试,并在测试失败时通过邮件通知 KubeVirt 模块开发者。
手动测试
将此仓库克隆到可以
oc login
到集群的机器上:$ git clone https://github.com/kubevirt/ansible-kubevirt-modules.git $ cd ./ansible-kubevirt-modules
(可选)配置虚拟环境以隔离依赖项:
$ python3 -m venv env $ source env/bin/activate
安装依赖项:
$ pip install openshift
如果您跳过了上一步,可能需要在命令前加上
sudo
。以多种方式安装 Ansible:
运行测试:
$ ansible-playbook tests/playbooks/all.yml
注意:Playbook 示例包含 cloud-init 配置,以便能够访问创建的 VMI。
使用 SSH 可以如下操作:
$ kubectl get all NAME READY STATUS RESTARTS AGE po/virt-launcher-bbecker-jw5kk 1/1 Running 0 22m $ kubectl expose pod virt-launcher-bbecker-jw5kk --port=27017 --target-port=22 --name=vmservice $ kubectl get svc vmservice NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vmservice ClusterIP 172.30.133.9 <none> 27017/TCP 19m $ ssh -i tests/test_rsa -p 27017 [email protected]
VM 启动后,SSH 可能需要一些时间才能使用。
使用
virtctl
:$ virtctl console <vmi_name>
或
$ virtctl vnc <vmi_name>
使用用户名
kubevirt
和密码kubevirt
。
(可选)退出虚拟环境并删除它:
$ deactivate $ rm -rf env/
关于 kubevirt_cdi_upload
模块的说明
要通过 kubevirt_cdi_upload
模块从本地上传映像,您的系统需要能够连接到 cdi 上传代理 Pod。这可以通过以下两种方式实现:
从
cdi
命名空间暴露cdi-uploadproxy
服务,或使用
kubectl port-forward
在 Kubernetes API 服务器上设置临时端口转发:kubectl port-forward -n cdi service/cdi-uploadproxy 9443:443
关于 k8s_facts
模块的说明
以下命令将收集现有 VM 的信息(如果有的话),并根据 KubeVirt VM 规范 打印 JSON 文档:
$ ansible-playbook examples/playbooks/k8s_facts_vm.yml
关于 KubeVirt 库存插件的说明
库存插件允许用户指向数据源,以编译 Ansible 用于目标任务的主机库存,可以通过 -i /path/to/file
和/或 -i 'host1, host2'
命令行参数或其他配置源来实现。
启用 KubeVirt 库存插件
要启用 KubeVirt 插件,请在 tests/ansible.cfg
文件中添加以下部分:
[inventory]
enable_plugins = kubevirt
配置 KubeVirt 库存插件
在 tests/playbooks/plugin/kubevirt.yaml
中定义插件配置,如下所示:
plugin: kubevirt
connections:
- namespaces:
- default
interface_name: default
在此示例中,KubeVirt 插件将列出 default
命名空间中的所有 VMI,并使用 default
接口名称。
使用 KubeVirt 库存插件
要在 Playbook 中使用该插件,运行:
$ ansible-playbook -i kubevirt.yaml <playbook>
注意:KubeVirt 库存插件设计用于与 Multus 一起使用。它只能用于连接到桥接并在状态字段中显示 IP 地址的 VMI。对于由 Kubernetes 服务暴露的 VMI,请使用 k8s Ansible 模块。