跳转到主要内容

Molecule有助于Ansible角色的开发和测试

项目描述

PyPI Package https://github.com/jseguillon/molecule-kubevirt/workflows/tox/badge.svg Python Black Code Style Repository License

Molecule KubeVirt插件旨在允许使用KubeVirt容器来提供测试资源。

支持的平台

支持与任何作为 cloud-config 兼容镜像(也称为“云镜像”)分发的操作系统。

使用方法

要使用此插件,您需要在您的 molecule.yml 文件中设置 driverplatform 变量。

driver:
  name: kubevirt
platforms:
  - name: instance
    image: quay.io/kubevirt/fedora-cloud-container-disk-demo

安装

驱动程序

此驱动程序支持 Ansible 2、3 和 4。

# Ansible >2
python3 -m pip install molecule-kubevirt

# Ansible 2
python3 -m pip install molecule-kubevirt 'openshift<0.12.0' 'kubernetes<12.0'

KubeVirt 安装

请按照 KubeVirt 的指南进行安装,适用于 kindminikube云提供商

SSH 访问

默认情况下,驱动程序通过 VirtualMachineInstance Pod ip 连接到 ssh,而 molecule 需要能够直接通过 Pod ip ssh。

  • 如果使用 kind 运行本地 Kubernetes

IP=$(docker container inspect kind-control-plane --format '{{ .NetworkSettings.Networks.kind.IPAddress }}')
sudo ip route add 10.244.0.0/16 via $IP # Linux
# sudo route -n add 10.244.0.0/16 $IP # MacOSX
  • 如果使用 minikube 运行本地 Kubernetes

sudo ip route add 172.17.0.0/16 via $(minikube ip)
# sudo route -n add 172.17.0.0/16 $(minikube ip) # MacOSX
  • 如果在目标 Kubernetes 集群内运行 molecule,路由将通过 CNI 确保连接。

驱动程序可以为 SSH 访问创建 Kubernetes 服务。当前支持的服务是 ClusterIP 和 NodePort。

NodePort

可以设置 NodePort。可以定义静态 nodePort,也可以设置端口的宿主目标。

ssh_service:
  type: NodePort
  # optional static port
  nodePort: 32569
  # host where nodePort can be reached
  nodePort_host: localhost

ClusterIP

默认 SSH 服务是 ClusterIP,可以设置静态 clusterIP。

ssh_service:
  type: ClusterIP
  clusterIP: 10.96.102.231

Molecule 需要能够通过 ClusterIP ip ssh。

  • 如果使用 Kind 运行本地 Kubernetes

IP=$(docker container inspect kind-control-plane   --format '{{ .NetworkSettings.Networks.kind.IPAddress }}')
sudo ip route add 10.96.0.0/12 via $IP # Linux
# sudo route -n add 10.96.0.0/12 $IP # MacOSX
  • 如果使用 Minikube 运行本地 Kubernetes,目前还没有已知解决方案。

  • 如果在目标 Kubernetes 集群内运行 molecule,路由将通过 CNI 确保连接。

虚拟机自定义

如果没有在平台定义中提供,则会创建一些默认值。

  • 如果没有在 domain.devices.interfaces 中定义带有 name: default 的接口,则会创建一个带有 brige: {}bus: virtio 的默认接口。

  • 如果没有在 domain.devices.disks 中定义带有 name: boot 的磁盘,则会创建一个带有 bus: virtio 的默认磁盘。

  • 如果没有在 networks 中定义带有 name: default 的网络,则会创建一个带有 pod: {}model: virtio 的默认网络。

  • 如果没有在 volumes 中定义带有 name: boot 的卷,则会创建一个默认的卷,作为

    • 一个 containerDisk

    • 分别设置了 imagepathimagePullPolicy 为平台 imageimage_pathimage_pull_policy

  • 如果 user_data 中定义了 cloud-config,则会将其与默认设置合并,为 'molecule' 用户设置 ssh 公钥。

自定义示例

此示例配置演示了如何

  • 使用 Kubevirt 的 CDI 替代 image,使用 dataVolumeTemplates 并覆盖默认的 boot 卷。

  • 设置自定义资源注解

  • 并添加第二个接口/网络

  • 添加第二个磁盘/卷

  • 使用 cloud-config 格式化和挂载额外的磁盘

---
dependency:
  name: galaxy
driver:
  name: kubevirt
platforms:
  - name: instance
    # annotate for calico static ip
    annotations:
      cni.projectcalico.org/ipAddrs: "[\"10.244.25.25\"]"
    # use data volume facility in place of using 'image:'
    dataVolumeTemplates:
      - metadata:
          name: disk-dv
        spec:
          pvc:
            accessModes:
            - ReadWriteOnce
            resources:
              requests:
                storage: 10Gi
          preallocation: true
          source:
            http:
              url: https://download.fedoraproject.org/pub/fedora/linux/releases/35/Cloud/x86_64/images/Fedora-Cloud-Base-35-1.2.x86_64.raw.xz
    domain:
      resources:
        limits:
          cpu: "1"
          memory: 3Gi
        requests:
          cpu: 200m
          memory: 1Gi
      devices:
        interfaces:
          # add a second device interface
          - bridge: {}
            name: multus
            model: virtio
            ports:
              - port: 22
        disks:
          # add a second device disk
          - name: emptydisk
            disk:
              bus: virtio
    volumes:
        # override default 'boot' volume with cdi data volume template source
      - name: boot
        dataVolume:
          name: disk-dv
      # add a second volume, must be same name as defined in device
      - name: emptydisk
        emptyDisk:
          capacity: 2Gi
    networks:
      # add a second network for added device interface
      - name: multus
        multus:
          # use a NetworkAttachement
          networkName: macvlan-conf
    # cloud-config format and mount additional disk
    user_data:
      # format additional disk
      fs_setup:
        - label: data_disk
          filesystem: 'ext4'
          device: /dev/vdb
          overwrite: true
      # mount additional disk
      mounts:
        - [ /dev/vdb, /var/lib/software, "auto", "defaults,nofail", "0", "0" ]

请参阅源代码中的 molecule/tests/molecule.yml 以获取完整示例。

在 Kubernetes 集群内部运行

您可以使用运行 tox 和/或 molecule 的容器来运行此驱动程序。请参阅以下内容作为基础镜像:

参与其中

许可协议

MIT 许可证的保护。

该标志受Creative Commons NoDerivatives 4.0许可许可。

如果您有其他用途,请联系我们。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

molecule-kubevirt-0.1.0.tar.gz (30.3 kB 查看散列)

上传时间

构建分发

molecule_kubevirt-0.1.0-py3-none-any.whl (19.0 kB 查看散列)

上传时间 Python 3

支持者