在离线环境中使用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

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

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

相关文章

交易所开发:构建安全、高效、可靠的数字资产交易平台

随着数字资产的不断发展&#xff0c;数字货币交易所作为连接数字资产与现实世界的重要桥梁&#xff0c;逐渐成为全球金融市场的核心组成部分。无论是比特币、以太坊等主流加密货币&#xff0c;还是各种基于区块链的资产&#xff0c;都需要通过交易所进行交换和流通。因此&#…

了解分布式数据库系统中的CAP定理

在分布式数据库系统的设计和实现中&#xff0c;CAP定理是一个至关重要的概念。CAP定理&#xff0c;全称为一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容忍性&#xff08;Partition tolerance&#xff09;定理&#xff0c;由…

RabbitMQ应用问题

1. 幂等性保障 1.1 介绍 幂等性是数学和计算机科学中某些运算的性质, 它们可以被多次应⽤, ⽽不会改变初始应⽤的结果. 在应⽤程序中, 幂等性就是指对⼀个系统进⾏重复调⽤(相同参数), 不论请求多少次, 这些请求对系统的影响都是相同的效果. ⽐如数据库的 select 操作. 不同…

HTB:Sense[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What is the name of the webserver running on port 80 and 443 according to nmap? 使用nmap对靶机TCP端口进行开放扫描 2.What is the name of the application that presents a login screen on port 443? 使用浏览器访问靶机80端…

【LeetCode每日一题】——802.找到最终的安全状态

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 图 二【题目难度】 中等 三【题目编号】 802.找到最终的安全状态 四【题目描述】 有一个有…

stm32使用串口的轮询模式,实现数据的收发

------内容以b站博主keysking为原型&#xff0c;整理而来&#xff0c;用作个人学习记录。 首先在STM32CubeMX中配置 前期工作省略&#xff0c;只讲重点设置。 这里我配置的是USART2的模式。 会发现&#xff0c;PA2和PA3分别是TX与RX&#xff0c;在连接串口时需要TX对RX&…

C++上机实验|继承与派生编程练习

1.实验目的 (1) 掌握派生与继承的概念与使用方法 (2) 运用继承机制对现有的类进行重用。 (3) 掌握继承中的构造函数与析构函数的调用顺序, (4) 为派生类设计合适的构造函数初始化派生类。 (5) 深入理解继承与组合的区别。 2.实验内容 设计一个人员类 person 和一个日期类 da…

【MySQL】 运维篇—故障排除与性能调优:案例分析与故障排除练习

理论知识及概念介绍 1. 故障排除的重要性 无论是电商平台、社交网络还是企业管理系统&#xff0c;数据库的稳定性和性能直接影响到用户体验和业务运作。因此&#xff0c;及时发现并解决数据库故障是确保系统高可用性和可靠性的关键。 2. 应用场景 电商平台&#xff1a;在大促…

【STL_list 模拟】——打造属于自己的高效链表容器

一、list节点 ​ list是一个双向循环带头的链表&#xff0c;所以链表节点结构如下&#xff1a; template<class T>struct ListNode{T val;ListNode* next;ListNode* prve;ListNode(int x){val x;next prve this;}};二、list迭代器 2.1、list迭代器与vector迭代器区别…

冒泡排序、选择排序、计数排序、插入排序、快速排序、堆排序、归并排序JAVA实现

常见排序算法实现 冒泡排序、选择排序、计数排序、插入排序、快速排序、堆排序、归并排序JAVA实现 文章目录 常见排序算法实现冒泡排序选择排序计数排序插入排序快速排序堆排序归并排序 冒泡排序 冒泡排序算法&#xff0c;对给定的整数数组进行升序排序。冒泡排序是一种简单…

如何高效集成每刻与金蝶云星空的报销单数据

每刻报销单集成到金蝶云星空的技术实现 在企业日常运营中&#xff0c;费用报销和付款申请是两个至关重要的环节。为了提升数据处理效率和准确性&#xff0c;我们采用了轻易云数据集成平台&#xff0c;将每刻系统中的报销单数据无缝对接到金蝶云星空的付款申请单中。本案例将详…

陪玩app小程序开发案例源码核心功能介绍

‌陪玩系统‌是一种基于互联网技术的服务平台&#xff0c;旨在为用户提供游戏陪玩、语音聊天、社交互动等功能。陪玩系统通常包括以下几个核心功能&#xff1a; ‌游戏约单‌&#xff1a;用户可以通过陪玩系统发布游戏约单&#xff0c;寻找合适的陪玩伙伴一起进行游戏&#xf…

【题解】【排序】—— [NOIP2017 普及组] 图书管理员

【题解】【排序】—— [NOIP2017 普及组] 图书管理员 [NOIP2017 普及组] 图书管理员题目背景题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示 1.思路解析2.AC代码 [NOIP2017 普及组] 图书管理员 通往洛谷的传送门 题目背景 NOIP2017 普及组 T2 题目描述 图书馆中…

WPF+MVVM案例实战(十七)- 自定义字体图标按钮的封装与实现(ABC类)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、案例效果1、按钮分类2、ABC类按钮实现1、文件创建2、字体图标资源3、自定义依赖属性4、按钮特效样式实现 3、按钮案例演示1、页面实现与文件创建2、依赖注入3 运…

《Qwen2-VL》论文精读【下】:发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当

1 前言 《Qwen2-VL》论文精读【上】&#xff1a;发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当 上回详细分析了Qwen2-VL的论文摘要、引言、实验&#xff0c;下面继续精读Qwen2-VL的方法部分。 文章目录 1 前言2 方法2.1 Model Architecture2.2 改进措施2…

TypeScript延迟执行工具类

TypeScript延迟执行工具类 在前端开发中&#xff0c;我们经常需要处理一些延迟执行、防抖和节流的场景。今天介绍一个实用的Delay工具类&#xff0c;它提供了这些常用的延迟执行功能。 文章目录 TypeScript延迟执行工具类0、完整代码1. 基础延迟执行sleep方法execute方法 2. 防…

RustRover加载Rust项目报错

问题描述&#xff1a; 昨天还可以正常使用的RustRover今天打开Rust项目一直报错&#xff1a; warning: spurious network error (3 tries remaining): [7] Couldnt connect to server (Failed to connect to 127.0.0.1 port 51342 after 105750 ms: Couldnt connect to server…

C语言---文件操作万字详细分析(6)

文件操作 到这里&#xff0c; C语言所有知识点&#xff0c; 就告已段落了&#xff0c; 虽然知识点到这里结束了&#xff0c; 但我想&#xff0c; 我们的编程之路也可能刚刚开始&#xff0c; 这些知识&#xff0c; 是我们在创造伟大事物时&#xff0c; 必不可少的基础&#xff…

回溯——3、5升杯倒4升水

回溯应用 接前面书上说数学浅谈最大公约数g c d ( a , b ) = x ∗ a + y ∗ b gcd(a,b)=x*a+y*b gcd(a,b)=x∗a+y∗bP 3 2 = 6 P_{3}^{2}=6 P32​=6只要一杯8升水代码一般回溯方法的程序结构打印接前面 递归的改造——间隔挑硬币打印所挑选的硬币需要用到回溯。但书上的回溯没…

clickhouse 安装配置

1.clickhouse官网下载安装包&#xff1a; 官网下载地址&#xff1a; https://packages.clickhouse.com/tgz/ 下载四个tgz文件&#xff1a; 1 clickhouse-common-static 2 clickhouse-common-static-dbg 3 clickhouse-server 4 clickhouse-client 2 安装上面1到4的顺序依…