容器集群管理系统Kubernetes(K8S)

目录

一、前言

1.1什么是云原生?

1.2云要素的四要素?

1.2.1微服务

1.2.2容器化

1.2.3DevOps

1.2.4持续交付

1.3云平台有哪些?

1.4SRE

二、Kubernetes 概述

2.1K8S 是什么

2.2K8S作用

2.3K8S版本

2.4为什么要用 K8S

2.5K8S 的特性

2.5.1弹性伸缩

2.5.2自我修复

2.5.3服务发现和负载均衡

2.5.4自动发布(默认滚动发布模式)和回滚

2.5.5集中化配置管理和密钥管理

2.5.6存储编排,支持外挂存储并对外挂存储资源进行编排

2.5.7任务批处理运行

三、Kubernetes 集群架构与组件⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

 3.1核心组件 

3.1.1Master 组件 

3.1.1.1Kube-apiserver

3.1.1.2Kube-controller-manager

3.1.1.3Kube-scheduler

3.2 配置存储中心 

3.3 Node 组件 

3.3.1Kubelet

3.3.2Kube-Proxy

3.3.3docker 或 rocket


一、前言

k8s 概述(包含容器编排、docker、messos+marathon 、k8s容器编排)  云原生 SRE

docker compose单机编排工具  有企业在使用

docker swarm 能够在多台主机中构建一个docker集群、 docker swarm可以集群化的管理、 处理容器,也算是一个工具   基本上已经淘汰

在企业一般把微服务, 封装成dockerfile 编写成镜像,然后进行发布,使用dockerfile 可以写成shell脚本做版本迭代,完成半自动化,早期我们使用messos,他是apache基金会的,2019年不用mesos,使用K8S,K8S在2014年就出来了,2019年开始大量使用K8S

K8S是云原生计算基金会的(CNCF),2015年12月成立云原生计算基金会(CNCF)

1.1什么是云原生?

1.2云要素的四要素?

1.2.1微服务

几乎每个云原生的定义都包含微服务,跟微服务相对的是单体应用,微服务有理论基础,那就是康威定律,指导服务怎么切分,很玄乎,凡是能称为理论定律的都简单明白不了,大概意思是组织架构决定产品形态

微服务架构的好处就是按function切了之后,服务解耦,内聚更强,变更更易

1.2.2容器化

Docker是应用最为广泛的容器引擎,在思科谷歌等公司的基础设施中大量使用,是基于LXC技术搞的,容器化为微服务提供实施保障,起到应用隔离作用,K8S是容器编排系统,用于容器管理,容器间的负载均衡

1.2.3DevOps

这是个组合词,Dev+Ops,就是开发和运维合体,不像开发和产品,经常刀刃相见实际上DevOps应该还包括测试,DevOps是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。

1.2.4持续交付

持续交付是不误时开发,不停机更新,小步快跑,反传统瀑布式开发模型,这要求开发版本和稳定版本并存,其实需要很多流程和工具支撑。

kubernetes 已经成为容器编排领域的王者,它是基于容器的集群编排引擎,具备扩展集群、滚动升级回滚、弹性伸缩、自动治愈、服务发现等多种特性能力。

1.3云平台有哪些?

公有云、私有云、混合云

目前使用最多的是阿里云

1.4SRE

①SRE运维自动化(自动化发布、自动化部署、日志管理、监控自动化)

②K8S编排集群

③日志系统

④微服务

⑤消息队列

⑥多云管理

⑦云开(二开) python、golong

内容管理系统 (CMS)

二、Kubernetes 概述

2.1K8S 是什么

K8S 的全称为 Kubernetes (K12345678S),PS:“嘛,写全称也太累了吧,写”。不如整个缩写

K8s 作为缩写的结果来自计算“K”和“s”之间的八个字母,简称为K8S

k8s就是一种跨主机的容器集群编排工具

k8s他的全称Kubernetes 简称k8s,它是一种开源容器编排平台,用于自动化部署,扩展和管理化应用程序。它提供了种容器编排和管理的方式,还可以帮助开发人员更轻松的管理我们的应用程序。

2.2K8S作用

K8S用于自动部署、扩展和管理“容器化(containerized)应用程序”的开源系统。
可以理解成 K8S 是负责自动化运维管理多个容器化程序(比如 Docker)的集群,是一个生态极其丰富的容器编排框架工具。

由来:
K8S由google的Borg系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。

含义:
词根源于希腊语的 舵手、飞行员

官网:https://kubernetes.io 

GitHub:https://github.com/kubernetes/kubernetes

2.3K8S版本

