【kubernetes】多 master 高可用集群架构部署

目录

前言

一、环境部署

二、master02 节点部署

1、拷贝相关文件

2、修改配置文件

3、启动各服务并设置开机自启

4、 查看node节点状态

三、负载均衡部署

1、部署 nginx 服务

1.1 编译安装 nginx

1.2 修改 nginx 配置文件

2、部署 keepalived 服务

2.1 yum安装 keepalived 服务

2.2 修改keepalived配置文件

2.3 创建nginx状态检查脚本

2.5 直接拷贝配置文件和脚本到ngkeep02节点

2.6 启动keepalived服务

2.5 修改node节点上的配置文件中的server为VIP地址

3、在 ngkeep01 上查看节点的连接状态 

4、测试

四、部署 Dashboard

1、什么是 Dashboard

2、安装 Dashboard

3、使用输出的token登录Dashboard


前言

Kubernetes作为当今最流行的容器编排平台之一,为企业提供了高效管理和部署容器化应用的解决方案。然而,构建一个稳定、可靠的Kubernetes集群对于确保应用程序的高可用性至关重要

在本文中,我们将探讨如何设计和部署一个多Master高可用集群架构,多Master节点架构旨在避免单点故障,并提高集群的可用性,确保业务持续运行

实际生产环境架构设计

  • Master节点数量: 至少部署3个Master节点,以实现高可用性。这些Master节点将共同管理集群状态,并通过选举机制选择活跃的Leader节点

  • node节点数量:至少3台Node节点可以提供一定程度的高可用性,因为即使一台Node节点出现故障,集群仍然可以继续运行。更多的Node节点可以提供更高级别的可用性和负载均衡

  • 负载均衡器: 在Master节点前部署负载均衡器(如HAProxy、Nginx等),用于将流量均衡到不同的Master节点上,确保请求能够被正确路由到活跃的Leader节点

  • Etcd集群: 部署独立的Etcd集群,用于存储Kubernetes集群的状态信息。Etcd是Kubernetes的数据存储后端,需要保证其高可用性和数据一致性

  • 故障恢复和自动化: 配置故障恢复机制,包括自动故障转移、自动扩展和自动化部署,以减少人为干预并提高集群的稳定性

本次多 master 高可用集群架构部署的案例,使用的机器相对较少,可作参考

一、环境部署

服务器主机名IP地址主要软件

k8s集群 master01 节点

(etcd集群节点1)

master01172.16.12.10kube-apiserver、kube-controller-manager、kube-scheduler、etcd

k8s集群 master02 节点

master02172.16.12.13kube-apiserver、kube-controller-manager、kube-scheduler、etcd

k8s集群 node01 节点

(etcd集群节点2)

node01172.16.12.11kubelet、kube-proxy docker、etcd

k8s集群 node02 节点

(etcd集群节点3)

node02172.16.12.12kubelet、kube-proxy docker、etcd
负载均衡 nginx+keepalive01(master)ngkeep01172.16.12.15nginx、keepalive
负载均衡 nginx+keepalive02(backup)ngkeep02172.16.12.16nginx、keepalive
虚拟 VIP 地址172.16.12.100

(1)所有设备关闭防火墙,清空iptables规则

systemctl disable --now firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

(2)所有设备关闭selinux

setenforce 0    #临时关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config   #永久关闭

(3)所有设备关闭swap 

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

(4)修改所有设备的主机名

[root@localhost ~]#hostnamectl set-hostname master01
[root@localhost ~]#bash
 
[root@localhost ~]#hostnamectl set-hostname master02
[root@localhost ~]#bash
 
[root@localhost ~]#hostnamectl set-hostname node01
[root@localhost ~]#bash
 
[root@localhost ~]#hostnamectl set-hostname node02
[root@localhost ~]#bash

[root@localhost ~]#hostnamectl set-hostname ngkeep01
[root@localhost ~]#bash

[root@localhost ~]#hostnamectl set-hostname ngkeep02
[root@localhost ~]#bash

(5) 所有设备修改本地的hosts文件

cat >> /etc/hosts << EOF
172.16.12.10 master01
172.16.12.13 master02
172.16.12.11 node01
172.16.12.12 node02
172.16.12.15 ngkeep01
172.16.12.16 ngkeep02
EOF

(7)所有设备调整内核参数

cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF
sysctl --system     #重新加载系统的配置参数

