Kubernetes - CentOS7搭建k8s_v1.18集群高可用(kubeadm/二进制包部署方式)实测配置验证手册

news2024/12/24 2:37:03

Kubernetes - CentOS7搭建k8s集群高可用(kubeadm/二进制包部署方式)实测配置验证手册

在这里插入图片描述

前言概述:

一、Kubernetes—k8s是什么

Kubernetes 这个名字源于希腊语,意为“舵手“或”飞行员"。
Kubernetes,简称K8s,中间有8个字符用8代替缩写。
Google于2014年开源项目,为容器化应用提供集群和管理的开源工具,Kubernetes目标是让部署容器化的应用简单并且高效,提供了应用部署,规划,更新,维护的一种机制。

传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。

主要特性:
1、高可用,不宕机,自动灾难恢复
2、灰度更新,不影响业务正常运转
3、一键回滚到历史版本
4、方便的伸缩扩展(应用伸缩,机器加减)、提供负载均衡有一个完善的生态

二、kubernetes 功能和架构

2.1 K8s 概述 :
Kubernetes是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes 能够进行应用的自动化部署和扩缩容。在Kubernetes中,会将组成应用的容器组合成一个逻辑单元以更易管理和发现。Kubernetes积累了作为Google 生产环境运行工作负载 15年的经验,并吸收了来自于社区的最佳想法和实践。
2.2 K8s 功能:
1)自动装箱 —基于容器对应用运行环境的资源配置要求自动部署应用容器
2)自我修复(自愈能力) —当容器失败时,会对容器进行重启,当所部署的Node 节点有问题时,会对容器进行重新部署和重新调度当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
3)水平扩展 —通过简单的命令、用户 UI界面或基于CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁
4)服务发现 —用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和负载均衡
5)滚动更新 —可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新
6)版本回退 —可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退
7)密钥和配置管理 —在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署
8)存储编排 —自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph 等)、公共云存储服务
9)批处理 —提供一次性任务,定时任务;满足批量数据处理和分析的场景

三、kubernetes 集群搭建(kubeadm/二进制包部署方式)

此次我们以kubeadm部署方式演示验证

3.1 前置知识点
目前生产部署 Kubernetes 集群主要有两种方式:
1) kubeadm Kubeadm是一个K8s部署工具,提供kubeadm
init 和kubeadm join,用于快速部署Kubernetes 集群。
官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
2)二进制包 从Github下载发行版的二进制包,手动部署每个组件,组成Kubernetes 集群。 Kubeadm
降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署 Kubernetes
集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

3.2 kubeadm 部署方式介绍 kubeadm 是官方社区推出的一个用于快速部署kubernetes
集群的工具,这个工具能通过两条指令完成一个kubernetes 集群的部署:
1)创建一个 Master 节点 kubeadm init
2)将 Node 节点加入到当前集群中 $ kubeadm join <Master节点的IP和端口>

四、安装要求

在配置Kubernetes集群节点之前,需要满足以下几个条件:
4.1 操作系统:支持Linux操作系统,推荐使用Ubuntu、CentOS等常见发行版;
4.2 主机数量:至少需要3台主机,建议一台用于Master节点,两台用于Worker节点;
4.3 硬件配置:至少2个CPU、2GB内存,硬盘30GB;
4.4 网络通信:集群中所有机器之间网络互通;
4.5 网络通信:可以访问外网,需要拉取镜像(需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点);
4.6 禁止SWAP分区 (kubernetes的想法是将实例紧密包装到尽可能接近100%。 所有的部署应该与CPU /内存限制固定在一起。 所以如果调度程序发送一个pod到一台机器,它不应该使用交换。设计者不想交换,因为它会减慢速度,所以关闭swap主要是为了性能考虑)。

五、最终目标/提纲

5.1 在所有节点上安装 Docker 和 kubeadm
5.2 部署 Kubernetes Master
5.3 部署容器网络插件
5.4 部署 Kubernetes Node,将节点加入 Kubernetes 集群中
5.5 部署 Dashboard Web 页面,可视化查看 Kubernetes 资源

六、学习课程前提

6.1 熟悉 Docker 的基本使用
6.2 熟悉 Linux 操作系统

相关环境:

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

实测步骤:

1、搭建三台虚拟机并安装操作系统CentOS_7.9
2、三台系统进行初始化操作环境
3、在三台节点安装docker kubelet kubeadm kubectl
4、在Master节点安装kubeadm init命令进行初始化
5、在Node节点执行kubeadm join命令将node节点添加到集群
6、在Master节点安装CNI配置插件,如flannel等
7、测试kubernetes集群,如nginx

开始搬砖:

一、系统初始化(ALL节点)

# 替换国内源配置
ls /etc/yum.repos.d/
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak  # 备份当前源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 阿里云 CentOS 7源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo # 网易163 CentOS 7源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.myhuaweicloud.com/repo/CentOS-7.repo # 华为云CentOS 7源

# 清空缓存
yum clean all
# 生成缓存
yum makecache
# 安装前最好更新一下系统软件
yum -y install vim
yum -y install unzip
yum -y install lrzsz
yum -y update 
# IP配置
ip address
vi /etc/sysconfig/network-scripts/ifcfg-ens192
systemctl restart network

# 主机名配置
Hostname
hostnamectl set-hostname k8s-master  # 192.168.10.160
hostnamectl set-hostname k8s-node01  # 192.168.10.161
hostnamectl set-hostname k8s-node02  # 192.168.10.162
# 防火墙配置
systemctl stop firewalld     # 关闭
systemctl disable firewalld  # 禁用
firewall-cmd --reload        # 重启防火墙,生效配置

# SELinux安全机制配置
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久
setenforce 0  # 临时关闭
# 关闭SWAP
swapoff -a # 临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab  # 永久 (需重启)
# 设置host映射和主机名
vim /etc/hosts

或脚本
cat >> /etc/hosts << EOF 
192.168.10.160  k8s-master
192.168.10.161  k8s-node01
192.168.10.162  k8s-node02
EOF

在这里插入图片描述

# 将桥接的 IPv4 流量传递到 iptables 的链(内核参数修改---在所有主机上将桥接的ipv4流量传递到iptables的链将桥接的IPv4流量传递到iptables的链(有一些ipv4的流量不能走iptables链,因为linux内核的一个过滤器,每个流量都会经过他,然后再匹配是否可进入当前应用进程去处理,所以会导致流量丢失),配置kubernetes.conf文件(kubernetes.conf文件原来不存在,需要自己创建的)
vim /etc/sysctl.d/k8s.conf
-------------------------------------------
或脚本 
cat > /etc/sysctl.d/k8s.conf << EOF 
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1 
EOF
sysctl -p   # 生效

在这里插入图片描述

# 同步NTP时间
yum install -y ntpdate    # 安装NTP
ntpdate time.windows.com  # 同步NTP服务器系统网络时间
# 统一重启
reboot

二、安装Docker/kubeadm/kubelet (ALL节点)

2.1 安装Docker

Dockershim中间件会一直保留到2021年末,直到发布Kubernetes1.23版本为止。2022年k8s的1.24版本正式剔除dockershim,不再支持让docker去调用containerd,而是直接操作containerd,先安装containerd来替换CRI接口调用。
本次验证v1.18.0版本,后续再验证最新v1.28.0版本。 Kubernetes 1.18.0版本默认 CRI(容器运行时)为Docker,因此先安装Docker,可参考之前部署手册

# 安装依赖包
 yum install -y yum-utils device-mapper-persistent-data lvm2
 
# 安装 Docker 
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo 
# 查看仓库中所有的docker版本
yum list docker-ce --showduplicates | sort -r

# 不指定版本号即默认安装
yum install -y docker-ce
# 如果要指定版本号安装
yum install docker-ce-18.06* -y ,此时指定的就是docker-ce-18.06.1的版本
yum install -y docker-ce-18.06.1.ce-3.el7 

在这里插入图片描述

# 启动docker并设置docker开机自启服务
systemctl start docker
systemctl enable docker

# 测试验证docker是否安装成功
docker version

# 永远的HelloWorld
docker run hello-world

在这里插入图片描述

# 镜像加速配置
1、URL:目前我这边测试环境使用阿里云容器镜像服务:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
2、注册账户:当然还有腾讯网易等都可以使用不指定,注册一个属于自己的阿里云账户
3、登入获取加速器地址及脚本:登陆阿里云开发者平台--点击控制台---选择容器镜像服务---获取加速器地址---粘贴脚本直接执行
4、重启服务器

