kubevirt.kubevirt-modules

Ansible KubeVirt 模块

Ansible KubeVirt 模块使以下 Kubernetes 集群对象类型的管理自动化:

  • 虚拟机(包括 VM 模板和 VM 预设),
  • VM 副本集,
  • 持久卷声明(包括 容器化数据导入器 功能)。

自 Ansible 2.8 发布以来,这些模块、库存插件和相关单元测试已成为 上游 Ansible git 仓库 的一部分,而这个仓库仅包含集成测试和示例 Playbook。

目录

快速入门

有关快速介绍,请查看以下 kubevirt.io 的博客文章:

需求

源代码

测试

这里有两个测试目标:

要运行给定目标的完整测试,请使用相关的 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 模块开发者。

手动测试

  1. 将此仓库克隆到可以 oc login 到集群的机器上:

    $ git clone https://github.com/kubevirt/ansible-kubevirt-modules.git
    $ cd ./ansible-kubevirt-modules
    
  2. (可选)配置虚拟环境以隔离依赖项:

    $ python3 -m venv env
    $ source env/bin/activate
    
  3. 安装依赖项:

    $ pip install openshift
    

    如果您跳过了上一步,可能需要在命令前加上 sudo

  4. 以多种方式安装 Ansible:

    • 安装 最新发布版本

      $ pip install ansible
      

      这里可能需要 sudo

    • 从开发分支构建 RPM:

      $ git clone https://github.com/ansible/ansible.git
      $ cd ./ansible
      $ make rpm
      $ sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm
      
    • 本地检查 PR

  5. 运行测试:

    $ ansible-playbook tests/playbooks/all.yml
    

    注意:Playbook 示例包含 cloud-init 配置,以便能够访问创建的 VMI。

    1. 使用 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 可能需要一些时间才能使用。

    2. 使用 virtctl

      $ virtctl console <vmi_name>
      

      $ virtctl vnc <vmi_name>
      

      使用用户名 kubevirt 和密码 kubevirt

  6. (可选)退出虚拟环境并删除它:

    $ deactivate
    $ rm -rf env/
    

关于 kubevirt_cdi_upload 模块的说明

要通过 kubevirt_cdi_upload 模块从本地上传映像,您的系统需要能够连接到 cdi 上传代理 Pod。这可以通过以下两种方式实现:

  1. cdi 命名空间暴露 cdi-uploadproxy 服务,或

  2. 使用 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 模块

安装
ansible-galaxy install kubevirt.kubevirt-modules
许可证
apache-2.0
下载
86
拥有者
Managing virtualization workloads on Kubernetes