news 2026/9/24 19:54:32

Kylin V10 ARM64 部署 K8S 1.26.15 集群:外部 etcd 与 containerd 实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kylin V10 ARM64 部署 K8S 1.26.15 集群:外部 etcd 与 containerd 实战

简介:这份资源合集面向需要在国产化信创环境中落地容器编排的运维与云原生工程师,聚焦Kylin V10操作系统搭配ARM架构服务器、采用外部etcd与containerd运行时部署Kubernetes 1.26.15一主多从集群的完整场景。包内共41个文件,以gz离线镜像包、rpm系统依赖、sh加载脚本、yaml与yml编排清单为主,另含kubeadm、kubectl、kubelet等二进制组件及kubelet.service、10-kubeadm.conf等配置项,压缩包约645.74MB,覆盖从运行时、网络插件到控制面组件的离线安装素材。资源同时提供etcd、Calico、CoreDNS等关键组件的镜像与部署文件,便于在无外网环境下完成集群初始化与节点加入。目前已有130人学习下载,适合希望掌握ARM平台K8S部署流程、排查离线安装依赖问题的技术人员参考实践。

1. 麒麟V10 ARM集群落地:为什么这套组合值得你花一个下午

如果你手里正好有几台飞腾、鲲鹏或者倚天芯片的服务器,系统装的是银河麒麟V10 SP2/SP3 ARM64,现在要把它们组成一个能跑生产业务的 Kubernetes 集群,那你大概率已经发现:网上绝大多数 K8S 部署教程都是 x86 + CentOS 的,照着敲到一半就会卡在镜像架构不匹配、etcd 起不来、containerd 配置对不上这些地方。这套方案要解决的就是这个问题——在 Kylin V10 ARM64 上,用 containerd 作为容器运行时,把 etcd 独立部署在集群外部,搭一套一主多从的 K8S 1.26.15 集群。

为什么是 1.26.15 这个版本?因为它是 1.26 系列里比较靠后的补丁版本,修了不少 CVE,同时 containerd 1.6.x 和它配合最稳。为什么 etcd 要外置?因为 ARM 服务器通常内存和磁盘 IO 都比较金贵,把 etcd 和 master 节点混部,etcd 的 WAL 刷盘会和 kube-apiserver 抢 IO,集群一忙就出玄学问题。外置 etcd 之后,master 节点只跑控制面组件,etcd 单独用 SSD 或者高性能云盘扛,稳定性提升非常明显。

这套方案适合谁?适合那些已经在 ARM 环境里踩过坑、不想再被镜像架构问题反复折磨的运维和平台工程师。如果你还没装过 Kylin V10,建议先把系统装好、网络调通再往下看。下面从环境准备开始,一步步把集群拉起来。

2. Kylin V10 ARM64 环境准备:内核参数、时间同步与 containerd 安装

2.1 系统基线检查与内核模块加载

在动手装任何组件之前,先把所有节点的系统基线对齐。Kylin V10 默认内核是 4.19 系列,对 K8S 1.26 来说够用,但有几个模块必须确认已加载。登录每台机器,执行:

# 确认系统架构和内核版本 uname -m && uname -r # 输出应为 aarch64 和 4.19.x # 检查 br_netfilter 和 overlay 模块 lsmod | grep -E 'br_netfilter|overlay' # 如果没有输出,手动加载 modprobe br_netfilter modprobe overlay # 写入开机自动加载 cat > /etc/modules-load.d/k8s.conf <<EOF br_netfilter overlay EOF

br_netfilter是让 iptables 能过滤桥接流量的关键模块,K8S 的 Service 和 NetworkPolicy 都依赖它。overlay是 containerd 默认的存储驱动,不加载的话容器起不来。这两条如果漏了,后面 kube-proxy 会报错,Pod 网络不通,排查起来很费时间。

接下来配置内核参数:

cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 net.ipv4.tcp_tw_reuse = 1 vm.swappiness = 0 EOF sysctl --system

