【2024】k8s集群 图文详细 部署安装使用(两万字)
目录💻
- 一、前言
- 二、下载依赖配置环境
- 1、配置系统环境
- 1.1、配置桥接网络
- 1.1.1、parallels desktop配置
- 1.1.2、VMware配置
- 1.2、配置root用户登陆
- 2、环境配置安装下载
- 2.1、安装ipset和ipvsadm
- 2.2、关闭SWAP分区
- 3、配置Containerd容器
- 3.1、下载安装Containerd
- 3.2、创建&修改配置文件
- 3.3、启动Containerd&开机自启
- 4、添加K8S集群组件
- 4.1、修改下载源
- 4.2、安装组件
- 5、克隆服务器
- 5.1、通过parallels desktop克隆
- 5.2、通过VMware克隆
- 6、主机配置
- 6.1、设置静态ip
- 6.2、修改主机名
- 6.3、主机名解析ip
- 6.4、时间同步
- 6.5、配置内核转发、网桥过滤配置
- 三、部署集群
- 1、配置部署k8s集群
- 1.1、集群初始化
- 1.2、准备kubectl配置文件
- 1.2、添加从节点
- 2、安装k8s网络插件Calico
- 2.1、执行安装tigera-operator
- 2.2、配置custom-resources
- 2.3、错误解达。
- 四、测试使用
- 1、安装可视化Web工具:Kuboard v3
- 1.1、使用kubectl安装(master01节点执行)
- 1.1.2、常见错误
- 1.2、web配置
- 2、部署Nginx服务
- 2.1、使用Kuboard部署
- 2.2、使用yaml方式创建
一、前言
因为我只有一台服务器,我使用的是,所有我采用的是通过安装虚拟机的方式实现集群搭建,先把需要的配置环境拉取下来,然后再通过虚拟机的克隆的方式直接把配置克隆到新的服务器上,减少重复下载。
通过在ubuntu服务器上安装VMware和在MAC上安装parallels desktop都有部署成功,安装虚拟机的实体机配置内存需要够,并且需要可以连接🛜,因为需要下载一些配置依赖,因为是安装k8s集群需要安装三台ubuntu容器。当然如果是有多台服务器的话直接把安装命令都执行一遍就行
下面是我使用的配置:
| 信息 | 配置 |
|---|---|
| 节点主机 | Ubuntu20.4 / 22.4 |
| K8S版本 | 1.28.1 |
| 配置 | 三台集群(内存:2G、磁盘:30G) |
| SSH连接工具 | WindTerm / Tabby |
| 宿主机 | Ubuntu24.4 / M2 |
| 虚拟机工具 | VMWaer / parallels desktop |
ubuntu镜像(注意看后缀arm是 苹果的Apple M,Intel 的用amd): https://pan.baidu.com/s/16f1lzIqFOHlsyfzVV3lv9A?pwd=5p8a 提取码: 5p8a
WindTerm(ssh连接工具下载地址):https://github.com/kingToolbox/WindTerm/releases
二、下载依赖配置环境
1、配置系统环境
1.1、配置桥接网络
因为我们实际开发中肯定是把k8s部署在服务器上的嘛,所以需要把虚拟机内服务器的网络改为同物理机在同一网段的。所以需要在 “桥接网络”选项下的列表中选择虚拟机将要桥接的物理适配器。否则同一局域网的其他物理机都没法范围到这些虚拟机的ip
1.1.1、parallels desktop配置
- 右击对应的虚拟机,点击配置,选择硬件中的网络,修改源为桥接网络中的默认适配器,如果有多个网络,则直接选择你想要用于外部连接的那个网络就行

- 通过ifconfig命令查看ip是否改为了外表局域网同一网段了

1.1.2、VMware配置
-
先点击网络适配器

-
选择第一个,然后保存退出

-
再右击每个主机服务器,点击设置(Settings)

-
选择网络,选择桥接网络,点击确认保存,然后就可以到对应的主机查看IP了

1.2、配置root用户登陆
在创建虚拟机的时候需要先添加ssh连接,但我们创建后,是不能直接用root用户直接登陆的,虽然可以通过sudo su转为root,但每次都要转,也麻烦,可以通过修改配置,让直接通过root用户进行ssh登陆。
-
首先通过ssh工具连接上虚拟机,账号密码就是我们创建的时候设置的那个账号,然后通过
sudo su切换为root管理员用户

