当前位置: 首页 > news >正文

配置Kubernetes从节点与集群Calico网络

在上一篇博客中,我们成功安装并初始化了Kubernetes的主节点,并且看到了集群初始化成功的标志信息。接下来,我们将继续安装从节点(worker nodes),以构建一个完整的Kubernetes集群。

步骤回顾

在上一步中,主节点初始化成功后,我们得到了加入控制平面节点和从节点的命令。这些命令包含了集群的加入端点(cluster-endpoint)、token以及CA证书哈希值。请确保这些信息在加入新节点时是有效的,因为token有默认的有效期(通常是24小时)。如果token过期,你需要在主节点上生成新的token。

# token过期时执行
kubeadm token create --print-join-command

查看node状态

kubectl get nodes

在这里插入图片描述
Kubernetes集群中的k8s-master节点处于NotReady状态。这时需要安装网络插件并且Pod网络已经就绪。本篇文章主要介绍从节点安装Kubernetes和集群配置网络插件。

步骤详解

步骤1: 设置主机名和hosts文件

#查看本机hostname
hostname 

若有重复的主机名使用下面命令进行修改
假设我们有以下三台机器:

  • k8s-master: 172.16.196.23
  • k8s-node1: 172.16.196.24
  • k8s-node2: 172.16.196.25
    在每台机器上修改主机名,并更新/etc/hosts文件,使各节点可以相互通信。
# 在k8s-master上执行
hostnamectl set-hostname k8s-master
# 在k8s-node1上执行
hostnamectl set-hostname k8s-node1
# 在k8s-node2上执行
hostnamectl set-hostname k8s-node2

步骤2: 关闭swap分区

Kubernetes不支持开启swap分区的系统。关闭swap并注释掉/etc/fstab中的swap条目以防止重启后swap重新启用。

swapoff -a  # 临时禁用
sed -ri 's/.*swap.*/#&/' /etc/fstab  # 永久禁用

步骤3: 添加Kubernetes仓库

创建一个名为 kubernetes.repo 的文件在 /etc/yum.repos.d/ 目录下,并添加官方的Kubernetes YUM仓库。

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

步骤4: 安装Kubernetes三大件:kubeadm、kubelet 和 kubectl

在每台机器上安装以下的软件包:

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet

如果要安装以前的版本,可以直接指定版本号,例如

sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
  • kubeadm:用来初始化集群的指令。
  • kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
  • kubectl:用来与集群通信的命令行工具。
    具体描述,本篇不再赘述,需要了解请阅读上篇文章

步骤5: 添加master域名映射

#查看master节点ip地址
ifconfig
#所有机器添加master域名映射
echo "10.211.55.5  cluster-endpoint" >> /etc/hosts

测试通信

# 执行看是否能联通
ping cluster-endpoint

在这里插入图片描述
在这里插入图片描述

步骤6: 启用 IPv4 数据包转发

默认情况下,Linux 内核不允许 IPv4 数据包在接口之间路由。 大多数 Kubernetes 集群网络实现都会更改此设置(如果需要),但有些人可能希望管理员为他们执行此操作。 (有些人可能还期望设置其他 sysctl 参数、加载内核模块等;请参阅你的特定网络实施的文档。)

手动启用 IPv4 数据包转发:

# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF# 应用 sysctl 参数而不重新启动
sudo sysctl --system

使用以下命令验证 net.ipv4.ip_forward 是否设置为 1:

sysctl net.ipv4.ip_forward

在这里插入图片描述

步骤7: 安装containerd

在这里插入图片描述

  1. 添加 containerd 的官方仓库
    首先,确保你有一个稳定的软件包源。你可以使用阿里云的镜像源来加快下载速度:

    wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    #查看yum源中containerd软件
    yum list | grep containerd
    

    在这里插入图片描述

  2. 安装 containerd
    使用 yum 安装 containerd:

    sudo yum install -y containerd.io
    
  3. 启用并启动 containerd 服务
    安装完成后,启用并启动 containerd 服务:

    sudo systemctl enable --now containerd
    
  4. 检查 containerd 状态
    确认 containerd 已成功启动并正在运行:

    sudo systemctl status containerd
    

在这里插入图片描述
5. 配置 containerd
重新生成一个默认配置,修改下面4处:

# sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
# sudo mkdir -p /etc/containerd
vim /etc/containerd/config.toml
  • SystemdCgroup:此配置改为 SystemdCgroup = true
  • disabled_plugins:此配置不能存在cri,如果用此配置,需要删除。
  • sandbox_image 改为 "registry.aliyuncs.com/google_containers/pause:3.6
  • plugins."io.containerd.grpc.v1.cri".registry.mirrors: 添加镜像加速地址,国内的一些镜像地址,包括阿里云、腾讯云以及各大高校提供的镜像源,已经全部关闭。可用镜像地址需要自行搜索,找到两篇文章:2025年1月国内可用Docker镜像源汇总、DockerHub 国内加速镜像列表,里面镜像地址是否可用自行测试!
[plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://1ms.run"][plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]endpoint = ["https://1ms.run"]

修改完成,重启containerd

sudo systemctl restart containerd

在这里插入图片描述
SystemdCgroup:此配置改为 SystemdCgroup = true
 disabled_plugins:此配置不能存在cri

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

步骤8: 主节点安装 Calico

下载 Calico 的 YAML 文件
根据k8s的版本,找到支持的Calico,calico归档版本在这里插入图片描述
使用以下命令下载 Calico 的 YAML 配置文件:

wget https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/calico.yaml

或者,你也可以下载 Calico 的 Operator 和自定义资源 YAML 文件,以便进行更精细的控制:

wget https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/custom-resources.yaml

部署 Calico

使用 kubectl 命令将下载的 YAML 文件应用到 Kubernetes 集群中:

kubectl apply -f calico.yaml

或者,如果你下载了 Operator 和自定义资源文件,则分别应用它们:

kubectl create -f tigera-operator.yaml
kubectl apply -f custom-resources.yaml

验证 Calico 是否成功安装并正常运行

使用以下命令检查 Calico 组件的部署情况:

kubectl get pods --all-namespaces

可能出现下载失败

Warning  Failed     20s (x2 over 77s)    kubelet            
Failed to pull image "docker.io/calico/cni:v3.25.0": rpc error: code = DeadlineExceeded 
desc = failed to pull and unpack image "docker.io/calico/cni:v3.25.0": 
failed to resolve reference "docker.io/calico/cni:v3.25.0": 
failed to do request: Head "https://registry-1.docker.io/v2/calico/cni/manifests/v3.25.0": 
dial tcp 202.160.129.37:443: i/o timeout

在这里插入图片描述

将文件中的镜像地址改为可以访问到的镜像地址,实例中的镜像地址随时可能失效,可以参考上篇文章里的镜像地址进行配置。

sed -i 's|docker.io/calico|docker.1ms.run/calico|g' calico.yaml
kubectl delete -f calico.yaml
kubectl apply -f calico.yaml

你应该能看到 Calico 相关的 Pod(如 calico-nodecalico-kube-controllers 等)都处于 Running 状态。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

步骤9:加入从节点

现在,让我们把工作节点加入到Kubernetes集群中。请记住,在每个工作节点上,你需要以root权限运行下面的命令。如果你之前没有保存下来,可以通过在主节点上运行下面命令来获取最新的kubeadm join命令。

kubeadm token create --print-join-command

以下是加入命令的例子,请用实际的集群端点、token和discovery-token-ca-cert-hash替换示例中的值:

kubeadm join cluster-endpoint:6443 --token emo01i.1k9co48bf6o5end8 \--discovery-token-ca-cert-hash sha256:dbad3d1197b173b2c94ebd6e2f39f38cdbe3fd9fe61f0be8c81256df0768e567

在执行此命令后,工作节点将下载必要的组件并加入集群。一旦所有的工作节点都加入了集群,你应该能够在主节点上看到它们的状态。你可以使用kubectl get nodes命令来检查集群中的节点列表及其状态。

在这里插入图片描述

开启端口和防火墙设置

理论上需要开这些端口:
Master 节点

sudo firewall-cmd --zone=public --permanent --add-port=6443/tcp
sudo firewall-cmd --zone=public --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --zone=public --permanent --add-port=10250/tcp
sudo firewall-cmd --zone=public --permanent --add-port=10251/tcp
sudo firewall-cmd --zone=public --permanent --add-port=10252/tcp
sudo firewall-cmd --reload

Worker 节点

sudo firewall-cmd --zone=public --permanent --add-port=10250/tcp
sudo firewall-cmd --zone=public --permanent --add-port=30000-32767/tcp
sudo firewall-cmd --reload

不过对于测试环境来说,为了以防未知的坑,还是直接关闭掉防火墙比较直接。在部署Dashboard的时候,Pod的状态一直为CrashLoopBackOff或Error。
查看log日志得到了如下的错误信息:

Error from server: Get "https://10.211.55.9:10250/containerLogs/kubernetes-dashboard/kubernetes-dashboard-api-cbbb6644d-szvc5/kubernetes-dashboard-api": dial tcp 10.211.55.9:10250: connect: no route to hos

通过kubectl get svc -n=kube-system 命令查询service,发现kube-dns还需要开启53/UDP,53/TCP,9153/TCP这三个端口。
kubernetes-dashboard也需要443端口。
综上所述,将本步骤修改为:

systemctl stop firewalld
systemctl disable firewalld

Kubernetes 集群安装总结

前置步骤(主从节点均需执行)
  1. 节点设置主机名和hosts文件
    • Node的名字会与主机名相同。
    • 主机的hosts文件必须添加映射,kubeadm join时会用到这些映射。
  2. 关闭swap分区
    • 禁用swap分区,以确保Kubernetes集群的稳定运行。
  3. 启用IPv4数据包转发
    • 启用IPv4转发功能,以便Kubernetes节点之间的网络通信。
  4. 安装并配置containerd
    • 安装容器运行时containerd。
    • 需要修改配置4处。
  5. 添加Kubernetes仓库
    • 将Kubernetes仓库添加到/etc/yum.repos.d/目录下。
    • 由于原始yum源中没有Kubernetes安装包,外网Kubernetes仓库可能无法访问,因此直接添加阿里云的Kubernetes仓库。
  6. 安装三大件
    • 在主从节点上安装Kubernetes的核心组件(kubelet、kubeadm、kubectl)。
主节点专属步骤
  1. 初始化主节点
    • 使用kubeadm init命令初始化Kubernetes主节点。
    • 初始化过程中会生成kubeadm join命令,用于从节点加入集群。
  2. 安装网络插件Calico
    • 安装Calico网络插件,以提供Kubernetes集群的Pod间网络通信。
从节点专属步骤
  1. 从节点加入集群
    • 使用在主节点初始化时生成的kubeadm join命令,将从节点加入Kubernetes集群。

至此我们已经成功搭建完kubernetes集群,下一篇将介绍如何搭建Dashboard。

相关文章:

配置Kubernetes从节点与集群Calico网络

在上一篇博客中&#xff0c;我们成功安装并初始化了Kubernetes的主节点&#xff0c;并且看到了集群初始化成功的标志信息。接下来&#xff0c;我们将继续安装从节点&#xff08;worker nodes&#xff09;&#xff0c;以构建一个完整的Kubernetes集群。 步骤回顾 在上一步中&a…...

【SH】Xiaomi9刷Windows10系统研发记录 、手机刷Windows系统教程、小米9重装win10系统

文章目录 参考资料云盘资料软硬件环境手机解锁刷机驱动绑定账号和设备解锁手机 Mindows工具箱安装工具箱和修复下载下载安卓和woa资源包第三方Recovery 一键安装Windows准备工作创建分区安装系统 效果展示Windows和Android一键互换Win切换安卓安卓切换Win 删除分区 参考资料 解…...

【Qt】01-了解QT

踏入QT的殿堂之路 前言一、创建工程文件1.1 步骤介绍1.2 编译介绍方法1、方法2、编译成功 二、了解框架2.1 main.cpp2.2 .Pro文件2.2.1 注释需要打井号。2.2.2 F1带你进入帮助模式2.2.3 build文件 2.3 构造函数 三、编写工程3.1 main代码3.2 结果展示 四、指定父对象4.1 main代…...

STC的51单片机LED点灯基于KEIL

前言&#xff1a; 该文源于回答一个朋友的问题&#xff0c;代码为该朋友上传&#xff0c;略作修改&#xff0c;在此说明问题以及解决问题的思路&#xff0c;以减少新手错误。 电路图&#xff1a; 该位朋友未上传电路图&#xff0c;说明如下&#xff1a; stc8g1k08a-sop8控制…...

AV1视频编解码简介、码流结构(OBU)

我的音视频/流媒体开源项目(github) 目录 一、AV1编码技术 二、AV1码流结构(OBU) 三、IVF文件格式 四、ffmpeg支持AV1 五、关于常见格式对AV1的封装 一、AV1编码技术 AV1是由开放媒体联盟(AOM&#xff0c;Alliance for Open Media)在2018年发布的&#xff0c;AV1的前身…...

Service Work离线体验与性能优化

Service Work离线体验与性能优化 引言 先放个意外事件&#xff0c;万事开头难&#x1f923;&#x1f923;&#x1f923; 原计划是分享离线应用与数据资源缓存的应用实践&#xff0c;结果发现这一技术已被web标准废弃 曾经做过一个PC应用&#xff0c;业务需求要求应用具备容灾…...

linux之进程信号(初识信号,信号的产生)

目录 引入一、初识信号(信号预备知识)1.生活中的信号2.Linux中的信号3.信号进程得出的初步结论 二、信号的产生1.通过终端输入产生信号拓展: 硬件中断2.调用系统函数向进程发信号3.硬件异常产生信号4.软件条件产生信号拓展: 核心转储技术总结一下&#xff1a; 引入 一、初识信…...

为深度学习创建PyTorch张量 - 最佳选项

为深度学习创建PyTorch张量 - 最佳选项 正如我们所看到的&#xff0c;PyTorch张量是torch.Tensor​ PyTorch类的实例。张量的抽象概念与PyTorch张量之间的区别在于&#xff0c;PyTorch张量为我们提供了一个可以在代码中操作的具体实现。 在上一篇文章中&#xff0c;我们看到了…...

MySQL 与 Redis 数据一致性 2

1. 强一致还是最终一致?2. 先写 MySQL 还是先写Redis?case 1 3. 缓存(Redis)更新还是清除?更新策略更新策略会有数据不一致问题?数据不一致的概率与影响如果使用监听binlog更新数据还会出现数据不一致问题?binlog的消费问题 使用消息队列行不行?其他方案总结: 数据不一致…...

Git | git reset命令详解

关注&#xff1a;CodingTechWork 引言 Git 是一款非常流行的分布式版本控制工具&#xff0c;它帮助开发者有效地管理代码历史&#xff0c;支持多种功能来帮助团队协作、追踪修改和维护代码质量。git reset是 Git 中最强大、最复杂的命令之一&#xff0c;它的主要作用是重置当前…...

Linux高并发服务器开发 第十四天(dup/duo2/fcntl 进程 pcb进程控制块 环境变量)

目录 1.dup 和 dup2 1.1dup 1.2dup2 2.fcntl 3.进程 3.1进程和程序 3.2并发 3.3cpu 3.5pcb进程控制块 3.6进程状态 4.环境变量 1.dup 和 dup2 1.1dup - 将 文件描述符 &#xff0c;复制产生“新文件描述符” 并返回。新、旧文件描述符&#xff0c;指向同一文件。 …...

[MySQL | 二、基本数据类型]

基本数据类型 一、数值类型举例表结构1. 整数类型zerofill属性 与 int(n) 中 n 的关系 2.bit类型3. 小数类型float类型decimal类型 二、字符串类型1. char2. varchar如何选择定长或变长字符串&#xff1f; 3. 日期时间类型(date datetime timestamp)4. enum枚举类型5. set多选类…...

第G1周:生成对抗网络(GAN)入门

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营]中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊]** 本人往期文章可查阅&#xff1a; 深度学习总结 基础任务 1.了解什么是生成对抗网络2.生成对抗网络结构是怎么样的3.学习本文代码&am…...