目前一般是1.18~1.20,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.30,版本一年更新四次,1.24版本之后支持ivp6、还有集群化、添加了令牌重载授权服务

2.4为什么要用 K8S

试想下传统的后端部署办法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序。

设想一下,如果服务的请求量上来,已部署的服务响应不过来怎么办?传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维人员马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力。
这样问题就出现了:从监控告警到部署服务,中间需要人力介入!那么,有没有办法自动完成服务的部署、更新、卸载和扩容、缩容呢?
而这就是 K8S 要做的事情:自动化运维管理容器化(Docker)程序。

K8S 的目标是让部署容器化应用简单高效。
K8S 解决了裸跑Docker 的若干痛点:

  • 单机使用,无法有效集群
  • 随着容器数量的上升,管理成本攀升
  • 没有有效的容灾、自愈机制
  • 没有预设编排模板,无法实现快速、大规模容器调度
  • 没有统一的配置管理中心工具
  • 没有容器生命周期的管理工具
  • 没有图形化运维管理工具

K8S是Google开源的容器集群管理系统,在Docker等容器技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。 其主要功能如下:

  • 使用 Docker 等容器技术对应用程序包装(package)、实例化(instantiate)、运行(run)。
  • 以集群的方式运行、管理跨机器的容器。
  • 解决 Docker 跨机器容器之间的通讯问题。
  • K8S 的自我修复机制使得容器集群总是运行在用户期望的状态。

k8s的主要功能

●跨主机编排容器。
●更充分地利用硬件资源来最大化地满足企业应用的需求。
●控制与自动化应用的部署与升级。
●为有状态的应用程序挂载和添加存储器。
●线上扩展或缩减容器化应用程序与它们的资源。
●声明式的容器管理,保证所部署的应用按照我们部署的方式运作。
●通过自动布局、自动重启、自动复制、自动伸缩实现应用的状态检查与自我修复。
●为多个容器提供服务发现和负载均衡,使得用户无需考虑容器IP问题。(通过service)

2.5K8S 的特性

2.5.1弹性伸缩

使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。

假设2 台机器, 提供 web 服务网站高并发, 根据系统资源占比来自动扩展机器 、高并发一旦过去了,他就会自动收机器

2.5.2自我修复

在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检査失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。

业务机器一旦坏掉 ,如果用户期望值是1台,他会自动重拉起一个1台机器

2.5.3服务发现和负载均衡

K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。

如果有一台服务器坏了,它会通过标签+ip地址绑定新的服务器

2.5.4自动发布(默认滚动发布模式)和回滚

K8S采用滚动更新策略更新应用,一次更新一个或者部分Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不影响业务。

K8S可以在线更新,假设我有3台nginx版本需要升级,他会先自动更新1台,对外发布两台,

如果更新好了,没问题了,再更新下一台

2.5.5集中化配置管理和密钥管理

管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序使用。

2.5.6存储编排,支持外挂存储并对外挂存储资源进行编排

挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、Glusterfs、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。

2.5.7任务批处理运行

提供一次性任务,定时任务;满足批量数据处理和分析的场景。

三、Kubernetes 集群架构与组件⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责集群的调度、管理和运维,Slave 节点是集群中的运算工作负载节点。

在 K8S 中,主节点一般被称为 Master 节点,而从节点则被称为 Worker Node 节点,每个 Node 都会被 Master 分配一些工作负载。

Master 组件可以在群集中的任何计算机上运行,但建议 Master 节点占据一个独立的服务器。因为 Master 是整个集群的大脑,如果 Master 所在节点宕机或不可用,那么所有的控制命令都将失效。除了 Master,在 K8S 集群中的其他机器被称为 Worker Node 节点,当某个 Node 宕机时,其上的工作负载会被 Master 自动转移到其他节点上去。

 3.1核心组件 

3.1.1Master 组件 

3.1.1.1Kube-apiserver

用于暴露 Kubernetes API,任何资源请求或调用操作都是通过 kube-apiserver 提供的接口进行。以 HTTP Restful API 提供接口服务,所有对象资源的增删改查和监听操作都交给 API Server 处理后再提交给 Etcd 存储。

可以理解成 API Server 是 K8S 的请求入口服务。API Server 负责接收 K8S 所有请求(来自 UI 界面或者 CLI 命令行工具), 然后根据用户的具体请求,去通知其他组件干活。可以说 API Server 是 K8S 集群架构的大脑。

①kube-apiserver:作为所有服务请求的统一访问入口


3.1.1.2Kube-controller-manager