mkdir -p /etc/docker
vim /etc/docker/daemon.json
或脚本
cat > /etc/docker/daemon.json << EOF 
{ 
"registry-mirrors": ["https://k******f.mirror.aliyuncs.com"] 
} 
EOF

在这里插入图片描述

# 重启服务
systemctl restart docker
# 查看生效信息
docker info
2.2 安装kubeadm、kubelet、kubectl

kubeadm和kubectl都是工具,kubelet才是系统服务
安装包说明:
kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
kubeadm 用于初始化集群,启动集群的命令工具
kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

# 配置k8s镜像源
# 添加 yum 源 
vim /etc/yum.repos.d/kubernetes.repo
或脚本
cat > /etc/yum.repos.d/kubernetes.repo << EOF 
[kubernetes]
name=Kubernetes Repo
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64   
gpgcheck=0
enabled=1
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpgp
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg 
EOF

在这里插入图片描述

# 查询kubeadm可用的版本
yum list kubeadm --showduplicates

# 安装kubeadm、kubelet、kubect,# 此次测试验证v1.24之前版本,最新v1.28.2
yum  install -y kubeadm-1.18.0 kubelet-1.18.0 kubectl-1.18.0

# 设置kubelet开机自启(先不用启动,会报错,后面kubeadm init初始化master时会自动拉起kubelet)
systemctl enable kubelet

在这里插入图片描述

四、集群初始化Kubernetes Master

在Master节点安装kubeadm init命令进行初始化