ROS2 准备工作(虚拟机安装,Ubuntu安装,ROS2系统安装)

准备工作 虚拟机安装 大家可以自行去安装VMware链接&#xff1a;https://pan.baidu.com/s/1KcN1I9FN--Sp1bUsjKqWVA?pwd6666 提取码&#xff1a;6666(提供者&#xff1a;零基础编程入门教程) 教程&#xff1a;【【2025最新版】VMware虚拟机安装教程&#xff0c;手把手教你免…...

FreeType 介绍及 C# 示例

FreeType 是一个开源的字体渲染引擎&#xff0c;用于将字体文件&#xff08;如 TrueType、OpenType、Type 1 等&#xff09;转换为位图或矢量图形。它广泛应用于操作系统、图形库、游戏引擎等领域&#xff0c;支持高质量的字体渲染和复杂的文本布局。 FreeType 的核心功能 字体…...

BertTokenizerFast 和 BertTokenizer 的区别

BertTokenizerFast 和 BertTokenizer 都是用于对文本进行标记化的工具&#xff0c;主要用于处理和输入文本数据以供 BERT 模型使用。它们都属于 HuggingFace 的 transformers 库。 主要区别 底层实现&#xff1a; BertTokenizer: 这是一个使用纯 Python 实现的标记器&#xff…...