(8)所有设备实现时间同步

yum install ntpdate -y
ntpdate time.windows.com

etcd 集群和 k8s 单 master 集群架构的部署请参考:

http://t.csdnimg.cn/os5M9

必须注意 master01 节点上执行签发证书脚本,生成的CA证书、相关组件的证书和私钥!

自签发证书脚本中的ip地址必须得添加虚拟VIP地址、nginx+keepalive01和nginx+keepalive02 服务器的地址

二、master02 节点部署

1、拷贝相关文件

从 master01 节点上拷贝证书文件、各master组件的配置文件和服务管理文件到 master02 节点

[root@master01 ~]#scp -r /opt/etcd/ root@172.16.12.13:/opt/
[root@master01 ~]#scp -r /opt/kubernetes/ root@172.16.12.13:/opt
[root@master01 ~]#scp -r /root/.kube root@172.16.12.13:/root
[root@master01 ~]#scp /usr/lib/systemd/system/{kube-apiserver,kube-controller-manager,kube-scheduler}.service root@172.16.12.13:/usr/lib/systemd/system/

2、修改配置文件

修改配置文件 kube-apiserver 中的IP

[root@master02 ~]#vim /opt/kubernetes/cfg/kube-apiserver
KUBE_APISERVER_OPTS="--logtostderr=true \
--v=4 \
--etcd-servers=https://172.16.12.10:2379,https://172.16.12.11:2379,https://172.16.12.12:2379 \
--bind-address=172.16.12.13 \                 #修改成master02本机的apiserver的ip地址
--secure-port=6443 \
--advertise-address=172.16.12.13 \            #修改成master02本机的apiserver的ip地址
......

3、启动各服务并设置开机自启

在 master02 节点上启动各服务并设置开机自启

[root@master02 ~]#systemctl start kube-apiserver.service
[root@master02 ~]#systemctl enable kube-apiserver.service
[root@master02 ~]#systemctl start kube-controller-manager.service
[root@master02 ~]#systemctl enable kube-controller-manager.service
[root@master02 ~]#systemctl start kube-scheduler.service
[root@master02 ~]#systemctl enable kube-scheduler.service

4、 查看node节点状态

[root@master02 ~]#ln -s /opt/kubernetes/bin/* /usr/local/bin/
[root@master02 ~]#kubectl get nodes
[root@master02 ~]#kubectl get nodes -o wide            
#-o=wide:输出额外信息;对于Pod,将输出Pod所在的Node名
#此时在master02节点查到的node节点状态仅是从etcd查询到的信息,而此时node节点实际上并未与master02节点建立通信连接,因此需要使用一个VIP把node节点与master节点都关联起来

三、负载均衡部署

配置load balancer集群双机热备负载均衡(nginx实现负载均衡,keepalived实现双机热备)

1、部署 nginx 服务

1.1 编译安装 nginx

在ngkeep01、ngkeep02节点上都需编译安装nginx,这里以ngkeep01为例

①下载安装包

官网下载安装包,nginx官网地址:www.nginx.org,进入后找到右边菜单栏的download,进入后选择自己想要下载的版本可以直接下载到本地,然后传到Linux系统中或右键复制该包的下载连接在Linux系统中wget此地址直接下载到Linux系统中

[root@ngkeep01 ~]#cd /data        #切换到想要的目录下载安装包
[root@ngkeep01 data]#wget http://nginx.org/download/nginx-1.18.0.tar.gz

② 安装包下载完成后解压到当前目录,并安装编译需要的依赖环境和工具,再新建nginx用户便于管理

[root@ngkeep01 data]#tar xf nginx-1.18.0.tar.gz          #解压源码包
[root@ngkeep01 data]#cd nginx-1.18.0/                    #切换目录
#下载安装所需编译工具
[root@ngkeep01 nginx-1.18.0]#yum -y install gcc gcc-c++ pcre-devel openssl-devel zlib-devel openss1 openss1-deve1
#新建nginx用户便于管理
[root@ngkeep01 nginx-1.18.0]#useradd -M -s /sbin/nologin nginx

③编译安装三步骤(./configure、make、make install)

#执行脚本,指定安装位置、指定用户为nginx用户、指定组为nginx组、指定安装的模块
[root@ngkeep01 nginx-1.18.0]#./configure --prefix=/apps/nginx \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module
 
