阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Docker1.12.1之swarm集群搭建与使用

463次阅读
没有评论

共计 13561 个字符,预计需要花费 34 分钟才能阅读完成。

1:前言

在 docker1.12 版本之前,众所周知 dokcer 本身只能单机上运行,而集群则要依赖 mesos、kubernetes、swarm 等集群管理方案。其中 swarm 是 docker 公司自己的容器集群管理工具,在当时的热度还是低于前两者。docker1.12.0 版本发布中,Docker 公司出于战略眼光,将 swarm 集成到 docker-engine 中,使 docker 内置了集群解决方案。于是 swarm 这个“亲儿子”的江湖地位迅速提升,在 docker 集群方案中与 mesos,k8s 形成三足鼎立之势,在未来则大有赶超之势。

2:规划

   IP           主机名          角色  

10.10.32.245    swarm1      swarm manager

10.10.32.246    swarm2      worker node

10.10.32.247    swarm3      worker node

10.10.32.248    swarm4      worker node

3:集群通信原理

通过 /usr/lib/system.d/system/docker.service 配置开启 2375 管理端口

ExecStart=/usr/bin/dockerd -s overlay –insecure-registry registry.cntv.net  -H tcp://0.0.0.0:2375 -H unix:///va

每个 node 节点上,都开启 2375 远程管理端口,swarm 集群管理通过 2375 管理端口来执行

4:swarm 调度原理

swarm 中实现调度功能的主要是 scheduler 模块,其中包括 Filter 和 strategy。

Filter:根据下发的任务的资源需求,用来过滤节点,从集群所有节点中找出满足条件的节点(比如资源足够,节点正常等等)

Strategy:用来在过滤出的节点中根据策略选择一个最优的节点(比如对找出的节点进行对比,找到资源最多的节点等等)

Docker1.12.1 之 swarm 集群搭建与使用Docker1.12.1 之 swarm 集群搭建与使用

 

5:swarm 集群创建

(1)初始化 manager 节点

  • 10.10.32.245

$docker swarm init --advertise-addr 10.10.32.245
Swarm initialized: current node (b73yii7s7rn321ejz8n3ch7ay) is now a manager.
To add a worker to this swarm, run the following command:
        docker swarm join \
        --token SWMTKN-1-2z3obrzww2zcnwaiq5dzocpmvz9kty25usroy3gh3xux0l32uo-8dxurdbms8yli2crdxbmyk7y2 \
        10.10.32.245:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

(2)manage 查看节点 swarm 状态

  • 10.10.32.245 

$docker info
  Swarm: active
  NodeID: ax13h89zlb5dqw980ddo1ox4f
  Is Manager: true
  ClusterID: d5nam0mink4wdk506o1ybbs9e
  Managers: 1
  Nodes: 1 

(3)manage 查看 swarm 节点

  • 10.10.32.245 

$ docker node ls
  ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS   
  ax13h89zlb5dqw980ddo1ox4f *  swarm1    Ready   Active        Leader 

(4)node 节点加入 swarm 集群 

  • 10.10.32.246 10.10.32.247 10.10.32.248 

$ docker swarm join-token manager   #manage 上查询加入命令及 token
To add a manager to this swarm, run the following command:
    docker swarm join \
    --token SWMTKN-1-2z3obrzww2zcnwaiq5dzocpmvz9kty25usroy3gh3xux0l32uo-8dxurdbms8yli2crdxbmyk7y2 \
    10.10.32.245:2377
$ docker swarm join \
    --token SWMTKN-1-2z3obrzww2zcnwaiq5dzocpmvz9kty25usroy3gh3xux0l32uo-8dxurdbms8yli2crdxbmyk7y2 \ 
     10.10.32.245:2377
This node joined a swarm as a worker 
  • (5)manage 查看 swarm 节点

$ docker node ls
  ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
  03b5w49n7uz663xwjuof3dsk0    swarm4    Ready   Active       
  0g039jomhpad819a39yvkow6y    swarm2    Ready   Active       
  4kos85v5z6jh6lahwv8yjpku8    swarm3    Ready   Active       
  ax13h89zlb5dqw980ddo1ox4f *  swarm1    Ready   Active        Leader 
  • (6)使节点离开集群

$ docker swarm leave
Node left the swarm.

6:在 swarm 集群上创建服务

  • (1)创建服务

$docker service create --network net3 --replicas 4 -p 8099:80 --name time-php registry.cntv.net/heqin/tvtime-php:v0.85dongsi
bdkwsgchcydz5ixatrbiyr1fx


  • (2)查看服务

$ docker service ls        # 查看服务
ID            NAME            REPLICAS  IMAGE                               COMMAND     
bdkwsgchcydz  time-php        4/4       registry.cntv.net/heqin/tvtime-php:v0.85dongsi

 