OpenGL中Shader LOD失效

1&#xff09;OpenGL中Shader LOD失效 2&#xff09;DoTween的GC优化 3&#xff09;开发微信小程序游戏有没有类似Debug真机图形的方法 4&#xff09;射线和Mesh三角面碰撞检测的算法 这是第418篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了U…...

[操作系统] 深入理解约翰·冯·诺伊曼体系

约翰冯诺依曼&#xff08;John von Neumann&#xff0c;1903年12月28日—1957年2月8日&#xff09;&#xff0c;原名诺伊曼亚诺什拉约什&#xff08;Neumann Jnos Lajos&#xff09;&#xff0c;出生于匈牙利的美国籍犹太人数学家&#xff0c;20世纪最重要的数学家之一&#xf…...

计算机网络(五)运输层

5.1、运输层概述 概念 进程之间的通信 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最低层。 当网络的边缘部分中的两个主机使用网络的核心部分的功能进行端到端的通信时…...

网络分析仪测试S参数

S参数的测试 一&#xff1a;S参数的定义 S参数&#xff08;Scattering Parameters&#xff0c;散射参数&#xff09;是一个表征器件在射频信号激励下的电气行为的工具&#xff0c;它以输入信号、输出信号为元素的矩阵来表现DUT的“传输”和“散射”效应&#xff0c;输入、输出…...

