首页/新闻资讯/正文详情

4.k8s集群通过csi对接ceph集群

发布时间:2026/11/13 8:51:08 来源:云帆数科 栏目:资讯中心
4.k8s集群通过csi对接ceph集群
一·、前言上篇介绍了客户端挂载使用rbd块设备。本文介绍生产上ceph如何通过csi对接k8s集群通过rbd提供k8s的动态存储pv。温馨提示ceph19.2.6版本为了修复安全漏洞秘钥升级了需要7以上的内核。大坑替大家踩过坑了建议生产使用19.2.3以下版本推荐阅读[CVE] [URGENT] Squid v19.2.6 and Tentacle v20.2.4 released - ceph-announce - lists.ceph.io二、环境说明环境K8sv1.23.17Ubuntu22.04docker runtime3 节点CephSquid 19.2.3cephadm 部署目标Ceph RBD CSI 动态供给 PVC官方 ceph-csirbd 驱动三、官网推荐阅读https://docs.ceph.com/en/reef/rbd/rbd-kubernetes/​​四、步骤一、ceph基础环境准备1.ceph创建一个存储池。[rootceph141 ~]# ceph osd pool create ceph-block-pool 128声明[rootceph141 ~]# ceph osd pool ls detail​2,创建csi专用用户单独权限不要用admin[rootceph141 ~]# ceph auth get-or-create client.k8s-csi mon allow r osd allow rwx poolceph-block-pool mgr allow r #19.2.6版本的密钥长度 [client.k8s-csi] key AgA7puFqTA/2ACAAbXYBsZOGD9uzBVxMUl74RNrGrNQLLsfJkbQmScqWow #19.2.3版本的密钥长度 [client.k8s-csi] key AQAiaNqAOxhGxAALKdiiO3/ThJ3W5QpY5Wo8g ​ [rootceph141 ~]#拿到 key后面要放到k8s secret[rootceph141 ~]# ceph auth get-key client.k8s-csi AgA7puFqTA/2ACAAbXYBsZOGD9uzBVxMUl74RNrGrNQLLsfJkbQmScqWow[rootceph141 ~]#获取 ceph fsid集群唯一ID必用[rootceph141 ~]# ceph fsid 0fcfb026-d3ab-11f1-8474-31750d21178a [rootceph141 ~]#二、k8s基础环境准备1.所有的k8s节点都需要安装ceph-common客户端工具rbd依赖。(只安装ceph-common工具不需要拷贝ceph的admin用户的证书)节点上 krbd 内核模块、rbd 命令csi-node 插件需要它做映射 rbd 设备。可以参考我之前博客1.安装cephadm2.安装ceph-common小编有点累了下面的不用代码框了验证所有节点已经安装ceph-common[rootmaster231 ~]# rbd --version ceph version 19.2.7 (9ec952b9f9668e9fa97e29a4c2b51e951674df2a) squid (stable) [rootmaster231 ~]# [rootworker232 ~]# rbd --version ceph version 19.2.7 (9ec952b9f9668e9fa97e29a4c2b51e951674df2a) squid (stable) [rootworker232 ~]# [rootworker233 ~]# rbd --version ceph version 19.2.7 (9ec952b9f9668e9fa97e29a4c2b51e951674df2a) squid (stable) [rootworker233 ~]#2.检查网络连通性k8s的所有节点和ceph的mon6789端口[rootmaster231 ~]# telnet 10.0.0.141 6789 [rootmaster231 ~]# telnet 10.0.0.142 6789 [rootmaster231 ~]# telnet 10.0.0.143 67893.所有k8s节点加载rbd内核模块[rootmaster231 ~]# lsmod | grep rbd [rootmaster231 ~]# modprobe rbd [rootmaster231 ~]# lsmod | grep rbd rbd 114688 0 libceph 454656 1 rbd [rootmaster231 ~]# [rootworker232 ~]# modprobe rbd [rootworker232 ~]# lsmod | grep rbd rbd 114688 0 libceph 454656 1 rbd [rootworker232 ~]# [rootworker233 ~]# lsmod | grep rbd [rootworker233 ~]# modprobe rbd [rootworker233 ~]# modprobe rbd [rootworker233 ~]# lsmod | grep rbd rbd 114688 0 libceph 454656 1 rbd [rootworker233 ~]#三、部署csi一、基础环境的yaml文件部署1.ns.yaml[rootmaster231 ceph-csi]# cat ns.yaml apiVersion: v1 kind: Namespace metadata: name: ceph-csi-rbd ​ [rootmaster231 ceph-csi]#部署验证[rootmaster231 ceph-csi]# kubectl apply -f ns.yaml namespace/ceph-csi-rbd created [rootmaster231 ceph-csi]# kubectl get ns ceph-csi-rbd NAME STATUS AGE ceph-csi-rbd Active 17s ​2.csi-rbd-secret.yaml[rootmaster231 ceph-csi]# cat csi-secret.yaml apiVersion: v1 kind: Secret metadata: name: ceph-rbd-secret namespace: ceph-csi-rbd stringData: userID: k8s-csi userKey: AgA7puFqTA/2ACAAbXYBsZOGD9uzBVxMUl74RNrGrNQLLsfJkbQmScqWow ​ [rootmaster231 ceph-csi]#部署验证[rootmaster231 ceph-csi]# kubectl apply -f csi-secret.yaml secret/ceph-rbd-secret created [rootmaster231 ceph-csi]# kubec3.csi-driver-rbd.yaml[rootmaster231 ceph-csi]# cat csi-driver-rbd.yaml apiVersion: storage.k8s.io/v1 kind: CSIDriver metadata: name: rbd.csi.ceph.com spec: attachRequired: true podInfoOnMount: true fsGroupPolicy: File ​部署验证[rootmaster231 ceph-csi]# kubectl apply -f csi-driver-rbd.yaml csidriver.storage.k8s.io/rbd.csi.ceph.com created [rootmaster231 ceph-csi]#4.storageclass-rbd.yaml[rootmaster231 ceph-csi]# cat storageclass-rbd.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ceph-rbd-sc provisioner: rbd.csi.ceph.com parameters: clusterID: 5137c1d2-c390-11f1-a8ef-874362e1ed81 pool: ceph-block-pool imageFeatures: layering csi.storage.k8s.io/provisioner-secret-name: ceph-rbd-secret csi.storage.k8s.io/provisioner-secret-namespace: ceph-csi-rbd csi.storage.k8s.io/node-stage-secret-name: ceph-rbd-secret csi.storage.k8s.io/node-stage-secret-namespace: ceph-csi-rbd csi.storage.k8s.io/controller-expand-secret-name: ceph-rbd-secret csi.storage.k8s.io/controller-expand-secret-namespace: ceph-csi-rbd csi.storage.k8s.io/fstype: ext4 reclaimPolicy: Delete allowVolumeExpansion: true ​⚠️ reclaimPolicy: Delete 测试环境用上线生产改成 Retain防止删 PVC 直接丢数据温馨提示StorageClass 里的reclaimPolicy控制当你在 k8s 里删除 PVC 的时候Ceph 里对应的 RBD 镜像怎么处理reclaimPolicy: Delete删除 PVC → csi 插件自动去 ceph 集群里删除这个 rbd 镜像✅ 适合测试环境删 PVC 就清干净资源不会残留垃圾镜像 ❌ 风险极高一旦误删 PVC数据直接没了无法恢复reclaimPolicy: Retain删除 PVC →不会删除 Ceph 里的 RBD 镜像镜像保留在 ceph-block-pool 里 此时 PV 会变成Released状态不会自动回收 ✅ 生产环境用防止误删 PVC 造成数据丢失 后续如果你确认数据不要了需要手动删除 PV到 ceph 集群手动rbd rm ceph-block-pool/镜像名部署验证[rootmaster231 ceph-csi]# kubectl apply -f storageclass-rbd.yaml storageclass.storage.k8s.io/ceph-rbd-sc created ​二、拉取官方 rbac、controller、node yamlv3.11.0yaml文件1.从github官网获取yaml文件需要的yaml文件为页面里现在的文件名之前的旧名字作用csi-provisioner-rbac.yamlcsi-rbd-provisioner-rbac.yamlcontrollerprovisioner的 RBAC 权限csi-nodeplugin-rbac.yamlcsi-rbd-node-rbac.yamlnode 插件的 RBAC 权限csi-rbdplugin-provisioner.yamlcsi-rbd-controller.yamlCSI ControllerDeployment负责创建 RBD 镜像csi-rbdplugin.yamlcsi-rbd-node.yamlCSI NodeDaemonSet每个节点挂载卸载 RBDcsidriver.yamlcsi-driver-rbd.yamlCSIDriver 资源定义GitHub · Change is constant. GitHub keeps you ahead. · GitHub · GitHub​ceph-csi​tag-》v3.11.0​deploy-rbd/kubernets​​页面里现在的文件名之前的旧名字作用csi-provisioner-rbac.yamlcsi-rbd-provisioner-rbac.yamlcontrollerprovisioner的 RBAC 权限csi-nodeplugin-rbac.yamlcsi-rbd-node-rbac.yamlnode 插件的 RBAC 权限csi-rbdplugin-provisioner.yamlcsi-rbd-controller.yamlCSI ControllerDeployment负责创建 RBD 镜像csi-rbdplugin.yamlcsi-rbd-node.yamlCSI NodeDaemonSet每个节点挂载卸载 RBDcsidriver.yamlcsi-driver-rbd.yamlCSIDriver 资源定义csi-config-map.yaml新增这个版本不需要我们不用它下载文件方式一、浏览器下载文件然后传到服务器​方式二wget下载2.更改yaml文件的namespace替换名称空间为自己需要的名称空间我的这里ceph-csi用的是ceph-csi-rbd这个名称空间。[rootmaster231 ceph-csi]# sed -i s/namespace: default/namespace: ceph-csi-rbd/g csi-provisioner-rbac.yaml csi-nodeplugin-rbac.yaml csi-rbdplugin-provisioner.yaml csi-rbdplugin.yaml拉镜像2.部署前准备拉镜像2.1拉镜像部署涉及到这些镜像所有的worker节点都需要拉镜像需要的镜像国内加速地址quay.io/cephcsi/cephcsi:v3.11.0quay.m.daocloud.io/cephcsi/cephcsi:v3.11.0registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.10.0k8s.m.daocloud.io/sig-storage/csi-node-driver-registrar:v2.10.0registry.k8s.io/sig-storage/csi-provisioner:v4.0.0k8s.m.daocloud.io/sig-storage/csi-provisioner:v4.0.0registry.k8s.io/sig-storage/csi-attacher:v4.5.0k8s.m.daocloud.io/sig-storage/csi-attacher:v4.5.0registry.k8s.io/sig-storage/csi-resizer:v1.10.0k8s.m.daocloud.io/sig-storage/csi-resizer:v1.10.0registry.k8s.io/sig-storage/csi-snapshotter:v7.0.0k8s.m.daocloud.io/sig-storage/csi-snapshotter:v7.0.02.2打tag通过加速源拉下来的镜像需要打下tag和yaml里面的image一样所有镜像都需要打tag以下面这个为例[rootworker232 ~]# docker tag k8s.m.daocloud.io/sig-storage/csi-provisioner:v4.0.0 registry.k8s.io/sig-storage/csi-provisioner:v4.0.0 [rootworker232 ~]# docker image rmi k8s.m.daocloud.io/sig-storage/csi-provisioner:v4.0.0 Untagged: k8s.m.daocloud.io/sig-storage/csi-provisioner:v4.0.0 Untagged: k8s.m.daocloud.io/sig-storage/csi-provisionersha256:de79c8bbc271622eb94d2ee8689f189ea7c1cb6adac260a421980fe5eed667083.部署部署RBACkubectl apply -f csi-provisioner-rbac.yaml kubectl apply -f csi-nodeplugin-rbac.yaml部署CSIDRIVER(上面已经部署了这一步可以省略)部署controller和node插件kubectl apply -f csi-rbdplugin-provisioner.yaml kubectl apply -f csi-rbdplugin.yaml4.检查pods[rootmaster231 ceph-csi]# kubectl -n ceph-csi-rbd get pods NAME READY STATUS RESTARTS AGE csi-rbdplugin-grrjc 0/3 ContainerCreating 0 20h csi-rbdplugin-kmnpr 0/3 ContainerCreating 0 20h csi-rbdplugin-provisioner-7dbd5d6c48-78m64 0/7 ContainerCreating 0 20h csi-rbdplugin-provisioner-7dbd5d6c48-8xhx4 0/7 ContainerCreating 0 20h csi-rbdplugin-provisioner-7dbd5d6c48-rdqz7 0/7 Pending 0 20h [rootmaster231 ceph-csi]#发现pods都没有起来​describe提示cm挂载失败​查看发现没有cm资源ceph-configceph-csi-configceph-csi-encryption-kms-config[rootmaster231 ceph-csi]# kubectl -n ceph-csi-rbd get cm NAME DATA AGE kube-root-ca.crt 1 24h [rootmaster231 ceph-csi]#原因是这 3 个 ConfigMap 必须单独部署官方原版 yamlcsi-rbdplugin.yaml、provisioner.yaml已经硬编码挂载了这 3 个 CM。[rootmaster231 ceph-csi]# kubectl -n ceph-csi-rbd get pods csi-rbdplugin-grrjc -o yaml \ | egrep -e ceph-csi-config -e ceph-csi-encryption-kms-config -e ceph-csi - mountPath: /etc/ceph-csi-config/ name: ceph-csi-config - mountPath: /etc/ceph-csi-encryption-kms-config/ name: ceph-csi-encryption-kms-config name: ceph-csi-config name: ceph-csi-config name: ceph-csi-encryption-kms-config name: ceph-csi-encryption-kms-config [rootmaster231 ceph-csi]#​configmap5.部署cm推荐阅读https://docs.ceph.com/en/reef/rbd/rbd-kubernetes/​5.1三个cm的作用1ceph-config必须 挂载路径/etc/ceph/ 作用给 CSI 容器提供 ceph.conf 配置文件包含 mon 地址、cephx 认证配置容器内部执行 rbd 命令读取此配置连接 Ceph 集群Ceph。 内容ceph.conf 空 keyringkeyring 必须存在留空即可Ceph。 2ceph-csi-config核心、必须 挂载路径/etc/ceph-csi-config/ 作用Ceph-CSI 全局集群清单JSON 格式定义多个 Ceph 集群的 clusterID(fsid) 和 monitors 列表CSI 插件启动后读取这个文件识别要对接哪些 Ceph 集群Ceph。 关键字段clusterIDceph fsid、monitors[mon地址列表]Ceph。 3ceph-csi-encryption-kms-config可选不加密也要建空 CM 挂载路径/etc/ceph-csi-encryption-kms-config/ 作用存放块加密 KMS 密钥服务配置你不用 RBD 加密也要创建一个空的 ConfigMap否则 pod 挂载会失败5.2部署cmceph-config.yaml官方原版apiVersion: v1 kind: ConfigMap metadata: name: ceph-config namespace: ceph-csi-rbd data: ceph.conf: | [global] auth_cluster_required cephx auth_service_required cephx auth_client_required cephx mon_host 10.0.0.141:6789,10.0.0.142:6789,10.0.0.143:6789 keyring: | ​ceph-csi-config.yaml官方原版apiVersion: v1 kind: ConfigMap metadata: name: ceph-csi-config namespace: ceph-csi-rbd data: config.json: |- [ { clusterID: 你的ceph fsid, monitors: [ 10.0.0.141:6789, 10.0.0.142:6789, 10.0.0.143:6789 ] } ] ​获取 fsid 命令ceph fsidceph-csi-encryption-kms-config.yaml空配置不加密必建apiVersion: v1 kind: ConfigMap metadata: name: ceph-csi-encryption-kms-config namespace: ceph-csi-rbd data: config.json: {} ​验证[rootmaster231 ceph-csi]# kubectl -n ceph-csi-rbd get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES csi-rbdplugin-provisioner-669fdc67db-plrhq 7/7 Running 0 11s 10.100.1.208 worker232 none none csi-rbdplugin-provisioner-669fdc67db-zldmx 7/7 Running 0 93s 10.100.2.127 worker233 none none csi-rbdplugin-tfkbv 3/3 Running 0 36m 10.0.0.232 worker232 none none csi-rbdplugin-xqkmt 3/3 Running 0 35m 10.0.0.233 worker233 none none [rootmaster231 ceph-csi]#​五、部署pvc验证ceph和k8s的联动性1.创建pvc.yaml[rootmaster231 ceph-csi]# cat pvc-test.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: rbd-test-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: ceph-rbd-sc ​ [rootmaster231 ceph-csi]#应用[rootmaster231 ceph-csi]# kubectl apply -f pvc-test.yaml persistentvolumeclaim/rbd-test-pvc created ​2.验证[rootmaster231 ceph-csi]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE rbd-test-pvc Bound pvc-893efc06-fe65-4930-ac50-bba89da4ccf8 1Gi RWO ceph-rbd-sc 5s [rootmaster231 ceph-csi]​ceph验证下存储池的rbd[rootceph141 ~]# rbd ls -l ceph-block-pool NAME SIZE PARENT FMT PROT LOCK csi-vol-61f4416d-25d3-4215-b297-323a1b5c087d 1 GiB 2 [rootceph141 ~]#​本文作者吴玉桦转载请标注原文链接。下章介绍19.2.6版本的大坑之处以及集群版本如何回退问题。