$docker service ps time-php    # 查看服务的实例
ID                         NAME        IMAGE                                              NODE    DESIRED STATE  CURRENT STATE          ERROR
d15ambrdd7pyi22951vi497xa  time-php.1  registry.cntv.net/heqin/tvtime-php:v0.85dongsi  swarm4  Running        Running 5 minutes ago 
3wtmmggo65cmyutg7zwikb94s  time-php.2  registry.cntv.net/heqin/tvtime-php:v0.85dongsi  swarm3  Running        Running 5 minutes ago 
5ulbhndwgswpicx8g62af8k5z  time-php.3  registry.cntv.net/heqin/tvtime-php:v0.85dongsi  swarm2  Running        Running 5 minutes ago 
4b9rh8aiwfi88xrdgmyss9ili  time-php.4  registry.cntv.net/heqin/tvtime-php:v0.85dongsi  swarm2  Running        Running 5 minutes ago   
$docker service inspect time-php     # 查看服务的详细信息
[
    {
        "ID""bdkwsgchcydz5ixatrbiyr1fx",
        "Version": {
            "Index": 3074
        },
        "CreatedAt""2016-08-31T01:41:18.892483521Z",
        "UpdatedAt""2016-08-31T01:41:18.909164422Z",
        "Spec": {
            "Name""time-php",
            "TaskTemplate": {
                "ContainerSpec": {
                    "Image""registry.cntv.net/heqin/tvtime-php:v0.85dongsi"
                },
                "Resources": {
                    "Limits": {},
                    "Reservations": {}
                },
                "RestartPolicy": {
                    "Condition""any",
                    "MaxAttempts": 0
                },
                "Placement": {}
            },
            "Mode": {
                "Replicated": {
                    "Replicas": 4
                }
            },
            "UpdateConfig": {
                "Parallelism": 1,
                "FailureAction""pause"
            },
            "Networks": [
                {
                    "Target""d83qc9rgkkj1ws8kvmod4x759"
                }
            ],
            "EndpointSpec": {
                "Mode""vip",
                "Ports": [
                    {
                        "Protocol""tcp",
                        "TargetPort": 80,
                        "PublishedPort": 8099
                    }
                ]
            }
        },
        "Endpoint": {
            "Spec": {
                "Mode""vip",
                "Ports": [
                    {
                        "Protocol""tcp",
                        "TargetPort": 80,
                        "PublishedPort": 8099
                    }
                ]
            },
            "Ports": [
                {
                    "Protocol""tcp",
                    "TargetPort": 80,
                    "PublishedPort": 8099
                }
            ],
            "VirtualIPs": [
                {
                    "NetworkID""biu7m9hi8fgbbihfzg48whxqi",
                    "Addr""10.255.0.19/16"
                },
                {
                    "NetworkID""d83qc9rgkkj1ws8kvmod4x759",
                    "Addr""10.88.0.2/24"
                }
            ]
        },
        "UpdateStatus": {
            "StartedAt""0001-01-01T00:00:00Z",
            "CompletedAt""0001-01-01T00:00:00Z"
        }
    }
] 
  • (3)扩展服务实例数

$ docker service scale time-php=10
time-php scaled to 10
$ docker service ls
ID            NAME            REPLICAS  IMAGE                                                                               
bdkwsgchcydz  time-php        6/6       registry.cntv.net/heqin/tvtime-php:v0.85dongsi 
  • (4)更新服

 

$ docker service update --image registry.cntv.net/heqin/tvtime-php:v0.84xidan --log-driver=syslog time-php
time-php
$ docker service ls
ID            NAME            REPLICAS  IMAGE                                                                               
bdkwsgchcydz  time-php        6/6       registry.cntv.net/heqin/tvtime-php:v0.84xidan

 

  • (5)删除服务

$docker service rm time-php
time-php 

7:网络

(1)查看容器网络

$docker network ls
NETWORK ID        NAME          DRIVER        SCOPE
a17f16650bf9      bridge        bridge        local   # 容器使用独立网络 Namespace,连接 docker0 虚拟网卡(默认模式)
f1c102babcf8      host          host          local   # 容器与主机共享网络 Namespace,拥有主机相同网卡 
b6a2efce65ef      none          null          local   # 容器没有任何网卡,适合不需要与外部通信的容器
asa2hv41mtci      ingress       overlay       swarm   #swarm 集群的的 overlay 网络,容器可以跨主机网络通信

注:上面三个网络是 docker 安装后默认带的三个网络,第四个 overlay 网络是启动 swarm 之后默认创建的 overlay 网络。

(2)查看 overlay 网络信息