-
修改/etc/ssh/sshd_config文件配置
修改下面ssh的配置文件的,34行左右的位置(右下角可以看行数),把标注的三行的注释打开,并且把第34行改为 yesvim /etc/ssh/sshd_config·

-
重制root用户的密码
把root用户的密码改为自己需要的sudo passwd root -
重启ssh服务
service ssh restart
-
其他
如果是没有安装ssh命令,可以通过#更新软件包 sudo apt update #安装ssh sudo apt install openssh-server #安装ifconfig命令包(刚创建的虚拟机可能会没有) sudo apt install net-tools
2、环境配置安装下载
下面的步骤,如果是使用的下面的WindTerm的截图代表是集群的每个容器都需要执行的,如果是使用的上面的tabby的截图代表是只有master节点需要执行就行。
因为他们的配置一样,我免得都下载一遍,所以我直接一个下载好,然后通过克隆的方式直接克隆到其他的节点去,这样也避免出现一些不一样的东西
2.1、安装ipset和ipvsadm
它们在 Kubernetes (k8s) 中用于网络管理和负载均衡。
-
首先执行安装
apt-get install ipset ipvsadm执行的时候需要你输入
y确认,确认就行

-
然后执行配置 ipvsadm 模块,用于开机自启动的,可以使用
vi /etc/modules-load.d/ipvs.conf查看是否配置成功cat << EOF | tee /etc/modules-load.d/ipvs.conf ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack EOF
-
因为本次也需要启动,所以需要在配置一个脚本用于本次启动的
配置脚本文件cat << EOF | tee ipvs.sh #!/bin/sh modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack EOF执行刚刚创建的脚本
sh ipvs.sh -
通过下面的命令查看是否配置成功
lsmod | grep ip_vs如下图,就表示加载成功了

2.2、关闭SWAP分区
直接通过修改/etc/fstab文件,永久关闭SWAP分区,避免重启时打开
-
永久关闭
vim /etc/fstab打开后,把最后一行
/swap.img开头的注释调就行

修改swap需要重启才能使得配置文件生效,因为现在就需要用,可以直接重启,也可以先临时关闭掉 -
临时关闭
swapoff -a -
查看是否关闭成功
free -m变0了表示关闭了

3、配置Containerd容器
Containerd 在 Kubernetes 中扮演了容器运行时的角色,负责创建、管理和运行容器,提供了一个标准的容器运行时环境和安全特性。
3.1、下载安装Containerd
-
下载Containerd,因为是在github上所以如果没有外网可能会下载不成功,我上面的百度网盘有放下载好的(注意看后缀arm是 苹果的Apple M,Intel 的用amd),直接导入到服务器里面去就行,如果自己下载也是,别下载错了
wget https://github.com/containerd/containerd/releases/download/v1.7.5/cri-containerd-1.7.5-linux-amd64.tar.gz -
安装 Containerd
解压后会自动安装到指定位置去#解压文件 tar xf cri-containerd-1.7.5-linux-amd64.tar.gz -C / #查看安装 containerd --version
3.2、创建&修改配置文件
-
创建配置文件
#创建配置文件目录 mkdir /etc/containerd #生成默认的配置文件 containerd config default > /etc/containerd/config.toml #查看是否生成成功 ls /etc/containerd
-
修改配置文件
vim /etc/containerd/config.toml
-
修改第65行sanbox_image的值改为
registry.aliyuncs.com/google_containers/pause:3.9,改为阿里的镜像地址和版本号。(镜像地址也可以不修改,只需要修改版本号也行,需要和后面–>8.1、集群初始化介绍的kubeadm-config.yaml文件的一致就行)

-
需要137行的
false改为true
修改好后保存退出
3.3、启动Containerd&开机自启
-
执行开机启动,并且现在就启动
systemctl enable --now containerd -
验证是否启动成功
systemctl status containerd
4、添加K8S集群组件
4.1、修改下载源
-
添加阿里的软件源
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list -
验证是否添加成功
ls /etc/apt/sources.list.d -
更新软件源
apt-get update这个时候会失败,因为没有公钥,缺少 GPG 的key导致的