相关推荐

广州市起重机修理资质办理专业公司推荐,特种设备资质代办服务商口碑力荐
广州市起重机修理资质办理专业公司推荐,特种设备资质代办服务商口碑力荐

广州市起重机修理资质办理专业公司推荐,特种设备资质代办服务商口碑力荐企业在广州从事起重机修理业务,必须依法取得相应的特种设备许可资质。这道门槛既是市场准入的通行证,也是企业合规经营的底线。然而,资质办理流程繁琐、体系… · 2026/11/5 6:59:18

广东不错的LED显控系统工厂实力与用户口碑:摩西尔电子合作实力参考
广东不错的LED显控系统工厂实力与用户口碑:摩西尔电子合作实力参考

深圳市摩西尔电子有限公司是一家专注于LED显控系统研发、生产与服务的国家高新技术企业,深耕LED显示屏控制系统领域十余年。作为业内认可的专精特新小巨人企业,摩西尔以让每一块LED屏都有可靠的控制大脑为使命,为娱乐、文旅、创意显示、商业广… · 2026/11/13 5:26:51

苍溪县电工证考试太难?工地太忙根本没时间复习考试,良心建议来了
苍溪县电工证考试太难?工地太忙根本没时间复习考试,良心建议来了

苍溪县电工证考试太难?工地太忙根本没时间复习考试,良心建议来了 工地太忙根本没时间复习考试,这是很多一线电工的真实写照。特别是苍溪县的电工证考试,内容繁杂、实操要求高,很多人在实际操作中摸爬滚打,却对考试内容一知半解。如果你也面临这样的困境… · 2026/11/13 8:50:09

