kubadm部署 kubernetes-1.29版本

一、集群节点准备

ip主机名称操作系统
192.168.1.160master-1Centos-7.9
192.168.1.161node-1Centos-7.9

二、安装前主机环境准备 (所有主机都需要进行)

1、配置主机名解析

echo "192.168.1.160 master-1" >> /etc/hosts
echo "192.168.1.161 node-1" >> /etc/hosts
hostnamectl  set-hostname  master-1 ;bash 
hostnamectl  set-hostname  node-1 ;bash

2、关闭防火墙和SELIUNX

systemctl  disable  --now firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config

3、关闭交换分区(在1.28版本后,可以开启交换分区进行使用,但是还是建议关闭)


## 查看分区使用
free -m
## 临时关闭交换分区,重启系统后,会继续开启
swapoff -a
## 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab

4、设置时间同步服务

## 安装ntpdate的命令
yum -y install  ntpdate
##时间同步服务
crontab -l 
0 */1 * * * /usr/sbin/ntpdate timel.aliyun.com

## 同步时间
ntpdate time1.aliyun.com

5、必要时升级内核版本

内核升级官网

wget  https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.273-1.el7.elrepo.x86_64.rpm
wget  https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.273-1.el7.elrepo.x86_64.rpm
wget  https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-doc-5.4.273-1.el7.elrepo.noarch.rpm
wget  https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-headers-5.4.273-1.el7.elrepo.x86_64.rpm
wget  https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-tools-5.4.273-1.el7.elrepo.x86_64.rpm
wget  https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-tools-libs-5.4.273-1.el7.elrepo.x86_64.rpm
wget  https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-tools-libs-devel-5.4.273-1.el7.elrepo.x86_64.rpm
yum -y install ./kernel-lt-5.4.273-1.el7.elrepo.x86_64.rpm
yum -y install ./kernel-lt-devel-5.4.273-1.el7.elrepo.x86_64.rpm
yum -y install ./kernel-lt-doc-5.4.273-1.el7.elrepo.noarch.rpm
yum -y install ./kernel-lt-headers-5.4.273-1.el7.elrepo.x86_64.rpm
yum -y install ./kernel-lt-tools-5.4.273-1.el7.elrepo.x86_64.rpm
yum -y install ./kernel-lt-tools-libs-5.4.273-1.el7.elrepo.x86_64.rpm
yum -y install ./kernel-lt-tools-libs-devel-5.4.273-1.el7.elrepo.x86_64.rpm
#查看内核是否载入到grub2
#/etc/grub2.cfg文件是/boot/grub2/grub.cfg文件的软链接,grub.cfg文件是grub引导加载器的配置文件
#注意:如果服务器使用efi模式启动,那么可能没有/boot/grub2/grub.cfg文件,其对应的配置文件可能是/boot/efi/EFI/centos/grub.cfg

[root@localhost ~]# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.4.273-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
2 : CentOS Linux (0-rescue-f87a526ce61b4e088ddb59691fd99d0b) 7 (Core)

刚刚安装的内核即0 : CentOS Linux (5.4.257-1.el7.elrepo.x86_64) 7 (Core)
我们需要把grub默认设置为0
可以通过 grub2-set-default 0 命令设置或编辑 vim /etc/default/grub 文件来设置

vim /etc/default/grub
GRUB_DEFAULT=0		#这句改为GRUB_DEFAULT=0 意思是GRUB初始化页面的第一个内核将作为默认内核,保存退出

#检查默认内核是不是5.4
grubby --default-kernel
#生成 grub 配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
#重启linux系统
reboot
#重启完成,查看现在linux内核,已经变成 5.4.273了
uname -r
Linux localhost.localdomain 5.4.273-1.el7.elrepo.x86_64 #1 SMP Wed Mar 27 15:58:08 EDT 2024 x86_64 x86_64 x86_64 GNU/Linux
#安装完成之后,会在/usr/src/kernels目录生成内核的源码包,这个仅了解即可
[root@jump ~]# ls /usr/src/kernels/5.4.273-1.el7.elrepo.x86_64/
arch  block  certs  crypto  drivers  fs  include  init  ipc  Kconfig  kernel  lib  Makefile  mm  Module.symvers  net  samples  scripts  security  sound  System.map  tools  usr  virt