#将所有源代码翻译成二进制,形成一个可执行文件
[root@ngkeep01 nginx-1.18.0]#make -j2
#将执行文件及相关的依赖文件拷贝到指定目录中
[root@ngkeep01 nginx-1.18.0]#make install

④修改权限

[root@ngkeep01 ~]#chown -R nginx.nginx /apps/nginx

⑤创建软链接,便于tab键补全

[root@ngkeep01 ~]#ln -s /apps/nginx/sbin/nginx /usr/bin

⑥设置配置文件关键词高亮

[root@ngkeep01 ~]#cp -r /data/nginx-1.18.0/contrib/vim/* /usr/share/vim/vimfiles/

⑦ 创建nginx自启动文件并启动

[root@ngkeep01 ~]#vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf   #注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
 
[root@ngkeep01 ~]#systemctl daemon-reload           #重新加载配置
[root@ngkeep01 ~]#systemctl enable --now nginx      #开机自启并立即启动

1.2 修改 nginx 配置文件

ngkeep01节点操作:

修改 nginx 配置文件,配置四层反向代理负载均衡,指定 k8s 群集两台master的节点ip和6443端口

[root@ngkeep01 ~]#vim /apps/nginx/conf/nginx.conf

……
events {
    worker_connections  1024;
}

#添加
stream {
    log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';
    
	access_log /apps/nginx/logs/k8s-access.log  main;

    upstream k8s-apiserver {
        server 172.16.12.10:6443;
        server 172.16.12.13:6443;
    }
    server {
        listen 6443;
        proxy_pass k8s-apiserver;
    }
}
……

#检查配置文件语法
[root@ngkeep01 ~]#nginx -t   
#重新加载nginx配置文件,并查看已监听6443端口
[root@ngkeep01 ~]#nginx -s reload
[root@ngkeep01 ~]#ss -natp | grep nginx

#ngkeep01 与ngkeep02 的nginx配置文件一样,直接将 ngkeep01 的nginx配置文件拷贝到 ngkeep02 上
[root@ngkeep01 ~]#scp /apps/nginx/conf/nginx.conf ngkeep02:/apps/nginx/conf/nginx.conf

ngkeep02节点操作: 

#配置文件被覆盖后,需重新加载nginx服务
[root@ngkeep02 ~]# nginx -s reload
[root@ngkeep02 ~]#ss -natp | grep nginx

2、部署 keepalived 服务

2.1 yum安装 keepalived 服务

在ngkeep01、ngkeep02节点上都需安装keepalived服务

[root@ngkeep01 ~]#yum install keepalived -y

2.2 修改keepalived配置文件

ngkeep01节点操作: 

[root@ngkeep01 ~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   # 接收邮件地址
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   # 邮件发送地址
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id NGINX_MASTER	#lb01节点的为 NGINX_MASTER,lb02节点的为 NGINX_BACKUP
}

#添加一个周期性执行的脚本
vrrp_script check_nginx {
    script "/apps/nginx/check_nginx.sh"	#指定检查nginx存活的脚本路径
}

vrrp_instance VI_1 {
    state MASTER			#lb01节点的为 MASTER,lb02节点的为 BACKUP
    interface ens33			#指定网卡名称 ens33
    virtual_router_id 51	#指定vrid,两个节点要一致
    priority 100			#lb01节点的为 100,lb02节点的为 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.16.12.100/24	#指定 VIP
    }
    track_script {
        check_nginx			#指定vrrp_script配置的脚本
    }
}

2.3 创建nginx状态检查脚本

ngkeep01节点操作: 

[root@ngkeep01 ~]#vim /apps/nginx/check_nginx.sh
#!/bin/bash
#egrep -cv "grep|$$" 用于过滤掉包含grep 或者 $$ 表示的当前Shell进程ID,即脚本运行的当前进程ID号
count=$(ps -ef | grep nginx | egrep -cv "grep|$$")

if [ "$count" -eq 0 ];then
    systemctl stop keepalived
fi

#添加执行权限
[root@ngkeep01 ~]#chmod +x /apps/nginx/check_nginx.sh

2.5 直接拷贝配置文件和脚本到ngkeep02节点

ngkeep01节点操作: 

[root@ngkeep01 ~]#scp /etc/keepalived/keepalived.conf ngkeep02:/etc/keepalived/keepalived.conf
[root@ngkeep01 ~]#scp /apps/nginx/check_nginx.sh ngkeep02:/apps/nginx/

 ngkeep02节点操作: 