延安电工证报名流程怎么走?官方报名入口你知道吗?
延安电工证报名流程怎么走?官方报名入口你知道吗?

延安电工证报名流程怎么走?官方报名入口你知道吗? 证书过期了不知道怎么复审延期?你不是一个人!延安的很多电工朋友都遇到过这种情况,特别是在高压电工证或低压电工证过期后,不知道该去哪里补办或者复审,结果耽误了工作机会,甚至面临罚款或停工。今天… · 2026/11/13 8:50:09

延安电工证报名流程:学历不高也能考,全国通用真香
延安电工证报名流程:学历不高也能考,全国通用真香

延安电工证报名流程:学历不高也能考,全国通用真香 你是不是也担心自己学历不高,考不了电工证?别急, 延安电工证报名流程 其实没有想象中那么难,尤其是现在政策越来越人性化,像你这样没高学历的朋友也能顺利拿到证,而且这个证书是 全国通用… · 2026/11/13 8:50:09

证书过期了不知道怎么复审延期?真实经历告诉你国网电工证初级怎么走
证书过期了不知道怎么复审延期?真实经历告诉你国网电工证初级怎么走

证书过期了不知道怎么复审延期?真实经历告诉你国网电工证初级怎么走 我上周在河南新乡跑工地的时候,碰上一个老电工,他拿着本该在2023年到期的国网电工证初级,愁得直拍大腿:“这证要是不能复审,我这半年白干了。”这种焦虑其实很普遍,尤其是在特种… · 2026/11/13 8:50:09

