Kubernetes实战(十八)-Pod亲和与反亲和调度

1 调度Pod的主要方式

Pod调度到指定Node的方式主要有4种:

  • nodeName调度:直接在Pod的yaml编排文件中指定nodeName,调度到指定name的节点上。
  • nodeSelector调度:直接在Pod的yaml编排文件中指定nodeSelector,调度到带有指定label的节点上。
  • 污点(Taints)和容忍度(Tolerations)调度:主要通过在Node节点上打污点,然后在Pod的yaml编排文件中配置容忍度,来实现调度。
  • 亲和-反亲和调度:本文介绍。

2 为什么需要亲和调度?

有了nodeName调度nodeSelector调度污点(Taints)和容忍度(Tolerations)调度,为什么还需要亲和-反亲和调度呢?

为了应对更灵活更复杂的调度场景。比如有些场景想把2个Pod 调度到一台节点上,有的场景为了隔离性高可用性想把2个Pod分开到不同节点上,或者有的场景想把Pod调度到指定的一些特点节点上。

3 亲和调度的前置概念

  • label在K8S中是非常重要的概念,不管是什么场景,只要和选择、筛选相关的,基本是用label字段来匹配的。
  • 亲和性和反亲和性的调度,筛选的条件依旧用的是Node的label字段。
  • 不管是Node亲和性调度,还是Pod亲和性调度,被调度的主体都是Pod。都是讲的Pod根据亲和规则调度到某个节点,或者Pod跟随别的Pod调到到某个节点(比如Pod1跟随Pod2,Pod2被调度到B节点,那么Pod1也被调度到B节点)。
  • Node亲和性调度 和 Pod亲和性调度 的配置都是写在 编排Pod的yaml里。因为被调度的主体是Pod。
  • Node亲和性调度是指Pod和Node的亲密关系。
  • Pod亲和性调度是指Pod和Pod的亲密关系。
  • 硬亲和:亲和规则只有一种,必须符合该规则。
  • 软亲和:规则有多种,每个权重不同,根据权重优先级去选择一个规则。

Node亲和性调度的图示如下,Pod亲和性调用和Pod反亲和性调用也类似。

4 亲和调度的具体概念

Affinity的中文意思是亲近,用来表述亲和性调度。

亲和性调度:指Node(或者Pod)和Pod的关联关系,Pod可以部署在符合这种label的Node,也可与其他Pod共享相同的调度策略。

反亲和性调度:主要针对两个pod相反的调度策略,即pod A选择node1,那么pod2绝对不会选择node1进行调度。

4.1 记住这3种调度关系

亲和性调度 和 反亲和性调度的关系就3种:

  • node亲和调度:硬亲和、软亲和
  • pod亲和调度:硬亲和、软亲和
  • pod反亲和调度:硬亲和、软亲和

4.2 亲和性表达式

不管是Node亲和 还是Pod亲和,他们都有2种亲和性表达方式:

  • RequiredDuringSchedulingIgnoredDuringExecution:是硬亲和的方式,必须满足指定的规则才可以把Pod调度到该Node上。这里注意Required这个词,中文意思必须的
  • PreferredDuringSchedulingIgnoredDuringExecution:是软亲和的方式,强调优先满足某个规则,然后根据优先的规则,将Pod调度到节点上。这里注意Preferred这个词,中文意思是首选,用来说明选择规则的优先级,确实比较合适。

这两个字段也比较长,我们来做下拆解,将RequiredDuringSchedulingIgnoredDuringExecution拆解为RequiredDuringSchedulingIgnoredDuringExecution

  • RequiredDuringScheduling:定义的规则必须强制满足(Required)才会把Pod调度到节点上。
  • IgnoredDuringExecution:已经在节点上运行的Pod不需要满足定义的规则,即使去除节点上的某个标签,那些需要节点包含该标签的Pod依旧会在该节点上运行。或者这么理解:如果Pod所在的节点在Pod运行期间标签被删除了,不再符合该Pod的节点亲和性规则,那也没关系,该Pod 还能继续在该节点上运行。

