【云原生kubernetes系列】---亲和与反亲和

news2024/11/26 4:41:01

1、亲和和反亲和

  • node的亲和性和反亲和性
  • pod的亲和性和反亲和性

1.1node的亲和和反亲和

1.1.1ndoeSelector(node标签亲和)

#查看node的标签
root@k8s-master1:~# kubectl get nodes --show-labels
#给node节点添加标签
root@k8s-master1:~# kubectl label nodes 172.17.1.107 disktype=ssd
node/172.17.1.107 labeled
root@k8s-master1:~# kubectl get nodes --show-labels |grep ssd
172.17.1.107   Ready                      node     7d19h   v1.22.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=172.17.1.107,kubernetes.io/os=linux,kubernetes.io/role=node

root@k8s-master1:/app/yaml/qhx# cat nginx-nodeSelector.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx-pod
    image: nginx
  nodeSelector:
    disktype: ssd

此时pod只会部署在带有disktype=ssd的这个标签上
在这里插入图片描述
删除标签

root@k8s-master1:/app/yaml/qhx# kubectl label nodes 172.17.1.107 disktype-

在这里插入图片描述

1.1.2 nodeName亲和

通过template中的spec指定nodeName也可以将pod运行在指定的node上

root@k8s-master1:/app/yaml/qhx# cat nginx-nodeName.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod-1
spec:
  nodeName: 172.17.1.108
  containers:
  - name: nginx-pod
    image: nginx

在这里插入图片描述

1.1.3Affinity

类似于nodeSelector允许使用者指定一些pod在Node间调度的约束,日常支持两种模式:

requiredDuringSchedulingIgnoredDuringExecution: 硬性条件,满足则调度,不满足则不调度

preferedDuringShedulingIgnoreDuringExecution:软性条件,不满足的情况下可以往其他不符合要求的node节点调度

IgnoreDuringExecution 如果Pod已经运行,如果标签发生变化不会影响已经运行的pod.

Affinity亲和,anti-affinity反亲和,相对于nodeSelector的功能更强大

  • 标签支持and,还支持in,Notin,Exists,DoesNotExist,Gt,Lt
  • 可以设置软匹配和硬匹配,在软匹配如果调度器无法匹配节点,仍然会将pod调度到其他不符合的节点上去
  • 可以对pod定义和策略,比如那些pod可以或者不可以被调度到同一个node上
  1. In:标签的值存在列表中
  2. NotIn:标签的值不存在指定的匹配列表中
  3. Gt:标签的值大于某个值(字符串)
  4. Lt:标签的值小于某个值
  5. Exists:指定的标签存在

1.1.3.1 硬策略-requiredDuringSchedulingIgnoredDuringExecution

注意:不匹配不会被调度

实例一:当matchExpressions只有一个key,只要满足任意调度中的一个value,就会被调度到相应的节点上(多个条件之间是或的关系)

root@k8s-master1:/app/yaml/qhx# cat pod-1.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod-2
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions: #匹配条件1,多个values可以调度
          - key: disktype
            operator: In
            values:
            - ssd
            - hdd

        - matchExpressions: #匹配条件1,多个matchExpressions加上每个的matchExpressions values只要其中有一个value匹配成功就可以被调度
          - key: project
            operator: In
            values:
            - Linux
            - Python
  containers:
  - name: nginx-pod
    image: nginx

在这里插入图片描述

root@k8s-master1:/app/yaml/qhx# kubectl label nodes 172.17.1.108 disktype=ssd
node/172.17.1.108 labeled
root@k8s-master1:/app/yaml/qhx# kubectl get nodes --show-labels |grep ssd
172.17.1.108   Ready                      node     9d    v1.22.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=172.17.1.108,kubernetes.io/os=linux,kubernetes.io/role=node

#此时当172.17.1.108带有disktype=ssd的标签时就可以被调度了
root@k8s-master1:/app/yaml/qhx# kubectl get pod -o wide
NAME      READY   STATUS    RESTARTS      AGE     IP               NODE           NOMINATED NODE   READINESS GATES
mypod-1   1/1     Running   1 (45h ago)   46h     10.200.169.153   172.17.1.108   <none>           <none>
mypod-2   1/1     Running   0             4m54s   10.200.169.154   172.17.1.108   <none>           <none>

