大模型学习八:‌Sealos 私有化部署之VMware 安装ubuntu22.04 虚拟机安装(实操)

一、说明

windows 11

ubuntu22.04.5

安装5个虚拟机,3个master 2个node

二、安装 Vmware 17(没成功,但你可以成功)

我的电脑配置比较旧,直接提示处理器不支持xsave 无法打开虚拟机的电源,网上方法试过了,不行啊。准备安装vmware12, 多少年的版本啊

1、下载个人使用免费软件

Fusion and Workstation | VMwarehttps://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion自己注册一下,然后继续

搜索一下 

选择最新版本

该填的都填上 

后面就可以下载了,我不能科学上网,后面下载不动,那得多长时间啊,网上有个人版也可以下载

2、安装VM

这个应该没啥讲究,无脑一路向下 ,大胆的装,在启动的时候选择用于个人用途

三、规划虚拟机需求分析

0、服务器基本要求

  • 每个集群节点应该有不同的主机名。
  • 所有节点的时间需要同步。
  • 建议使用干净的操作系统来创建集群。不要自己装 Docker!
  • 支持大多数 Linux 发行版,例如:Ubuntu、Debian、CentOS、Rocky linux。
  • 系统内核版本在 5.4 及以上
  • 必须使用 root 用户安装!

推荐使用 Ubuntu 22.04 LTS 操作系统,内核版本在 5.4 及以上,配置如下:

操作系统内核版本CPU内存存储MastersNodes
Ubuntu 22.04 LTS≥ 5.48C16GB100GB奇数台任意

 Kubernetes 和 Sealos Cloud 的系统组件在每个 Master 节点上大约需要 2 核心 (2c) 和 2GB 内存 (2g),在每个 Node 节点上则需要大约 1 核心 (1c) 和 1GB 内存 (1g),请确保集群中每个节点都有足够的计算资源以支持系统组件的运行。

  • 所有节点之间网络互通;
  • 需要在 Kubernetes 集群的第一个 Master 节点上执行脚本,目前集群外的节点不支持集群安装
  • 所有节点之间可以互相通信。
  • 需要一个域名用于访问 Sealos 及相关服务;
  • 如果您没有域名,可以使用 nip.io 提供的免费域名服务。

Sealos 需要使用证书来保证通信安全,默认在您不提供证书的情况下我们会使用 cert-manager 来自动签发证书 

如果您能提供证书,证书需要解析下列域名 (假设您提供的域名为:cloud.example.io):

  • *.cloud.example.io
  • cloud.example.io

1、Master 节点需要开放的端口

Master 节点运行控制平面组件(如 API Server、etcd、Controller Manager、Scheduler),需要开放以下端口:

端口协议用途开放范围
6443TCPKubernetes API Server对所有 Node 和外部客户端
2379-2380TCPetcd 数据库通信仅其他 Master 节点(HA 集群)
10250TCPKubelet API(与 Pod/容器通信)集群内所有节点
10259TCPkube-scheduler 的 HTTPS 端口集群内部通信
10257TCPkube-controller-manager 的 HTTPS 端口集群内部通信

2、Node(Worker)节点需要开放的端口

Node 节点运行工作负载(Pod),需要开放以下端口:

端口协议用途开放范围
10250TCPKubelet API(与 Master 通信)集群内所有节点
30000-32767TCPNodePort 服务的外部访问对外部客户端开放
8472UDPFlannel CNI 的 VXLAN 隧道所有节点间(按 CNI 需求)
179TCPCalico CNI 的 BGP 协议所有节点间(按 CNI 需求)

3、所有节点(Master + Node)都需要开放的端口

某些端口在集群中所有节点间需要互通:

端口协议用途
22TCPSSH 管理访问
ICMP节点间网络连通性检查(ping)

4、 操作建议

  • 仅开放必要的端口,避免安全隐患。

  • 例如 2379-2380(etcd)仅在多 Master 集群中开放给其他 Master 节点。

5、分析表格