4.3 表达式操作符

亲和性表达方式需要用到如下几个可选的操作符operator

  • In:标签的值在某个列表中
  • NotIn:标签的值不在某个列表中
  • Exists:存在某个标签
  • DoesNotExist:不存在某个标签
  • Gt:标签的值大于某个值(字符串比较)
  • Lt:标签的值小于某个值(字符串比较)

这些操作符里,虽然没有排斥某个节点的功能,但是用这几个标签也可以变相的实现排斥的功能。

4.4 作用域topologyKey

topologyKey很多地方解释为拓扑键,其实本质上就是个作用域的概念。

topologyKey配置了一个label的key,那么存在这个key对应的label的所有Node就在同一个作用域里。

5 亲和性与反亲和性实战

nodeName和NodeSelelctor调度实战参考:Kubernetes系列-Pod的定向调度_当创建一个pod实例,是怎么调度到node节点上面的-CSDN博客​​​​​​​

Kubernetes系列-部署pod到集群中的指定node_kubectl 部署pod到某个节点-CSDN博客

5.1 nodeName调度

比如要将Pod调度到nodeName是ops-worker-2的节点上

$ vim webapp.yaml
apiVersion: v1
kind: Pod
metadata:name: webappnamespace: demolabels:app: webapp
spec:nodeName: 'k8s-worker-2'containers:- name: webappimage: nginxports:- containerPort: 80
$ kubectl apply -f webapp.yaml 
pod/webapp created
$ kubectl get pod  -o wide 
NAME                           READY   STATUS    RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
webapp                         1/1     Running   0          8s      172.25.50.142   ops-worker-2   <none>           <none>

5.2 nodeSelector调度

比如要将Pod调度到具有"special-app=specialwebapp"的label节点上。

节点ops-worker-2打上"special-app=specialwebapp"标签:

$ kubectl label node ops-worker-1 special-app=specialwebapp
node/ops-worker-1 labeled

查看节点信息:

