
云原生【免费下载链接】kubevirtKubernetes Virtualization API and runtime in order to define and manage virtual machines.项目地址https://gitcode.com/gh_mirrors/ku/kubevirt点击查看免费下载导读本文围绕 KubeVirt 仓库中 kubevirtci/cluster-up/cluster/kind-1.36/README.md 这一 Provider 说明文档系统讲解如何在本地通过 kind 快速拉起一套完全临时ephemeral的 Kubernetes 1.36 集群用于 KubeVirt 开发、测试与 CI。读完本文你将掌握kind-1.36Provider 的完整启动/销毁流程、本地镜像仓库localhost:5000的工作原理、自定义 kind 版本与节点镜像的方法以及该 Provider 在源码层面的实现细节可直接用于日常的 KubeVirt e2e 测试与本地调试。一、kind-1.36 Provider 是什么kind-1.36是 kubevirtci 提供的一类集群 Provider它使用 kind 在本地以容器方式运行一个 Kubernetes 1.36 集群供 KubeVirt 开发和功能测试使用。它的核心特征有完全临时ephemeral集群在每次启动时重建不留持久状态保证测试环境干净、可复现本地构建、本地推送KubeVirt 容器镜像在本机构建后被推送到一个暴露在localhost:5000的本地 registry零外部依赖集群节点、kubelet、kube-apiserver 等全部封装在 kind 节点镜像内无需预装 Kubernetes 组件。从仓库目录结构看kind-1.36位于 kubevirtci/cluster-up/cluster/kind-1.36/同目录下还有k8s-1.34/1.35/1.36/1.37、kind-1.35、kind-1.37、kind-dra、kind-ovn等 Provider本文只聚焦kind-1.36。该目录包含文件作用provider.shProvider 启动入口定义集群名、端口、kind 版本与节点镜像参数version默认 kind 二进制版本image默认 kind 节点镜像Kubernetes 1.36conformance.jsonSonobuoy 一致性测试配置README.md本文所依据的官方说明版本矩阵目录名即 Kubernetes 版本标识。当前kind-1.36使用的默认参数见 version 与 imagekind 二进制版本0.32.0kind 节点镜像kindest/node:v1.36.1sha256:3489c7674813ba5d8b1a9977baea8a6e553784dab7b84759d1014dbd78f7ebd5即底层 Kubernetes 为v1.36.1。节点镜像通过 digest 锁定保证可复现性。二、集群启动make cluster-up按官方文档启动kind-1.36集群需要以 root 身份执行并先导出 Provider 名称export KUBEVIRT_PROVIDERkind-1.36 make cluster-upmake cluster-up实际调用 hack/cluster-up.sh后者会进入 kubevirtci/cluster-up/up.sh。up.sh的核心逻辑见源码为定位KUBEVIRTCI_PATH即kubevirtci/cluster-up/目录sourcehack/common.sh加载公共环境变量与函数source${KUBEVIRTCI_CLUSTER_PATH}/$KUBEVIRT_PROVIDER/provider.sh即 kubevirtci/cluster-up/cluster/kind-1.36/provider.sh调用up函数完成集群创建若设置了GLOBAL_KUBECONFIG将生成的.kubeconfig拷贝到全局位置若KUBEVIRT_SINGLE_STACKtrue校验集群为单栈 IPv6。provider.sh 做了什么provider.sh 是kind-1.36的启动核心逐行解析如下DEFAULT_CLUSTER_NAMEkind-1.36 DEFAULT_HOST_PORT5000 ALTERNATE_HOST_PORT5001 export CLUSTER_NAME${CLUSTER_NAME:-$DEFAULT_CLUSTER_NAME}默认集群名kind-1.36默认将本地 registry 暴露在宿主机5000端口若自定义了CLUSTER_NAME则自动改用5001端口避免多个 kind 集群同时存在时端口冲突。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} }set_kind_params读取version与image两个文件作为默认值同时允许通过环境变量KIND_VERSION、KIND_NODE_IMAGE覆盖详见第五节。function up() { cp $KIND_MANIFESTS_DIR/kind.yaml ${KUBEVIRTCI_CONFIG_PATH}/$KUBEVIRT_PROVIDER/kind.yaml _add_kubeadm_cpu_manager_config_patch _add_extra_mounts _add_extra_portmapping export CONFIG_WORKER_CPU_MANAGERtrue kind_up configure_registry_proxy echo $KUBEVIRT_PROVIDER cluster $CLUSTER_NAME is ready }up做了四件事把基础 kind 配置 kind.yaml 拷贝到 provider 专属配置目录追加 kubeadm CPU Manager patch将 kubelet 的cpu-manager-policy设为static并预留kube-reserved/system-reserved各cpu500m为 KubeVirt 的 CPU pinning 测试做准备追加审计日志挂载/var/log/audit只读调用kind/common.sh中的kind_up真正创建集群。up结束后还会执行configure_registry_proxy——仅在 CI 环境CItrue下生效为集群节点配置 Prow 的镜像代理。kind/common.sh底层创建流程provider.sh在文件末尾 source 了 kubevirtci/cluster-up/cluster/kind/common.sh。该公共脚本封装了所有 kind 相关操作主要流程setup_kind函数下载 kind 二进制若本地缓存的 kind 版本与KIND_VERSION不一致则从 kind 官方 release 下载对应平台的二进制kind-linux-${ARCH}支持 amd64 与 arm64生成最终 kind.yaml动态追加 worker 节点、kubeadm config patch、etcd 内存目录、Topology Manager 策略与 IP family 配置创建集群kind create cluster --retain失败时自动删除并重试一次从 control-plane 节点提取 kubectl二进制到本地安装 CNI 插件cni-plugins v0.8.5等待就绪等待 control-plane 节点 Ready、kube-dnsPod Ready、所有kube-system容器 Ready启动本地 registry容器quay.io/kubevirtci/library-registry:2.7.1映射HOST_PORT:5000为每个节点配置 registry写入/etc/containerd/certs.d/registry:5000/hosts.tomlskip_verifytrue允许 push/pull并把 registry 容器 IP 写入节点/etc/hosts网络配置在节点内modprobe br_netfilter并开启 bridge-nf-call 相关 sysctl修正节点标签移除 control-plane 的NoSchedule污点并打上kubevirt.io/schedulabletrue为 worker 节点补打 worker 角色标签——这是让 KubeVirt 虚机能在多节点 kind 集群上调度的前提可选安装 CDI若KUBEVIRT_DEPLOY_CDItrue自动安装 Containerized Data Importer替换 StorageClass删除 kind 默认的standard存储类安装 local-storage-class.yamllocalWaitForFirstConsumer由rancher.io/local-path提供作为默认存储类。验证集群启动完成后通过 kubevirtci 提供的 kubectl 封装访问集群$ cluster-up/kubectl.sh get nodes NAME STATUS ROLES AGE kind-1.36-control-plane Ready master 6m14scluster-up/kubectl.sh会自动使用该 provider 生成在${KUBEVIRTCI_CONFIG_PATH}/kind-1.36/.kubeconfig下的 kubeconfig。此外还有cluster-up/ssh.sh进入节点、cluster-up/kubectl.sh执行 kubectl等辅助脚本可用。三、集群销毁make cluster-downmake cluster-downmake cluster-down调用 kubevirtci/cluster-up/down.sh最终执行kind/common.sh中的down函数若指定名字的集群不存在则直接返回对 worker 节点做 VF 网卡优雅解绑用于 GPU/VFIO 场景kind delete cluster --name${CLUSTER_NAME}删除整个集群删除本地 registry 容器${CRI_BIN} rm -f $REGISTRY_NAME删除生成的kind.yaml。该命令会彻底销毁整个集群含 registry 容器不留任何残留。注意若使用了自定义CLUSTER_NAME启动集群执行make cluster-down前必须导出相同的CLUSTER_NAME否则删除的是默认集群。四、本地镜像仓库与镜像流转kind-1.36的关键设计之一是把 KubeVirt 镜像推送到本地 registry再让集群节点从该 registry 拉取宿主机侧registry 容器监听localhost:5000即HOST_PORT:5000映射节点侧kind 节点与 registry 容器位于同一个kind网络节点通过registry:5000主机名访问并在/etc/hosts中解析到 registry 容器 IPKubeVirt 部署侧prepare_config生成config-provider-kind-1.36.sh其中docker_prefix指向localhost:${HOST_PORT}/kubevirtmanifest_docker_prefix指向registry:5000/kubevirt——本地构建的镜像以localhost:5000/kubevirt/...前缀推入节点则从registry:5000/kubevirt/...拉取。由于 containerd 配置了skip_verifytrue的 insecure registry整个推送/拉取链路无需 TLS 证书非常适合本地快速迭代。五、自定义 kind 版本与节点镜像官方文档明确给出了自定义方式在运行cluster-up前导出KIND_NODE_IMAGE与KIND_VERSION。文档示例基于 k8s-1.19.1 的 kind 0.9.0export KIND_NODE_IMAGEkindest/node:v1.19.1sha256:98cf5288864662e37115e362b23e4369c8c4a408f99cbc06e58ac30ddc721600 export KIND_VERSION0.9.0这两个变量在provider.sh的set_kind_params中被读取环境变量优先未设置时才回退到version/image文件中的默认值。这允许开发者在官方版本正式收录之前先行测试自定义镜像或不同的 kind 版本例如验证 KubeVirt 与某个新 Kubernetes 小版本的兼容性。兼容性提示kind 二进制与其节点镜像存在版本对应关系如 kind 0.9.0 对应 k8s-1.19.1自定义时应选择相互匹配的组合详见 kind 官方 release 说明同时注意 kind 可执行文件与节点镜像版本之间的兼容性问题这一限制也记录在 kind Provider 公共文档 中。除版本外common.sh还支持以下与kind-1.36相关的环境变量环境变量作用默认值CLUSTER_NAME集群名非默认名时 registry 端口自动切到 5001kind-1.36KIND_NODE_IMAGEkind 节点镜像kindest/node:v1.36.1sha256:...KIND_VERSIONkind 二进制版本0.32.0KUBEVIRT_NUM_NODES节点总数1 时追加 worker1IPFAMILYIP 协议族ipv4/ipv6/dual空默认 IPv4KIND_PORT_MAPPING额外端口映射格式cluster_port:host_port仅允许一组空KUBEVIRT_WITH_KIND_ETCD_IN_MEMORY是否将 etcd 数据目录挂到内存tmpfstrueCONFIG_TOPOLOGY_MANAGER_POLICYkubelet Topology Manager 策略空KUBEVIRT_DEPLOY_CDI是否自动部署 CDIfalseCI是否为 CI 环境影响 registry proxy 配置空六、一致性测试支持kind-1.36目录还附带 conformance.json是 Sonobuoy 的配置Sonobuoy 版本v0.56.9worker 镜像sonobuoy/sonobuoy:v0.56.9聚合器权限clusterAdmin安全上下文nonroot插件搜索路径./plugins.d、/etc/sonobuoy/plugins.d、~/sonobuoy/plugins.dPod 日志采集限定在kube-system命名空间。该配置配合 check-cluster-up.shRUN_KUBEVIRT_CONFORMANCEtrue时可一键部署最新的 KubeVirt 夜间构建并执行一致性测试验证 kind-1.36 集群满足 KubeVirt 的部署与运行要求。七、总结与使用建议kind-1.36Provider 为 KubeVirt 开发者提供了一条轻量、可复现的本地验证路径日常开发export KUBEVIRT_PROVIDERkind-1.36 make cluster-up随后用cluster-up/kubectl.sh操作集群配合make cluster-deploy部署 KubeVirt 后即可跑功能测试版本验证通过KIND_NODE_IMAGE/KIND_VERSION快速验证自定义 Kubernetes 版本的兼容性CI 流水线kind-1.36与 check-cluster-up.sh 结合可在提交前完成集群健康检查与一致性测试。需要留意的前提与限制启动命令需要 root 权限集群完全临时重启即重建不适合需要持久状态的场景kind 二进制与节点镜像存在版本配对关系自定义组合前应查阅 kind 官方 release 信息执行cluster-down时需保证CLUSTER_NAME与启动时一致。赞分享云原生【免费下载链接】kubevirtKubernetes Virtualization API and runtime in order to define and manage virtual machines.项目地址https://gitcode.com/gh_mirrors/ku/kubevirt点击查看免费下载相关推荐KubeVirt 使用 kind-ovn Provider 搭建 OVN-Kubernetes 临时集群实战指南KubeVirt 使用 kind ovn Provider 搭建 OVN Kubernetes 临时集群实战指南 本文以仓库中 kubevirtci/clust云原生使用 External Provider 在已有 Kubernetes 集群上部署与测试 KubeVirt使用 External Provider 在已有 Kubernetes 集群上部署与测试 KubeVirt 本篇指南聚焦 KubeVirt 仓库中 kubevi云原生KubeVirt 基于 Kind 的 mdevvGPU测试集群README_VGPU 实战指南KubeVirt 基于 Kind 的 mdevvGPU测试集群README_VGPU 实战指南 本篇技术指南围绕 KubeVirt 仓库中 kubevir云原生上一篇Mac Mouse Fix 完全使用指南安装、macOS 兼容性、实用技巧与常见问题深度解析下一篇OpenTelemetry Collector Contrib机器学习监控模型性能指标采集方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考