6、配置内核转发以及网桥过滤

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

直接加载会出现报错,报错如下:
在这里插入图片描述

  • 使用 modprobe br_netfilter 进行加载
    在这里插入图片描述

  • 或者使用:sysctl --system 使其生效

7、安装ipset及ipvsadm

yum -y install ipset ipvsadm

配置ipvsadm模块加载方式
添加需要加载的模块

# cat > /etc/sysconfig/modules/ipvs.modules << EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

在这里插入图片描述

授权、运行、检查是否加载

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

在这里插入图片描述

三、安装容器运行时 (所有主机都需要安装)

  • 本次采用安装docker-ce 和 cri-docker 的方式

1、安装docker

# 添加yum源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
## 刷新yum源缓存
yum makecache 

## 安装docker-ce
yum -y install docker-ce

## 启动docker并设置开机启动
systemctl  enable  --now docker

2、修改cgroup方式

  • /etc/docker/daemon.json 默认没有此文件,需要单独创建
## 在/etc/docker/daemon.json添加如下内容
cat  > /etc/docker/daemon.json  << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
## 重新加载服务,并重启docker
systemctl  daemon-reload ; systemctl restart docker

3、cri-dockerd 的安装

##下载cri-dockerd的rpm包
https://github.com/mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8-3.e17.x86_64.rpm

## 下载cri-dockerd的tar包
# 下载安装2 
$ wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.10/cri-dockerd-0.3.10.amd64.tgz

$ tar -xf cri-dockerd-0.3.1.amd64.tgz
$ cp cri-dockerd/cri-dockerd /usr/bin/
$ chmod +x /usr/bin/cri-dockerd


###安装cri-dockerd
yum -y install  cri-dockerd-0.3.8-3.el7.x86_64.rpm 

在这里插入图片描述

  • 修改cri-dockerd配置文件
vim /usr/lib/systemd/system/cri-docker.service
## 修改第10行
10 ExecStart=/usr/bin/cri-dockerd  --pod-infra-container-image=registry.k8s.io/pause:3.9  --container-runtime-endpoint fd://

## 二进制安装需要手动添加配置文件
vim  /usr/lib/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-cache-dir=/var/lib/cni/cache --cni-conf-dir=/etc/cni/net.d --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

StartLimitBurst=3
StartLimitInterval=60s

LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
# 这里的参数 `--pod-infra-container-image`,这个值要根据实际情况调整,如果你的安装环境不能访问互联网,那你就需要配置为内部镜像仓库。

## 创建一个 socket 文件以便 kubelet 与 cri-dockerd 通信
 cat <<"EOF" > /usr/lib/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF

## 启动服务,并设定为开机自启动
systemctl daemon-reload ; systemctl enable --now cri-docker
  • 安装docker-ce,默认已经安装了containerd
    在这里插入图片描述

四、kubernetes-1.29版本集群安装

1、kubernetes社区yum准备

官网地址

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
#exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
## 清理所有缓存
yum clean all
## 刷新缓存
 yum makecache
## 查看kubadm安装包
yum list | grep kubeadm 

在这里插入图片描述

kubernetes 阿里云yum源准备(现在使用最新版)

cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/repodata/repomd.xml.key
EOF

setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

ps: 由于官网未开放同步方式, 可能会有索引gpg检查失败的情况, 这时请用 yum install -y --nogpgcheck kubelet kubeadm kubectl 安装

2、kubeadm kubectl kubelet 安装

yum -y install kubeadm kubectl kubelet
## 设置开机自启动,不设置为启动,是因为还没有配置五年级
systemctl  enable kubelet

在这里插入图片描述

3、创建一个 socket 文件以便 kubelet 与 cri-dockerd 通信

cat <<"EOF" > /usr/lib/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF

# 重启 cri-docker 服务
$ systemctl daemon-reload && systemctl restart cri-docker