$ kubectl describe node ops-worker-1
Name:               ops-worker-1
Roles:              <none>
Labels:             beta.kubernetes.io/arch=amd64beta.kubernetes.io/os=linuxenv=uatkubernetes.io/arch=amd64kubernetes.io/hostname=ops-worker-1kubernetes.io/os=linuxspecial-app=specialwebapp
Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.socknode.alpha.kubernetes.io/ttl: 0projectcalico.org/IPv4Address: 10.220.43.204/20projectcalico.org/IPv4IPIPTunnelAddr: 172.25.78.64volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Sun, 17 Dec 2023 15:32:04 +0800
Taints:             <none>
Unschedulable:      false
Lease:HolderIdentity:  ops-worker-1AcquireTime:     <unset>RenewTime:       Mon, 22 Jan 2024 21:59:33 +0800
Conditions:Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message----                 ------  -----------------                 ------------------                ------                       -------NetworkUnavailable   False   Sun, 17 Dec 2023 15:32:48 +0800   Sun, 17 Dec 2023 15:32:48 +0800   CalicoIsUp                   Calico is running on this nodeMemoryPressure       False   Mon, 22 Jan 2024 21:59:30 +0800   Sun, 17 Dec 2023 15:32:04 +0800   KubeletHasSufficientMemory   kubelet has sufficient memory availableDiskPressure         False   Mon, 22 Jan 2024 21:59:30 +0800   Sun, 17 Dec 2023 15:32:04 +0800   KubeletHasNoDiskPressure     kubelet has no disk pressurePIDPressure          False   Mon, 22 Jan 2024 21:59:30 +0800   Sun, 17 Dec 2023 15:32:04 +0800   KubeletHasSufficientPID      kubelet has sufficient PID availableReady                True    Mon, 22 Jan 2024 21:59:30 +0800   Sun, 17 Dec 2023 15:32:54 +0800   KubeletReady                 kubelet is posting ready status
Addresses:InternalIP:  10.220.43.204Hostname:    ops-worker-1
Capacity:cpu:                8ephemeral-storage:  103080204Kihugepages-1Gi:      0hugepages-2Mi:      0memory:             15583444Kipods:               110
Allocatable:cpu:                8ephemeral-storage:  94998715850hugepages-1Gi:      0hugepages-2Mi:      0memory:             15481044Kipods:               110
System Info:Machine ID:                 c72f33a969d84fac8d6f7b35c035bafaSystem UUID:                e2ef28e5-4140-41a9-807d-78ecf09efb8dBoot ID:                    879480b6-2f5a-45e5-9b31-4c7aab3caa33Kernel Version:             4.19.91-27.6.al7.x86_64OS Image:                   Alibaba Cloud Linux (Aliyun Linux) 2.1903 LTS (Hunting Beagle)Operating System:           linuxArchitecture:               amd64Container Runtime Version:  docker://20.10.21Kubelet Version:            v1.21.9Kube-Proxy Version:         v1.21.9
PodCIDR:                      172.25.1.0/24
PodCIDRs:                     172.25.1.0/24
Non-terminated Pods:          (11 in total)Namespace                   Name                                         CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age---------                   ----                                         ------------  ----------  ---------------  -------------  ---default                     nginx-node1-6c7874c7b8-q2swk                 0 (0%)        0 (0%)      0 (0%)           0 (0%)         9dkube-system                 calico-kube-controllers-5d4b78db86-gmvg5     0 (0%)        0 (0%)      0 (0%)           0 (0%)         36dkube-system                 calico-kube-controllers-5d4b78db86-qvrnk     0 (0%)        0 (0%)      0 (0%)           0 (0%)         5d23hkube-system                 calico-node-jk7zc                            250m (3%)     0 (0%)      0 (0%)           0 (0%)         36dkube-system                 coredns-59d64cd4d4-zr4hd                     100m (1%)     0 (0%)      70Mi (0%)        170Mi (1%)     36dkube-system                 kube-proxy-rm64j                             0 (0%)        0 (0%)      0 (0%)           0 (0%)         36dkube-system                 metrics-server-54cc454bdd-ds4zp              0 (0%)        0 (0%)      0 (0%)           0 (0%)         12dkube-system                 vpa-admission-controller-54d7b4896d-75g5d    50m (0%)      200m (2%)   200Mi (1%)       500Mi (3%)     8dkube-system                 vpa-admission-controller-558664548-fbhzt     50m (0%)      200m (2%)   200Mi (1%)       500Mi (3%)     5d23hkube-system                 vpa-recommender-84d88664b8-4kdn5             50m (0%)      200m (2%)   500Mi (3%)       1000Mi (6%)    12dkube-system                 vpa-updater-5545848b57-lq5sf                 50m (0%)      200m (2%)   500Mi (3%)       1000Mi (6%)    5d23h
Allocated resources:(Total limits may be over 100 percent, i.e., overcommitted.)Resource           Requests     Limits--------           --------     ------cpu                550m (6%)    800m (10%)memory             1470Mi (9%)  3170Mi (20%)ephemeral-storage  0 (0%)       0 (0%)hugepages-1Gi      0 (0%)       0 (0%)hugepages-2Mi      0 (0%)       0 (0%)
Events:              <none>

Pod的yaml编排文件:

$ vim webapp2.yaml
apiVersion: v1
kind: Pod
metadata:name: webapp-2namespace: defaultlabels:app: webapp-2
spec:nodeSelector:special-app: specialwebappcontainers:- name: webapp-2image: nginxports:- containerPort: 80
$ kubectl apply -f webapp2.yaml 
pod/webapp-2 created

查看Pod被调度到哪台机器上:

$ kubectl get pod  -o wide 
NAME                           READY   STATUS              RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
webapp-2                       0/1     ContainerCreating   0          11s     <none>          ops-worker-1   <none>           <none>

pod被调度在label为 special-app的node上。

5.3 Node亲和调度

Node的亲和调度是指,Node和Pod的关系。

5.3.1 硬亲和

定义Pod-Node的硬亲和yaml文件:pod_node_required_affinity.yaml。文件内容如下:

$ vim pod_node_required_affinity.yaml 
apiVersion: v1
kind: Pod
metadata:name: webapp-3namespace: defaultlabels:app: webapp-3
spec:containers:- name: webapp-3image: nginxports:- containerPort: 80affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: appoperator: Invalues:- backend
$ kubectl apply -f pod_node_required_affinity.yaml 
pod/webapp-3 created

给ops-master-3节点添加label:

$ kubectl label node ops-master-3 app=backend
node/ops-master-3 labeled

查看ops-master-3节点的label情况:

$ kubectl get node ops-master-3 --show-labels
NAME           STATUS   ROLES                  AGE   VERSION   LABELS
ops-master-3   Ready    control-plane,master   36d   v1.21.9   app=backend,beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env=uat,kubernetes.io/arch=amd64,kubernetes.io/hostname=ops-master-3,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=

查看调度结果:

$ kubectl get pod  -o wide 
NAME                           READY   STATUS    RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
webapp-3                       1/1     Running   0          90s     172.25.186.68   ops-master-3   <none>           <none>

5.3.2 软亲和

软亲和调度,主要就是加入了多个规则,每个设置了权重,yaml文件如下:

$ vim pod_node_preferred_affinity.yaml
apiVersion: v1
kind: Pod
metadata:name: webapp-4namespace: defaultlabels:app: webapp-4
spec:containers:- name: webapp-4image: nginxports:- containerPort: 80affinity:nodeAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 80preference:matchExpressions:- key: app2operator: Exists- weight: 20preference:matchExpressions:- key: appoperator: Invalues:- backend2

 给节点ops-master-2设置app2=backend的标签。

$ kubectl label node ops-master-2 app2=backend
node/ops-master-2 labeled
$ kubectl apply -f webapp-4.yaml 
pod/webapp-4 created
$ kubectl get pod  -o wide 
NAME                           READY   STATUS    RESTARTS   AGE   IP              NODE           NOMINATED NODE   READINESS GATES
webapp-4                       1/1     Running   0          5s    172.25.78.133   ops-master-2   <none>           <none>

pod调度到ops-master-2上面。

5.4 Pod亲和调度

Pod亲和调度,是指Pod和Pod之间的关系。

5.4.1 硬亲和

比如Pod1跟随Pod2,Pod2被调度到B节点,那么Pod1也被调度到B节点。

所以需要部署2个Pod。Pod1使用上面的例子,让Pod1采用Node硬亲和调度到k8s-worker-3节点。然后再部署Pod2,让它跟随Pod1,也会被调度到k8s-worker-3节点。

准备Pod2的yaml编排文件pod_pod_required_affinity.yaml,如下:

$ vim pod_pod_required_affinity.yaml
apiVersion: v1
kind: Pod
metadata:name: webapp-5namespace: defaultlabels:app: webapp-5
spec:containers:- name: webapp-5image: nginxports:- containerPort: 80affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- topologyKey: kubernetes.io/hostnamelabelSelector:matchExpressions:- key: appoperator: Invalues:- webapp-3
$ kubectl apply -f pod_pod_required_affinity.yaml 
pod/webapp-5 created

查看调度结果:

kubectl get pod  -o wide 
NAME                           READY   STATUS    RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
webapp-3                       1/1     Running   0          18m     172.25.186.68   ops-master-3   <none>           <none>
webapp-4                       1/1     Running   0          4m51s   172.25.78.133   ops-master-2   <none>           <none>
webapp-5                       1/1     Running   0          8s      172.25.186.69   ops-master-3   <none>           <none>