服务器名称ip开放端口说明
base192.168.1.100

22,ICMP,10250

这是一个基本虚拟机,平时不用,用来克隆其他master和node1,所以安装基本配置,开放基本端口
master1192.168.1.101

6443

2379-2380

10259

10257

通过base克隆
master2192.168.1.102

6443

2379-2380

10259

10257

通过master1克隆
master3192.168.1.103

6443

2379-2380

10259

10257

通过master1克隆
node1192.168.1.111

30000-32767

8472

179

通过base克隆
node2192.168.1.112

30000-32767

8472

179

通过node1克隆

三、安装Base虚拟机

1、新建虚拟机

打开VMware Workstation,点击 “创建新的虚拟机”

选择 “典型” 安装模式,点击下一步,

选择安装来源,点击 “安装程序光盘映像文件(iso)”,浏览并选择下载好的Ubuntu 22.04 LTS镜像(如ubuntu-22.04.4-live-server-amd64.iso)。

2、配置虚拟机参数

设置用户名和密码
  • 输入虚拟机名称(如Ubuntu-Node1)。

指定磁盘容量

  • 建议分配 60GB,选择 “将虚拟磁盘拆分成多个文件”(便于迁移)。

  • 下一步

自定义硬件配置

  • 点击 “自定义硬件”,调整以下参数:

    • 内存:分配3GB(根据宿主机总内存调整)。

    • 处理器:分配处理器数量1,内核数量为6。

    • 网络适配器:选择 桥接模式(虚拟机直接使用物理网络)或 NAT模式(虚拟机共享宿主机IP)。我们选桥接模式

  • 点击关闭后完成配置。

3、安装Ubuntu 22.04系统

启动安装向导

  • 启动虚拟机,自动加载Ubuntu安装界面。

  • 选择语言为 English(推荐,避免编码问题),回车继续

系统配置

  1. 网络配置(关键步骤)

    • 安装程序会自动检测网络连接(需宿主机已联网)。

    • 如果使用DHCP(动态IP),直接按回车跳过。

    • 如需静态IP(推荐用于集群部署):

      • 选择当前网络接口(如ens33),按回车进入配置。

      • 关闭IPv4的 “Automatic”,手动输入以下信息:

        • Subnet(子网):192.168.1.0/24(根据实际网络环境调整)

        • Address(IP地址):192.168.1.200(依次为10~13分配给4台虚拟机)

        • Gateway(网关):192.168.1.1(通常为路由器IP)

        • Name servers(DNS):8.8.8.8,8.8.4.4

      • 保存配置并返回。

存储配置

  • 选择磁盘(默认Use an entire disk),按回车确认。并把free 部分设置为home

  • 确认分区方案(默认即可),选择 Done 并提交更改。

用户名和密码

用户名的都为sealos,由于要克隆,所以每个都一样

服务器名为node1,node2,master1,master2.,master3,base

密码为123456

 SSH配置

  • 勾选 “Install OpenSSH server”(允许远程SSH连接)。

完成安装

  • 等待系统安装完成,重启虚拟机

 4、开启root用户登陆

设置root用户密码:
sudo passwd root修改profile文件
sudo apt install vimsudo vim /root/.profile
注释掉: mesg n 2> /dev/null || true
添加: tty -s && mesg n || true\修改SSH配置文件
sudo vim /etc/ssh/sshd_config找到 #PermitRootLogin prohibit-password
改为 PermitRootLogin yessudo systemctl restart ssh重启
sudo reboot启动直接root登录

5、初始化环境 

# 定期检查并应用系统和应用程序的安全补丁。Ubuntu会定期发布安全更新。确保你的系统是最新的。
apt update && apt upgrade && apt dist-upgrade && apt autoremove && apt clean && reboot
# 安装一些常用的工具和库,这些工具可以帮助你更高效地工作apt install git curl wget htopapt install iputils-pingapt-get install openvswitch-switch
# 修改时区cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改linux参数vim /etc/security/limits.conf
#后面添加
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536含义如下:
soft nproc: 可打开的文件描述符的最大数(软限制)
hard nproc: 可打开的文件描述符的最大数(硬限制)
soft nofile:单个用户可用的最大进程数量(软限制)
hard nofile:单个用户可用的最大进程数量(硬限制)