4、master节点安装镜像

  • 查看 master需要哪些镜像,以及镜像版本
[root@master-1 ~]# kubeadm  config images list 
registry.k8s.io/kube-apiserver:v1.29.3
registry.k8s.io/kube-controller-manager:v1.29.3
registry.k8s.io/kube-scheduler:v1.29.3
registry.k8s.io/kube-proxy:v1.29.3
registry.k8s.io/coredns/coredns:v1.11.1
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.12-0
  • 下载镜像报错的原因,是因为系统有多个容器运行时
    在这里插入图片描述
kubeadm  config images pull --cri-socket unix:///var/run/cri-dockerd.sock
  • 镜像脚本
#!/bin/bash 
images_list='
registry.k8s.io/kube-apiserver:v1.29.3
registry.k8s.io/kube-controller-manager:v1.29.3
registry.k8s.io/kube-scheduler:v1.29.3
registry.k8s.io/kube-proxy:v1.29.3
registry.k8s.io/coredns/coredns:v1.11.1
registry.k8s.io/pause:3.9
registry.k8s.io/etcd:3.5.12-0'

for i in $images_list
do
    docker pull $i
done
   docker save -o k8s-1-29-0.tar $images_list

在这里插入图片描述

5、master节点初始化集群

kubeadm init \
  --apiserver-advertise-address=192.168.1.160 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.29.3 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket=unix:///var/run/cri-dockerd.sock \
  --ignore-preflight-errors=all

–apiserver-advertise-address 集群通告地址

–image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址

–kubernetes-version K8s版本,与上面安装的一致

–service-cidr 集群内部虚拟网络,Pod统一访问入口

–pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致

–cri-socket 指定cri-dockerd接口,如果是containerd则使用–cri-socket unix:///run/containerd/containerd.sock

–ignore-preflight-errors=all参数用于在运行kubeadm初始化之前忽略所有的预检错误。在执行kubeadm init时,Kubernetes会运行一系列的预检来确保节点的配置符合Kubernetes的要求。这些预检包括检查内核参数、网络设置、环境变量等。有时候,一些预检可能会失败,但是你仍然想要继续初始化集群。在这种情况下,你可以使用–ignore-preflight-errors参数并指定要忽略的错误,或者使用–ignore-preflight-errors=all来忽略所有的预检错误。

在这里插入图片描述

6、node节点加入集群

在这里插入图片描述

7、网络组件flannel

wget  https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

需要对yaml文件进行修改
第一处,网卡信息修改
135        containers:
   136        - args:
   137          - --ip-masq
   138          - --kube-subnet-mgr
   139          - --iface=ens33   ###默认是使用第一个网络,一般第一个网卡都是docker占用
   140          command:
   141          - /opt/bin/flanneld
   142          env:
   143          - name: POD_NAME
   144            valueFrom:
   145              fieldRef:
   146                fieldPath: metadata.name
   147          - name: POD_NAMESPACE
   148            valueFrom:
   149              fieldRef:
   150                fieldPath: metadata.namespace
第二处:pod地址范围修改
68  data:
    69    cni-conf.json: |
    70      {
    71        "name": "cbr0",
    72        "cniVersion": "0.3.1",
    73        "plugins": [
    74          {
    75            "type": "flannel",
    76            "delegate": {
    77              "hairpinMode": true,
    78              "isDefaultGateway": true
    79            }
    80          },
    81          {
    82            "type": "portmap",
    83            "capabilities": {
    84              "portMappings": true
    85            }
    86          }
    87        ]
    88      }
    89    net-conf.json: |
    90      {
    91        "Network": "10.244.0.0/16",  ## 这个默认是这个值,如果初始化不是这个pod地址范围,需要修改
    92        "Backend": {
    93          "Type": "vxlan"
    94        }
    95      }

第三处:镜像版本,考虑网络环境,如果不是本地环境,考虑换成国内的,或者提前拉取下来
[root@master-1 ~]# cat kube-flannel.yml  | grep image
        image: docker.io/flannel/flannel:v0.24.4
        image: docker.io/flannel/flannel-cni-plugin:v1.4.0-flannel1
        image: docker.io/flannel/flannel:v0.24.4