电工证换证多少分 良心建议:学历不高怕报不上名也能顺利换证
电工证换证多少分 良心建议:学历不高怕报不上名也能顺利换证

电工证换证多少分 良心建议:学历不高怕报不上名也能顺利换证 你是不是也担心自己学历不高,报名电工证换证的时候会被拒?其实, 换证考试并不看学历,关键看你的实操能力 。只要你是持证电工,有实际工作经验,换证考试并不难, 电工证换证多少分… · 2026/11/13 8:50:09

起重类的特种工怎么考?千万别踩坑,证书过期了不知道怎么复审延期
起重类的特种工怎么考?千万别踩坑,证书过期了不知道怎么复审延期

起重类的特种工怎么考?千万别踩坑,证书过期了不知道怎么复审延期 你是不是也遇到过这种情况:证书快到期了,不知道怎么复审,结果一拖再拖,最后发现连工作都干不了了?别急,这篇文章就是给你讲清楚起重类的特种工怎么考、怎么复审、怎么避开那些坑,尤其… · 2026/11/13 8:49:09

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/12 14:09:01

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/13 5:40:45

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/12 23:27:43

维修电公用考电工证吗 在哪考最靠谱
维修电公用考电工证吗 在哪考最靠谱

维修电公用考电工证吗 在哪考最靠谱 工地太忙根本没时间复习考试,你是维修电工,天天在项目上跑,连抽个空背个题都难。那问题来了—— 维修电公用考电工证吗 ?答案是: 必须考 。尤其是在当前施工行业,没有电工证,连进场都可能被拦下。而且,… · 2026/11/13 0:00:08

电工证是不是可以登高?含金量和证书范围你必须知道的事
电工证是不是可以登高?含金量和证书范围你必须知道的事

电工证是不是可以登高?含金量和证书范围你必须知道的事 证书过期了不知道怎么复审延期,这事儿很多人遇到过,尤其是像你这样在郑州金水区做劳务班组负责人,手里握着几十个工人的证书,稍微一疏忽,就可能影响工程进度和公司信誉。特别是电工证是不是可以登… · 2026/11/13 0:00:08

鸡西电工证哪家下证快官方报名入口怎么找
鸡西电工证哪家下证快官方报名入口怎么找

鸡西电工证哪家下证快官方报名入口怎么找 你是不是也担心 学历不高怕报不上名 ?别急,今天我就来跟你说说, 鸡西电工证哪家下证快 ,还有 官方报名入口 到底怎么找,别让那些“代办”“代考”耽误了你的机会。… · 2026/11/13 0:00:08

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:12:21

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:11:51

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/12 21:15:21

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码