什么是数据仓库?

什么是数据仓库&#xff1f; 数据仓库&#xff08;Data Warehouse&#xff0c;简称DW&#xff09;是一种面向分析和决策的数据存储系统&#xff0c;它将企业中分散的、异构的数据按照一定的主题和模型进行集成和存储&#xff0c;为数据分析、报表生成以及商业智能&#xff08;…...

.NET8.0多线程编码结合异步编码示例

1、创建一个.NET8.0控制台项目来演示多线程的应用 2、快速创建一个线程 3、多次运行程序&#xff0c;可以得到输出结果 这就是多线程的特点 - 当多个线程并行执行时&#xff0c;它们的具体执行顺序是不确定的&#xff0c;除非我们使用同步机制&#xff08;如 lock、信号量等&am…...

使用 Charles 调试 Flutter 应用中的 Dio 网络请求

为了成功使用 Charles 抓取并调试 Flutter 应用程序通过 Dio 发起的网络请求&#xff0c;需遵循特定配置步骤来确保应用程序能够识别 Charles 的 SSL 证书&#xff0c;并正确设置代理服务器。 配置 Charles 以支持 HTTPS 请求捕获 Charles 默认会拦截 HTTP 流量&#xff1b;…...

老centos7 升级docker.io为docker-ce 脚本

旧的centos7 之前安装的是docker.io 由于一些原因,像docker compose 等版本变化,以及docker.io源受限等,我们要更新到docker-ce 并使用国内阿里云的源怎么处理?下面直接上脚本,upgrade-docker.sh #!/bin/bashset -e# 创建临时目录 TEMP_DIR"./tmp" mkdir -p "…...

Go Ebiten小游戏开发:贪吃蛇

贪吃蛇是一款经典的小游戏&#xff0c;玩法简单却充满乐趣。本文将介绍如何使用 Go 语言和 Ebiten 游戏引擎开发一个简单的贪吃蛇游戏。通过这个项目&#xff0c;你可以学习到游戏开发的基本流程、Ebiten 的使用方法以及如何用 Go 实现游戏逻辑。 项目简介 贪吃蛇的核心玩法是…...

c语言----------内存管理

内存管理 目录 一。作用域1.1 局部变量1.2 静态(static)局部变量1.3 全局变量1.4 静态(static)全局变量1.5 extern全局变量声明1.6 全局函数和静态函数1.7 总结 二。内存布局2.1 内存分区2.2 存储类型总结2.3内存操作函数1) memset()2) memcpy()3) memmove()4) memcmp() 2.4 堆…...

在一个sql select中作多个sum并分组

