在离线环境中使用sealos工具快速部署一套高可用的k8s服务集群
文章目录
- 项目基础信息
- 工具版本
- 测试环境
- 下载资源文件
- 下载sealos二进制命令文件
- 下载k8s安装镜像和组件资源
- 下载docker离线安装包
- 下载Docker Registry容器镜像
- NFS共享配置
- coredns服务的DNS解析配置
- 安装配置sealos、k8s服务
- 安装sealos工具
- 导入k8s及相关组件镜像
- 安装 K8s 集群
- 部署ingress组件
- 调整Ingress资源请求体大小限制
- 部署NFS Provisioner组件
- 安装docker registry本地镜像仓库
- 离线安装docker
- 安装Docker Registry本地镜像仓库
- 参考资料
项目基础信息
在内部网络的离线环境中,通过使用sealos工具自动化部署一套高可用的k8s服务集群,配置使用NFS共享存储,以及搭建了一个Docker Registry本地镜像仓库的服务。
近期因工作所需,不得已又捡起放下了几年的k8s,在多方咨询后,确认sealos工具是可以满足我们部署一套高可用k8s服务集群需求的,也不致于影响到后续的长期运行维护与故障处理,于是使用了几天时间部署、验证并整理出这样一篇技术资料,发与大家共享。
工具版本
- sealos v4.3.7
- 集群镜像版本 labring/kubernetes:v1.27.16
测试环境
操作系统版本为RHEL7.9 64
测试机信息如下:
- 172.16.10.52 k8s master节点
- 172.16.10.53 k8s master节点
- 172.16.10.54 k8s master节点
- 172.16.10.55 k8s worker节点
- 172.16.10.56 k8s worker节点
- 172.16.10.57 k8s worker节点
- 172.16.10.63 NFS共享节点
- 172.16.10.64 docker image仓库
需要注意的是容器默认使用/var/lib作为数据存储路径,在开始安装服务前,务必检查下各主机节点的数据盘空间分配使用,或者是直接挂载到/var/lib路径,或者是将数据盘空间追加到/var分区均可。
在k8s集群所有主机节点上增加/etc/hosts映射配置如下:
cat << EOF >> /etc/hosts
172.16.10.52 test-APP-10-52
172.16.10.53 test-APP-10-53
172.16.10.54 test-APP-10-54
172.16.10.55 test-APP-10-55
172.16.10.56 test-APP-10-56
172.16.10.57 test-APP-10-57
EOF
下载资源文件
需要先找一个能访问互联网的linux主机,下载需要的资源文件。拷贝到内网中离线使用。
下载sealos二进制命令文件
以下命令均使用root用户执行。
VERSION=v4.3.7
export VERSION
wget https://mirror.ghproxy.com/https://github.com/labring/sealos/releases/download/${VERSION}/sealos_${VERSION#v}_linux_amd64.tar.gz
查看下载的文件:
ls -lh
-rw-r--r--. 1 root root 61M Oct 31 2023 sealos_4.3.7_linux_amd64.tar.gz
下载k8s安装镜像和组件资源
以下命令均使用root用户执行。
在有网络的环境中导出集群镜像:
sealos pull registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.16
sealos save -o kubernetes.tar registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.16sealos pull registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4
sealos save -o helm.tar registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4sealos pull registry.cn-shanghai.aliyuncs.com/labring/calico:v3.26.1
sealos save -o cilium.tar registry.cn-shanghai.aliyuncs.com/labring/calico:v3.26.1sealos pull registry.cn-shanghai.aliyuncs.com/labring/ingress-nginx:v1.11.2
sealos save -o ingress-nginx.tar registry.cn-shanghai.aliyuncs.com/labring/ingress-nginx:v1.11.2sealos pull registry.cn-shanghai.aliyuncs.com/labring/nfs-subdir-external-provisioner:v4.0.18
sealos save -o nfs-subdir-external-provisioner.tar registry.cn-shanghai.aliyuncs.com/labring/nfs-subdir-external-provisioner:v4.0.18
下载docker离线安装包
https://download.docker.com/linux/static/stable/x86_64/docker-20.10.24.tgz
下载Docker Registry容器镜像
找一个可以访问互联网的docker容器,执行下面命令下载并导出一份容器镜像文件:
docker pull registry
docker images
docker save IMAGE_ID > registry.tar
将上面下载的各种资源文件,拷贝到内网中做离线部署使用。
NFS共享配置
我们测试环境中没有nas共享网盘资源,所以在搭建该测试服务时改为使用一台测试机自行搭建一个NFS共享服务,管理信息如下:
- 测试机地址 :172.16.10.64
- 文件系统共享路径:/nfsdata
在这里跳过怎么配置上述linux系统下的nfs共享服务了,有不明白的可自行查找参考资料。
需要特别注意的一点是,需要调整nfs共享路径的属主权限如下:
## nfs 目录权限问题,执行命令修改权限:
chown nfsnobody:nfsnobody /nfsdata
coredns服务的DNS解析配置
由于目前测试环境没有dns解析服务,coredns容器会因找不到dns server而启动失败,解决方法有两种:
1)在k8s集群所有测试机上手工配置一条dns server地址
cat << EOF >> /etc/resolv.conf
nameserver 114.114.114.114
EOF
对于无法访问互联网的测试机来说,其实上面的nameserver地址可以随便写一个即可。需要注意的是,还需要手工修改下测试机网卡配置文件,增加DNS1=114.114.114.114的配置内容,以防测试机重启后会丢失resolv.conf中的配置信息。
2)执行命令kubectl edit cm coredns -n kube-system
在configmap配置文件中删除以下内容:
forward . /etc/resolv.conf {max_concurrent 1000}
保存退出后,删除相应的coredns pod即可。
安装配置sealos、k8s服务
挑选第一个k8s master节点,使用root用户执行以下配置操作。
安装sealos工具
tar zxvf sealos_${VERSION#v}_linux_amd64.tar.gz sealos
chmod 744 /usr/bin/sealos
mv sealos /usr/bin
导入k8s及相关组件镜像
将 kubernetes.tar、helm.tar、calico.tar 拷贝到离线环境, 使用 load 命令导入镜像即可:
sealos load -i kubernetes.tar
sealos load -i helm.tar
sealos load -i calico.tar
sealos load -i ingress-nginx.tar
sealos load -i nfs-subdir-external-provisioner.tar
查看集群镜像是否导入成功:
sealos imagesREPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-shanghai.aliyuncs.com/labring/kubernetes v1.27.16 d8938a9ce5af 11 days ago 623 MB
registry.cn-shanghai.aliyuncs.com/labring/ingress-nginx v1.11.2 66a7671dfb5f 2 months ago 130 MB
registry.cn-shanghai.aliyuncs.com/labring/calico v3.26.1 1e8350ad92f0 14 months ago 340 MB
registry.cn-shanghai.aliyuncs.com/labring/nfs-subdir-external-provisioner v4.0.18 379a90149496 16 months ago 18 MB
registry.cn-shanghai.aliyuncs.com/labring/helm v3.9.4 3376f6822067 2 years ago 46.4 MB
安装 K8s 集群
在所有节点上,预安装几个工具包如下:
yum -y install socat conntrack-tools ipvsadm nfs-utils
在所有节点上,配置支持ipvs:
mkdir -p /opt/k8s/
cat << EOF > /opt/k8s/ipvs.sh
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_sh
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- nf_conntrack_ipv4
EOFchmod +x /opt/k8s/ipvs.sh
echo "/opt/k8s/ipvs.sh" >>/etc/rc.local
chmod +x /etc/rc.localipvsadm -ln
在master1节点上面,通过sealos工具一键创建k8s服务集群:
sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.16 \registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 \registry.cn-shanghai.aliyuncs.com/labring/calico:v3.26.1 \--masters 172.16.10.52,172.16.10.53,172.16.10.54 \--nodes 172.16.10.55,172.16.10.56,172.16.10.57 -p change-to-your-password
## 查看配置结果,各节点应该是Ready状态
kubectl get nodes
## 查看容器Pod实例状态,STATUS应该是Running状态
kubectl get po -A -o wide
参数说明:
参数名 参数值示例 参数说明
- –masters 192.168.64.2 # K8s master 节点地址列表
- –nodes 192.168.64.1 # K8s node 节点地址列表
- –ssh-passwd [your-ssh-passwd] # ssh 登录密码
- kubernetes labring/kubernetes:v1.27.16 # K8s 集群镜像
在干净的服务器上直接执行上面命令,不要做任何多余操作即可安装一个高可用 K8s 集群。
查看最终的完整k8s集群配置结果:
[root@test-APP-10-52 sealos-k8s]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
test-app-10-52 Ready control-plane 23h v1.27.16
test-app-10-53 Ready control-plane 23h v1.27.16
test-app-10-54 Ready control-plane 23h v1.27.16
test-app-10-55 Ready <none> 23h v1.27.16
test-app-10-56 Ready <none> 23h v1.27.16
test-app-10-57 Ready <none> 23h v1.27.16
以下仅为参考,是节点增、删管理的更多方法:
## 增加master节点
$ sealos add --nodes 192.168.64.21,192.168.64.19
$ sealos add --masters 192.168.64.21,192.168.64.19 ## 删除 K8s 节点
$ sealos delete --nodes 192.168.64.21,192.168.64.19
$ sealos delete --masters 192.168.64.21,192.168.64.19
部署ingress组件
生成一个ingress-nginx服务的ConfigMap配置文件:
cat << EOF > ingress-nginx-config.yaml
apiVersion: apps.sealos.io/v1beta1
kind: Config
metadata:creationTimestamp: nullname: ingress-nginx-config
spec:data: |controller:hostNetwork: truekind: DaemonSetservice:type: NodePortmatch: registry.cn-shanghai.aliyuncs.com/labring/ingress-nginx:v1.11.2path: charts/ingress-nginx/values.yamlstrategy: merge
EOF
创建ingress-nginx服务:
sealos run registry.cn-shanghai.aliyuncs.com/labring/ingress-nginx:v1.11.2 --config-file ingress-nginx-config.yaml
[root@test-APP-10-52 sealos-k8s]# kubectl get po -A -o wide|grep nginx
ingress-nginx ingress-nginx-controller-5dj7c 1/1 Running 0 19h 172.16.10.56 test-app-10-56 <none> <none>
ingress-nginx ingress-nginx-controller-6jbqk 1/1 Running 0 19h 172.16.10.57 test-app-10-57 <none> <none>
ingress-nginx ingress-nginx-controller-cqb28 1/1 Running 0 19h 172.16.10.55 test-app-10-55 <none> <none>
调整Ingress资源请求体大小限制
在Kubernetes中,当使用Nginx Ingress Controller时,需要调整请求体大小限制,可以直接在Ingress资源中添加相应的annotations。
1、编辑Ingress资源
在Ingress资源的YAML文件中,添加或修改以下annotations:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata: name: my-ingress annotations: # 这里注解用于指定请求体的最大大小,这里设置为200MB。nginx.ingress.kubernetes.io/proxy-body-size: 200m
spec: ...
2、应用配置变更
保存并更新Ingress资源
kubectl apply -f your-ingress.yaml
3、验证配置
检查Nginx Ingress Controller的日志或使用kubectl describe命令查看Ingress资源的详细信息,确保配置生效。
部署NFS Provisioner组件
在这里遇到一个问题是,在离线网络环境中,无法正常使用helm添加仓库并部署nfs provisioner组件,也未找到更简单的解决方法,下面提供了一种临时的解决方案,仅供参考吧。
## 1、先找到sealos nfs组件的下载文件路径
find / -name nfs-subdir-external-provisioner
## 该路径与右侧类似,路径中间部分会有差别,我们以右侧路径进行示例说明:/var/lib/sealos/data/default/applications/default-dom2h16c/workdir/charts/nfs-subdir-external-provisioner
## 2、修改nfs provisioner组件的部署参数
cd /var/lib/sealos/data/default/applications/default-dom2h16c/workdir/charts/nfs-subdir-external-provisioner/
vi values.yaml
下面是values.yaml文件中需要根据实际配置信息进行修改的内容,重点是replicaCount、nfs.server、nfs.path这几个参数值:
replicaCount: 2
strategyType: Recreateimage:repository: registry.k8s.io/sig-storage/nfs-subdir-external-provisionertag: v4.0.2pullPolicy: IfNotPresent
imagePullSecrets: []nfs:server: 172.16.10.63path: /nfsdatamountOptions:volumeName: nfs-subdir-external-provisioner-root# Reclaim policy for the main nfs volumereclaimPolicy: Retain
执行创建nfs provisioner服务的命令:
cd /var/lib/sealos/data/default/applications/default-dom2h16c/workdir
./nfs-subdir-external-provisioner.sh
Release "nfs-subdir-external-provisioner" has been upgraded. Happy Helming!
NAME: nfs-subdir-external-provisioner
LAST DEPLOYED: Wed Oct 30 17:16:58 2024
NAMESPACE: nfs-provisioner
STATUS: deployed
REVISION: 4
TEST SUITE: None
查看nfs 驱动组件配置结果:
## 查看nfs deployment:
[root@test-APP-10-52 sealos-k8s]# kubectl get deployment -A -o wide|grep nfs
## 查看nfs ReplicaSet:
[root@test-APP-10-52 sealos-k8s]# kubectl get ReplicaSet -A -o wide|grep nfs
## 查看nfs storageclass:
[root@test-APP-10-52 sealos-k8s]# kubectl get sc -A -o wide|grep nfs
## 查看nfs provisioner容器:
[root@test-APP-10-52 sealos-k8s]# kubectl get po -A -o wide|grep nfs
nfs-provisioner nfs-subdir-external-provisioner-7fccc96d5-kwz5w 1/1 Running 0 44m 100.93.100.133 test-app-10-55 <none> <none>
nfs-provisioner nfs-subdir-external-provisioner-7fccc96d5-nq6t7 1/1 Running 0 70m 100.107.99.195 test-app-10-56 <none> <none>
## 如果继续查看容器配置详情,可执行以下命令:
[root@test-APP-10-52 sealos-k8s]# kubectl describe pod nfs-subdir-external-provisioner-7fccc96d5-kwz5w -n nfs-provisioner
设置nfs-client为默认使用的storageclass类:
kubectl get sc -A -o wide
kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
安装docker registry本地镜像仓库
在镜像仓库主机节点上执行。
离线安装docker
tar -zxvf ./docker-20.10.24.tgz
cp docker/* /usr/bin/
配置docker服务管理:
cat << EOF > /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd --selinux-enabled=false --insecure-registry=127.0.0.1
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
配置docker服务启动管理:
systemctl daemon-reload
systemctl enable docker.service
systemctl start docker
systemctl status docker
## 查看docker版本信息:
docker -v
安装Docker Registry本地镜像仓库
以下配置,是在镜像仓库节点上面执行。
预先检查与配置:
- 检查并为镜像仓库节点挂载数据盘 /data
- 配置并开放系统防火墙端口:
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.16.10.52" port protocol="tcp" port="5000" accept'
## 以上规则仅为示例,在实际部署时需按细粒度为所有访问镜像仓库的ip配置访问权限
firewall-cmd --reload
特别注意:该主机节点启动了firewalld系统墙服务后,轻易不可再做变更,否则会干扰docker容器的数据包转发链正常运行。如果一定要修改系统墙规则,那么在变更firewalld服务后,需要重启下服务systemctl restart docker。
导入registry离线镜像包:
docker load < registry.tar
运行docker私有仓库服务:
docker run -d -p 5000:5000 --restart always --name registry -v /data/registry/:/tmp/registry --privileged=true registry
登录与退出容器的方法:
docker exec -it container\_id /bin/sh
注意在退出容器时,不可执行exit,这会导致容器实例直接关停。正确退出容器的方法是连续执行以下两个命令的组合:
Ctrl+P Ctrl+Q
查看仓库中的镜像信息:
curl -XGET http://172.16.10.64:5000/v2/_catalog
配置linux客户端使用http协议访问私有仓库并推送容器镜像,可参考以下方法:
注意在
镜像仓库的服务器端是不需要调整配置的
:
vi /etc/docker/daemon.json
{"insecure-registries": ["0.0.0.0:5000"]
}
参考资料
- https://sealos.io/zh-Hans/docs/category/quick-start-1
- https://blog.csdn.net/weixin_37926734/article/details/123279987
- https://www.cnblogs.com/netcore3/p/16982828.html
相关文章:

在离线环境中使用sealos工具快速部署一套高可用的k8s服务集群
文章目录 项目基础信息工具版本测试环境 下载资源文件下载sealos二进制命令文件下载k8s安装镜像和组件资源下载docker离线安装包下载Docker Registry容器镜像 NFS共享配置coredns服务的DNS解析配置安装配置sealos、k8s服务安装sealos工具导入k8s及相关组件镜像安装 K8s 集群部署…...

ReactPress系列—Next.js 的动态路由使用介绍
ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议,感谢Star。 Next.js 的动态路由使用介绍 Next.js 是一个流行的 React 框架,支持服务端渲染、静态站点生成和动态路由等功能,极大地简化…...

DevOps业务价值流:需求设计最佳实践
DevOps实践正推动着产品快速迭代与高质量交付,但需求设计作为产品开发的关键起点,往往被忽视。它不仅是收集与分析需求的过程,更是将需求转化为可实施产品特性的核心。本文深入探讨DevOps业务价值流中的需求设计,从调研、整理、原…...

A15基于Spring Boot的宠物爱心组织管理系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…...

RC高通滤波器Bode图分析(传递函数零极点)
RC高通滤波器 我们使得R1K,C1uF;电容C的阻抗为Xc; 传递函数 H ( s ) u o u i R X C R R 1 s C R s R C 1 s R C (其中 s j ω ) H(s)\frac{u_{o} }{u_{i} } \frac{R }{X_{C}R} \frac{R }{\frac{1}{sC}R} \fra…...

SpeechT5 模型
微软开源的 SpeechT5 语音模型,主要包括以下功能 语音转文字:用于自动语音识别(ASR)。文字转语音:用于合成音频(TTS)。语音转语音:用于不同声音之间的转换或进行语音增强。 T5 网络…...

网站用户行为分析:方法、工具与实践
摘要:随着互联网发展,网站竞争激烈,用户行为分析对网站建设与运营至关重要。本文综合介绍了基于服务器日志和客户端收集用户行为数据的方法,包括各自优缺点及相关工具;阐述了网站用户分析的五大常规方法;以…...

医疗医药企业新闻稿怎么写?健康行业品牌宣传背书的报纸期刊杂志媒体有哪些
【本篇由 言同数字全球媒体 原创】在撰写医疗、医学和制药相关稿件时,遵循一定的结构和内容规范至关重要。以下是一些写作建议以及适合发表健康类稿件的报纸、杂志及新闻媒体的推荐。 一、稿件写作结构 标题 原则:简洁、明了,能够准确传达主…...

2024-11-06 问AI: [AI面试题] 人工智能如何用于欺诈检测和网络安全?
文心一言 人工智能在欺诈检测和网络安全领域的应用日益广泛,其强大的数据处理和分析能力为这一领域带来了革命性的变化。以下详细介绍人工智能在欺诈检测和网络安全中的具体应用: 一、欺诈检测 身份认证和访问控制: 通过验证用户的身份信息…...

个人3DCoat设置分享
个人3DCoat设置分享 将当前选择的对象置于屏幕正中显示: /键 版本3DCoat 2023 3DCoat自定义快捷键: Quick Pick: Q Transform: T Primitives: Shift A Cut Off : K Res : Shift Clear Space : Delete 隐藏/显示对象: 点击Sculpt Tree中的眼睛按钮 显示隐…...

Spark 程序开发与提交:本地与集群模式全解析
Spark 的介绍与搭建:从理论到实践-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 目录 一、本地开发与远程提交测试 (一)问题背景 (二)解决方案 集群环境准…...

Linux编程:DMA增加UDP 数据传输吞吐量并降低延迟
文章目录 0. 引言1. 原理介绍1.1 DMA 与中断的协同机制1.2. DMA优化UDP 数据包发送 2. DMA 配置优化 0. 引言 UDP 网络传输常面临高 CPU 占用、传输延迟和丢包等挑战。本文将介绍 DMA 如何优化 UDP 数据包的发送,以提高吞吐量、减少延迟并降低 CPU 占用。 阅读本文…...

鸿蒙开启无线调试
DevEco Studio没找到通过WI-FI连接手机的可视化操作按钮,就去官网看了下hdc - TCP连接场景 操作也比较简单: 第1步:PC通过USB连接手机/平板; 第2步:在手机/平板的“开发者选项”中打开“无线调试”并记录下IP和端口…...

C. DS循环链表—约瑟夫环 (Ver. I - B)
题目描述 N个人坐成一个圆环(编号为1 - N),从第S个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。 例如:N 3,K 2,S 1。2号先出列,然后是…...

【刷题】优选算法
优选算法 双指针 202. 快乐数 链接:. - 力扣(LeetCode) 【思路】 第一个实例是快乐数,因为会变为1且不断是1的循环 第二个实例不可能为1,因为会陷入一个没有1的循环 根据两个实例和鸽巢原理可以发现不断的平方和最…...

Python 在PDF中绘制形状(线条、矩形、椭圆形等)
在PDF中绘制图形可以增强文档的视觉效果。通过添加不同类型的形状,如实线、虚线、矩形、圆形等,可以使文档更加生动有趣,提高读者的阅读兴趣。这对于制作报告、演示文稿或是教材特别有用。本文将通过以下几个示例介绍如何使用Python 在PDF中绘…...

《今日制造与升级》是什么级别的期刊?是正规期刊吗?能评职称吗?
问题解答 问:《今日制造与升级》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《今日制造与升级》级别? 答:国家级。主管单位:中国机械工业联合会 …...

loading为什么不更新
场景:封装好的弹框,按钮上加了个loading状态,根据传入的值弹框提交的模块内容不一样。loading更新过后,但是值没有变。 注)写法一loading不更新,写法二loading值更新。 一、写法一 写法一中的 acceptanc…...

Rust 力扣 - 1652. 拆炸弹
文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 我们只需要遍历长度长度为k的窗口,然后把窗口内数字之和填充到结果数组中的对应位置即可 题解代码 impl Solution {pub fn decrypt(code: Vec<i32>, k: i32) -> Vec<i32> {let n c…...

使用Golang实现开发中常用的【并发设计模式】
使用Golang实现开发中常用的【并发设计模式】 设计模式是解决常见问题的模板,可以帮助我们提升思维能力,编写更高效、可维护性更强的代码 屏障模式 未来模式 管道模式 协程池模式 发布订阅模式 下面是使用 Go 语言实现屏障模式、未来模式、管道模式…...

基于Zynq FPGA对雷龙SD NAND的性能测试评估
文章目录 一、SD NAND特征1.1 SD卡简介1.2 SD卡Block图 二、SD卡样片三、Zynq测试平台搭建3.1 测试流程3.2 SOC搭建 四、软件搭建五、测试结果六、总结 一、SD NAND特征 1.1 SD卡简介 雷龙的SD NAND系列有多种型号,本次测试使用的是CSNP4GCR01-AMW和CSNP32GCR01-A…...

4.WebSocket 配置与Nginx 的完美结合
序言 在现代 web 应用中,WebSocket 作为一种全双工通信协议,为实时数据传输提供了强大的支持。若要确保 WebSocket 在生产环境中的稳定性和性能,使用 Nginx 作为反向代理服务器是一个明智的选择。本篇文章将带你了解如何在 Nginx 中配置 Web…...

Docker:镜像构建 DockerFile
Docker:镜像构建 DockerFile 镜像构建docker build DockerfileFROMCOPYENVWORKDIRADDRUNCMDENTRYPOINTUSERARGVOLUME 镜像构建 在Docker官方提供的镜像中,大部分都是基础镜像,他们只提供某个简单的功能,如果想要一个功能更加丰富…...

浮动路由:实现出口线路的负载均衡冗余备份。
浮动路由 Tip:浮动路由指在多条默认路由基础上加入优先级参数,实现出口线路冗余备份。 ip routing-table //查看路由表命令 路由优先级参数:越小越优 本次实验测试两条默认路由,其中一条默认路由添加优先级参数,设置…...

二叉树的遍历和线索二叉树
二叉树遍历 二叉树结点的定义 typedef struct BiNode{Elemtype data;struct BiNode* lchild, *rchild; }BiNode, *BiTree; 先序 递归算法 void PreOrder1(BiTree T){if(T!NULL){visit(T);PreOrder(T->lchild);PreOrder(T->rchild);} } 非递归算法(栈实现…...

SpringBoot3 集成Junit4
目录 1. 确保项目中包含JUnit 4依赖添加JUnit 4依赖 2. 配置Spring Boot使用JUnit 4在测试类中使用RunWith注解 3. 编写测试代码4、总结 【扩展】RunWith(SpringRunner.class) 中SpringRunner的作用1. **加载 Spring 应用上下文(ApplicationContext)**2.…...

Scala的set的添加删减和查询
添加:最好用于不可变数组,因为它会产生新数组,而不是在原数组上进行修改。 在尾部添加元素 可变数组 删减:按元素值删除元素 - 查询:查询元素是否存在.contains package Test //Set //特点:元素是唯…...

基于微信小程序的移动学习平台的设计与实现+ssm(lw+演示+源码+运行)
摘 要 由于APP软件在开发以及运营上面所需成本较高,而用户手机需要安装各种APP软件,因此占用用户过多的手机存储空间,导致用户手机运行缓慢,体验度比较差,进而导致用户会卸载非必要的APP,倒逼管理者必须改…...

【spark面试题】RDD和DataFrame以及DataSet有什么异同
RDD(Resilient Distributed Dataset): 概念:可理解为分布式的列表。它的每个元素代表数据的一行,具有支持泛型这一显著特点。这种泛型支持让开发人员能够处理各种类型的数据,具有很强的灵活性。例如&#…...

[Python]关于Tensorflow+Keras+h5py+numpy一些骚操作备忘
起因:要在Anaconda使用Tensorflow和Keras框架 这里提前小结一下: 1,一定要注意Python、Tensorflow、Keras不同版本的对应关系。 2,交叉用conda install 和pip install安装依赖库可能容易出现问题,在Anaconda虚拟环境…...