#修改ngkeep02节点上的keepalived配置文件
[root@ngkeep02 logs]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

……
   smtp_connect_timeout 30
   router_id NGINX_BACKUP   #需要修改,和ngkeep01的id不一样
}

vrrp_script check_nginx {
    script "/apps/nginx/check_nginx.sh"
}

vrrp_instance VI_1 {
    state BACKUP     #需要修改成BACKUP
    interface ens33
    virtual_router_id 51
    priority 90      #需要修改优先级
    advert_int 1
……

2.6 启动keepalived服务

在ngkeep01、ngkeep02节点上都需重新启动keepalived服务,这里以ngkeep01为例

一定要先启动了nginx服务,再启动keepalived服务

[root@ngkeep01 ~]#systemctl enable --now keepalived
[root@ngkeep01 ~]#ip a    #查看VIP是否生成

2.5 修改node节点上的配置文件中的server为VIP地址

所有的node节点上的都要修改bootstrap.kubeconfig ,kubelet.kubeconfig配置文件中的server为VIP地址,这里以node01节点为例

[root@node01 ~]#cd /opt/kubernetes/cfg/
[root@node01 cfg]#vim bootstrap.kubeconfig 
server: https://172.16.12.100:6443
                      
[root@node01 cfg]#vim kubelet.kubeconfig
server: https://172.16.12.100:6443
                        
[root@node01 cfg]#vim kube-proxy.kubeconfig
server: https://172.16.12.100:6443

#重启kubelet和kube-proxy服务
[root@node01 cfg]#systemctl restart kubelet.service 
[root@node01 cfg]#systemctl restart kube-proxy.service

3、在 ngkeep01 上查看节点的连接状态 

#在 ngkeep01 上查看 nginx 和 node 、 master 节点的连接状态
[root@ngkeep01 ~]#netstat -natp | grep nginx

4、测试

在 master01 节点上操作:

(1)测试创建 pod

[root@master01 ~]#kubectl run nginx --image=nginx

(2) 查看Pod的状态信息

[root@master01 ~]#kubectl get pods

[root@master01 ~]#kubectl get pods -o wide

(3)直接使用浏览器或者curl命令访问

在除了对应网段的node节点上的机器,在其他任何一台设备上访问10.244.62.199,都会出错或卡住

在对应网段的node节点上操作,可以直接使用浏览器或者curl命令访问

(4)这时在master01节点上查看nginx日志

[root@master01 ~]#kubectl logs nginx

四、部署 Dashboard

1、什么是 Dashboard

Dashboard(仪表板)是基于Web的Kubernetes用户界面

可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,并管理集群本身及其伴随资源

可以使用仪表板来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如deployment,job,daemonset等)

例如,可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序。仪表板还提供有关群集中Kubernetes资源状态以及可能发生的任何错误的信息

2、安装 Dashboard

(1)分别在 所有node节点上操作

#上传 dashboard.tar 和 metrics-scraper.tar 到 /opt 目录下
#将名为 dashboard.tar 的 Docker 镜像文件加载到 Docker 引擎中
[root@node01 opt]#docker load -i dashboard.tar
#将名为 metrics-scraper.tar 的 Docker 镜像文件加载到 Docker 引擎中
[root@node01 opt]#docker load -i metrics-scraper.tar 

#查看当前所有镜像
[root@node01 opt]#docker images

(2)在 master01 节点上操作

#上传 recommended.yaml 文件到 /opt/k8s 目录中
[root@master01 ~]#cd /opt/k8s

#默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部
[root@master01 k8s]#vim recommended.yaml
……
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001      #添加
  type: NodePort           #添加
  selector:
    k8s-app: kubernetes-dashboard
……
[root@master01 k8s]#kubectl apply -f recommended.yaml
#kubectl apply 命令用于创建或更新 Kubernetes 资源对象,-f 参数用于指定要应用的 YAML 文件

#创建 service account 并绑定默认 cluster-admin 管理员集群角色
[root@master01 k8s]#kubectl create serviceaccount dashboard-admin -n kube-system
[root@master01 k8s]#kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

#获取"kube-system"命名空间中所有Secrets的列表,包括它们的名称、类型等信息
#Secrets通常用于存储敏感数据,如API密钥、密码等
[root@master01 k8s]#kubectl get secret -n kube-system