6、配置网络 

前面安装时已经配置了,这里是对的

node1---------192.168.1.101

要修改ip,必须

#如果没这个问题直接创建,在后面network: {config: disabled}

vim /etc/netplan/50-cloud-init.yaml


network:
    ethernets:
        ens33:
            addresses:
            - 192.168.1.101/24
            nameservers:
                addresses:
                - 8.8.8.8
                - 8.8.8.4
                search: []
            routes:
            -   to: default
                via: 192.168.1.1
    version: 2

#如果修改了执行下面命令

netplan apply

7、验证网络

ping baidu.com

# 如果安装了其它虚拟机,也要ping

ping 192.168.1.102 

 8、更新etc/hosts文件

更新所有节点的/etc/hosts文件,添加IP与主机名映射:echo "192.168.1.111 node1" | tee -a /etc/hosts
echo "192.168.1.112 node2" | tee -a /etc/hosts
echo "192.168.1.101 master1" | tee -a /etc/hosts
echo "192.168.1.102 master2" | tee -a /etc/hosts
echo "192.168.1.102 master3" | tee -a /etc/hosts

 9、开放端口

前面分析表格确定需要开放22,ICMP,10250三个端口

apt-get install ufw -yufw enableufw statusufw allow 22/tcp        # SSH
ufw allow 10250/tcp   ## 允许 Master 访问 Node 的 Kubelet

10、时间同步

apt update
apt install chronyvim /etc/chrony/chrony.conf
添加
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst# 重启并查看同步状态
systemctl status chrony
systemctl start chrony
systemctl enable chrony
systemctl restart chrony

四、安装master虚拟机

1、关闭模板虚拟机: 

shutdown now

2、克隆虚拟机

  • 右键模板虚拟机,选择 “管理” > “克隆”

  • 选择 “创建完整克隆”,命名新虚拟机(如Ubuntu-Master1)。

  • Ubuntu-Master1为模板重复此步骤生成剩余Ubuntu-Master2和Ubuntu-Master3 两台虚拟机。

3、修改mac

双击

 

克隆后mac地址相同,同时启动会冲突,请一定要改 

4、修改克隆机的静态IP和主机名

  • 启动克隆后的虚拟机,编辑网络配置文件(vim /etc/netplan/50-cloud-init.yaml),修改IP地址(如192.168.1.102,192.168.1.103,192.168.1.104)按前面规划的来。然后netplan apply

  • 修改主机名:

    hostnamectl set-hostname master1  # 依次改为master2~3

5、开放master端口

6443
2379-2380
10259
10257ufw allow 6443/tcp        # 允许 kubectl 和其他节点访问 API Server
ufw allow 2379:2380/tcp  # 仅多 Master 高可用集群需要
# ufw allow 10250/tcp      # 允许节点与 Master 的 Kubelet 通信
ufw allow 10259/tcp      # 调度器通信(按需开放)
ufw allow 10257/tcp      # 控制器管理器通信(按需开放)


root@master1:~# ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
10250/tcp                  ALLOW       Anywhere
6443/tcp                   ALLOW       Anywhere
2379:2380/tcp              ALLOW       Anywhere
10259/tcp                  ALLOW       Anywhere
10257/tcp                  ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
10250/tcp (v6)             ALLOW       Anywhere (v6)
6443/tcp (v6)              ALLOW       Anywhere (v6)
2379:2380/tcp (v6)         ALLOW       Anywhere (v6)
10259/tcp (v6)             ALLOW       Anywhere (v6)
10257/tcp (v6)             ALLOW       Anywhere (v6)
 

6、再安装两台master虚拟机

这次用master1克隆

  • 克隆
  • 修改mac ,有时候感觉变了啊,不动,反正我碰到相同的
  • 启动
  • 修改ip地址:102和103
  • 修改主机名:master2和master3