-
把公钥添加到服务器
上面图片箭头的B53DC80D13EDEF05就是你的公钥,需要添加自己的apt-key adv --recv-keys --keyserver keyserver.ubuntu.com B53DC80D13EDEF05导入之后就会更新成功
apt-get update
4.2、安装组件
下面三个是k8s必要的组件,
kubeadm:创建、升级和管理 Kubernetes 集群kubelet:管理节点上的容器生命周期kubectl:管理和调试 Kubernetes 应用程序
- 执行安装
安装的时候需要y,y就行apt-get install kubeadm=1.28.1-00 kubelet=1.28.1-00 kubectl=1.28.1-00
上面是我安装的版本,如果想安装其他版本可以用下面的命令查看,如果不加版本号,会下载最新的
-
查看版本
apt-cache madison kubeadm apt-cache madison kubelet apt-cache madison kubectl
-
查看是否安装成功
kubeadm version kubelet --version kubectl version
-
锁定版本
安装好后需要需要锁定版本,避免自动更新造成的一些问题apt-mark hold kubeadm kubelet kubectl
5、克隆服务器
因为我们是要建立k8s集群嘛,所以需要有三台服务器用做搭建集群,
如果是本身有多台服务器的,并且前面的命令都在全部服务器执行过了的,就可以跳过这一步。
克隆服务器在VMware和parallels desktop执行都比较简单
5.1、通过parallels desktop克隆
- 先把服务器关闭

- 右击你刚刚下载的好配置依赖的容器,点击克隆

- 定义名称,点击确认
重复两次克隆两台从服务器出来

5.2、通过VMware克隆
-
克隆
先关闭虚拟机,然后右击点击

-
然后一路next确认




然后等待克隆完成,启动
6、主机配置
6.1、设置静态ip
-
复制配置文件
避免配置错了无法恢复。可能有些版本的配置文件不是叫00-installer-config.yaml这个名字,反正修改/etc/netplan下的那个文件就行cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak -
修改配置文件
vim /etc/netplan/00-installer-config.yaml
-
配置文件(三台虚拟机服务器都需要配置本虚拟机的ip)
需要修改下面文件的addresses: [192.168.5.55/24]和via: 192.168.5.1,!!!注意不要有多余空格- addresses需要把ip改为本服务器的
- via:网段改为自己的,网段通过
route -n命令查看

-
安装的arm架构的
# This is the network config written by 'subiquity' network:version: 2ethernets:enp0s5:dhcp4: noaddresses: [192.168.5.55/24]routes:- to: defaultvia: 192.168.5.1nameservers:addresses: [119.29.29.29,114.114.114.114,8.8.8.8] -
安装的amd架构的
network:version: 2renderer: networkdethernets:ens33:dhcp4: noaddresses:- 192.168.3.170/24routes:- to: defaultvia: 192.168.3.1nameservers:addresses: [119.29.29.29,114.114.114.114,8.8.8.8]
-
配置生效
netplan apply配置好之后可以ping一下局域网的其他物理机的网络,看是否可以ping通

6.2、修改主机名
三台服务器分别执行
-
master01执行
hostnamectl set-hostname master01 -
worker01执行
hostnamectl set-hostname worker01 -
worker02执行
hostnamectl set-hostname worker02然后
exit退出当前用户,在重新登陆一下就可以了,可以看名字都一句以及已经改为了对应的名字
6.3、主机名解析ip
全部都需要执行(!!!!这个要改为自己集群的主机ip)
cat >> /etc/hosts << EOF
192.168.5.53 mater01
192.168.5.54 worker01
192.168.5.55 worker02
EOF
通过WindTerm的频道功能,可以实现同频道中,只要一个页面输入,其他的都会同步输入

再执行查看是否写入
cat /etc/hosts

6.4、时间同步
-
更改时区为上海时区
timedatectl set-timezone Asia/Shanghai -
安装ntpdate
ntpdate是一个用于同步系统时钟与NTP服务器的工具apt-get install ntpdate -
通过ntpdate命令同步时间
ntpdate time1.aliyun.com -
通过定时任务去实现定时同步
crontab -e中间会让你选择输入
2:

把下面这行加入进去0 */1 * * * ntpdate time1.aliyun.com
6.5、配置内核转发、网桥过滤配置
- 配置依赖模块到 /etc/modules-load.d/k8s.conf,用于实现开启自动加载
-
overlay: 这是 OverlayFS 的内核模块,用于支持 Docker 和 Kubernetes 等容器化技术。
-
br_netfilter: 这是 Linux 内核中的网桥过滤器模块,用于支持 Kubernetes 的网络功能。
cat << EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF配置完成之后,本次启动这两个配置,因为配置上配置后期开机启动的,当下也需要先启动
modprobe overlaymodprobe br_netfilter
2. 查看是否启动成功lsmod | egrep "overlay"lsmod | egrep "br_netfilter"
-
转发配置到k8s.conf文件中
cat << EOF | tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF -
加载内核参数:
sysctl --system -
然后在查看是否加载成功
sysctl -a | grep ip_forwardnet.ipv4.ip_forward = 1和net.ipv4.ip_forward_update_priority = 1都变为1了表示加载成功
三、部署集群
1、配置部署k8s集群
1.1、集群初始化
下面的只需要master节点的主机执行,其他的两个从机不用执行
- 创建kubeadm-config配置文件
把配置文件打印到本地,用于编辑kubeadm config print init-defaults > kubeadm-config.yaml
- 修改文件
修改拉下来的配置文件vim kubeadm-config.yaml
-
修改
advertiseAddress的ip为mater01节点的ip -
修改
name为mater01节点的主机名 -
修改
imageRepository仓库地址为阿里云的镜像仓库registry.aliyuncs.com/google_containers。因为前面/etc/containerd/config.toml文件修改了,如果前面的文件镜像仓库地址没修改,这个地方也可以不修改 -
修改
kubernetesVersion版本号,前面下载的是什么版本就写什么版本 -
dnsDomain表示DNS域名,可以不修改,但一个局域网内只能有一个相同的,如果有两个k8s集群用的一样的DNS名字就会冲突,一般推荐修改为公司的域名 -
在
networking中的 serviceSubnet 后面添加podSubnet: 10.244.0.0/16 -
在最后面在添加下面的配置
--- kind: KubeletConfiguration apiVersion: kubelet.config.k8s.io/v1beta1 cgroupDriver: systemd红色的是修改,绿色的是添加

-
重启服务
修改完,分别重启containerd 和 kubeletsystemctl restart containerd systemctl restart kubelet -
下载镜像
下载k8s所需要的镜像到主节点
--image-repository:指定镜像仓库--kubernetes-version:版本号,改为你的k8s版本kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version v1.28.1
-
执行初始化
kubeadm init --config kubeadm-config.yaml出现下面的,就表示初始化成功了

1.2、准备kubectl配置文件
-
添加配置文件
把上面输出的内容在master节点执行一遍mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config -
查看节点
kubectl get nodes
1.2、添加从节点
复制刚刚自己初始化的地址,到从节点执行,也就是另外两个worker02节点
(!!!这个是我的,需要复制自己的)
-
复制token
kubeadm join 192.168.5.53:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:55917a9c22cb444e83ce19517b8b9f1856401cf3ca11df4e661978fd9eed222e
-
查看
在到主节点进行查看kubectl get nodes在查看,就可以看到刚刚加入的worker节点了

2、安装k8s网络插件Calico
k8s常用的网络插件主要有
- Flannel:Flannel是Kubernetes官方推荐的网络插件之一。它提供了一种基于UDP的网络通信方式,支持多租户和多网段。
- Calico:Calico是另一个流行的K8S网络插件。它提供了一种基于BGP的网络通信方式,支持多租户和多网段。
- Weave:Weave是一种基于 Overlay 网络的K8S网络插件。它提供了一种简单易用的方式来管理集群中的网络通信。
- Cilium:Cilium是一种基于 Linux 内核的K8S网络插件。它提供了一种高性能的网络通信方式,支持多租户和多网段。
- OpenVSwitch:OpenVSwitch是一种基于开源的K8S网络插件。它提供了一种高性能的网络通信方式,支持多租户和多网段。
2.1、执行安装tigera-operator
-
下载
我这安装的是3.26.1,如果需要安装其他版本,直接改版本号就行,其他目录都是一样的kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
-
查看是否安装成功
tigera-operatorkubectl get ns -
查看pod状态
如果是Runing状态就代表成功了,如果不是就代表有问题kubectl get pods -n tigera-operator
2.2、配置custom-resources
custom-resources.yaml 是一个用于配置 Kubernetes 的自定义资源定义(CRD)文件
-
先拉取下来
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml -
修改配置
修改配置网段,这个网段是前面初始化时设置的podSubnet的网段cidr: 10.244.0.0/16vim custom-resources.yaml
-
拉取镜像
因为一些原因,选择不能下载,需要通过一些大佬弄的映射加速仓库去拉。
!!!全部节点都要拉取。
如果下面的地址不行,可以到里面去找最新的
https://github.com/DaoCloud/public-image-mirror/issues/2328ctr image pull docker.1panel.live/calico/cni:v3.26.1 ctr image pull docker.1panel.live/calico/pod2daemon-flexvol:v3.26.1 ctr image pull docker.1panel.live/calico/node:v3.26.1 ctr image pull docker.1panel.live/calico/kube-controllers:v3.26.1 ctr image pull docker.1panel.live/calico/typha:v3.26.1 ctr image pull docker.1panel.live/calico/node-driver-registrar:v3.26.1 ctr image pull docker.1panel.live/calico/csi:v3.26.1
-
查看是否下次完成
ctr image list要确保全部都是
application/vnd.docker.distribution.manifest.list.v2+json没有出现 Init:ErrImagePull