webapp-3和webapp-5调度在同一个node上。

5.4.2 软亲和

软亲和和硬亲和类似,只是多了权重。

$ vim  webapp-6.yaml 
apiVersion: v1# 选择调度到具有这个label的节点
kind: Pod
metadata:name: webapp-6namespace: defaultlabels:app: webapp-6
spec:containers:- name: webapp-6image: nginxports:- containerPort: 80affinity:podAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 40podAffinityTerm:labelSelector:matchExpressions:- key: app2operator: ExiststopologyKey: kubernetes.io/hostname- weight: 60podAffinityTerm:labelSelector:            matchExpressions:- key: appoperator: Invalues:- webapp-4topologyKey: kubernetes.io/hostname
$ kubectl apply -f webapp-6.yaml 
pod/webapp-6 created
$ kubectl get pod -o wide 
NAME                           READY   STATUS              RESTARTS   AGE   IP              NODE           NOMINATED NODE   READINESS GATES
nginx-node1-6c7874c7b8-d6cnw   1/1     Running             0          6d    172.25.78.131   ops-master-2   <none>           <none>
nginx-node1-6c7874c7b8-q2swk   1/1     Running             0          9d    172.25.78.80    ops-worker-1   <none>           <none>
nginx-test-6b7c99bbb-b6smk     0/1     Pending             0          6d    <none>          <none>         <none>           <none>
nginx-test-6b7c99bbb-jd5xt     0/1     Pending             0          6d    <none>          <none>         <none>           <none>
webapp                         1/1     Running             0          63m   172.25.50.142   ops-worker-2   <none>           <none>
webapp-1                       1/1     Running             0          56m   172.25.50.143   ops-worker-2   <none>           <none>
webapp-2                       1/1     Running             0          51m   172.25.78.85    ops-worker-1   <none>           <none>
webapp-3                       1/1     Running             0          46m   172.25.186.68   ops-master-3   <none>           <none>
webapp-4                       1/1     Running             0          33m   172.25.78.133   ops-master-2   <none>           <none>
webapp-5                       1/1     Running             0          28m   172.25.186.69   ops-master-3   <none>           <none>
webapp-6                       0/1     ContainerCreating   0          3s    <none>          ops-master-2   <none>           <none>

5.5 Pod反亲和调度

5.5.1 反亲和的硬亲和

$ vim webapp-8.yaml
apiVersion: v1
kind: Pod
metadata:name: webapp-2namespace: demolabels:app: webapp-2
spec:containers:- name: webappimage: nginxports:- containerPort: 80affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- topologyKey: kubernetes.io/hostnamelabelSelector:matchExpressions:- key: appoperator: Invalues:- webapp
$ kubectl apply -f webapp-7.yaml
pod/webapp-8 created
$ kubectl get pod -o wide 
NAME                           READY   STATUS    RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
nginx-node1-6c7874c7b8-d6cnw   1/1     Running   0          6d      172.25.78.131   ops-master-2   <none>           <none>
nginx-node1-6c7874c7b8-q2swk   1/1     Running   0          9d      172.25.78.80    ops-worker-1   <none>           <none>
nginx-test-6b7c99bbb-b6smk     0/1     Pending   0          6d      <none>          <none>         <none>           <none>
nginx-test-6b7c99bbb-jd5xt     0/1     Pending   0          6d      <none>          <none>         <none>           <none>
webapp                         1/1     Running   0          66m     172.25.50.142   ops-worker-2   <none>           <none>
webapp-1                       1/1     Running   0          59m     172.25.50.143   ops-worker-2   <none>           <none>
webapp-2                       1/1     Running   0          55m     172.25.78.85    ops-worker-1   <none>           <none>
webapp-3                       1/1     Running   0          49m     172.25.186.68   ops-master-3   <none>           <none>
webapp-4                       1/1     Running   0          36m     172.25.78.133   ops-master-2   <none>           <none>
webapp-5                       1/1     Running   0          31m     172.25.186.69   ops-master-3   <none>           <none>
webapp-6                       1/1     Running   0          3m13s   172.25.78.134   ops-master-2   <none>           <none>
webapp-8                       1/1     Running   0          5s      172.25.186.78   ops-master-3   <none>           <none>