五、安装Node虚拟机

 1、关闭Base虚拟机: 

shutdown now

2、克隆虚拟机

  • 右键模板虚拟机,选择 “管理” > “克隆”

  • 选择 “创建完整克隆”,命名新虚拟机(如Ubuntu-Node1)。

  • Ubuntu-Node1为模板重复此步骤生成剩余Ubuntu-Node2虚拟机。

3、修改mac

和前面相同 

4、修改克隆机的静态IP和主机名

  • 启动克隆后的虚拟机,编辑网络配置文件(vim /etc/netplan/50-cloud-init.yaml),修改IP地址(如192.168.1.111,192.168.1.112)按前面规划的来。然后netplan apply

  • 修改主机名:

    hostnamectl set-hostname node1  # 依次改为node2

 5、开放master端口

30000-32767
8472
179# sudo ufw allow 10250/tcp          # 允许 Master 访问 Node 的 Kubelet
ufw allow 30000:32767/tcp    # 允许外部访问 NodePort 服务
ufw allow 8472/udp           # Flannel VXLAN(按需)
ufw allow 179/tcp            # Calico BGP(按需)

6、再安装一台node虚拟机

这次用node1克隆

  • 克隆
  • 修改mac ,有时候感觉变了啊,不动,反正我碰到相同的
  • 启动
  • 修改ip地址:112
  • 修改主机名:node2

六、配置SSH免密登录

全部虚拟机开机,保证虚拟机互相都能ping通,很重要,要做喔

master1,master2,master3,node1,node2

在master1执行代码

检查一下,其实每个虚拟机都一样,/root/.ssh目录下有一个空文件authorized_keys


root@master1:~# ls -a
.  ..  .bash_history  .bashrc  .cache  .profile  .ssh  .viminfo
root@master1:~# cd .ssh
root@master1:~/.ssh# ls
authorized_keys
root@master1:~/.ssh# cat authorized_keys
root@master1:~/.ssh#
 

SSH免密登录#在master1虚拟机主节点生成密钥并分发到其他节点,在执行代码之前,/root/.ssh/authorized_keys里是空的ssh-keygen -t rsa  #一路回车
#master1执行后,有了三个文件,其它虚拟机这时候和他无关
root@master1:~/.ssh# ls
authorized_keys  id_rsa  id_rsa.pubssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.102
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.103
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.111
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.112#分别执行上面4条命令,分别键入yes和root的登录密码123456,
# 我们这时候去看
# master1 
root@master1:~/.ssh# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts  known_hosts.old# master2root@master2:~/.ssh# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtnMh7FsGEdGTLqRhwbcV5GUnyy7DH3u6cGiOE4wNpvqu0tX6ZDXn/j7MaHfkigPU0a3hOoRhkxjyl/KNXDbxJgrq126al9X1dzQQg1owG3n0BewLcga7uWXNFJSCsMDp1Yl8nxt/uynvBcj0CVz7+nJLET6jojVYk04ti7iJCz6oX9yVs+g7txNrtvtYbI2erl/MLf+/rPIz84h0QmD8xrGGWVvM9AmGRe+22ppTXfhsEBXPzrifogXRkpiFQ5za0GA41SSoRWERrCYqMIBMQLz96y6OCUWWKDOT1OUvrpyCQaz72YH7sIxwIyMZtBWZKlL1Y8MWsrMRAXYiwv6JPgbo8tE1vWVGhrxRK0JeSUPNDCvk70IsKZVpUaJCzPkVxgjFMl7oeEVKjzlGHu7vUk6Js/Uc1vHMEdZtCg+bBe3pV7E9WUusaHootNihvVOjd1tjaUQQF9T20f07Mtqws75GZJEbHlHGV0Ogjcr08t0QdmijzEsx6e4m45poOsgE= root@master1#其它几个都一样,空文件有东西了,这个就是key

master1 测试

ssh root@192.168.1.102