-
应用配置
下载完成之后执行下面命令,应用配置kubectl create -f custom-resources.yaml -
查看命名空间
kubectl get ns看到
calico-system代表ok了

-
查看pod
kubectl get pods -n calico-system大概等个几分钟,都是
Runing,代表成功
-
再查看节点信息,就会发现状态已经变成 Ready 状态
kubectl get nodes
到这一步,说明就是全部安装完成了
2.3、错误解达。
如果哪个节点有问题
执行下面命令直接删除掉k8s相关的东西,然后重新安装三个组件,在去重新通过链接加入就行。
#重置 Kubernetes 集群,它会删除所有与 Kubernetes 相关的配置文件、数据和组件。
sudo kubeadm reset
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/*
rm -rf /root/.kube
rm -rf /etc/kubernetes/*ipvsadm -C
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
四、测试使用
1、安装可视化Web工具:Kuboard v3
1.1、使用kubectl安装(master01节点执行)
发生错误可以查看kuboard官网
https://press.demo.kuboard.cn/install/v3/install-in-k8s.html
-
下载配置文件
wget https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml -
执行创建
kubectl apply -f vim kuboard-v3-swr.yaml如果镜像拉取不下来可以修改下镜像仓库地址改为我的阿里云的进行仓库地址
vim kuboard-v3-swr.yaml# 地址: registry.cn-hangzhou.aliyuncs.com/zhengfp_images/kuboard-agent registry.cn-hangzhou.aliyuncs.com/zhengfp_images/etcd-host:3.4.16-1 registry.cn-hangzhou.aliyuncs.com/zhengfp_images/kuboard:v3 registry.cn-hangzhou.aliyuncs.com/zhengfp_images/questdb:6.0.4分别把地址放入下面对应的地方



继续执行部署kubectl apply -f vim kuboard-v3-swr.yaml -
查看部署
kubectl get pods -n kuboard都是
Running即可
-
web测试
-
在浏览器打开链接
http://节点IP:30080 -
输入初始用户名和密码,并登录
- 用户名:
admin - 密码:
Kuboard123

- 用户名:
1.1.2、常见错误
通过kubectl get pods -n kuboard查看pod,看哪个pod不成功
查看对应的错误
powershell kubectl logs kuboard-v3-7979bc788f-hln74 -n kuboard
desc = "transport: Error while dialing dial tcp: missing address"错误表明 Kuboard 无法连接到 etcd。

kuboard-v3-xxxxx的容器出现CrashLoopBackOff的状态,可能的原因有
需要执行
前面两个错误都是执行下面的命令
kubectl label nodes mater01 k8s.kuboard.cn/role=etcd
1.2、web配置
-
刚进去会有一个错误的集群,删除掉,点击添加集群

-
输入集群名称和描述

-
复制kubeConfig
在master01节点执行cat ~/.kube/config命令,把全部内容复制到kubeConfig框内,点击确认
如图显示,代表成功

2、部署Nginx服务
2.1、使用Kuboard部署
-
在首页点击集群,选择命名空间

-
填写信息
左边选择,名称空间>常用操作>创建工作负载,然后再填写基本信息

-
填写容器信息
阿里云镜像地址registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest填写好之后点击上面的保存>应用>确认>


-
查看

5.访问对应的节点进行测试

2.2、使用yaml方式创建
-
创建yaml
vim nginx-deployment.yaml -
编写配置
--- apiVersion: apps/v1 kind: Deployment metadata:name: nginxweb # 部署的名称 spec:replicas: 2 # 设置副本数量为2selector:matchLabels:app: nginxweb1 # 用于选择匹配的Pod标签template:metadata:labels:app: nginxweb1 # Pod的标签spec:containers:- name: nginxwebc # 容器名称image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest # 镜像拉取地址,换成阿里云的,不然会拉取失败imagePullPolicy: IfNotPresent # 镜像拉取策略,如果本地没有就拉取ports:- containerPort: 80 # 容器内部监听的端口 --- apiVersion: v1 kind: Service metadata:name: nginxweb-service # 服务的名称 spec:externalTrafficPolicy: Cluster # 外部流量策略设置为集群selector:app: nginxweb1 # 用于选择匹配的Pod标签ports:- protocol: TCP # 使用TCP协议port: 80 # 服务暴露的端口targetPort: 80 # Pod中容器的端口nodePort: 30080 # 在每个Node上分配的端口,用于外部访问type: NodePort # 服务类型,使用NodePort -
应用配置
kubectl apply -f nginx-deployment.yaml -
检查是否成功
-
查看
podkubectl get pods -
查看
serviceservice 可以查看到对应pod的名称还有端口映射
kubectl get service -
查看访问ip
curl http://10.244.5.3 curl http://10.244.30.69
- 通过对应的节点IP进行测试
⌨️码字不易,觉得可以的话可以一键三连一下!!!
相关文章:
【2024】k8s集群 图文详细 部署安装使用(两万字)
目录💻 一、前言二、下载依赖配置环境1、配置系统环境1.1、配置桥接网络1.1.1、parallels desktop配置1.1.2、VMware配置 1.2、配置root用户登陆 2、环境配置安装下载2.1、安装ipset和ipvsadm2.2、关闭SWAP分区 3、配置Containerd容器3.1、下载安装Containerd3.2、创…...
CSS 伪类和伪元素
也是选择器的一种,被称为伪类和伪元素。这一类选择器的数量众多,通常用于很明确的目的。 伪类 什么是伪类 伪类是选择器的一种,它用于选择处于特定状态的元素。 比如当它们是这一类型的第一个元素时(:first-child)&…...
某动一面——算法题
function restoreIpAddresses(s) {const result = [];function backtrack(start, path) {// 如果剩余的字符数不符合IP地址的要求,则剪枝if (s.length - start > (4 - path.length) * 3) return;if (s.length - start < (4 - path.length)) return;// 当找到了四段IP地址…...
kubernetes中共享内存和内存区别
计算机科学中的内存与共享内存 在计算机科学中,“内存”和“共享内存”是两个不同的概念,但它们之间有着密切的关系。为了更好地理解这两个概念及其相互关系,我们可以分别解释一下: 内存 (Memory) 内存通常指的是计算机系统的主…...
JavaWeb04-MyBatis与Spring结合
目录 前言 一、MyBatis入门(MyBatis官网) 1.1 创建mybatis项目(使用spring项目整合式方法) 1.2 JDBC 1.3 数据库连接池 1.4 实用工具:Lombok 二、MyBatis基础操作 2.1 准备工作 2.2 导入项目并实现操作 2.3 具…...
Mybatis-springBoot
MyBatis 是一个流行的 Java 持久层框架,它简化了与关系型数据库的交互。通过将 SQL 语句与 Java 代码进行映射,MyBatis 提供了一种方便、灵活的方式来执行数据库操作。它支持动态SQL、缓存机制和插件扩展,使得开发人员能够更高效地编写和管理…...
【中国数据库前世今生】数据存储管理的起源与现代数据库发展启蒙
记录开启本篇的目的: 作为1名练习时长2年半的DBA,工作大部分时间都在和数据库打交道,包括Oracle,Mysql,Postgresql,Opengauss等国内外数据库。但是对数据库的发展史却知之甚少。 正好腾讯云开发者社区正在热播:【纪录片】中国数据库前世今生,借此机会了解…...
拉卡拉上半年营收29.82亿元 外卡、数字化服务提升业绩增长空间
8月9日晚,拉卡拉(300773.SZ)发布2024年半年业绩报告。在国内经济延续恢复向好态势、国内消费市场规模持续增长的背景下,拉卡拉积极推进“推广数字支付、共享数字科技、兑现数据价值”的经营战略,上半年公司实现营业收入29.82亿元,…...
数学建模——启发式算法(蚁群算法)
算法原理 蚁群算法来自于蚂蚁寻找食物过程中发现路径的行为。蚂蚁并没有视觉却可以寻找到食物,这得益于蚂蚁分泌的信息素,蚂蚁之间相互独立,彼此之间通过信息素进行交流, 从而实现群体行为。 蚁群算法的基本原理就是蚂蚁觅食的过程…...
【Pytorch实用教程】在做模型融合时非常关键的代码:nn.Identity()详解
文章目录 nn.Identity()基础介绍主要用途示例代码以ResNet为例介绍 self.resnet.fc = nn.Identity() 的作用1. **背景:ResNet 模型结构**2. **代码 `self.resnet.fc = nn.Identity()` 的作用**3. **为什么使用 `nn.Identity()`**4. **示例代码**nn.Identity()基础介绍 nn.Ide…...
【开源力荐】一款基于web的可视化视频剪辑工具
嗨, 大家好, 我是徐小夕. 之前一直在社区分享零代码&低代码的技术实践,也陆陆续续设计并开发了多款可视化搭建产品,比如: H5-Dooring(页面可视化搭建平台)V6.Dooring(可视化大屏搭建平台)橙…...
鸿萌数据恢复服务: 如何修复 SQL Server 数据库错误 829?
天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据恢复、数据备份、网络及终端数据安全等解决方案与服务。 同时,鸿萌是众多国际主流数据恢复软件(Stellar、UFS、R-Studio、ReclaiMe Pro 等)的授权代理商,…...
OpenCV图像处理——按最小外接矩形剪切图像
引言 在图像处理过程中,提取感兴趣区域(ROI)并在其上进行处理后,往往需要将处理后的结果映射回原图像。这一步通常涉及以下几个步骤: 找到最小外接矩形:使用 cv::boundingRect 或 cv::minAreaRect 提取感兴…...
《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(4)-再识Wireshark
1.简介 按照以前的讲解和分享路数,宏哥今天就应该从外观上来讲解WireShark的界面功能了。 2.软件界面 由上到下依次是标题栏、主菜单栏、主菜单工具栏、显示过滤文本框、打开区、最近捕获并保存的文件、捕获区、捕获过滤文本框、本机所有网络接口、学习区及用户指…...
调用yolov3模型进行目标检测
要调用已经训练好的YOLOv3模型对图片进行检测,需要完成以下几个步骤: 加载预训练模型:从预训练的权重文件中加载模型。准备输入图片:将图片转换为模型所需的格式。进行推理:使用模型对图片进行推理,得到检…...
linux文件——重定向原理——dup、重定向与execl、VFS
前言:本篇讲解linux下的重定向相关内容。 在本篇中, 博主将会带着友友们一边实验, 一边探索底层原理。 通过本篇的学习, 友友们将会了解到重定向是如何实现的, 重定向的本质是什么, 重定向和进程替换之间的…...
【STM32 FreeRTOS】任务
使用 RTOS 的实时应用程序可以被构建为一组独立的任务。每个任务在自己的上下文中执行,不依赖于系统内的其他任务或 RTOS 调度器本身。在任何时间点,应用程序中只能执行一个任务,实时 RTOS 调度器负责决定所要执行的任务。因此, R…...
Java面试--框架--Spring MVC
Spring MVC 目录 Spring MVC1.spring mvc简介2.spring mvc实现原理2.1核心组件2.2工作流程 3.RESTful 风格4.Cookie,Session4.1 会话4.2 保存会话的两种技术 5.拦截器5.1过滤器、监听器、拦截器的对比5.2 过滤器的实现5.3 拦截器基本概念5.4 拦截器的实现 1.spring …...
土壤水分监测系统的工作原理
TH-TS200土壤水分监测系统是一种在地球科学、农学等领域广泛应用的分析仪器,它主要用于监测土壤中的水分含量,为农业生产、水资源管理、环境保护等提供重要数据支持。通常包括数据采集器、土壤水分传感器、土壤温度传感器(部分系统配备)、计算机软件以及…...
k8s学习--如何控制pod调度的位置
文章目录 一、Pod 调度基础二、通过节点选择器 (Node Selector) 控制调度三、使用节点亲和性 (Node Affinity)四、使用污点和容忍 (Taints and Tolerations)五、Pod 反亲和性 (Pod Anti-Affinity) 总结 在 Kubernetes (K8s)中,Pod 是应用运行的最小单位࿰…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...
Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...