实例二、当matchExpressions有多个key时,需要满足所有的key,才会被调度.一个key里多个值可以任意满足一个.

disktype这个key下ssd和hdd只要满足其中一个,那么这个条件即满足:

  1. project这个key必须满足
  2. disktype和project之间是and
  3. ssd和hdd之间是or
root@k8s-master1:/app/yaml/qhx# cat pod-2.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod-3
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions: #匹配条件1,多个values可以调度
          - key: disktype
            operator: In
            values:
            - ssd
            - hdd #同个key多个value只要有一个value满足条件就可以了
          - key: project #当同一个matchExpressions存在多个key时,要求多个key的条件同时满足才可以被调度
            operator: In
            values:
            - Linux
            - Python
  containers:
  - name: nginx-pod
    image: nginx

root@k8s-master1:/app/yaml/qhx# kubectl apply -f pod-2.yaml
pod/mypod-3 created
root@k8s-master1:/app/yaml/qhx# kubectl get pod -o wide
NAME      READY   STATUS    RESTARTS      AGE   IP               NODE           NOMINATED NODE   READINESS GATES
mypod-1   1/1     Running   1 (45h ago)   46h   10.200.169.153   172.17.1.108   <none>           <none>
mypod-2   1/1     Running   0             19m   10.200.169.154   172.17.1.108   <none>           <none>
mypod-3   0/1     Pending   0             7s    <none>           <none>         <none>           <none>
root@k8s-master1:/app/yaml/qhx# kubectl describe pod mypod-3
Name:         mypod-3
Namespace:    default
Priority:     0
Node:         <none>
Labels:       <none>
Annotations:  <none>
Status:       Pending
IP:
IPs:          <none>
Containers:
  nginx-pod:
    Image:        nginx
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-pfjf5 (ro)
Conditions:
  Type           Status
  PodScheduled   False
Volumes:
  kube-api-access-pfjf5:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  23s   default-scheduler  0/6 nodes are available: 3 node(s) didn't match Pod's node affinity/selector, 3 node(s) were unschedulable.

#因为172.17.1.108这个节点只满足一个key的要求,故pod无法被调度到这个节点

在这里插入图片描述

root@k8s-master1:/app/yaml/qhx# kubectl label nodes 172.17.1.109 disktype=hdd project=Linux
node/172.17.1.109 labeled
root@k8s-master1:/app/yaml/qhx# kubectl get nodes --show-labels |grep 109
172.17.1.109   Ready                      node     9d    v1.22.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=hdd,kubernetes.io/arch=amd64,kubernetes.io/hostname=172.17.1.109,kubernetes.io/os=linux,kubernetes.io/role=node,project=Linux
root@k8s-master1:/app/yaml/qhx# kubectl get pod -o wide
NAME      READY   STATUS    RESTARTS      AGE   IP               NODE           NOMINATED NODE   READINESS GATES
mypod-1   1/1     Running   1 (46h ago)   46h   10.200.169.153   172.17.1.108   <none>           <none>
mypod-2   1/1     Running   0             29m   10.200.169.154   172.17.1.108   <none>           <none>
mypod-3   1/1     Running   0             13s   10.200.107.239   172.17.1.109   <none>           <none> 
root@k8s-master1:/app/yaml/qhx# kubectl describe pod mypod-3
Name:         mypod-3
Namespace:    default
Priority:     0
Node:         172.17.1.109/172.17.1.109
Start Time:   Wed, 31 Jan 2024 15:49:21 +0800
Labels:       <none>
Annotations:  <none>
Status:       Running
IP:           10.200.107.239
IPs:
  IP:  10.200.107.239