root@master1:~/.ssh# ssh root@192.168.1.102
Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-136-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

This system has been minimized by removing packages and content that are
not required on a system that users do not log into.

To restore this content, you can run the 'unminimize' command.
New release '24.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Sat Apr 12 20:18:47 2025 from 192.168.1.9
root@master2:~#这里进入了master2的命令行
 

node1测试连接master1

ssh root@192.168.1.101

不行的

node1测试连接node2

ssh root@192.168.1.112

不行的

只能master1连接其它4个虚拟机,反过来不行,其它互相也不行,这个主要为了在master1中安装集群用的 

我们需要在3个master上都是做一遍,要保证3个master之间是免密互通的

所以我们继续在master2和master3上把上面的重新执行一遍

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win32++ 使用初探

文章目录 1. 环境要求2. Win32安装3. 项目创建3.1 项目创建(1)直接使用Win32里的示例Sample(2)自行创建项目 最近想用 VC写些 UI,但又不太想用 MFC,正好对界面要求不太高,就使用了一下 Win3…

R 语言科研绘图第 38 期 --- 饼状图-玫瑰

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…

Linux驱动开发进阶(六)- 多线程与并发

文章目录 1、前言2、进程与线程3、内核线程4、底半步机制4.1、软中断4.2、tasklet4.3、工作队列4.3.1、普通工作项4.3.2、延时工作项4.3.3、工作队列 5、中断线程化6、进程6.1、内核进程6.2、用户空间进程 7、锁机制7.1、原子操作7.2、自旋锁7.3、信号量7.4、互斥锁7.5、comple…

第四节:React Hooks进阶篇-useEffect依赖项为空数组[]与不写的区别

陷阱题:闭包问题、Stale Closure举例 一、依赖项为空数组[]与不写的核心区别 行为空数组[]不写依赖项执行时机仅在组件挂载时执行一次(类似componentDidMount)组件每次渲染后都执行(类似componentDidUpdate)更新触发…

【第39节】windows编程:打造MFC版本任务管理器

目录 一、项目概述 二、项目开发的各种功能关键 2.1 进程信息的获取 2.2 线程信息的获取 2.3 进程模块信息的获取 2.3.1 模块快照 2.3.2 枚举模块 2.4 进程堆信息的获取 2.5 窗口信息的获取 2.6 文件信息的获取 2.7 内存信息和CPU占用率的获取 2.7.1 内存信息相关结…

计算轴承|滚动轴承故障频率

一、轴承故障频率概述 在旋转机械故障诊断中,轴承故障频率(BPFO、BPFI、BSF、FTF)是重要的分析依据。通过计算这些特征频率,可以帮助工程师: 识别轴承故障类型(内圈/外圈/滚动体故障)制定振动…

【数据结构与算法】ArrayList 和 顺序表

文章目录 🌲List🌲1. 线性表🌲2. 顺序表🌿2.1 MyArrayList2.1.1 类中重写所有接口方法1.新增元素2.在pos位置新增元素(指定位置)3.判定是否包含了某个特定元素 4.查找特定元素对应的位置 5.获取pos下标的元素 6.给pos位置的元素替…

OceanBase 推出单机版 ,为中小规模业务提供高性价比方案

近日,OceanBase正式推出了全新的单机版数据库。这款产品基于OceanBase自主研发的单机分布式一体化架构,具有精简的架构设计和出色的兼容性,能够为中小规模业务场景提供高性价比的数据库解决方案,充分满足客户在不同业务规模下的多…

如何在 Vue 3 中实现百度地图位置选择器组件

如何在 Vue 3 中实现百度地图位置选择器组件 前言 在开发前端应用时,地图选择器是一个非常常见的需求。尤其是在一些需要用户选择地址的场景,如电商平台、旅游网站、酒店预定等,百度地图组件能提供准确的地理位置服务。在本文中&#xff0c…

Python中如何用正则表达式精准匹配IP地址?