#"kube-system"命名空间中与"dashboard-admin"相关的Secret的详细信息
[root@master01 k8s]#kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
#kubectl -n kube-system get secret:这部分命令用于获取"kube-system"命名空间中所有Secret的列表
# | awk '/dashboard-admin/{print \$1}':这部分命令使用awk来过滤出包含"dashboard-admin"的Secret,并输出它们的名称

3、使用输出的token登录Dashboard

浏览器访问:https://NodeIP:30001

https://172.16.12.11:30001
https://172.16.12.12:30001

问题:node节点一开始是Ready状态,过了一段时间就变成了NotReady状态

解决方法:大部分原因是 虚拟VIP地址 消失了,ngkeep01和ngkeep02节点都需要重新启动keepalived服务 

systemctl restart keepalived

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

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

相关文章

python打包exe,通过文件动态传参运行exe【拿来即用】

配置虚拟环境 安装包&#xff1a;pip install pipenv 创建虚拟环境&#xff1a;创建一个新文件夹&#xff0c;在此目录&#xff0c;打开cmd&#xff0c;输入&#xff1a;pipenv install&#xff0c; 进入虚拟环境&#xff1a;pipenv shell 安装所需的依赖包&#xff1a;pip in…

无人机监测系统:天空之眼,精准掌握地球脉动

在当今信息化快速发展的时代&#xff0c;无人机技术以其独特的优势&#xff0c;正在成为资源调查、环境监测和规划支持的重要工具。无人机监测系统通过搭载多种传感器和设备&#xff0c;能够快速、高效地获取地表信息&#xff0c;为决策提供科学依据。 项目背景 随着全球环境…

VScode解决报错“Remote-SSH XHR failed无法访问远程服务器“的方案

VScode解决报错"Remote-SSH XHR failed无法访问远程服务器"的方案 $ ls ~/.vscode-server/bin 2ccd690cbff1569e4a83d7c43d45101f817401dc稳定版下载链接&#xff1a;https://update.code.visualstudio.com/commit:COMMIT_ID/server-linux-x64/stable 内测版下载链接…

51建模网AR虚拟试用,让网购不再只靠想象!

在数字化的浪潮中&#xff0c;网购已成为现代人生活的一部分。然而&#xff0c;传统的网购模式常常因为无法直接试穿、试用商品&#xff0c;导致买家在收到商品后感到失望&#xff0c;特别是面对大件家居产品时&#xff0c;仅凭屏幕上的图片和尺寸描述&#xff0c;很难准确地把…

阿里云数据库 SelectDB 版全面商业化,开启现代化实时数据仓库的全新篇章

2024 年 5 月 21 日&#xff0c;由阿里云联合飞轮科技共同举办的「阿里云数据库 SelectDB 版商业化产品发布会」于线上召开。阿里巴巴集团副总裁、阿里云数据库产品事业部负责人李飞飞宣布&#xff0c;阿里云数据库 SelectDB 版在中国站及国际站全面发布&#xff0c;正式开启商…

Web应用防火墙的重要性

网络安全是一个永恒的话题&#xff0c;尤其是在未知威胁不断涌现的情况下。企业网络安全是保障业务稳定运行的基础&#xff0c;Web应用防火墙(WAF)是企业网络安全的重要屏障&#xff0c;其性能直接影响到网络服务的质量和安全。 Web应用防火墙是什么&#xff1f; Web应用防火墙…

RS8751XF功能和参数介绍及PDF资料

以下是关于RS8751XF的功能和参数的介绍&#xff1a; 功能描述: 高速、宽带单通道运算放大器 轨到轨输入和输出&#xff0c;确保较大的动态范围 极高的增益带宽乘积&#xff08;GBW&#xff09;&#xff1a;250 MHz&#xff0c;适合高频应用 极高的压摆率&#xff08;SR&#xf…

【UE HTTP】“BlueprintHTTP Server - A Web Server for Unreal Engine”插件使用记录

1. 在商城中下载“BlueprintHTTP Server - A Web Server for Unreal Engine”插件 该插件的主要功能有如下3点&#xff1a; &#xff08;1&#xff09;监听客户端请求。 &#xff08;2&#xff09;可以将文件直接从Unreal Engine应用程序提供到Web。 &#xff08;3&#xff…

Vision Mamba论文阅读(主干网络)

