ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

KubeVirt 的 kind-dra 开发环境:在 Kind 集群中预置 DRA 支持的快速上手指南

KubeVirt 的 kind-dra 开发环境:在 Kind 集群中预置 DRA 支持的快速上手指南 云原生【免费下载链接】kubevirtKubernetes Virtualization API and runtime in order to define and manage virtual machines.项目地址https://gitcode.com/gh_mirrors/ku/kubevirt点击查看免费下载导读本文讲解 KubeVirt 开源仓库中kubevirtci子系统提供的kind-dra集群 Provider一套预置了 Kubernetes 动态资源分配Dynamic Resource AllocationDRA能力、基于 kind 与 pkg/dra 源码 理解其工作原理。一、kind-dra 是什么kind-dra是 KubeVirt 的 kubevirtci 集群方案族中的一个 Provider位于仓库的kubevirtci/cluster-up/cluster/kind-dra/目录。它的目标正如目录内 README.md 开篇所述K8S with support for dra-example-driver in a Kind cluster它基于 kind 在本地拉起一个预部署的 Kubernetes 集群并额外开启 DRA 相关特性feature gate 与resource.k8s.io/v1beta1runtime-config。其核心特点包括完全临时ephemeral集群在每次重启时都会重建适合作为 CI/本地开发的隔离环境本地镜像仓库KubeVirt 容器镜像在本地机器上构建后被推送/拉取自暴露在localhost:5000的 registry按需选型通过环境变量KUBEVIRT_PROVIDER选择具体的 kind 版本 Provider当前目录对应kind-1.34系列。该目录内除 README 外还包含实际驱动集群创建的五个文件provider.shProvider 入口脚本、kind.yamlkind 集群配置含 DRA feature gate、versionkind 二进制版本、imagekindest/node 节点镜像、conformance.jsonsonobuoy 配置。二、启动集群2.1 前置条件与基本命令启动 kind-dra 集群需要以 root 身份执行README 明确要求 The following needs to be executed as root。同时KUBEVIRT_PROVIDER的取值需要参照目录名来确定 kind 版本当前目录对应kind-1.34export KUBEVIRT_PROVIDERkind-1.34 make cluster-up执行后provider.sh中的up()函数会被调用它先把kind.yaml复制到 kubevirtci 的 config 目录追加端口映射若有KIND_PORT_MAPPING然后进入通用的kind_up流程见 common.sh下载对应版本的 kind 二进制、准备并回显最终 kind 配置、创建集群、等待节点与 DNS 就绪、启动本地 registry、为各节点配置 insecure registry 与网络等。2.2 访问集群集群启动后使用 kubevirtci 自带的kubectl.sh即可访问无需额外安装 kubectl$ cluster-up/kubectl.sh get nodes NAME STATUS ROLES AGE kind-1.34-control-plane Ready master 6m14s从 provider.sh 可以看到默认集群名为kind-1.34-dra它同时决定了本地 registry 的宿主机端口映射默认集群名kind-1.34-dra→HOST_PORT5000即 README 中提到的localhost:5000使用其他自定义CLUSTER_NAME时 → 自动切换到备用端口5001避免多个集群共存时端口冲突。2.3 关闭集群make cluster-down该命令会销毁整个集群包括节点容器与本地 registry 容器。注意 README 的提示使用make cluster-down前请确保导出了正确的CLUSTER_NAME。从 common.sh 的 down() 可以看到销毁逻辑会先按集群名查找 kind 集群处理 worker 节点的 VF 网卡挂载若有再执行kind delete cluster并清理 registry 容器与生成的 kind.yaml。三、自定义 kind 版本与节点镜像如果你需要测试较新的 kind / Kubernetes 版本或使用自定义镜像可以在执行cluster-up前导出两个环境变量export KIND_NODE_IMAGEkindest/node:v1.19.1sha256:98cf5288864662e37115e362b23e4369c8c4a408f99cbc06e58ac30ddc721600 export KIND_VERSION0.9.0provider.sh中的set_kind_params()会优先采用这些显式设置否则回退到目录内version与image文件中的默认值function set_kind_params() { version$(cat ${KUBEVIRTCI_PATH}/cluster/$KUBEVIRT_PROVIDER/version) export KIND_VERSION${KIND_VERSION:-$version} image$(cat ${KUBEVIRTCI_PATH}/cluster/$KUBEVIRT_PROVIDER/image) export KIND_NODE_IMAGE${KIND_NODE_IMAGE:-$image} }当前仓库中 kind-dra 的默认值是kind 版本0.31.0见 version节点镜像kindest/node:v1.34.3sha256:08497ee19eace7b4b5348db5c6a1591d7752b164530a36f855cb0f2bdcbadd48见 image对应 Kubernetes 1.34.3这种方式允许开发者在把新 kind 版本正式合入官方清单之前先使用自定义镜像或不同 kind 版本进行验证。kind 各版本对应的节点镜像关系可在 kind 官方 release 中查询。四、DRA 特性在集群配置中的落地kind-dra 之所以能支持 DRA 相关开发与测试关键在 kind.yaml 中的几处配置它们共同构成了一个适配 KubeVirt DRA 测试的集群骨架kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 featureGates: DynamicResourceAllocation: true nodes: - role: control-plane kubeadmConfigPatches: - |- kind: JoinConfiguration nodeRegistration: kubeletExtraArgs: feature-gates: CPUManagertrue cpu-manager-policy: static kube-reserved: cpu500m system-reserved: cpu500m - |- kind: ClusterConfiguration apiServer: extraArgs: runtime-config: resource.k8s.io/v1beta1true scheduler: extraArgs: v: 1 controllerManager: extraArgs: v: 1 - |- kind: InitConfiguration nodeRegistration: kubeletExtraArgs: v: 1 extraMounts: - containerPath: /var/log/audit hostPath: /var/log/audit readOnly: true逐项解读这些配置在 DRA 测试中的意义featureGates.DynamicResourceAllocation: true在集群层面开启 DRA 特性门控让resource.k8s.ioAPI 组与相关控制器生效——这是 KubeVirt 使用 ResourceClaim 直通 GPU/主机设备的前提。kubelet 的CPUManagertruecpu-manager-policy: static开启 CPU 管理器静态策略并保留kube-reserved/system-reserved各 500m CPU。这与provider.sh中CONFIG_WORKER_CPU_MANAGERtrue的导出配合保证节点具备可预测的 CPU 分配能力是部分涉及 CPU 固定/拓扑的 DRA 与性能测试所需。API Server 的runtime-config: resource.k8s.io/v1beta1true显式启用resource.k8s.io/v1beta1的 runtime 配置确保该 API 版本可用。scheduler / controllerManager 的v: 1提高 kube-scheduler 与 controller-manager 的日志级别便于调试 DRA 调度与资源控制器行为。extraMounts挂载/var/log/audit只读挂载宿主机审计日志目录供审计/观测类测试使用。值得注意kind-dra 默认是单 control-plane 节点集群kind.yaml 未声明 worker 节点。若要扩容 worker可由common.sh的_add_workers()按KUBEVIRT_NUM_NODES动态追加且当CONFIG_WORKER_CPU_MANAGERtrue时kind-dra 的provider.sh正是如此设置worker 也会附带 CPU manager 静态策略补丁。五、DRA 在 KubeVirt 侧的用法示例kind-dra 集群主要为 KubeVirt 的 DRA 功能提供测试环境。KubeVirt 侧对 DRA 的使用集中在vmi.spec.resourceClaims与domain.devices.gpus/hostDevices的配合上仓库提供了可直接参考的示例 examples/vmi-dra-pgpu.yamlapiVersion: kubevirt.io/v1 kind: VirtualMachineInstance metadata: name: vmi-dra-pgpu spec: domain: devices: gpus: - claimName: pgpu-resource-claim name: example-gpu requestName: pgpu memory: guest: 1024M resourceClaims: - name: pgpu-resource-claim resourceClaimTemplateName: pgpu-resource-claim-tmpl volumes: - containerDisk: image: registry:5000/kubevirt/fedora-with-test-tooling-container-disk:devel name: containerdisk该示例演示了VMI 通过resourceClaims引用一个pgpu-resource-claim-tmpl模板创建的 ResourceClaimGPU 设备段通过claimNamerequestName从该 claim 中请求pgpu资源——容器镜像地址registry:5000/kubevirt/...正是对应 kind-dra 集群暴露的本地 registrylocalhost:5000与 README 描述一致。在实现层面KubeVirt 的 DRA 准入校验位于 pkg/dra/admitter/dra_admitter.go它强制约束了resourceClaims的合法性必须指定resourceClaimName或resourceClaimTemplateName之一且不能同时指定见validateResourceClaims第 145-157 行claim 名称必须是合法的 DNS 子域名第 159-164 行vmi.spec.resourceClaims必须覆盖domain.devices.gpus与domain.devices.hostDevices中使用的所有 claim第 101-109 行。因此在 kind-dra 集群上编写 DRA 相关 VMI 时务必让 GPU/hostDevices 中引用的claimName全部出现在resourceClaims列表中否则创建会被拒绝。六、与其他 kind Provider 的关系与选型kind-dra 并非 kubevirtci 唯一的 kind 类 Provider。在 kubevirtci/cluster-up/cluster/ 下还有kind/、kind-1.35/、kind-1.36/、kind-1.37/、kind-ovn/、kind-1.37-vgpu/等目录。它们共享 common.sh 中的通用逻辑kind 下载、集群创建、registry 配置、CNI 安装、节点标签修复等差异点主要在kind.yaml 的集群能力如 kind-dra 开启DynamicResourceAllocation特性门控与resource.k8s.io/v1beta1runtime-configkind-ovn 则侧重 OVN 网络默认版本version与image文件内容不同provider.sh 的额外配置如 kind-dra 强制CONFIG_WORKER_CPU_MANAGERtrue。选型建议当你的开发/测试目标涉及 DRA如 GPU 直通、ResourceClaim时优先选择KUBEVIRT_PROVIDERkind-1.34即 kind-dra若仅需普通网络场景或 OVN 场景则选择kind或kind-ovn系列。七、常见问题与注意事项必须以 root 执行README 明确要求 root 权限运行make cluster-up否则容器与网络操作可能失败。集群完全临时每次重启都会重建集群节点上未持久化的数据不会保留如需保留调试现场可关注common.sh中 kind 创建时使用的--retain参数与 CI 镜像代理配置configure_registry_proxy仅在 CI 环境生效。端口冲突处理默认集群占用宿主机5000端口registry多集群场景请使用自定义CLUSTER_NAMEprovider.sh会自动切换到5001。make cluster-down需要CLUSTER_NAME务必先导出与创建时一致的CLUSTER_NAME否则销毁逻辑可能定位不到目标集群。DRA 需要配套驱动kind-dra 仅提供开启 DRA 特性的集群骨架真正分配资源的dra-example-driver等设备驱动需按测试需要额外部署KubeVirt 侧只负责通过resourceClaims消费 ResourceClaim。总结kind-dra 是 KubeVirt kubevirtci 体系中为 DRA 功能量身定制的本地 kind 集群 Provider一条make cluster-up命令即可获得开启DynamicResourceAllocation特性门控、启用resource.k8s.io/v1beta1、并带本地镜像 registrylocalhost:5000的临时 Kubernetes 1.34 集群。配合KIND_NODE_IMAGE/KIND_VERSION环境变量可以灵活切换集群版本配合 examples/vmi-dra-pgpu.yaml 与 pkg/dra 的准入校验代码开发者可以在本地快速验证 KubeVirt 的 DRA 资源消费流程为后续 CI 与端到端测试铺平道路。赞分享云原生【免费下载链接】kubevirtKubernetes Virtualization API and runtime in order to define and manage virtual machines.项目地址https://gitcode.com/gh_mirrors/ku/kubevirt点击查看免费下载相关推荐如何快速搭建Kind Kubernetes集群Windows环境终极指南如何快速搭建Kind Kubernetes集群Windows环境终极指南 Kind是一个开源的Kubernetes发行版用于在本地和云端快速启动和运行Kub开发工具云原生容器编排使用 AWS CDK 在 EC2 上快速部署 Kubernetes Goat 实验环境Kind 集群方案使用 AWS CDK 在 EC2 上快速部署 Kubernetes Goat 实验环境Kind 集群方案 本指南讲解如何借助 AWS CDKCloud D云原生应用安全教程在 Kind 上快速部署 Elasticsearch 集群KnowStreaming 仓库内置 Helm Chart 实战指南在 Kind 上快速部署 Elasticsearch 集群KnowStreaming 仓库内置 Helm Chart 实战指南 本篇技术指南聚焦于 KnowS后端消息队列运维可观测性上一篇LinkSwift九大网盘直链下载解决方案全解析下一篇5步彻底告别预装浏览器EdgeRemover一键卸载解决方案完全指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表