在网络编程和数据处理时,我们经常需要从文本中提取或验证IP地址。Python的正则表达式(re模块)是完成这个任务的利器。但你知道怎么写才能准确匹配各种合法的IP地址吗?今天我们就来详细探讨这个问题。 为什么需要IP正则表达式? 假设你正在分…

spring--声明式事务

声明式事务 1、回顾事务 要么都成功,要么都失败! 事务在项目开发中,十分重要,涉及数据的一致性问题 确保完整性和一致性 事务ACID: 原子性:事务是原子性操作,由一系列动作组成,…

Kotlin 学习-集合

/*** kotlin 集合* List:是一个有序列表,可通过索引(下标)访问元素。元素可以在list中出现多次、元素可重复* Set:是元素唯一的集合。一般来说 set中的元素顺序并不重要、无序集合* Map:(字典)是一组键值对。键是唯一的…

WPF 五子棋项目文档

WPF 五子棋项目文档 1. 项目概述 本项目是一个使用 Windows Presentation Foundation (WPF) 技术栈和 C# 语言实现的桌面版五子棋(Gomoku)游戏。它遵循 MVVM(Model-View-ViewModel)设计模式,旨在提供一个结构清晰、可…

计算机操作系统——死锁(详细解释和处理死锁)

系列文章目录 计算机操作系统-计算机系统中的死锁 文章目录 系列文章目录前言一、资源问题: 计算机系统当中的死锁: 二、死锁的定义、必要条件和处理方法: 1.死锁的定义:2.产生死锁的必要条件:3.处理死锁的方法&#…

Springboot项目正常启动,访问资源却出现404错误如何解决?

我在自己的springboot项目中的启动类上同时使用了SprinBootApplication和ComponentScan注解, 虽然项目能够正常启动,但是访问资源后,返回404错误,随后在启动类中输出bean,发现controller创建失败: 而后我将ComponentScan去掉后资源就能访问到了. 原因 SprinBootApplication本身…

第十五届蓝桥杯C/C++B组省赛真题讲解(分享去年比赛的一些真实感受)

试题A——握手问题 一、解题思路 直接用高中学的排列组合思路 二、代码示例 #include<bits/stdc.h> using namespace std; int fun(int n) {int sum0;for(int i0;i<n;i){for(int ji1;j<n;j)sum; } return sum; } int main() {cout<<fun(50)-fun(7); }三、…

动态规划(6)——01背包问题

欢迎来到博主的专栏&#xff1a;算法解析 博主ID&#xff1a;代码小号 文章目录 牛客网——【模板】01背包题目解析题目1算法原理题目1题解代码。问题2算法原理问题2题解代码01背包问题的滚动数组优化 牛客网——【模板】01背包 题目解析 关于I/O相关的东西博主就不多赘述了&a…

TQTT_KU5P开发板教程---实现流水灯

文档实现功能介绍 本文档是学习本开发板的基础&#xff0c;通过设置计数器使led0到led7依次闪烁&#xff0c;让用户初步认识vivado基本的开发流程以及熟悉项目的创建。本开发板的所有教程所使用的软件都是vivado2024.1版本的。可以根据网上的教程下载与安装。 硬件资源 此次教程…

Spring 中的 @Cacheable 缓存注解

1 什么是缓存 第一个问题&#xff0c;首先要搞明白什么是缓存&#xff0c;缓存的意义是什么。 对于普通业务&#xff0c;如果要查询一个数据&#xff0c;一般直接select数据库进行查找。但是在高流量的情况下&#xff0c;直接查找数据库就会成为性能的瓶颈。因为数据库查找的…

SEER: Self-Aligned Evidence Extraction for Retrieval-AugmentedGeneration

一、动机 如何从检索到的段落中提取证据&#xff0c;以降低计算成本并提升最终的RAG性能&#xff0c;然而这一问题仍然具有挑战性。 现有方法 严重依赖于基于启发式的增强&#xff0c;面临以下几个问题&#xff1a; &#xff08;1&#xff09;由于手工制作的上下文过滤&…