$docker network inspect ingress
[
    {
        "Name""ingress",
        "Id""asa2hv41mtci2qzjkaonusnc8",
        "Scope""swarm",
        "Driver""overlay",
        "EnableIPv6"false,
        "IPAM": {
            "Driver""default",
            "Options": null,
            "Config": [
                {
                    "Subnet""10.255.0.0/16",
                    "Gateway""10.255.0.1"
                }
            ]
        },
        "Internal"false,
        "Containers": null,
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list""258"
        },
        "Labels": null
    }
]

(3)创建自定义的 overlay 网络

$docker network create --driver=overlay --subnet=10.88.0.0/24  --gateway=10.88.0.1 net3
c654pb76q9jnni5bpdvd34rg4
$docker network ls
NETWORK ID          NAME                DRIVER              SCOPE             
c654pb76q9jn        net3                overlay             swarm
$docker network inspect net3
[
    {
        "Name""net3",
        "Id""c654pb76q9jnni5bpdvd34rg4",
        "Scope""swarm",
        "Driver""overlay",
        "EnableIPv6"false,
        "IPAM": {
            "Driver""default",
            "Options": null,
            "Config": [
                {
                    "Subnet""10.88.0.0/24",
                    "Gateway""10.88.0.1"
                }
            ]
        },
        "Internal"false,
        "Containers": null,
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list""258"
        },
        "Labels": null
     

注:在 manage 上创建 overlay 网络后,各 node 上并没有同步创建该网络,只有当使用该 overlay 网络的容器在 node 节点上运行时,才会在 node 节点上自动创建, 容器删除后,网络也会在 node 节点上删除。

(4)将容器绑定到自定义的网络中

$docker service create --network net3 --replicas 4 --name time-php registry.cntv.net/heqin/tvtime-php:v0.85dongsi
5qiv4hhv7ra5p65fpq2v6ok0x
$docker service ls
5qiv4hhv7ra5  time-php        4/4       registry.cntv.net/heqin/tvtime-php:v0.85dongsi   
$docker service ps time-php
ID                         NAME        IMAGE                                              NODE    DESIRED STATE  CURRENT STATE           ERROR
529kuyazgxxl8l0eds4f740nu  time-php.1  registry.cntv.net/heqin/tvtime-php:v0.85dongsi  swarm3  Running        Running 32 seconds ago 
brdelpbuwm3p9cujy6k78cpzo  time-php.2  registry.cntv.net/heqin/tvtime-php:v0.85dongsi  swarm3  Running        Running 33 seconds ago 
3csp6fmrsg5cvski270732q98  time-php.3  registry.cntv.net/heqin/tvtime-php:v0.85dongsi  swarm2  Running        Running 34 seconds ago 
2ismj5zt9o3t2hfe1j1lx7dcw  time-php.4  registry.cntv.net/heqin/tvtime-php:v0.85dongsi  swarm4  Running        Running 33 seconds ago

进入 swarm3,可以看到 net3 网络下有两个容器。

$docker docker network inspect net3
[
    {
        "Name""net3",
        "Id""d83qc9rgkkj1ws8kvmod4x759",
        "Scope""swarm",
        "Driver""overlay",
        "EnableIPv6"false,
        "IPAM": {
            "Driver""default",
            "Options": null,
            "Config": [
                {
                    "Subnet""10.88.0.0/24",
                    "Gateway""10.88.0.1"
                }
            ]
        },
        "Internal"false,
        "Containers": {
            "d465611683b69f20c28ec9eb276a9e4088867e35508ecf2bf28c07c5d3e1b33a": {
                "Name""time-php.1.529kuyazgxxl8l0eds4f740nu",
                "EndpointID""ca667c89550f88eabf54eeaaaa3c55c678ec8184f121fc845bbaab1cd4be20ff",
                "MacAddress""02:42:0a:58:00:05",
                "IPv4Address""10.88.0.5/24",
                "IPv6Address"""
            },
            "d8fa64c4f8357418304ed1f19a049e4aac196c94ef50a27a0686ebe4ee734225": {
                "Name""time-php.2.brdelpbuwm3p9cujy6k78cpzo",
                "EndpointID""ab45bcf8e73d114e9bdf97cac128750a6c7a073149783746a9962c6cd4c599a8",
                "MacAddress""02:42:0a:58:00:06",
                "IPv4Address""10.88.0.6/24",
                "IPv6Address"""
            }
        },
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list""257"
        },
        "Labels": {}
     

用 swarm3 的容器去 ping swarm2 主机上的容器,是可以 ping 通的

$docker exec -it d8fa64c4f835  ping 10.88.0.3
PING 10.88.0.3 (10.88.0.3) 56(84) bytes of data.
64 bytes from 10.88.0.3: icmp_seq=1 ttl=64 time=0.611 ms
64 bytes from 10.88.0.3: icmp_seq=2 ttl=64 time=5.45 ms
64 bytes from 10.88.0.3: icmp_seq=3 ttl=64 time=0.439 ms
64 bytes from 10.88.0.3: icmp_seq=4 ttl=64 time=0.586 ms
64 bytes from 10.88.0.3: icmp_seq=5 ttl=64 time=0.603 ms 

8:swarm 基本命令

  • swarm 集群创建与管理

docker swarm Command

Commands:

  init        Initialize a swarm

  join        Join a swarm as a node and/or manager

  join-token  Manage join tokens

  update      Update the swarm

  leave       Leave a swarm

 

  • swarm 服务创建与管理

docker service Command

Commands:

  create      Create a new service

  inspect     Display detailed information on one or more services

  ps          List the tasks of a service

  ls          List services

  rm          Remove one or more services

  scale       Scale one or multiple services

  update      Update a service

 

  • swarm 服务创建选项

docker service create [OPTIONS] IMAGE 

Options:

      –constraint value               Placement constraints (default [])

      –container-label value          Container labels (default [])

      –endpoint-mode string           Endpoint mode (vip or dnsrr)

  -e, –env value                      Set environment variables (default [])

      –help                           Print usage

  -l, –label value                    Service labels (default [])

      –limit-cpu value                Limit CPUs (default 0.000)

      –limit-memory value             Limit Memory (default 0 B)

      –log-driver string              Logging driver for service

      –log-opt value                  Logging driver options (default [])

      –mode string                    Service mode (replicated or global) (default “replicated”)

      –mount value                    Attach a mount to the service

      –name string                    Service name

      –network value                  Network attachments (default [])

  -p, –publish value                  Publish a port as a node port (default [])

      –replicas value                 Number of tasks (default none)

      –reserve-cpu value              Reserve CPUs (default 0.000)

      –reserve-memory value           Reserve Memory (default 0 B)

      –restart-condition string       Restart when condition is met (none, on-failure, or any)

      –restart-delay value            Delay between restart attempts (default none)

      –restart-max-attempts value     Maximum number of restarts before giving up (default none)

      –restart-window value           Window used to evaluate the restart policy (default none)

      –stop-grace-period value        Time to wait before force killing a container (default none)

      –update-delay duration          Delay between updates

      –update-failure-action string   Action on update failure (pause|continue) (default “pause”)

      –update-parallelism uint        Maximum number of tasks updated simultaneously (0 to update all at once) (default 1)

  -u, –user string                    Username or UID

 

9:利用 2375 端口远程管理

注:-H 指定远程地址和端口,即可在任意一台有 docker 客户端的机器远程操作 swarm 集群

$docker  -H 10.00.32.245:2375  service ls
ID            NAME            REPLICAS  IMAGE                                                                                 COMMAND
3e0ihi2lnnaa  test_api        1/1       registry.cntv.net/heqin/api-web:1.1                             
5mdqw6r53tom  test_apimem     1/1       registry.cntv.net/heqin/memcache-1.4   
5ucxo9wqywo9  test_tomcatmem  1/1       registry.cntv.net/heqin/memcache-1.4 
cjd1z14ug28g  HQtest_tvtime   5/5       registry.cntv.net/heqin/tvtime-php:v0.85dongsi                                     
ex4mahzt5k8u  test_tomcat     1/1       registry.cntv.net/heqin/jdk7-tomcat7.0.52:201608011wq

10:swarm 与 mesos 对比

(1):部署配置简单,集群管理便利,但是没有 web 管理界面

(2):每个节点无需手动安装 agent,集群间只需要通过暴露 tcp://2375 端口来保证节点间的通信。

(3):无需 bamboo 来做负载均衡,swarm 集群使用 IPVS 负载均衡

(4):无需 marathon、chrons 等调度组件,swarm 内置调度模块。

更多 Docker 相关教程见以下内容

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

Ubuntu 14.04 安装 Docker  http://www.linuxidc.com/linux/2014-08/105656.htm

Ubuntu 使用 VNC 运行基于 Docker 的桌面系统  http://www.linuxidc.com/Linux/2015-08/121170.htm

阿里云 CentOS 6.5 模板上安装 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm

Ubuntu 15.04 下安装 Docker  http://www.linuxidc.com/Linux/2015-07/120444.htm

在 Ubuntu Trusty 14.04 (LTS) (64-bit)安装 Docker http://www.linuxidc.com/Linux/2014-10/108184.htm

在 Ubuntu 15.04 上如何安装 Docker 及基本用法 http://www.linuxidc.com/Linux/2015-09/122885.htm

Ubuntu 16.04 上 Docker 使用手记 http://www.linuxidc.com/Linux/2016-12/138490.htm

Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142151.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计13561字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7992973
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的3D玩偶了

终于收到了以女儿为原型打印的 3D 玩偶了 前些日子参加某网站活动,获得一次实物 3D 打印的机会,于是从众多...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...