运行管理控制器,是 K8S 集群中处理常规任务的后台线程,是 K8S 集群里所有资源对象的自动化控制中心。

在 K8S 集群中,一个资源对应一个控制器,而 Controller manager 就是负责管理这些控制器的。

由一系列控制器组成,通过 API Server 监控整个集群的状态,并确保集群处于预期的工作状态,比如当某个 Node 意外宕机时,Controller Manager 会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。

这些控制器主要包括:

  • Node Controller(节点控制器):负责在节点出现故障时发现和响应。
  • Replication Controller(副本控制器):负责保证集群中一个 RC(资源对象 Replication Controller)所关联的 Pod 副本数始终保持预设值。可以理解成确保集群中有且仅有 N 个 Pod 实例,N 是 RC 中定义的 Pod 副本数量。
  • Endpoints Controller(端点控制器):填充端点对象(即连接 Services 和 Pods),负责监听 Service 和对应的 Pod 副本的变化。 可以理解端点是一个服务暴露出来的访问点,如果需要访问一个服务,则必须知道它的 endpoint。(通过标记去绑定IP地址,只要访问标记,就能访问IP地址(目的:当node挂了,重起一个新node,那么它的IP会变哦)
  • Service Account & Token Controllers(服务帐户和令牌控制器):为新的命名空间创建默认帐户和 API 访问令牌。
  • ResourceQuota Controller(资源配额控制器):确保指定的资源对象在任何时候都不会超量占用系统物理资源。
  • Namespace Controller(命名空间控制器):管理 namespace 的生命周期。
  • Service Controller(服务控制器):属于 K8S 集群与外部的云平台之间的一个接口控制器。

Linux Namespace提供了一种内核级别隔离系统资源的方法,通过将系统的全局资源放在不同的Namespace中,来实现资源隔离的目的。不同Namespace的程序,可以享有一份独立的系统资源。

②kube-controller-manager:控制器管理器,可以通过apiserver监控整个集群的状态,确保集群处于预期状态


3.1.1.3Kube-scheduler

是负责资源调度的进程,根据调度算法为新创建的 Pod 选择一个合适的 Node 节点。  62种

可以理解成 K8S 所有 Node 节点的调度器。当用户要部署服务时,Scheduler 会根据调度算法选择最合适的 Node 节点来部署 Pod。

  • 预选策略(predicate)
  • 优选策略(priorities)

API Server 接收到请求创建一批 Pod ,API Server 会让 Controller-manager 按照所预设的模板去创建 Pod,Controller-manager 会通过 API Server 去找 Scheduler 为新创建的 Pod 选择最适合的 Node 节点。比如运行这个 Pod 需要 2C4G 的资源,Scheduler 会通过预选策略过滤掉不满足策略的 Node 节点。Node 节点中还剩多少资源是通过汇报给 API Server 存储在 etcd 里,API Server 会调用一个方法找到 etcd 里所有 Node 节点的剩余资源,再对比 Pod 所需要的资源,如果某个 Node 节点的资源不足或者不满足 预选策略的条件则无法通过预选。预选阶段筛选出的节点,在优选阶段会根据优先策略为通过预选的 Node 节点进行打分排名, 选择得分最高的 Node。例如,资源越富裕、负载越小的 Node 可能具有越高的排名。

③kube-scheduler:资源调度器,负责pod资源调度,可以根据调度算法(预选和优选策略),筛选出最适合的node节点


3.2 配置存储中心 

  • etcd

K8S 的存储服务。etcd 是分布式键值存储系统,存储了 K8S 的关键配置和用户配置,K8S 中仅 API Server 才具备读写权限,其他组件必须通过 API Server 的接口才能读写数据。

etcd:K8S集群的数据库,是一种键值对存储结构的分布式数据库,负责存储K8S集群所有的重要信息,仅apiserver拥有访问和读写权限

3.3 Node 组件 

3.3.1Kubelet

Node 节点的监视器以及与 Master 节点的通讯器。Kubelet 是 Master 节点安插在 Node 节点上的“眼线”,它会定时向 API Server 汇报自己 Node 节点上运行的服务的状态,并接受来自 Master 节点的指示采取调整措施。

从 Master 节点获取自己节点上 Pod 的期望状态(比如运行什么容器、运行的副本数量、网络或者存储如何配置等), 直接跟容器引擎交互实现容器的生命周期管理,如果自己节点上 Pod 的状态与期望状态不一致,则调用对应的容器平台接口(即 docker 的接口)达到这个状态。

管理镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源

①kubelet:首先kubelet可以接收apiserver的请求,创建和管理pod和容器,与容器引擎交互实现对pod和容器的生命周期进行管理;同时kubelet还可以通过cadvisor收集node节点的资源信息和pod的运行状态,发送给apiserver

总结:
在 Kubernetes 集群中,在每个 Node(又称 Worker Node)上都会启动一个 kubelet 服务进程。该进程用于处理 Master 下发到本节点的任务,管理 Pod 及 Pod 中的容器。每个 kubelet 进程都会在 API Server 上注册节点自身的信息,定期向 Master 汇报节点资源的使用情况,并通过 cAdvisor 监控容器和节点资源。

3.3.2Kube-Proxy

在每个 Node 节点上实现 Pod 网络代理,是 Kubernetes Service 资源的载体,负责维护网络规则和四层负载均衡工作。 负责写入规则至iptables、ipvs实现服务映射访问的。

Kube-Proxy 本身不是直接给 Pod 提供网络,Pod 的网络是由 Kubelet 提供的,Kube-Proxy 实际上维护的是虚拟的 Pod 集群网络。

Kube-apiserver 通过监控 Kube-Proxy 进行对 Kubernetes Service 的更新和端点的维护。

在 K8S 集群中微服务的负载均衡是由 Kube-proxy 实现的。Kube-proxy 是 K8S 集群内部的负载均衡器。它是一个分布式代理服务器,在 K8S 的每个节点上都会运行一个 Kube-proxy 组件。

②kube-proxy:作为service资源的载体,实现对Pod的网络代理,负责维护Pod集群网络规则和四层代理工作

3.3.3docker 或 rocket

容器引擎,运行容器,负责本机的容器创建和管理工作。

③容器引擎(docker, container, rocket):运行管理容器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/608148.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【论文阅读】Spectral–Spatial Attention Network for Hyperspectral Image Classification

Spectral–Spatial Attention Network for Hyperspectral Image Classification 论文地址摘要:1. 简介1.1.动机1.2.贡献 2. 相关作品2.1.双向递归网络RNN2.2.CNN2.3. Attention Mechanism 3. 方法3.1 Attention with RNN for Spectral Classification3.2&#xff0e…

【镜像仿真篇】磁盘镜像仿真常见错误

【镜像仿真篇】磁盘镜像仿真常见错误 记系统镜像仿真常见错误集—【蘇小沐】 1、实验环境 2023AFS39.E01(Windows11系统镜像)Arsenal Image Mounter,[v3.10.262]‍Vmware Workstation 17 Pro,[v17.5.1]Windows 11 专业工作站版…

单片机——直流电机

1 .关于4线直流电机 两根12v供电线,通入12v,风扇以最高转速工作。 一根测速线,电机工作时输出测速信号,提供转速反馈。一根PWM控制信号线,电机工作时控制器输入PWM控制信号,以控制风扇转速(通常为占空比可…

性能测试瓶颈:CPU 问题的深度分析和调优!

性能测试是评估系统、应用程序或服务的性能和稳定性的过程。在进行性能测试时,我们经常会发现一些瓶颈,其中之一就是与CPU相关的问题。CPU是计算机系统中最重要的组件之一,对系统的整体性能起着至关重要的作用。本文将从零开始详细介绍如何分…

【有趣的透镜】1.透镜初相识

1.透镜的外形和材料 (1)透镜由玻璃或者塑料制成; (2)透镜一般为圆型,其单面或双面为球面; 2.透镜的类型和折射 (1)球面外凸为凸透镜(聚光),球面内凹为凹透镜(散光); (2)透镜是基于光的折射,只要光从一…

第一批00后已经开始做家政了!2024年轻人的机会在哪里?2024创业小项目。

当代年轻人的路子到底有多野?江苏无锡的00后女生冯佳佳,觉得未来家政行业很有前景,便毅然决然的辞去了幼儿园老师的工作,和男朋友一起成立了家政公司。、 诚然,现在的家政收费是及其昂贵赚钱的,开锁师傅开一…

点击导航栏选项后,导航栏高亮该选项

如图所示&#xff0c;点击“流浪猫客栈”时&#xff0c;会一直高亮显示&#xff0c;表示现在看的是这个选项的页面。 Cat.jsp上写&#xff1a; <!--header--> <jsp:include page"header.jsp"><jsp:param name"flag" value"3">…

上位机图像处理和嵌入式模块部署(树莓派4b和c++新版本的问题)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 自己读书的时候是03年&#xff0c;学习c也是差不多04年开始&#xff0c;到现在基本上20年了。这20年过程当中&#xff0c;其实c的语言版本一直是在…

SSRF漏洞学习

1.ssrf漏洞简介 ssrf&#xff08;服务器端请求伪造&#xff09;&#xff0c;它是由攻击者构造形成的由服务端发起的一个较为安全的漏洞。 它攻击的目标是从外网无法访问的内部系统&#xff0c;因为它是从服务端发起的&#xff0c;所以它能够请求到与它相连并且与外网隔离的内部…

PXE批量部署,一键安装配置多台Linux系统

目录 一、PXE批量部署的优点 二、搭建PXE远程安装服务器 1. 实验初始化设置 2. 一键安装软件包 3. 复制 vmlinuz、initrd.img、pxelinux.0文件 4. 配置PE启动菜单配置文件 5. 修改配置文件&#xff0c; 启动各个软件服务 6. kickstart自动应答文件修改启动菜单配置文件…

【用文本生成歌声】Learn2Sing 2.0——歌声转换算法即梅尔频谱详解

一. 频谱图与梅尔谱图的介绍 频谱图&#xff1a;频谱图可以理解为一堆垂直堆叠在一起的快速傅里叶变换结果。 1.1 信号 在进入频谱图模块之前&#xff0c;首先我们需要了解信号是什么。 信号就是某一特定量随时间变化&#xff0c;对于音频来说&#xff0c;这个特定的变化量就…

java.net.SocketInputStream.socketRead0 卡死导致 tomcat 线程池打满的问题

0 TL;DR; 问题与原因&#xff1a;某些特定条件下 java.net.SocketInputStream.socketRead0 方法会卡死&#xff0c;导致运行线程一直被占用导致泄露采用的方案&#xff1a;使用监控线程异步监控卡死事件&#xff0c;如果发生直接关闭网络连接释放链接以及对应的线程 1. 问题 …

pytest教程-42-钩子函数-pytest_runtest_makereport

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_runtest_teardown钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_runtest_makereport钩子函数的使用方法。 pytest_runtest_makereport 钩子函数在 pytest 为每个测试生成报…

修改表空间的状态

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 表空间有4种状态:联机、脱机、只读和读写。修改其中某一种状态的语句如下所示 设置表空间 tspace 为联机状态。 SQL>ALTER TABLESPACE space ONLINE: 设置表空间 tspa…

Python运维之多线程!!

一、多线程 二、多线程编程之threading模块 2.1、使用threading进行多线程操作有两种方法&#xff1a; 三、多线程同步之Lock&#xff08;互斥锁&#xff09; 四、多线程同步之Semaphore&#xff08;信号量&#xff09; 五、多线程同步之Condition 六、多线程同步之Event…

开发Web3 ETF的技术难点

开发Web3 ETF&#xff08;Exchange-Traded Fund&#xff0c;交易所交易基金&#xff09;软件时&#xff0c;需要注意以下几个关键问题。开发Web3 ETF软件是一个复杂的过程&#xff0c;涉及到金融、法律和技术多个领域的专业知识。开发团队需要综合考虑上述问题&#xff0c;以确…

kubernate 基本概念

一 K8S 是什么&#xff1f; K8S 全称&#xff1a;Kubernetes 作用&#xff1a; 用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开源系统。 可以理解成 K8S 是负责自动化运维管理多个容器化程序&#xff08;比如 Docker&#xff09;的…

Linux域名解析

1.hosts:windows c盘下面 Linux: /etc/hosts 作用:实现名字解析&#xff0c;主要为本地主机名、集群节点提供快速解析。平面式结构&#xff0c;集中式数据库。 缺点:不便于查询更新 2.DNS:域名系统 作用:实现名字解析(分层性&#xff0c;层次性) FQDN:完全合格域名/全称域…

3月空气净化器市场数据分析,热门品牌排行榜揭晓!

三月上旬以来&#xff0c;中国空气净化器行业的规模持续扩大&#xff0c;市场规模和消费需求也在不断提升&#xff0c;消费者对高质量空气的需求增加。智能化是当前空气净化器市场的一个重要发展方向&#xff0c;这类产品集成了空气过滤、监测等功能&#xff0c;满足了现代消费…

音乐爱好者户外好伙伴,HOLME NEO开放式蓝牙耳机体验

现在天气开始热起来了&#xff0c;很适合户外活动&#xff0c;我出门时一般都会戴上一副耳机&#xff0c;特别是那种开放式的蓝牙耳机&#xff0c;我觉得很适合现在使用。最近我在用的是一款虹觅HOLME NEO&#xff0c;这款开放式蓝牙耳机设计独特&#xff0c;而且音质不错&…