4.1 k8s-master节点初始化 (在192.168.10.160 k8s-master节点操作)
# 集群初始化
kubeadm init --apiserver-advertise-address=192.168.10.160 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
或脚本(去掉##注释,脚本 \ 后面不能有空格)
kubeadm init \											        #在master节点执行初始化(node节点不用执行)
--apiserver-advertise-address=192.168.10.160 \			        #指定apiserver的IP,即master节点的IP,指定master的interface
--image-repository registry.aliyuncs.com/google_containers \	#设置镜像仓库为国内的阿里云镜像仓库
--kubernetes-version v1.18.0 \								    #设置k8s的版本,跟步骤三的kubeadm版本一致
--service-cidr=10.96.0.0/12 \									#设置node节点的网络
--pod-network-cidr=10.244.0.0/16							    #指定Pod服务的虚拟IP地址范围,设置node节点的网络
#--------------------------------------#
# 记录kubeadm join的输出,后面需要这个命令将各个节点加入集群中

在这里插入图片描述

输出 Your Kubernetes control-plane has initialized successfully!
表示master节点安装成功。

#如果失败可以重置,注意版本。如安装成功后直接跳到下一步。
kubeadm reset
rm -rf $HOME/.kube/config​
# 根据提示执行,使用 kubectl 工具
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

在这里插入图片描述

五、将Node节点全部加入到集群

在Node节点执行kubeadm join命令将node节点添加到集群
在这里插入图片描述

在k8s-node01/node02节点操作,把node节点加入集群
# 向集群添加新节点,执行在kubeadm init输出的kubeadm join命令
kubeadm join 192.168.10.160:6443 --token ntpc3i.81ga63fqtkprsrx8 \
    --discovery-token-ca-cert-hash sha256:399fced327c9274c660325648300b822aa3714f42b466f0edbba2cb32b754ae8 

在这里插入图片描述

选择语言默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作命令如下:
kubeadm token create --print-join-command
# 在master节点上,再次查看集群节点,输出如下信息表示node节点加入集群成功
kubectl get nodes

在这里插入图片描述

状态为NotReady未准备就绪是因为需要部署网络插件才能生效。

六、部署Pod(CNI)网络插件

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

在这里插入图片描述

# 默认镜像地址无法访问,sed命令修改为dockerhub镜像仓库:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 运行所有插件
kubectl get pods -n kube-system
-----------------------------------------------------------------------
NAME                                 READY   STATUS    RESTARTS   AGE
coredns-7ff77c879f-ctd28             1/1     Running   0          6d17h
coredns-7ff77c879f-xpbd9             1/1     Running   0          6d17h
etcd-k8s-master                      1/1     Running   0          6d17h
kube-apiserver-k8s-master            1/1     Running   0          6d17h
kube-controller-manager-k8s-master   1/1     Running   0          6d17h
kube-proxy-6chlp                     1/1     Running   0          6d17h
kube-proxy-7rfbc                     1/1     Running   0          6d17h
kube-proxy-mzmsg                     1/1     Running   0          6d17h
kube-scheduler-k8s-master            1/1     Running   0          6d17h

在这里插入图片描述

# 启动所有插件后,再观察集群活动状态为Ready,准备就绪了
kubectl get nodes

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

七、测试验证kubernetes集群

在Kubernetes集群中创建一个pod,验证是否正常运行

# 拉取nginx镜像
kubectl create deployment nginx --image=nginx
# 开通80端口对外
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看运行状态
kubectl get pod,svc
-----------------------------------------------------------------------
NAME                        READY   STATUS    RESTARTS   AGE
pod/nginx-f89759699-zgrqt   1/1     Running   0          2m44s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        6d17h
service/nginx        NodePort    10.104.45.57   <none>        80:30400/TCP   9s

在这里插入图片描述

# 测试访问地址:http://NodeIP:Port
http://192.168.10.160:30400/
http://192.168.10.161:30400/
http://192.168.10.162:30400/

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

以上,感谢!

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

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

相关文章

​解析什么是物联网接入网关?-天拓四方

随着物联网技术的飞速发展&#xff0c;越来越多的设备、传感器和系统被连接到互联网&#xff0c;形成了一个庞大的、相互连接的智能网络。在这个网络中&#xff0c;物联网接入网关扮演着至关重要的角色&#xff0c;它不仅是连接物联网设备和云平台的桥梁&#xff0c;还是实现设…

iOS——NSCache

什么是NSCache NSCache是Foundation框架中的一个类&#xff0c;用于在iOS和macOS应用程序中进行临时性的内存缓存。它提供了一种轻量级的缓存机制&#xff0c;可以用于存储临时性的数据&#xff0c;例如图片、对象等。NSCache的主要特点和用法包括&#xff1a; 临时性缓存&…

【MyBatisPlus】一、公共字段填充配置

目录 一、实体类配置 二、配置MyBatis Plus元对象处理器 三、接口字段自动填充 在使用mybatisplus项目中设置公共字段填充&#xff0c;可以按如下进行配置 一、实体类配置 TableField(value "create_time",fill FieldFill.INSERT)private LocalDateTime createTime…

《苍穹外卖》Day10部分知识点记录

一、Spring Task 介绍 Spring Task是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 定位&#xff1a;定时任务框架 作用&#xff1a;定时自动执行某段Java代码 应用场景&#xff1a;只要是需要定时处理的场景都可以使用Spring Task …

贪吃蛇大作战【纯c语言】

如果有看到不懂的地方或者对c语言某些知识忘了的话&#xff0c;可以找我之前的文章哦&#xff01;&#xff01;&#xff01; 个人主页&#xff1a;小八哥向前冲~-CSDN博客 所属专栏&#xff1a;c语言_小八哥向前冲~的博客-CSDN博客 贪吃蛇游戏演示&#xff1a; 贪吃蛇游戏动画演…

国产3D自研技术如何突围?眸瑞科技给3D建设、管理带来全新模式

眸瑞科技是全球领先的数字孪生引擎技术及服务提供商&#xff0c;它专注于让一切3D模型在全网多端轻量化处理与展示&#xff0c;为行业数字化转型升级与数字孪生应用提供成套的国产自研3D可视化技术、产品与服务。 引言 眸瑞科技是全球领先的数字孪生引擎技术及服务提供商&…

Zynq 7000 系列中的Interconnect(互联)简介

PS&#xff08;处理器子系统&#xff09;内部的互联结构包含了多个交换机&#xff0c;用于通过AXI点对点通道连接系统资源。这些通道负责在主机和从机客户端之间进行地址、数据和响应事务通信。该互联结构负责管理多个待处理的事务&#xff0c;并且为Arm CPU设计了低延迟路径&a…

Spark 基础

/* Why Spark一、MapReduce编程模型的局限性1、繁杂&#xff1a;只有Map和Reduce两个操作&#xff0c;复杂的逻辑需要大量的样板代码2、处理效率低&#xff1a;2.1、Map中间结果写磁盘&#xff0c;Reduce写HDFS&#xff0c;多个Map通过HDFS交换数据2.2、任务调度与启动开销大3、…

Unity对应的c#版本

本文主要是记录一下unity已经开始兼容c#的版本和.net版本&#xff0c;以便更好的利用c#的特性。 c#和.net对应情况 微软已经将.net开发到.net 9了&#xff0c;但是unity的迭代速度远没有c#迭代速度快&#xff0c;已知unity最新的LTS版本unity2023已经兼容了c#9 可以在unity手册…

汽车底盘域的学习笔记

前言&#xff1a;底盘域分为传统车型底盘域和新能源车型底盘域&#xff08;新能源系统又可以分为纯电和混动车型&#xff0c;有时间可以再研究一下&#xff09; 1&#xff1a;传统车型底盘域 细分的话可以分为四个子系统 传动系统 行驶系统 转向系统 制动系统 1.1传动系…

中电金信:向“新”而行——探索融合架构的项目管理在保险行业的应用

近年来&#xff0c;险企在政策推动、市场牵引、自身发展、新技术应用日趋成熟等内外部因素的驱动下&#xff0c;积极投身到数字化转型的浪潮中。在拜访各类保险客户和合作项目的过程中&#xff0c;我们发现不少险企在数字化转型中或多或少都面临着战略如何落地、技术如何承接和…

Java 基础常见面试题整理

目录 1、java的基本数据类型有哪些&#xff1f;2、java为什么要有包装类型&#xff1f;3、String a "123" 和 String a new String("123") 区别&#xff1f;4、String、StringBuilder和StringBuffer的区别&#xff1f;5、如何理解面向对象和面向过程&…

第72天:漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

案例一&#xff1a;某 APP-Web 扫描-常规&联动-Burp&Awvs&Xray Acunetix 一款商业的 Web 漏洞扫描程序&#xff0c;它可以检查 Web 应用程序中的漏洞&#xff0c;如 SQL 注入、跨站脚本攻击、身份验证页上的弱口令长度等。它拥有一个操作方便的图形用户界 面&#…

C++系列-输入输出

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” C输入和输出 我们都知道C语言的输出是用printf函数来实现的&#xff0c;那么C呢&#xff0c;它的实现逻辑是什么呢&#xff0c;让我们一起来看一下&#xff0c; #include<i…

miniTry:Python实现web搜索(全自动+程序操控)

声明&#xff1a;本问给出了全部代码--可以复现--亲测有效 :) [ 代码为图片--> 强制自己去敲一次 又不多] 1.打开网站&#xff1a; 2.利用id去定位到我们要进行输入的内容&#xff08;bing可以直接进行搜索&#xff0c;而csdn需要登录&#xff0c;所以我们用csdn做演示&…

【论文速读】|理解基于大语言模型的模糊测试驱动程序生成

本次分享论文&#xff1a;Understanding Large Language Model Based Fuzz Driver Generation 基本信息 原文作者&#xff1a;Cen Zhang, Mingqiang Bai, Yaowen Zheng, Yeting Li, Xiaofei Xie, Yuekang Li, Wei Ma, Limin Sun, Yang Liu 作者单位&#xff1a;南洋理工大学…

elasticsearch 常用语法汇总

文章目录 前言elasticsearch 常用语法汇总1. 创建索引2. 检索索引信息3. 删除索引4. 文档操作4.1. 对blog_new索引指定文档ID新增4.2. 对blog_new索引不指定文档ID新增&#xff0c;随机文档ID:4.3. 获取文档4.4. 更新文档4.5. 删除文档 5. 查询5.1. 匹配查询5.2. 范围查询5.3. …

掌握TypeScript,成为前端高手(AI写作一键生成免费)

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

免费获取!遗传算法+多目标规划算法+自适应神经模糊系统程序代码!

前言 遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;最早是由美国的 John holland于20世纪70年代提出&#xff0c;该算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型&#xff0c;通过数学的方式&#xff0c;将问题的求解过程转…

pyqt QSplitter控件

pyqt QSplitter控件 QSplitter控件效果代码 QSplitter控件 PyQt中的QSplitter控件是一个强大的布局管理器&#xff0c;它允许用户通过拖动边界来动态调整子控件的大小。这个控件对于创建灵活的、用户可定制的用户界面非常有用。 QSplitter控件可以水平或垂直地分割其包含的子…