net.ipv4.ip_forward = 1是必须的,否则跨节点 Pod 通信直接断。vm.swappiness = 0是为了让 K8S 的 kubelet 不因为 swap 触发驱逐,虽然 1.26 已经支持 swap 了,但生产环境还是建议关掉,避免内存压力下出现不可预期的调度行为。

2.2 时间同步与主机名解析

ARM 服务器如果时间不同步,etcd 集群选主会出问题,kube-apiserver 的证书校验也会失败。Kylin V10 默认可能没开 chronyd,手动确认:

# 所有节点执行 systemctl enable --now chronyd chronyc sources -v # 确认有一个 ^* 标记的同步源 # 设置主机名,按角色区分 hostnamectl set-hostname k8s-master01 # 从节点依次设为 k8s-node01、k8s-node02... # 所有节点写入 hosts cat >> /etc/hosts <<EOF 192.168.1.10 k8s-master01 192.168.1.11 k8s-node01 192.168.1.12 k8s-node02 192.168.1.20 etcd01 EOF

主机名不要用下划线,K8S 的 DNS 解析对主机名格式有要求。etcd 节点单独列出来,因为后面证书签发要用到。

2.3 安装 containerd 并配置 ARM64 镜像加速

Kylin V10 的软件源里可能有 containerd,但版本通常偏旧。建议从 containerd 官方 release 下载 ARM64 二进制包。截至 1.26.15 配套的 containerd 版本,1.6.31 是比较稳的选择:

# 下载 ARM64 二进制包 wget https://github.com/containerd/containerd/releases/download/v1.6.31/containerd-1.6.31-linux-arm64.tar.gz # 解压到 /usr/local tar Cxzvf /usr/local containerd-1.6.31-linux-arm64.tar.gz # 下载 systemd 单元文件 wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -O /etc/systemd/system/containerd.service systemctl daemon-reload systemctl enable --now containerd systemctl status containerd

如果服务器不能直连外网,就在能上网的机器上下好,用 scp 传过去。ARM64 的包和 x86 的不通用,别下错了。

containerd 默认配置需要生成并调整:

mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml # 修改关键配置 sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml sed -i 's|sandbox_image = ".*"|sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"|' /etc/containerd/config.toml systemctl restart containerd

SystemdCgroup = true必须改,否则 kubelet 和 containerd 的 cgroup 驱动不一致,Pod 会反复重启。sandbox_image换成国内能拉到的 pause 镜像,ARM64 架构的 pause 镜像在阿里云仓库里有。

注意:Kylin V10 自带的 iptables 可能是 nft 后端,containerd 和 kube-proxy 在 nft 模式下有兼容性问题。执行iptables -V确认,如果是 nft,切换成 legacy:update-alternatives --set iptables /usr/sbin/iptables-legacy

3. 外部 etcd 集群部署:证书签发、静态 Pod 与 ARM64 二进制选型

3.1 etcd 证书体系与 cfssl 签发流程

外部 etcd 意味着它不跑在 K8S 集群里,而是独立进程。etcd 之间用 TLS 通信,客户端(kube-apiserver)也要用证书认证。先在一台机器上生成 CA 和证书。

安装 cfssl:

wget https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssl_1.6.4_linux_arm64 wget https://github.com/cloudflare/cfssl/releases/download/v1.6.4/cfssljson_1.6.4_linux_arm64 chmod +x cfssl_1.6.4_linux_arm64 cfssljson_1.6.4_linux_arm64 mv cfssl_1.6.4_linux_arm64 /usr/local/bin/cfssl mv cfssljson_1.6.4_linux_arm64 /usr/local/bin/cfssljson

生成 CA 配置:

{ "signing": { "default": { "expiry": "87600h" }, "profiles": { "etcd": { "expiry": "87600h", "usages": ["signing", "key encipherment", "server auth", "client auth"] } } } }

保存为ca-config.json,然后生成 CA 证书:

cfssl gencert -initca ca-csr.json | cfssljson -bare ca

ca-csr.json里 CN 写etcd-ca,O 写etcd。生成的ca.pemca-key.pem后面所有节点都要用。