有表如下&#xff1b; 单独的对某一个列作sum并分组&#xff0c;结果如下&#xff1b; 对于表的第7、8行&#xff0c;num1都有值&#xff0c;num2都是null&#xff0c;对num2列作sum、按id分组&#xff0c;结果在id为4的行会显示一个null&#xff1b; 同时对2个列作sum&#x…...

如何修复Android上未安装的应用程序

在Android设备上安装应用程序通常是一个简单的过程。然而&#xff0c;“ Android上未安装应用程序”是一种常见的智能手机错误消息&#xff0c;由于一个或多个原因而经常遇到。发现由于即将出现故障而无法充分利用手机&#xff0c;这当然会非常令人沮丧&#xff0c;但幸运的是&…...

#CSS混合模式:解决渐变背景下的文字可见性问题

在现代网页设计中&#xff0c;渐变背景的使用越来越普遍。然而&#xff0c;当我们在渐变背景上放置文字时&#xff0c;常常会遇到一个问题&#xff1a;文字在某些背景颜色下可能变得难以阅读。今天&#xff0c;我们将探讨一个优雅的解决方案&#xff1a;使用CSS混合模式。 问题…...

微信小程序原生与 H5 交互方式

在微信小程序中&#xff0c;原生与 H5 页面&#xff08;即 WebView 页面&#xff09;之间的交互通常有以下几种方式&#xff1a; 1. 使用 postMessage 进行通信 微信小程序的 WebView 页面和原生小程序页面可以通过 postMessage 来进行数据传递。 WebView 页面向原生小程序发…...

kotlin中的flow使用,Flow跟生命周期结合

kotlin的Flow可以连续异步发出多个数据。 1. 普通flow,冷流类似于一个函数&#xff0c;当开始收集时才开始运行 val coldStream flow {for (i in 1..5) {delay(100L)emit(i)}} val collect1 buildString {coldStream.collect { append(it).append(", ") } }.remo…...

讲一下ZooKeeper的持久化机制?

大家好&#xff0c;我是锋哥。今天分享关于【讲一下ZooKeeper的持久化机制&#xff1f;】面试题。希望对大家有帮助&#xff1b; 讲一下ZooKeeper的持久化机制&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 ZooKeeper 是一个开源的分布式协调服务&…...

mybatis里面实现动态升降序

问题 最近有一个需求&#xff0c;需要前端告诉后端按照某个字段进行排序。这里主要侧重mybatis的xml实现&#xff0c;其他Spring集成就忽略了。 mapper xml实现 <if test"sortField ! null and sortField ! ">ORDER BY<choose><when test"sor…...

探索网络安全:浅析文件上传漏洞

前言 在数字化时代&#xff0c;网络安全已成为我们每个人都需要关注的重要议题。无论是个人隐私保护&#xff0c;还是企业数据安全&#xff0c;网络威胁无处不在。了解网络安全的基本知识和防护措施&#xff0c;对我们每个人来说都至关重要。 网络安全 网络安全并非只是对网…...

【C++】B2112 石头剪子布

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述游戏规则&#xff1a;输入格式&#xff1a;输出格式&#xff1a;输入输出样例&#xff1a;解题分析与实现 &#x1f4af;我的做法实现逻辑优点与不足 &#x1f4af…...

java根据模板导出word,并在word中插入echarts相关统计图片以及表格

引入依赖创建word模板创建ftl模板文件保存的ftl可能会出现占位符分割的问题&#xff0c;需要处理将ftl文件中的图片的Base64删除&#xff0c;并使用占位符代替插入表格&#xff0c;并指定表格的位置在图片下方 Echarts转图片根据模板生成word文档DocUtil导出word文档 生成的wor…...

Linux网络知识——路由表

路由表 1 定义与作用 Linux路由表是一个内核数据结构&#xff0c;用于描述Linux主机与其他网络设备之间的路径&#xff0c;以及如何将数据包从源地址路由到目标地址。路由表的主要作用是指导数据包在网络中的传输路径&#xff0c;确保数据包能够准确、高效地到达目标地址。 …...

ImageSharp图形库学习

一、引言 在当今数字化时代&#xff0c;无论是 Web 应用、桌面程序&#xff0c;还是移动应用&#xff0c;图像处理都扮演着至关重要的角色。从电商平台展示商品图片&#xff0c;到社交媒体分享照片&#xff0c;再到各种软件的图标设计&#xff0c;图像处理无处不在。博主们在内…...

Android string.xml中特殊字符转义