五、kubernetes-1.29版本可用性测试

1、集群状态检测

在这里插入图片描述

2、使用测试容器对集群进行检测

##1、启动容器
kubectl  run bs  --image=busybox:1.28.4 -- sleep 24h
## 2、查看容器状态
kubectl get pod 
## 3、进入容器
kubectl  exec -it bs -- sh
## 4、测试网络环境
ping www.baidu.com 
## 5、域名解析
nslookup kubernetes.default.svc.cluster.local

在这里插入图片描述

  • 通过以上操作都证明集群安装成功,如果有需要可以对master node节点进行添加,添加补充命令,方便操作,添加颜色高亮,看起来更加舒服,通过租户,添加到Dashboard等方便操作

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

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

相关文章

C++符号清洗、Swift符号清洗, 编译还原

C 符号清洗&#xff08;编译还原&#xff09; C 由于函数重载的原因&#xff0c;针对每个函数符号&#xff0c;假如了name mangling的机制。导致堆栈适合机制阅读&#xff0c;因为每个函数符号都是独一无二的&#xff0c;但是这并非程序员易读的文字。 比如我们有这个符号cra…

又一AI工具开源!企业应该如何搭上这趟AI快车

大模型技术在近两年来飞速发展&#xff0c;企业对大模型的认知更加理性、务实。大模型本身不会直接产生价值&#xff0c;但在大模型基础架构之上开发出的AI应用&#xff0c;带来技术创新及业务增长&#xff0c;成为企业真正关心的问题。 基于大模型开发的又一个AI工具诞生&…

XenCenter 2024 导入虚拟机

导入虚拟机 虚拟机位置 导入到那一个服务器 导入虚拟机存放存储位置 虚拟机网卡配置 SR修复功能&#xff0c;看自己需求 虚拟机恢复确认最终配置 恢复好的虚拟机 虚拟机模板转换

源浩流体设备与您相约2024年第13届生物发酵展

参展企业介绍 温州源浩流体设备科技有限公司是一家集设计、开发、制造、销售、服务于一体的高科技企业&#xff0c;公司主要生产各种不锈钢阀门、管件、卫生级流体设备(卫生级换向阀,卫生级减压阀,卫生级罐底阀)等。现为温州市泵阀协会会员&#xff0c;ISO9000 2008版质量质量…

视频号视频下载小程序,让你随心保存你喜爱的视频!

今天给大家推荐一个非常实用的小程序&#xff0c;它就是专为下载视频号视频而设计的&#xff01; 微信视频号的兴起&#xff0c;让越来越多的优质、有趣的视频在平台上涌现&#xff0c;我们经常会遇到一些想要保存、回看的视频&#xff0c;但却无法轻易下载到手机或电脑中。这…

Linux基础篇:操作系统进程的基本概念与进程管理基础操作

Linux基础篇&#xff1a;操作系统进程的基本概念与进程管理基础操作 进程的定义&#xff1a; 进程是计算机系统中正在运行的程序的实例。 每个进程都有自己的内存空间、执行状态、资源和上下文。 进程是操作系统进行资源分配和调度的基本单位。 进程描述&#xff1a; 每个进…

LeetCode 63. 不同路径 II

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到右下角…

华为CCE部署RabbitMQ中间件操作文档

1、创建有状态&#xff08;StatefulSet&#xff09;部署 中间件一般为有状态部署&#xff0c;有状态部署与无状态部署区别参考文档&#xff1a;K8S有无状态部署-CSDN博客 1.1、基本信息 注意&#xff1a; 应用名称命名规则&#xff1a;&#xff08;命名规则最好统一&#xff…

深入理解npm常用命令

npm&#xff08;Node Package Manager&#xff09;是 Node.js 的包管理工具&#xff0c;用于管理 Node.js 应用程序的依赖包。除了安装、更新和卸载依赖包外&#xff0c;npm 还提供了许多其他功能&#xff0c;如初始化项目、运行脚本、查看依赖树等。本文将详细介绍一些常用的 …