接着签发 etcd 服务端证书。etcd-csr.json的 hosts 字段要包含所有 etcd 节点 IP 和 127.0.0.1:

{ "CN": "etcd", "hosts": [ "127.0.0.1", "192.168.1.20", "192.168.1.21", "192.168.1.22" ], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "L": "Beijing", "O": "etcd", "OU": "etcd" } ] }

执行:

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd etcd-csr.json | cfssljson -bare etcd

得到etcd.pemetcd-key.pem。把ca.pemetcd.pemetcd-key.pem分发到所有 etcd 节点的/etc/etcd/ssl/目录。

3.2 etcd 二进制部署与 systemd 管理

ARM64 的 etcd 二进制从官方 release 下载:

wget https://github.com/etcd-io/etcd/releases/download/v3.5.15/etcd-v3.5.15-linux-arm64.tar.gz tar xzvf etcd-v3.5.15-linux-arm64.tar.gz cp etcd-v3.5.15-linux-arm64/etcd /usr/local/bin/ cp etcd-v3.5.15-linux-arm64/etcdctl /usr/local/bin/

创建 systemd 单元文件/etc/systemd/system/etcd.service

[Unit] Description=etcd After=network.target [Service] Type=notify ExecStart=/usr/local/bin/etcd \ --name etcd01 \ --data-dir /var/lib/etcd \ --listen-client-urls https://192.168.1.20:2379 \ --advertise-client-urls https://192.168.1.20:2379 \ --listen-peer-urls https://192.168.1.20:2380 \ --initial-advertise-peer-urls https://192.168.1.20:2380 \ --initial-cluster etcd01=https://192.168.1.20:2380,etcd02=https://192.168.1.21:2380,etcd03=https://192.168.1.22:2380 \ --initial-cluster-token etcd-cluster \ --initial-cluster-state new \ --cert-file=/etc/etcd/ssl/etcd.pem \ --key-file=/etc/etcd/ssl/etcd-key.pem \ --peer-cert-file=/etc/etcd/ssl/etcd.pem \ --peer-key-file=/etc/etcd/ssl/etcd-key.pem \ --trusted-ca-file=/etc/etcd/ssl/ca.pem \ --peer-trusted-ca-file=/etc/etcd/ssl/ca.pem Restart=always RestartSec=5 [Install] WantedBy=multi-user.target

每个节点的--name、IP 相关参数按实际改。--initial-cluster-state new只在第一次启动时用,后续重启改成existing,否则会尝试重新加入集群导致数据混乱。

启动并验证:

systemctl daemon-reload systemctl enable --now etcd systemctl status etcd # 验证集群健康 ETCDCTL_API=3 etcdctl \ --endpoints=https://192.168.1.20:2379 \ --cacert=/etc/etcd/ssl/ca.pem \ --cert=/etc/etcd/ssl/etcd.pem \ --key=/etc/etcd/ssl/etcd-key.pem \ endpoint health

三个节点都返回healthy才算成功。如果某个节点报context deadline exceeded,先检查防火墙 2379/2380 端口,再检查证书里的 IP 是否匹配。

3.3 etcd 性能调优与 ARM 平台注意事项

ARM 服务器的磁盘 IO 和 x86 有差异,etcd 的--heartbeat-interval--election-timeout可以适当放宽。默认 100ms/1000ms 在 ARM 上偶尔会触发不必要的选主,改成 250ms/2500ms 更稳:

--heartbeat-interval=250 --election-timeout=2500

另外,etcd 的--quota-backend-bytes默认 2GB,生产环境建议调到 8GB,避免频繁 compaction:

--quota-backend-bytes=8589934592 --auto-compaction-retention=1

--auto-compaction-retention=1表示保留 1 小时的历史版本,配合定时 defrag 可以控制 db 文件大小。ARM 平台的内存带宽通常比同代 x86 低,etcd 的--max-request-bytes保持默认 1.5MB 即可,调大反而增加 OOM 风险。

4. K8S 1.26.15 控制面与工作节点部署:kubeadm 配置与 ARM64 镜像仓库