项目中要在string.xml 中显示特殊符号 空格&#xff1a; &#xff08;普通的英文半角空格但不换行&#xff09; 窄空格&#xff1a;  &#xff08;中文全角空格 &#xff08;一个中文宽度&#xff09;&#xff09; &#xff08;半个中文宽度&#xff0c;但两个空格比一个中文…...

Rust 游戏开发框架指南

Rust 游戏开发框架指南 主流游戏引擎 1. Bevy 最受欢迎的 Rust 游戏引擎之一&#xff0c;基于 ECS&#xff08;实体组件系统&#xff09;架构。 特点&#xff1a; &#x1f680; 高性能 ECS 系统&#x1f4e6; 热重载支持&#x1f3a8; 现代渲染器&#x1f50a; 内置音频系…...

SpringBoot3+Vue3开发台球计时系统

项目介绍 台球计时系统可以帮助我们自动计算开台时间&#xff08;从开始到结束的时间段&#xff09;、自动计算开台费用、结账后生成订单记录进行留存、也可以导出订单记录。 主要功能包含&#xff1a;球桌管理、开台、结账、查看占用明细、查看球台订单、订单管理、查看订单…...

基于springboot的租房网站系统

作者&#xff1a;学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”&#xff0c;支持远程部署调试、运行安装。 项目包含&#xff1a; 完整源码数据库功能演示视频万字文档PPT 项目编码&#xff1…...

静态综合路由实验

实验拓扑 实验要求 1.除R5的环回地址外&#xff0c;整个其他所有网段基于192.168.1.0/24进行合理的IP地址划分 2.R1-R4每个路由器存在两个环回接口&#xff0c;用于模拟pc网段&#xff1b;地址也在192.168.1.0/24这个网络范围内 3.R1-R4上不能直接编写到达5.5.5.0/24的静态路由…...

国产编辑器EverEdit - 扩展脚本:新建同类型文件(避免编程学习者反复新建保存练习文件)

1 扩展脚本&#xff1a;在当前文件目录下新建同类型文件 1.1 应用场景 用户在进行编程语言学习时&#xff0c;比如&#xff1a;Python&#xff0c;经常做完一个小练习后&#xff0c;又需要新建一个文件&#xff0c;在新建文件的时候&#xff0c;不但要选择文件类型&#xff0c…...

Ubuntu Server 24.04 配置静态IP

Ubuntu Server 24.04 配置静态IP 提示&#xff1a;基于Ubuntu Server 24.04进行配置 文章目录 Ubuntu Server 24.04 配置静态IP一、查看网卡信息二、修改网卡信息三、使网卡配置生效四、测试 一、查看网卡信息 使用命令 ip a lo 为本地回环地址 ens33 真实网卡地址 shanfengubu…...

​​​​​​​​​​​​​​★3.3 事件处理

★3.3.1 ※MouseArea Item <-- MouseArea 属性 acceptedButtons : Qt::MouseButtons containsMouse : bool 【书】只读属性。表明当前鼠标光标是否在MouseArea上&#xff0c;默认只有鼠标的一个按钮处于按下状态时才可以被检测到。 containsPress : bool curs…...

linux系统监视(centos 7)

一.系统监视 1.安装iostat&#xff0c;sar&#xff0c;sysstat&#xff08;默认没有&#xff0c;安装过可以跳跃&#xff09; iostat 和 sar&#xff1a; 同样&#xff0c;iostat 和 sar 是 sysstat 软件包的一部分。使用以下命令安装&#xff1a;sudo yum install sysstat解释…...

Java面试总结(1)

问题1 自我介绍&#xff1a; 面试官您好&#xff0c;我叫xxx&#xff0c;是来自xxxx大学软件工程专业的一名应届生&#xff0c;我这次想应聘的是java开发实习生&#xff0c;在校期间&#xff0c;我热爱编程&#xff0c;能够使用java&#xff0c;C,python的编程语言&#xff0c…...

晨辉面试抽签和评分管理系统之六:面试答题倒计时

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…...

关于H5复制ios没有效果

问题场景&#xff1a;今天遇到这样一个问题&#xff0c;需要从后端接口获取到的值进行复制&#xff0c;且不能提现调用获取值&#xff0c;因为是一个数据列表&#xff0c;每个列表元素需要当场点击调用接口获取值进行复制&#xff0c;本来以为很简单的一个需求&#xff0c;当做…...