webapp-8没有和webapp调度到同一个node上。

5.5.2 反亲和的软亲和

反亲和的软亲和 和 硬亲和类似,只是多了权重,此处不做测试。

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

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

相关文章

Java和Redis实现一个简单的热搜功能

1. 前言 我们有一个简单的需求&#xff1a; 搜索栏展示当前登陆的个人用户的搜索历史记录&#xff0c;删除个人历史记录。用户在搜索栏输入某字符&#xff0c;则将该字符记录下来 以zset格式存储的redis中&#xff0c;记录该字符被搜索的个数以及当前的时间戳 &#xff08;用…

Qt5.12.0 与 VS2017 在 .pro文件转.vcxproj文件

一、参考资料 stackoverflow qt - How to generate .sln/.vcproj using qmake - Stack Overflowhttps://stackoverflow.com/questions/2339832/how-to-generate-sln-vcproj-using-qmake?answertabtrending#tab-topqt - 如何使用 qmake 生成 .sln/.vcproj - IT工具网 (coder.wo…

《WebKit 技术内幕》学习之七(2): 渲染基础

2 网页层次和RenderLayer树 2.1 层次和RenderLayer对象 前面章节介绍了网页的层次结构&#xff0c;也就是说网页是可以分层的&#xff0c;这有两点原因&#xff0c;一是为了方便网页开发者开发网页并设置网页的层次&#xff0c;二是为了WebKit处理上的便利&#xff0c;也就是…

数据库复试—关系数据库标准语言SQL

数据库复试—关系数据库标准语言SQL SQL&#xff1a;结构化查询语言 以教材中的学生-课程数据库为例进行SQL基础语法的复习 数据库实验环境选择SQLServer 11 关系模式 学生表Student(Sno,Sname,Ssex,Sage,Sdept) 课程表Course(Cno,Cname,Cpno,Ccredit) 学生选课表SC&#xf…

【Java】学习一门开发语言,从TA的Hello World开始

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《Java》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

【Android12】Android Framework系列---Adb和PMS安装apk源码流程

Adb和PMS安装apk源码流程 adb install命令 通过adb install命令可以将apk安装到Android系统&#xff08;注意&#xff1a;特定类型的apk&#xff0c;比如persist类型是无法通过adb安装的&#xff09; 下述命令中adb解析install命令&#xff0c;并调用Android PackageManagerS…

eNSP学习——部分VLAN间互通、部分VLAN间隔离、VLAN内用户隔离(MUX-VLAN)

MUX VLAN&#xff08;Multiplex VLAN&#xff09;提供了一种通过VLAN进行网络资源控制 的机制。通过MUX VLAN提供的二层流量隔离的机制可以实现企业内部员 工之间互相通信&#xff0c;而企业外来访客之间的互访是隔离的。 特点&#xff1a; 一、主VLAN端口可以和所有VLAN通信 二…

基本控件(一)

目录 控件的定义&#xff1a;使用控件的好处&#xff1a; setupUiwidget.hwidget.cppmain.cpp 控件的定义&#xff1a; QT控件是在QT框架下实现的一组用户界面元素&#xff0c;包括按钮、标签、输入框、列表框、滚动条、菜单等等&#xff0c;它们用于快速构建各种应用程序的图…

【Linux】gcc与g++的认识