设计模式-行为型-中介者模式-Mediator

同事抽象类 public abstract class Colleague {private Mediator mediator;public abstract void play(String data); } 视频同事 public class AudioColleague extends Colleague {public void play(String data) {System.out.println("画外音是&#xff1a;" d…

GrayLog日志平台的基本使用-接入jumpserver

1、jumpserver3.8.0部署 Docker 环境准备 # 安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 替换Docker 安装源为清华大学镜像站 sed -i sh…

Linux-3 yum和vim

目录 本节目标&#xff1a; Linux 软件包管理器 yum 什么是软件包 1.yum是什么&#xff1f;软件包&#xff1f; 2.Linux(centos)的生态 3.yum的相关操作 我怎么知道我应该安装什么软件&#xff1f; 4.yum的本地配置 关于 rzsz 查看软件包 Linux编辑器-vim使用 1.v…

在电脑上怎么把视频做成二维码?视频生码的方法及步骤

在电脑上怎么把视频做成二维码呢&#xff1f;现在将视频存入二维码之后&#xff0c;将二维码分享或者打印出来&#xff0c;用这种方式来分享或者传递视频对比传统方式会更加的方便快捷。无需占用接收者的内存&#xff0c;手机扫码调取云端储存的视频&#xff0c;消耗视频流量来…

python 成员方法的区别是什么

Python的静态方法和类成员方法都可以被类或实例访问&#xff0c;两者概念不容易理清&#xff0c;但还是有区别的&#xff1a; 1&#xff09;静态方法无需传入self参数&#xff0c;类成员方法需传入代表本类的cls参数&#xff1b; 2&#xff09;从第1条&#xff0c;静态方法是…

redis集群搭建过程遇到的坑

在上一篇博文中搭建好了redis集群&#xff0c;但是仍然存在很多问题 上一篇&#xff1a;k8s下搭建redis集群 1、springboot服务连接 集群配置好了&#xff0c;spring服务应该怎么连接呢&#xff1f;单点和集群的连接配置写法是不一样的 单点 spring:redis:host: ${BTC_RED…

数控加工4轴初探

4轴加工之前一直觉得很神秘&#xff0c;最近画了些时间研究了一下&#xff0c;做过之后发现起始也不是特别复杂。 图中是两步&#xff0c;一步是粗开&#xff0c;已不是用指形铣刀精加工螺旋槽。

Unity Mesh 生成图形(二)

一、概述 Unity 的 Mesh 是用于表示三维物体的网格数据结构。它是由一系列顶点和三角形组成的网格&#xff0c;用于描述物体的形状和外观。 Mesh 是由顶点、三角形和其他相关信息组成的&#xff0c;它用于在 Unity 中创建和渲染三维对象。顶点是网格的基本构建单元&#xff0…

Xen Server 8 Install

Xen Sevrer 前言 XenServer&#xff08;以前称为 Citrix Hypervisor&#xff09;是业界领先的平台&#xff0c;实现了经济高效的桌面、服务器和云虚拟化基础结构。XenServer 支持任意规模或类型的组织整合计算资源&#xff0c;以及将计算资源转换为虚拟工作负载&#xff0c;从…

YOLOv7原创独家改进: 小目标 | CAMixing:卷积-注意融合模块和多尺度提取能力 | 2024年4月最新成果

💡💡💡本文独家改进:CAMixingBlock更好的提取全局上下文信息和局部特征,包括两个部分:卷积-注意融合模块和多尺度前馈网络; 💡💡💡红外小目标实现涨点,只有几个像素的小目标识别率提升明显 💡💡💡如何跟YOLOv8结合:1)放在backbone后增强对全局和局部特…

Java NIO Selector选择器源码分析

文章目录 前言Selector类结构Selector抽象类AbstractSelectorSelectorImplWindowsSelectorImpl三种SelectionKey集合 前言 Java NIO&#xff08;New I/O&#xff09;的Selector选择器是一个用于多路复用&#xff08;Multiplexing&#xff09;的I/O操作的关键组件。它允许一个单…