4.1 kubeadm、kubelet、kubectl 安装与版本锁定

Kylin V10 的 yum 源里可能没有 K8S 1.26.15 的包,需要添加 Kubernetes 官方源。但 ARM64 的源地址和 x86 不同:

cat > /etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.26/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.26/rpm/repodata/repomd.xml.key exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni EOF yum install -y kubelet-1.26.15 kubeadm-1.26.15 kubectl-1.26.15 --disableexcludes=kubernetes systemctl enable kubelet

--disableexcludes=kubernetes是为了绕过 exclude 限制,否则 yum 会找不到包。安装完先别启动 kubelet,等 kubeadm init 之后再启。

确认版本:

kubeadm version kubelet --version

三个组件版本必须一致,否则 kubeadm init 会报版本偏差警告。

4.2 kubeadm 配置文件与外部 etcd 对接

kubeadm 支持通过配置文件指定外部 etcd。创建kubeadm-config.yaml

apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration kubernetesVersion: v1.26.15 controlPlaneEndpoint: "192.168.1.10:6443" etcd: external: endpoints: - https://192.168.1.20:2379 - https://192.168.1.21:2379 - https://192.168.1.22:2379 caFile: /etc/kubernetes/pki/etcd/ca.crt certFile: /etc/kubernetes/pki/etcd/client.crt keyFile: /etc/kubernetes/pki/etcd/client.key networking: serviceSubnet: "10.96.0.0/12" podSubnet: "10.244.0.0/16" dnsDomain: "cluster.local" --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs

controlPlaneEndpoint如果只有一台 master,就写 master 的 IP。etcd.external里的证书路径是 kube-apiserver 访问 etcd 用的客户端证书,需要提前把 etcd 的 CA 和客户端证书放到 master 节点的/etc/kubernetes/pki/etcd/下。

生成客户端证书:

# 在 etcd 证书目录下执行 cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd etcd-client-csr.json | cfssljson -bare client

etcd-client-csr.json的 CN 写kube-apiserver-etcd-client,O 写etcd。生成的client.pemclient-key.pem重命名为client.crtclient.key,连同ca.pem一起放到 master 节点的/etc/kubernetes/pki/etcd/

4.3 初始化 master 节点与网络插件选型

执行初始化:

kubeadm init --config=kubeadm-config.yaml --upload-certs --v=5

--upload-certs会把证书加密上传到 kubeadm-certs Secret,方便后续加 master 节点。--v=5输出详细日志,卡住的时候能看出在哪一步。

初始化成功后,按提示配置 kubectl:

mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config

然后安装网络插件。ARM64 环境推荐 Calico 或者 Flannel。Flannel 更轻量,ARM64 镜像齐全:

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

如果拉不到镜像,把 yml 里的image字段换成registry.aliyuncs.com/google_containers/flannel:v0.24.0之类的国内地址。ARM64 的 flannel 镜像在阿里云仓库有。

检查节点状态:

kubectl get nodes kubectl get pods -n kube-flannel

master 节点默认有污点,不会被调度业务 Pod。如果只是测试,可以去掉:

kubectl taint nodes k8s-master01 node-role.kubernetes.io/control-plane:NoSchedule-

生产环境别去,控制面节点只跑系统组件。

4.4 工作节点加入集群与 containerd 配置对齐

工作节点上同样要装 containerd、kubelet、kubeadm,版本和 master 一致。然后执行 master 初始化时输出的kubeadm join命令:

kubeadm join 192.168.1.10:6443 --token abcdef.1234567890abcdef \ --discovery-token-ca-cert-hash sha256:xxxxx

如果 token 过期了,在 master 上重新生成:

kubeadm token create --print-join-command

加入后回到 master 查看:

kubectl get nodes -o wide

所有节点状态为Ready才算成功。如果某个节点一直是NotReady,先看 kubelet 日志:

journalctl -u kubelet -f