Containers:
  nginx-pod:
    Container ID:   docker://19a130c06ea78cd4469fe724096f0bb066896e10c035c30c3553aafd580bf504
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:4c0fdaa8b6341bfdeca5f18f7837462c80cff90527ee35ef185571e1c327beac
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Wed, 31 Jan 2024 15:49:27 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-544dq (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  kube-api-access-544dq:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  22s   default-scheduler  Successfully assigned default/mypod-3 to 172.17.1.109
  Normal  Pulling    19s   kubelet            Pulling image "nginx"
  Normal  Pulled     16s   kubelet            Successfully pulled image "nginx" in 2.972306097s
  Normal  Created    16s   kubelet            Created container nginx-pod
  Normal  Started    16s   kubelet            Started container nginx-pod

在这里插入图片描述

1.1.3.2 软策略-preferedDuringShedulingIgnoreDuringExecution

如果匹配成功,则会被调度到指定的Node上,即使不匹配,也会被调度

实例:

root@k8s-master1:/app/yaml/qhx# cat pod-3.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mypod-4
spec:
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 80   #权重范围:1-100,权重越高越被优先调度
        preference:
          matchExpressions:
          - key: project
            operator: In
            values:
              - Java
  containers:
  - name: nginx-pod
    image: nginx
root@k8s-master1:/app/yaml/qhx# kubectl get nodes --show-labels |grep Java
root@k8s-master1:/app/yaml/qhx# kubectl apply -f pod-3.yaml
pod/mypod-4 created
root@k8s-master1:/app/yaml/qhx# kubectl get pod -o wide
NAME      READY   STATUS    RESTARTS      AGE   IP               NODE           NOMINATED NODE   READINESS GATES
mypod-1   1/1     Running   1 (46h ago)   46h   10.200.169.153   172.17.1.108   <none>           <none>
mypod-2   1/1     Running   0             49m   10.200.169.154   172.17.1.108   <none>           <none>
mypod-3   1/1     Running   0             19m   10.200.107.239   172.17.1.109   <none>           <none>
mypod-4   1/1     Running   0             13s   10.200.36.96     172.17.1.107   <none>           <none>

1.1.3.3 node软策略和硬策略的综合使用

硬策略是(NotIn)反亲和,不往master节点调度

软策略是(In)亲和,优先将pod调度到含有标签的node节点,如果没有任何node满足pod的标签,再根据计算调度到其他节点上

1.2pod的亲和

Pod亲和与反亲和是根据已经运行在node节点上的Pod标签进行匹配的,pod标签必须指定namespace

亲和:将新创建的pod分配到有这些标签的node上,可以减少网络传输的消耗
在这里插入图片描述
反亲和:创建pod时避免将pod新建到有这些标签的node节点上,可以用来做项目资源分配和高可用
在这里插入图片描述
Pod亲和与反亲和合法操作符有:In,NotIn,Exists,DoesNotxist

1.2.1pod之间的亲和

root@k8s-master1:/app/yaml/qhx# kubectl get nodes --show-labels |grep Linux
172.17.1.107   Ready                      node     9d    v1.22.3   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=172.17.1.107,kubernetes.io/os=linux,kubernetes.io/role=node,project=Linux

root@k8s-master1:/app/yaml/qhx# cat deply-pod1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: webwork
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
      project: Linux
  template:
    metadata:
      labels:
        app: nginx
        project: Linux
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        
#此时pod被调度到含有project=Linux标签上的node节点上了
root@k8s-master1:/app/yaml/qhx# kubectl get pod -n webwork -o wide
NAME                                READY   STATUS             RESTARTS         AGE     IP               NODE           NOMINATED NODE   READINESS GATES
nginx-deployment-55b448df4c-94bbl   1/1     Running            0                16s     10.200.36.99     172.17.1.107   <none>           <none>
redis-deploy-79bb95b948-hhjtc       1/1     Running            5 (46h ago)      6d20h   10.200.107.237   172.17.1.109   <none>           <none>

1.2.2 pod间的软限制-preferredDuringSchedulingIgnoredDuringExecution

实例:将nginx pod部署到命名空间为webwork中含有标签project值为webwork的pod一起

root@k8s-master1:/app/yaml/qhx# cat deply-pod3.yaml
root@k8s-master1:/app/yaml/qhx# cat deply-pod3.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: webwork
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        podAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: project
                  operator: In
                  values:
                    - Linux
              topologyKey: "kubernetes.io/hostname"
              namespaces:
                - webwork
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        
root@k8s-master1:/app/yaml/qhx# kubectl get pod -o wide -n webwork --show-labels
NAME                                     READY   STATUS    RESTARTS   AGE     IP               NODE           NOMINATED NODE   READINESS GATES   LABELS
nginx-6fd5f8f696-65wtq                   1/1     Running   0          9m41s   10.200.107.254   172.17.1.109   <none>           <none>            app=nginx,pod-template-hash=6fd5f8f696
nginx-6fd5f8f696-8gg5t                   1/1     Running   0          9m41s   10.200.107.252   172.17.1.109   <none>           <none>            app=nginx,pod-template-hash=6fd5f8f696
nginx-6fd5f8f696-cg6k7                   1/1     Running   0          9m41s   10.200.107.253   172.17.1.109   <none>           <none>            app=nginx,pod-template-hash=6fd5f8f696
nginx-deployment-7f6b97fd7f-lxksl        1/1     Running   0          53m     10.200.107.243   172.17.1.109   <none>           <none>            app=nginx,pod-template-hash=7f6b97fd7f,project=Linux
nginx-deployment-test-655f96f4c7-qtw5b   1/1     Running   0          51m     10.200.36.107    172.17.1.107   <none>           <none>            app=nginx,pod-template-hash=655f96f4c7

1.2.3 pod间的硬限制-requiredDuringSchedulingIgnoredDuringExecution

将nginx Pod的亲和到Namespace为wework,标签为project值为wework的Pod的同一个Node上,如果Node上资源不足或匹配失败则无法创建此Pod

root@k8s-master1:/app/yaml/qhx# cat deply-pod4.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-1
  namespace: webwork
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
        city: beijing
    spec:
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: project
                operator: In
                values:
                  - Linux
            topologyKey: "kubernetes.io/hostname"
            namespaces:
              - webwork
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        
#现象:因pod的硬限制无法被调度
root@k8s-master1:/app/yaml/qhx# kubectl describe pod nginx-1-f7ffc7d7-7x97n -n webwork
Name:           nginx-1-f7ffc7d7-7x97n
Namespace:      webwork
Priority:       0
Node:           <none>
Labels:         app=nginx
                city=beijing
                pod-template-hash=f7ffc7d7
Annotations:    <none>
Status:         Pending
IP:
IPs:            <none>
Controlled By:  ReplicaSet/nginx-1-f7ffc7d7
Containers:
  nginx:
    Image:        nginx:latest
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-vtl74 (ro)
Conditions:
  Type           Status
  PodScheduled   False
Volumes:
  kube-api-access-vtl74:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  57s   default-scheduler  0/6 nodes are available: 3 node(s) didn't match pod affinity rules, 3 node(s) were unschedulable.

1.3pod的反亲和

1.3.1硬限制–requiredDuringSchedulingIgnoredDuringExecution

实例:将nginx Pod的亲和到Namespace为wework,标签为project值为wework的Pod的不在同一个Node上,如果Node上资源不足或匹配失败则无法创建此Pod

root@k8s-master1:/app/yaml/qhx# cat deply-pod5.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-1
  namespace: webwork
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
        city: beijing
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: project
                operator: In
                values:
                  - Linux
            topologyKey: "kubernetes.io/hostname"
            namespaces:
              - webwork
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

在这里插入图片描述

1.3.2软限制

root@k8s-master1:/app/yaml/qhx# cat deply-pod6.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: webwork
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: project
                  operator: In
                  values:
                    - Linux
              topologyKey: "kubernetes.io/hostname"
              namespaces:
                - webwork
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

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

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

相关文章

Git 怎么设置用户的权限

在团队协作的软件开发中&#xff0c;对于版本控制系统Git来说&#xff0c;确保代码与数据的安全性至关重要。为了实现这一目标&#xff0c;Git提供了灵活且可定制的用户权限管理机制。下面将简单的探讨一下Git如何设置用户的权限&#xff0c;以及如何保护代码和数据。 用户身份…

3D应用开发平台HOOPS Platforms优化制造流程和数字化转型

Tech Soft 3D公司的HOOPS Platform &#xff08;包括HOOPS Native Platform 和HOOPS Web Platform&#xff09;&#xff0c;是一种用于开发顶级3D软件的集成技术。具有高性能3D图形&#xff0c;准确&#xff0c;快速的CAD数据转换&#xff0c;3D数据发布以及与流行的建模内核的…

CTF-WEB进阶与学习

PHP弱类型 在进行比较的时候&#xff0c;会先判断两种字符串的类型是否相等&#xff0c;再比较 在进行比较的时候&#xff0c;会先将字符串类型转化成相同&#xff0c;再比较 如果比较一个数字和字符串或者比较涉及到数字内容的字符串&#xff0c;则字符串会被转换成数值 并且…

并查集(高阶数据结构)

目录 一、并查集的原理 二、并查集的实现 2.1 并查集的初始化 2.2 查找元素所在的集合 2.3 判断两个元素是否在同一个集合 2.4 合并两个元素所在的集合 2.5 获取并查集中集合的个数 2.6 并查集的路径压缩 2.7 元素的编号问题 三、并查集题目 3.1 省份的数量 3.2 等…

pytorch调用多个gpu训练,手动分配gpu以及指定gpu训练模型的流程以及示例

torch.device("cuda" if torch.cuda.is_available() else "cpu") 当使用上面的这个命令时&#xff0c;PyTorch 会检查系统是否有可用的 CUDA 支持的 GPU。如果有&#xff0c;它将选择默认的 GPU&#xff08;通常是第一块&#xff0c;即 “cuda:0”&#xf…

python_蓝桥杯刷题记录_笔记_入门3

前言 记录我的解法以及笔记思路&#xff0c;谢谢观看。 题单目录 1.P2141 [NOIP2014 普及组] 珠心算测验 2.P1567 统计天数 3.P1055 [NOIP2008 普及组] ISBN 号码 4.P1200 [USACO1.1] 你的飞碟在这儿 Your Ride Is Here 5.P1308 [NOIP2011 普及组] 统计单词数 6.P1047 […

应急响应事件处置指南

注意&#xff1a;以下的事件处置类型是常见的&#xff0c;但安全威胁不断演化&#xff0c;因此可能需要根据具体情况进行调整。 1 Webshell类 1.1常见Webshell类型 1.1.1 一句话木马 特征&#xff1a; 一句话木马代码简短&#xff0c;通常只有一行代码&#xff0c;使用灵活…

【大厂AI课学习笔记】1.4 算法的进步(1)

2006年以来&#xff0c;以深度学习为代表的机器学习算法的发展&#xff0c;启发了人工智能的发展。 MORE&#xff1a; 自2006年以来&#xff0c;深度学习成为了机器学习领域的一个重要分支&#xff0c;引领了人工智能的飞速发展。作为人工智能专家&#xff0c;我将阐述这一时期…

J-Link:STM32使用J-LINK烧录程序,其他MCU也通用

说明&#xff1a;本文记录使用J-LINK烧录STM32程序的过程。 1. J-LINK驱动、软件下载 1、首先拥有硬件J-Link烧录器。 2、安装J-Link驱动程序SEGGER 下载地址如下 https://www.segger.com 直接下载就可以了。 2.如何使用J-LINK向STM32烧写程序 1、安装好以后打开J-LINK Fl…

废品上门回收小程序搭建全过程

随着人们对环境保护意识的不断增强&#xff0c;废品回收成为了一项重要的社会活动。为了方便废品回收的顾客和回收者之间的联系&#xff0c;废品上门回收小程序成为了一种流行的解决方案。然而&#xff0c;如何选择一款合适的废品上门回收小程序搭建平台呢&#xff1f;下面将为…

网络协议与攻击模拟_13缓存DNS与DNS报文

一、缓存DNS服务器 1、引入缓存DNS 缓存域名服务器需要与外网连接 一台windows作为Client 一台Windows server作为缓存DNS 桥接网络 DHCP自动获取IP地址 Client 192.168.183.133 Windows server 192.168.183.138 ipconfig /all查看下Client的DNS&#xff0c;设置让Cl…

【论文阅读笔记】Advances in 3D Generation: A Survey

Advances in 3D Generation: A Survey 挖个坑&#xff0c;近期填完摘要 time&#xff1a;2024年1月31日 paper&#xff1a;arxiv 机构&#xff1a;腾讯 挖个坑&#xff0c;近期填完 摘要 生成 3D 模型位于计算机图形学的核心&#xff0c;一直是几十年研究的重点。随着高级神经…

深入了解c语言字符串 2

深入了解c语言字符串 2 一 使用 scanf进行字符串的输入&#xff1a;1.1输入单词&#xff08;不包含空格&#xff09;&#xff1a;1.2 输入带空格的整行文本&#xff1a;1.3 处理输入缓冲区&#xff1a;1.4 注意安全性&#xff1a; 二 使用 printf 字符串的输出&#xff1a;三 输…

数据结构之动态查找表

数据结构之动态查找表 1、二叉排序树1.1、二排序树的定义1.2、二叉排序树的查找过程1.3、在二叉排序树中插入结点的操作1.4、在二叉排序树中删除结点的操作 2、平衡二叉树2.1、平衡二叉树上的插入操作2.2、平衡二叉树上的删除操作 3、B_树 数据结构是程序设计的重要基础&#x…

js新增的操作元素类名的方法

Element.classList是一个只读属性&#xff0c;返回一个元素 class 属性的动态 DOMTokenList 集合。这可以用于操作 class 集合。 尽管 classList 属性自身是只读的&#xff0c;但是你可以使用 add()、remove()、replace() 和 toggle() 方法修改其关联的 DOMTokenList。 兼容性…

移动机器人激光SLAM导航(二):运动控制与传感器篇

参考引用 机器人工匠阿杰wpr_simulation 1. 机器人运动控制 1.1 测试环境安装 wpr_simulation 安装$ mkdir -p catkin_ws/src $ cd catkin_ws/src $ git clone https://github.com/6-robot/wpr_simulation.git $ cd wpr_simulation/scripts/ $ ./install_for_melodic.sh # 自…

【2023地理设计组一等奖】基于机器学习的地下水仿真与时空分析

作品介绍 1 设计思想 1.1 作品背景 华北平原是我国最重要的粮棉产地之一,然而近年来农业的低效用水以及过度压采正逐步加剧其地下水资源的紧张性,为经济可持续发展带来重大风险。而地下水动态变化与人为干预、全球气候波动呈现出高度相关性,因此,地下水的仿真模拟对保障粮…

使用阿里云的IDaaS实现知行之桥EDI系统的单点登录

&#xff0c;在开始测试之前&#xff0c;需要确定用哪个信息作为“登陆用户的ID字段”。 这个字段用来在完成SSO登陆之后&#xff0c;用哪个信息将阿里云IDaaS的用户和知行之桥EDI系统的用户做对应。这里我们使用了 phonenumber 这个自定义属性。需要在阿里云做如下配置&#x…

Qt实现类似ToDesk顶层窗口 不规则按钮

先看效果&#xff1a; 在进行多进程开发时&#xff0c;可能会遇到需要进行全局弹窗的需求。 因为平时会使用ToDesk进行远程桌面控制&#xff0c;在电脑被控时&#xff0c;ToDesk会在右下角进行一个顶层窗口的提示&#xff0c;效果如下&#xff1a; 其实要实现顶层窗口&#xf…

openssl3.2 - 官方demo学习 - pkcs12 - pkwrite.c

文章目录 openssl3.2 - 官方demo学习 - pkcs12 - pkwrite.c概述学到的知识点笔记PEM证书可以拼接实验 pkcs12 - pkwrite.c用win10的证书管理器安装P12证书是成功的END openssl3.2 - 官方demo学习 - pkcs12 - pkwrite.c 概述 openssl3.2 - 官方demo学习 - 索引贴 上次PKCS12的…