gcc与g是linux下的编译器&#xff0c; 我们都知道写好了源文件gcc一下就可以得到.exe文件 那么其中会经过几个过程呢&#xff1f;也就是源文件翻译过程&#xff0c; 预处理&#xff08;预编译&#xff09;编译汇编链接 本篇文章的侧重点是围绕链接进行理解C语言标准库 目录 …

Java项目:ssm框架基于spring+springmvc+mybatis框架的民宿预订管理系统设计与实现(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm827基于SSM框架的民宿预订管理系统设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调…

POI及EasyExcel学习笔记

POI及EasyExcel学习笔记 组件、工具 POI-Excel概述 Apache POI 结构&#xff1a; HSSF &#xff0d; 提供读写[Microsoft Excel](https://baike.baidu.com/item/Microsoft Excel)格式档案的功能。XSSF &#xff0d; 提供读写Microsoft Excel OOXML格式档案的功能。HWPF &am…

93. 复原 IP 地址 - 力扣(LeetCode)

题目描述 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&#xff0c;但是 “0.011.255.245”、“…

matlab appdesigner系列-常用16-状态按钮

状态按钮&#xff0c;有两个状态&#xff0c;按下状态&#xff0c;返回值为1或true&#xff1b;未按下状态&#xff0c;返回值为0或false 示例&#xff1a;设置一状态按钮&#xff0c;用文本记录其状态 操作步骤&#xff1a; 1&#xff09;将状态按钮、文本区域拖拽到画布上…

LeetCode 热题 100 | 哈希

目录 1 基础知识 1.1 定义哈希表 1.2 遍历哈希表 1.3 查找某一个键 1.4 插入键值对 1.5 获取键值对的值 1.6 搜索功能 2 三道题 2.1 1. 两数之和 2.2 49. 字母异位词分组 2.3 128. 最长连续序列 菜鸟做题第一周&#xff0c;语言是 C 1 基础知识 1.1 定…

对网站进行打点(不要有主动扫描行为)

什么是打点&#xff1f; 简单来说就是获取一个演习方服务器的控制权限。 目的&#xff1a; 1. 上传一个一句话木马 2. 挖到命令执行 3. 挖到反序列化漏洞 4. 钓鱼 假设对“千峰”网站进行打点&#xff1a; 1. 利用平台 1. 利用各类平台&#xff1a; 天眼查-商业查询平…

Unity SnapScrollRect 滚动 匹配 列表 整页

展示效果 原理: 当停止滑动时 判断Contet的horizontalNormalizedPosition 与子Item的缓存值 相减,并得到最小值&#xff0c;然后将Content horizontalNormalizedPosition滚动过去 使用方式&#xff1a; 直接将脚本挂到ScrollRect上 注意&#xff1a;在创建Content子物体时…

Mysql运维篇(二) 主从复制

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人,如有侵权请留言,我及时删除。 一、主从复制的原理 主库会生成一个I/O操作线程进去写的的操作,而从库则生成两个线程,其一是I/O读取线程,其二是一个SQL线程。 1、主库将数据的操作记录到一个二进…

C++的流库

1.流的概念 “流”&#xff0c;即“流动”的意思&#xff0c;是物质从一处向另一处流动的过程。在计算机这边通常是指对一种有序连续且具有方向性的数据的抽象描述。 C 中的流一般指两个过程的统一&#xff1a; 信息从外部输入设备&#xff08;键盘&#xff09;向计算机内部…

【数据结构与算法】之字符串系列-20240121

这里写目录标题 一、344. 反转字符串二、125. 验证回文串三、205. 同构字符串四、242. 有效的字母异位词五、290. 单词规律 一、344. 反转字符串 简单 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额…

k8s集群加入一个master2--kubeadm方式

已经有一个集群&#xff1a; 192.168.206.138 master 192.168.206.136 k8s-node1 192.168.206.137 k8s-node2 kubectl get nodes -o wide 新加入一个master2节点 192.168.206.139 master2 一、初始化系统参数 139 master2 上 #在136、137、138上添加hosts“” echo "…