常见原因是 containerd 的SystemdCgroup没开,或者 pause 镜像拉不下来。ARM64 的 pause 镜像一定要确认是arm64架构的,用docker manifest inspect或者crictl inspecti看。

注意:Kylin V10 的 SELinux 默认可能是 enforcing,kubelet 挂载卷时会报 permission denied。执行setenforce 0临时关闭,并在/etc/selinux/config里改成permissive。生产环境如果必须开 SELinux,需要给 kubelet 和 containerd 单独写策略,比较麻烦,建议先关。

5. 避坑与排查:ARM64 + Kylin V10 部署 K8S 最常见的 5 个翻车点

5.1 镜像架构不匹配导致 Pod 一直 ImagePullBackOff

现象:kubectl describe pod 看到Failed to pull image,或者no match for platform in manifest

原因:很多官方镜像默认只推 amd64,ARM64 的 tag 可能不存在,或者 manifest 里没有 arm64 条目。Kylin V10 的容器运行时是 containerd,它不会自动回退到 amd64 模拟运行。

解决:用crictl inspecti或者docker manifest inspect确认镜像有没有 arm64。没有的话,找替代镜像,比如registry.aliyuncs.com/google_containers/下的 ARM64 版本,或者自己用 buildx 构建。K8S 核心组件(kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、pause、etcd)的 ARM64 镜像在官方 registry 都有,但网络插件、Ingress Controller、监控组件不一定全。

5.2 etcd 启动报tls: bad certificatecontext deadline exceeded

现象:etcd 服务起不来,日志里反复报证书错误,或者客户端连不上。

原因:证书里的 hosts 字段没有包含实际 IP,或者 CN 写错了。etcd 对证书的 SAN 校验很严格,IP 和 DNS 必须完全匹配。

解决:用openssl x509 -in etcd.pem -text -noout查看 SAN 列表,确认所有节点 IP 都在。缺的话重新签发证书,然后滚动重启 etcd。另外,--initial-cluster-state第一次是new,后续重启必须改成existing,否则会尝试重新组集群。

5.3 kubelet 反复重启,日志报failed to run Kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"

现象:kubelet 起不来,节点 NotReady。

原因:containerd 的SystemdCgroup没开,或者 kubeadm 配置文件里cgroupDriver没写 systemd。

解决:确认/etc/containerd/config.tomlSystemdCgroup = true,然后systemctl restart containerd。kubeadm 配置文件里KubeletConfigurationcgroupDriver: systemd也要加上。两边必须一致。

5.4 Flannel 或 Calico Pod 一直 CrashLoopBackOff,报failed to set bridge addr: could not add ip addr to bridge

现象:网络插件 Pod 起不来,节点间 Pod 不通。

原因:Kylin V10 的 iptables 是 nft 后端,和 flannel 的 bridge 操作不兼容。或者br_netfilter模块没加载。

解决iptables -V确认后端,如果是 nft,切换到 legacy:update-alternatives --set iptables /usr/sbin/iptables-legacy,然后重启 kube-proxy 和网络插件。同时确认lsmod | grep br_netfilter有输出。

5.5 加入节点时卡在[preflight] Running pre-flight checks不动

现象:kubeadm join 执行后长时间无输出,最后超时。

原因:工作节点到 master 的 6443 端口不通,或者时间不同步导致 token 校验失败。

解决telnet 192.168.1.10 6443确认端口通。chronyc sources确认时间同步。如果都正常,看 master 上 kube-apiserver 的日志,可能是证书 SAN 里没有 master 的 IP。重新签发 apiserver 证书,或者用--discovery-token-unsafe-skip-ca-verification临时跳过(不推荐生产用)。

6. 集群验证与日常运维:用 kubeadm 证书续签和 etcd 备份兜底

集群拉起来只是开始,真正让这套 ARM64 环境跑得久,靠的是两件事:证书别过期,etcd 有备份。

K8S 1.26 的证书默认有效期是 1 年,kubeadm 部署的集群可以用kubeadm certs check-expiration查看剩余时间。快到期时执行:

kubeadm certs renew all systemctl restart kubelet

