通过Python客户端在KubeVirt中创建虚拟机是否可行?
KubeVirt是Kubernetes的一个扩展,它让Kubernetes能够管理虚拟机。我已经部署了一个KubeVirt集群。我想用Python客户端来操作KubeVirt,以管理虚拟机。这可行吗?
我使用的是Kubernetes的Python客户端。但是它似乎不支持虚拟机这种资源类型。我的集群可以通过kubectl apply - f testvm.yaml来创建虚拟机。
Python代码:
from kubernetes import client, config, utils
config.load_kube_config('config')
k8s_client = client.ApiClient()
file = 'yamlfile\\testvm.yaml'
utils.create_from_yaml(k8s_client, file, verbose=True)
错误信息:
AttributeError: module 'kubernetes.client' has no attribute 'KubevirtIoV1Api'
testvm.yaml文件内容:
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: testvm
spec:
running: false
template:
metadata:
labels:
kubevirt.io/size: small
kubevirt.io/domain: testvm
spec:
domain:
devices:
disks:
- name: containerdisk
disk:
bus: virtio
- name: cloudinitdisk
disk:
bus: virtio
interfaces:
- name: default
masquerade: {}
resources:
requests:
memory: 64M
networks:
- name: default
pod: {}
volumes:
- name: containerdisk
containerDisk:
image: quay.io/kubevirt/cirros-container-disk-demo
- name: cloudinitdisk
cloudInitNoCloud:
userDataBase64: SGkuXG4=
---
apiVersion: v1
kind: Service
metadata:
name: vm-ssh
spec:
type: NodePort
ports:
- protocol: TCP
port: 24
targetPort: 22
name: test
selector:
kubevirt.io/domain: testvm
kubevirt.io/size: small
1 个回答
0
你想创建一些使用 kubevirt.io/v1
这个接口的资源。这个接口不是 Kubernetes 的核心接口,而是由 kubevirt 提供的 自定义资源定义,这意味着它不被 Python 的 Kubernetes 客户端的静态部分支持。
不过别担心,这正是 动态客户端 的用武之地!你可以在 这里 找到一些使用动态客户端的示例。
你的代码最终看起来会像这样:
import yaml
from kubernetes import config, dynamic
from kubernetes.client import api_client
# Creating a dynamic client
client = dynamic.DynamicClient(
api_client.ApiClient(configuration=config.load_kube_config())
)
# fetching the configmap api
api = client.resources.get(api_version="kubevirt.io/v1", kind="VirtualMachine")
path = 'testvm.yaml'
with open(path) as fd:
resource = yaml.safe_load(fd)
api.create(body=resource)