这几天被Mamba刷屏了&#xff0c;又由于本人是做视觉方面任务的&#xff0c;固来看看mamba在视觉上的应用。 今天分享的是Vision Mamba: Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model 论文网址&#xff1a;https://arxiv.or…

【蓝桥杯】

题目列表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using llunsigned long long; #define int ll const int N2e510; int k0; std::string s; int a,b,c,d; void solve() {char op;std::cin>>op;if(opA){std::string s;for(int i1;i&l…

vue3结合element-plus之如何优雅的使用表格

背景 表格组件的使用在后台管理系统中是非常常见的,但是如果每次使用表格我们都去一次一次地从 element-plus 官网去 复制、粘贴和修改成自己想要的表格。 这样一来也说得过去,但是如果我们静下来细想不难发现,表格的使用都是大同小异的,每次都去复制粘贴,对于有很多表格…

5月23日 网络编程day6

1.IO多路复用的原理&#xff1f; 答&#xff1a;将文件描述符放入一个集合中&#xff0c;当集合中有事件产生&#xff0c;移除其他文件描述符&#xff0c;执行剩下的文件描述符所对应的任务&#xff0c;往复循环。 2.实现IO多路复用可以使用哪些函数完成&#xff1f; 答&…

【设计模式】JAVA Design Patterns——Balking(止步模式)

&#x1f50d;目的 止步模式用于防止对象在不完整或不合适的状态下执行某些代码。 &#x1f50d;解释 真实世界例子 洗衣机中有一个开始按钮&#xff0c;用于启动衣物洗涤。当洗衣机处于非活动状态时&#xff0c;按钮将按预期工作&#xff0c;但是如果已经在洗涤&#xff0c;则…

嵌入式科普(18)Ubuntu在移动硬盘的安装和启动

目录 一、概述 二、应用场景 三、移动硬盘安装Ubuntu 3.1 移动硬盘格式化 3.2 VMware安装Ubuntu到移动硬盘 四、电脑BIOS启动移动硬盘Ubuntu 五、从VMware启动移动硬盘Ubuntu 六、问题解决(坑)和思考提问 嵌入式科普(18)Ubuntu在移动硬盘的安装和启动 一、概述 在移动硬…

Python实现天气数据采集

Python实现天气数据采集 一、需求介绍二、完整代码一、需求介绍 本次天气数据采集的需求是获取每日的最高温、最低温、风力、风向、天气状况、AQI指数,如图所示,完整代码附后: 本次采集的目标网址是2345天气网: 上图的URL中,beijing是城市名称的缩写,54511即为城市代码…

【机器学习】前沿探索,如何让前端开发更加搞笑

在当今数字化时代&#xff0c;机器学习的崛起为前端开发带来了巨大的机遇和挑战。随着人工智能和数据科学的不断进步&#xff0c;前端工程师不再局限于传统的界面设计和交互体验&#xff0c;而是开始探索如何将机器学习技术融入到他们的工作中&#xff0c;以创造更加智能、个性…

Video-FocalNets: Spatio-Temporal Focal Modulation for Video Action Recognition

标题&#xff1a;Video-FocalNets&#xff1a;用于视频动作识别的时空聚焦调制 源文链接&#xff1a;Wasim_Video-FocalNets_Spatio-Temporal_Focal_Modulation_for_Video_Action_Recognition_ICCV_2023_paper.pdf (thecvf.com)https://openaccess.thecvf.com/content/ICCV202…

vscode打造舒适的python开发环境

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 背景 突然想写一些python小脚本&#xff0c;提升我的mac使用体验和日常效率提升…

LayUI使用(一)点击树组件的右边空白区域也可响应事件

前提&#xff1a; 如下&#xff0c;希望能够点击右边的空白区域也能够响应&#xff0c;而不仅仅是点击文本才响应 分析流程 一开始问了chatgpt&#xff0c;但它给的方案太麻烦了&#xff0c;而且还有错误&#xff0c;因此自己上手F12进入调试模式&#xff0c;点击查看最终渲…

【MATLAB】基于EMD-PCA-LSTM的回归预测模型

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 基于EMD-PCA-LSTM的回归预测模型是一种结合了经验模态分解&#xff08;Empirical Mode Decomposition, EMD&#xff09;、主成分分析&#xff08;Principal Component Analysis, PCA&#xff09;和长短期记忆…