renew all会重新签发所有控制面证书,包括 apiserver、controller-manager、scheduler、etcd 客户端等。执行完必须重启 kubelet 和静态 Pod,否则旧证书还在内存里。ARM 平台上的静态 Pod 重启比 x86 慢一些,耐心等 30 秒再kubectl get nodes

etcd 备份更关键。外部 etcd 的好处是备份不影响集群运行:

ETCDCTL_API=3 etcdctl \ --endpoints=https://192.168.1.20:2379 \ --cacert=/etc/etcd/ssl/ca.pem \ --cert=/etc/etcd/ssl/etcd.pem \ --key=/etc/etcd/ssl/etcd-key.pem \ snapshot save /backup/etcd-$(date +%Y%m%d-%H%M).db # 验证备份 etcdctl snapshot status /backup/etcd-20250101-1200.db --write-out=table

备份文件建议放到独立的 NFS 或者对象存储,别和 etcd 数据目录放同一块盘。恢复的时候用etcdctl snapshot restore,指定新的 style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;" />

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 19:53:31

1DCNN滚动轴承故障诊断:端到端时域建模实战指南

简介&#xff1a;本资源是一套基于一维卷积神经网络&#xff08;1DCNN&#xff09;实现滚动轴承故障诊断的完整Python实践项目&#xff0c;面向机械故障诊断、工业智能运维领域的初学者与进阶学习者&#xff0c;解决振动信号建模与故障分类的实际工程问题。压缩包共49个文件&am…

作者头像 李华
网站建设 2026/9/24 19:53:14

DRM-X 5.0软件授权管理实战:许可证、代码加密与客户案例

这两年做软件授权方案选型&#xff0c;我接触过不少被盗版逼到墙角的开发者。有个做工业软件的朋友说过一句挺扎心的话&#xff1a;产品上线三个月&#xff0c;破解版在圈子里的传播量比我们官方下载量还大&#xff0c;而且破解版还带着我们没修完的bug&#xff0c;用户以为是我…

作者头像 李华
网站建设 2026/9/24 19:52:54

MsgHelper 5.0本地部署实战:微信群管理、Excel导入与群发防风控全指南

不是我吹&#xff0c;做私域这几年&#xff0c;我是真的被各种群管理工具折腾麻了。一开始图省事用网页版SaaS工具&#xff0c;群是拉起来了&#xff0c;群发也发出去了&#xff0c;可客户手机号、微信号、聊天记录全放在别人服务器上&#xff0c;晚上睡觉都不踏实。后来换回手…

作者头像 李华
网站建设 2026/9/24 19:51:20

邮件安全网关选型与运维:从反垃圾到防钓鱼的完整指南

1. 为什么需要邮件安全网关&#xff1a;一封钓鱼邮件背后的真实代价做企业IT和安全运维这些年&#xff0c;我接过太多类似的求助&#xff1a;业务部门转发来一封"领导发的邮件"&#xff0c;要求紧急转账&#xff1b;财务窗口弹出一条"您的邮箱已满&#xff0c;点…

作者头像 李华
网站建设 2026/9/24 19:51:17

电商图片智能体实测:AI生成商品图能否替代设计助理?

1. 中秋礼盒上新实测&#xff1a;电商图片智能体能否替代设计助理1.1 一个电商运营的真实困境每年中秋前两个月&#xff0c;电商运营团队就会进入一种近乎癫狂的状态。礼盒上新不是简单拍几张照片、修一修就能上架的活儿&#xff0c;它涉及主图、详情页、场景图、卖点图、SKU图…

作者头像 李华
网站建设 2026/9/24 19:49:04

YOLOv5交通标志识别实战:从数据标注到本地部署

简介&#xff1a;本资源是一套完整的YOLOv5交通标志识别检测实战项目&#xff0c;专为计算机视觉初学者及本科毕业设计、课程设计、期末大作业需求者打造&#xff0c;覆盖数据集构建、模型训练、推理部署全流程&#xff0c;解决交通场景下多类标志精准检测与实时识别问题。压缩…

作者头像 李华