当前位置: 首页 > news >正文

云端技术驾驭DAY13——Pod污点、容忍策略、Pod优先级与抢占、容器安全

往期回顾:
云端技术驾驭DAY01——云计算底层技术奥秘、云服务器磁盘技术、虚拟化管理、公有云概述
云端技术驾驭DAY02——华为云管理、云主机管理、跳板机配置、制作私有镜像模板
云端技术驾驭DAY03——云主机网站部署、web集群部署、Elasticsearch安装
云端技术驾驭DAY04——Logstash安装部署及插件模块
云端技术驾驭DAY06——容器技术概述、镜像与容器管理、定制简单镜像、容器内安装部署服务
云端技术驾驭DAY07——Dockerfile详解、容器镜像制作、私有仓库
云端技术驾驭DAY08——部署容器服务、Compose微服务管理、harbor仓库部署及管理
云端技术驾驭DAY09——k8s集群安装部署、calico插件部署、计算节点配置管理
云端技术驾驭DAY10——kubectl命令详解、Pod创建过程、Pod的生命周期、定制Pod、资源对象文件
云端技术驾驭DAY11——资源对象文件、Pod自定义命令、多容器Pod、资源监控工具
云端技术驾驭DAY12——Pod调度策略、Pod标签管理、Pod资源配额与限额、全局资源配额与限额策略

云端技术驾驭DAY13

  • Pod调度策略管理
      • 污点容忍策略
          • 污点概述
          • 污点策略
          • 容忍策略
      • 抢占与优先级
          • 优先级概述
          • 非抢占优先级
          • 抢占优先级
  • Pod安全
      • 特权容器
          • 特权容器概述
          • 特权容器
      • Pod安全策略
          • 安全概述
          • 限制特权容器

Pod调度策略管理

污点容忍策略

污点概述
  • 什么是污点?
    • 污点(Taint)是使节点与Pod产生排斥的一类规则
  • 污点策略是如何实现
    • 污点策略通过嵌合在键值对上的污点标签进行声明
  • 污点标签
    • 尽量不调度:PreferNoSchedule
    • 不会被调度:NoSchedule
    • 驱逐节点:NoExecute
  • 管理污点标签
    • 污点标签必须绑定在键值对上,格式为:key=value:污点标签
    • 查看污点标签:kubectl describe nodes [节点名字]
    • 设置污点标签:kubectl taint node [节点名字] key=value:污点标签
    • 删除污点标签:kubectl taint node [节点名字] key=value:污点标签-
污点策略
  • 污点验证
    • 为node-0001设置PreferNoschedule污点标签
    • 为node-0002设置NoSchedule污点标签
[root@master ~]# kubectl taint node node-0001 k=v1:PreferNoSchedule
node/node-0001 tainted
[root@master ~]# kubectl taint node node-0002 k=v2:NoSchedule
node/node-0002 tainted
[root@master ~]# kubectl describe nodes | grep Taints
Taints:             node-role.kubernetes.io/control-plane:NoSchedule
Taints:             k=v1:PreferNoSchedule
Taints:             k=v2:NoSchedule
Taints:             <none>
Taints:             <none>
Taints:             <none>
  • Pod资源文件
[root@master ~]# vim myphp.yaml
---
kind: Pod
apiVersion: v1
metadata:name: myphp
spec:containers:- name: phpimage: myos:php-fpmresources:requests:cpu: 1500m
  • 验证测试
[root@master ~]# sed "s,myphp,php1," myphp.yaml | kubectl apply -f -
pod/php1 created
[root@master ~]# sed "s,myphp,php2," myphp.yaml | kubectl apply -f -
pod/php2 created
[root@master ~]# sed "s,myphp,php3," myphp.yaml | kubectl apply -f -          // 创建三个Pod
pod/php3 created
[root@master ~]# kubectl get pods -o wide                                     // 发现会优先使用没有污点的节点
NAME   READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
php1   1/1     Running   0          35s   10.244.240.134   node-0004   <none>           <none>
php2   1/1     Running   0          30s   10.244.243.209   node-0003   <none>           <none>
php3   1/1     Running   0          26s   10.244.153.139   node-0005   <none>           <none>
  • 在没有其他节点可用的时候,使用PreferNoSchedule污点所在的节点运行Pod
[root@master ~]# sed "s,myphp,php4," myphp.yaml | kubectl apply -f -
pod/php4 created
[root@master ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
php1   1/1     Running   0          4m19s   10.244.240.134   node-0004   <none>           <none>
php2   1/1     Running   0          4m14s   10.244.243.209   node-0003   <none>           <none>
php3   1/1     Running   0          4m10s   10.244.153.139   node-0005   <none>           <none>
php4   1/1     Running   0          2s      10.244.21.132    node-0001   <none>           <none>
  • 继续创建Pod
    • 即使Pod创建失败,也不会使用NoSchedule所在节点
[root@master ~]# sed "s,myphp,php5," myphp.yaml | kubectl apply -f -
pod/php5 created
[root@master ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
php1   1/1     Running   0          5m37s   10.244.240.134   node-0004   <none>           <none>
php2   1/1     Running   0          5m32s   10.244.243.209   node-0003   <none>           <none>
php3   1/1     Running   0          5m28s   10.244.153.139   node-0005   <none>           <none>
php4   1/1     Running   0          80s     10.244.21.132    node-0001   <none>           <none>
php5   0/1     Pending   0          2s      <none>           <none>      <none>           <none>
  • NoSchedule策略
    • 设置NoSchedule污点标签只对新建Pod有效,对于已经创建完成的Pod不会产生影响
[root@master ~]# kubectl taint node node-0003 k=v3:NoSchedule
node/node-0003 tainted
[root@master ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
php1   1/1     Running   0          8m38s   10.244.240.134   node-0004   <none>           <none>
php2   1/1     Running   0          8m33s   10.244.243.209   node-0003   <none>           <none>
php3   1/1     Running   0          8m29s   10.244.153.139   node-0005   <none>           <none>
php4   1/1     Running   0          4m21s   10.244.21.132    node-0001   <none>           <none>
php5   0/1     Pending   0          3m3s    <none>           <none>      <none>           <none>
  • 驱逐策略
    • 驱逐策略会删除该节点上的所有Pod
[root@master ~]# kubectl taint node node-0004 k=v4:NoExecute             // 为node-0004设置NoExecute策略
node/node-0004 tainted
[root@master ~]# kubectl describe nodes | grep Taints
Taints:             node-role.kubernetes.io/control-plane:NoSchedule
Taints:             k=v1:PreferNoSchedule
Taints:             k=v2:NoSchedule
Taints:             k=v3:NoSchedule
Taints:             k=v4:NoExecute
Taints:             <none>
[root@master ~]# kubectl get pods -o wide                               // 查看Pod情况,NoExecute污点所在节点的Pod已经被删除了
NAME   READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
php2   1/1     Running   0          15m     10.244.243.209   node-0003   <none>           <none>
php3   1/1     Running   0          15m     10.244.153.139   node-0005   <none>           <none>
php4   1/1     Running   0          11m     10.244.21.132    node-0001   <none>           <none>
php5   0/1     Pending   0          9m57s   <none>           <none>      <none>           <none>
  • 删除实验所有污点策略
[root@master ~]# kubectl taint node node-000{1..4} k-
node/node-0001 untainted
node/node-0002 untainted
node/node-0003 untainted
node/node-0004 untainted
容忍策略
  • 容忍策略是什么?
    • 容忍策略与污点策略相反,某些时候我们需要在有污点的节点上运行Pod,这种无视污点标签的调度方式称为容忍策略
  • 容忍策略实验
    • 节点node-000{1…2}设置污点标签k=v1:NoSchedule
    • 节点node-000{3…4}设置污点标签k=v2:NoSchedule
    • 节点node-0005设置污点标签k=v1:NoExecute
  • 精确匹配策略
[root@master ~]# kubectl taint node node-000{1..2} k=v1:NoSchedule
node/node-0001 tainted
node/node-0002 tainted
[root@master ~]# kubectl taint node node-000{3..4} k=v2:NoSchedule
node/node-0003 tainted
node/node-0004 tainted
[root@master ~]# kubectl taint node node-0005 k=v1:NoExecute
node/node-0005 tainted
[root@master ~]# vim myphp.yaml              // 容忍k=v1:NoSchedule污点
---
kind: Pod
apiVersion: v1
metadata:name: myphp
spec:tolerations:- operator: Equal                         // 完全匹配键值对key: k                                  // 键value: v1                               // 值effect: NoSchedule                      // 污点标签containers:- name: phpimage: myos:php-fpmresources:requests:cpu: 1500m
[root@master ~]# for i in php{1..3};do sed "s,myphp,${i}," myphp.yaml ;done|kubectl apply -f -
pod/php1 created
pod/php2 created
pod/php3 created
[root@master ~]# kubectl get pods -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP              NODE        NOMINATED NODE   READINESS GATES
php1   1/1     Running   0          6s    10.244.21.133   node-0001   <none>           <none>
php2   1/1     Running   0          6s    10.244.147.9    node-0002   <none>           <none>
php3   0/1     Pending   0          6s    <none>          <none>      <none>           <none>
  • 模糊匹配策略
... ...
spec:tolerations:- operator: Exists            // 部分匹配key: keffect: NoSchedule
... ...
  • 容忍所有node污点
... ...
spec:tolerations:- operator: Exists     // 模糊匹配key: k               // 键effect: ""           // 设置空或删除,代表所有污点标签
... ...

抢占与优先级

优先级概述
  • 优先级是什么
    • 优先级表示一个Pod相对于其他Pod的重要性
  • 优先级有什么用?
    • 优先级可以保证重要的Pod被调度运行
  • 如何使用优先级和抢占
    • 配置优先级类PriorityClass
    • 创建Pod时为其设置对应的优先级
  • PriorityClasss
    • PriorityClasss是一个全局资源对象,它定义了从优先级类名称到优先级整数值的映射
    • 优先级在value字段中指定,可以设置小于10亿的整数值,值最大,优先级最高
  • PriorityClasss还有两个可选字段:
    • globalDefault用于设置默认优先级状态,如果没有任何优先级设置,Pod的优先级为零
    • description用来配置描述性信息,告诉用户优先级的用途
  • 优先级策略
    • 非抢占优先:
      • 指的是在调度阶段优先进行调度分配,一旦容器调度完成就不可以抢占,资源不足时,只能等待
    • 抢占优先:
      • 强制调度一个Pod,如果资源不足无法被调度,调度程序会抢占较低优先级的Pod的资源,来保证高优先级Pod的运行
非抢占优先级
  • 定义优先级资源对象
    • 创建一个value为1000的优先级对象
    • 创建一个value为500的优先级对象
    • 设置非抢占策略Never
[root@master ~]# vim mypriority.yaml
---
kind: PriorityClass
apiVersion: scheduling.k8s.io/v1
metadata:name: high-non                    // 指定优先级名字
preemptionPolicy: Never             // 策略:非抢占
value: 1000                         // 优先级---
kind: PriorityClass
apiVersion: scheduling.k8s.io/v1
metadata:name: low-non
preemptionPolicy: Never
value: 500
[root@master ~]# kubectl apply -f mypriority.yaml 
priorityclass.scheduling.k8s.io/high-non created
priorityclass.scheduling.k8s.io/low-non created
[root@master ~]# kubectl get priorityclasses.scheduling.k8s.io 
NAME                      VALUE        GLOBAL-DEFAULT   AGE
high-non                  1000         false            15s
low-non                   500          false            15s
system-cluster-critical   2000000000   false            5d21h
system-node-critical      2000001000   false            5d21h
  • 验证Pod优先级调度策略
    • 所有Pod创建在node-0002上
    • 创建php1,该Pod使用默认优先级,cpu=1500m
    • 创建php1,该Pod使用低优先级,cpu=1500m
    • 创建php3,该Pod使用高优先级,cpu=1500m
root@master ~]# vim php1.yaml
--- 
kind: Pod
apiVersion: v1
metadata:name: php1
spec:nodeSelector:kubernetes.io/hostname: node-0004containers:- name: phpimage: myos:php-fpmresources:requests:cpu: "1500m"
[root@master ~]# vim php2.yaml 
---
kind: Pod
apiVersion: v1
metadata:name: php2
spec:nodeSelector:kubernetes.io/hostname: node-0004priorityClassName: low-noncontainers:- name: phpimage: myos:php-fpmresources:requests:cpu: "1500m"
[root@master ~]# vim php3.yaml 
---
kind: Pod
apiVersion: v1
metadata:name: php3
spec:nodeSelector:kubernetes.io/hostname: node-0004priorityClassName: high-non    containers:- name: phpimage: myos:php-fpmresources:requests:cpu: "1500m"
[root@master ~]# kubectl apply -f php1.yaml 
pod/php1 created
[root@master ~]# kubectl apply -f php2.yaml 
pod/php2 created
[root@master ~]# kubectl apply -f php3.yaml 
pod/php3 created
[root@master ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
php1   1/1     Running   0          19s
php2   0/1     Pending   0          16s
php3   0/1     Pending   0          14s
[root@master ~]# kubectl delete pod php1
pod "php1" deleted
[root@master ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
php2   0/1     Pending   0          70s
php3   1/1     Running   0          68s
抢占优先级
  • 定义优先级资源对象
[root@master ~]# vim mypriority.yaml 
---
kind: PriorityClass
apiVersion: scheduling.k8s.io/v1
metadata:name: high-non
preemptionPolicy: Never
value: 1000---
kind: PriorityClass
apiVersion: scheduling.k8s.io/v1
metadata:name: low-non
preemptionPolicy: Never
value: 500---
kind: PriorityClass
apiVersion: scheduling.k8s.io/v1
metadata:name: high
preemptionPolicy: PreemptLowerPriority              // 策略:抢占优先级
value: 1000---
kind: PriorityClass
apiVersion: scheduling.k8s.io/v1
metadata:name: low
preemptionPolicy: PreemptLowerPriority
value: 500
[root@master ~]# kubectl apply -f mypriority.yaml 
priorityclass.scheduling.k8s.io/high created
priorityclass.scheduling.k8s.io/low created
[root@master ~]# kubectl get priorityclasses.scheduling.k8s.io  
NAME                      VALUE        GLOBAL-DEFAULT   AGE
high                      1000         false            4s
high-non                  1000         false            2h
low                       500          false            4s
low-non                   500          false            2h
system-cluster-critical   2000000000   false            21d
system-node-critical      2000001000   false            21d
  • 验证抢占优先级
// 替换优先级策略
[root@master ~]# sed 's,-non,,' -i php?.yaml// 默认优先级 Pod
[root@master ~]# kubectl apply -f php1.yaml 
pod/php1 created
[root@master ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
php1   1/1     Running   0          6s// 高优先级 Pod
[root@master ~]# kubectl apply -f php3.yaml
pod/php3 created
[root@master ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
php3   1/1     Running   0          9s// 低优先级 Pod
[root@master ~]# kubectl apply -f php2.yaml
pod/php2 created
[root@master ~]# kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
php2   0/1     Pending   0          3s
php3   1/1     Running   0          9s

Pod安全

特权容器

特权容器概述
  • 什么是特权容器?
    • 容器是通过名称空间技术隔离的,有时候我们执行一些应用服务,需要使用或修改敏感的系统信息,这时容器需要突破隔离限制,获取更高的权限,这类容器统称特权容器
    • 运行特权容器会有一些安全风险,这种模式下运行容器对宿主机拥有root权限,可以突破隔离直接控制宿主机的资源配置
特权容器
  • 制作特权容器(修改主机名和hosts文件)
[root@master ~]# vim root.yaml
---
kind: Pod
apiVersion: v1
metadata:name: root
spec:hostname: myhost         // 修改容器主机名hostAliases:             // 修改 /etc/hosts- ip: 192.168.1.30       // IP 地址hostnames:             // 名称键值对- harbor               // 主机名containers:- name: apacheimage: myos:httpd
[root@master ~]# kubectl apply -f root.yaml 
pod/root created
[root@master ~]# kubectl exec -it root -- /bin/bash
[root@myhost html]# hostname
myhost
[root@myhost html]# cat /etc/hosts
... ...
# Entries added by HostAliases.
192.168.1.30    harbor
  • 制作root特权容器
[root@master ~]# vim root.yaml
---
kind: Pod
apiVersion: v1
metadata:name: root
spec:hostPID: true            // 特权,共享系统进程hostNetwork: true        // 特权,共享主机网络containers:- name: apacheimage: myos:httpdsecurityContext:       // 安全上下文值privileged: true     // root特权容器
[root@master ~]# kubectl apply -f root.yaml 
pod/root created
[root@master ~]# kubectl exec -it root -- /bin/bash
[root@node-0005 html]# pstree -p                              // 系统进程特权
systemd(1)-+-NetworkManager(595)-+-{NetworkManager}(617)|                     `-{NetworkManager}(618)|-agetty(1129)... ...
[root@node-0005 html]# ifconfig eth0                          // 网络特权
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.55  netmask 255.255.255.0  broadcast 192.168.1.255inet6 fe80::f816:3eff:fe74:cd03  prefixlen 64  scopeid 0x20<link>ether fa:16:3e:74:cd:03  txqueuelen 1000  (Ethernet)
[root@node-0005 ~]# mkdir /sysroot                            // root用户特权
[root@node-0005 ~]# mount /dev/sda1 /sysroot
[root@node-0005 ~]# chroot /sysroot
sh-4.4#                                                       // 此处已经是node节点上的root用户了

Pod安全策略

安全概述
  • 什么是Pod安全策略?
    • Pod安全策略是集群级别的资源,它能够控制Pod运行的行为,以及它具有访问什么的能力
  • 如何使用Pod安全策略?
    • Kubernetes服务器版本必须不低于v1.22
    • 确保PodSecurity特性门控被启用
  • Pod安全策略(LEVEL)
    • privieged:不受限制的策略,提供最大可能范围的特权许可,此策略允许特权提升
    • baseline:弱限制性的策略,禁止已知的策略提升权限,允许使用默认的Pod配置
    • restricted:非常严格的限制性策略,遵循当前的保护Pod的最佳实践
  • Pod准入控制标签(MODE)
    • Kubernetes定义了一组标签,你可以设置这些标签来定义某个名字空间上Pod安全性标准级别。所选择的标签定义了检测到潜在违利时所要采取的动作
      • enforce:策略违利会导致Pod被拒绝
      • audit:策略违利会触发审计日志,但是Pod仍可被接受
      • warn:策略违利会触发用户可见的警告信息,但是Pod仍是被接受的
  • 语法格式:pod-security.kubernetes.io/<MODE>:<LEVEL>
限制特权容器
  • 设置严格的准入控制,拒绝特权容器
[root@master ~]# kubectl create namespace myprod
namespace/myprod created
[root@master ~]# kubectl label namespaces myprod pod-security.kubernetes.io/enforce=restricted
namespace/myprod labeled
  • 在创建特权容器时发出警告提示
[root@master ~]# kubectl create namespace mytest
namespace/mytest created
[root@master ~]# kubectl label namespaces mytest pod-security.kubernetes.io/warn=baseline
namespace/mytest labeled
  • 创建特权容器
[root@master ~]# kubectl -n myprod apply -f root.yaml 
Error from server (Failure): ... ...                                // 创建失败
[root@master ~]# kubectl -n mytest apply -f root.yaml                                    
Warning: would violate "latest" version of "baseline" PodSecurity profile: host namespaces (hostNetwork=true, hostPID=true), privileged (container "linux" must not set securityContext.privileged=true)
pod/root created
  • 创建安全的Pod
[root@master ~]# vim nonroot.yaml
---
kind: Pod
apiVersion: v1
metadata:name: nonroot
spec:restartPolicy: Alwayscontainers:- name: phpimage: myos:php-fpmsecurityContext:allowPrivilegeEscalation: falserunAsNonRoot: truerunAsUser: 65534seccompProfile:type: "RuntimeDefault"capabilities:drop: ["ALL"]
[root@master ~]# kubectl -n myprod apply -f nonroot.yaml 
pod/nonroot created
[root@master ~]# kubectl -n myprod get pods
NAME      READY   STATUS    RESTARTS   AGE
nonroot   1/1     Running   0          6s
[root@master ~]# kubectl -n myprod exec -it nonroot -- id           // 没有root用户
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)

相关文章:

云端技术驾驭DAY13——Pod污点、容忍策略、Pod优先级与抢占、容器安全

往期回顾&#xff1a; 云端技术驾驭DAY01——云计算底层技术奥秘、云服务器磁盘技术、虚拟化管理、公有云概述 云端技术驾驭DAY02——华为云管理、云主机管理、跳板机配置、制作私有镜像模板 云端技术驾驭DAY03——云主机网站部署、web集群部署、Elasticsearch安装 云端技术驾驭…...

掌握Docker:让你的应用轻松部署和管理

文章目录 一、引言&#xff08;为什么要学习docker&#xff1f;&#xff09;1.1 环境不一致1.2 隔离性1.3 弹性伸缩1.4 学习成本 二、Docker介绍2.1 Docker的由来2.2 什么是Docker2.3 为什么要用Docker2.3.1 虚拟机2.3.2 Linux容器 2.4 Docker与传统虚拟机的区别2.5 Docker的思…...

5G-A,未来已来

目前&#xff0c;全国首个5G-A规模组网示范完成。这项由北京联通携手华为共同打造的示范项目&#xff0c;实现了北京市中心金融街、历史建筑长话大楼、大型综合性体育场北京工人体育场三个重点场景的连片覆盖。 实际路测结果显示&#xff0c;5G-A用户下行峰值速率达到10Gbps&am…...

智慧公厕让社区生活更美好

随着科技的迅猛发展&#xff0c;城市管理、城市服务均使用科技化的手段进行升级改造&#xff0c;社区生活更美好赋予全新的智慧效能&#xff0c;其中智慧公厕也成为了城市环卫设施的新宠。智慧公厕以物联网、互联网、大数据、云计算、5G通信、自动化控制等技术为核心&#xff0…...

Apache软件基金会的孵化标准和毕业标准

Apache软件基金会的孵化标准和毕业标准是一个项目成功的重要衡量指标。这些标准关注项目的多个方面&#xff0c;包括开放性、合作性、共建性、透明性、技术可行性、社区建设以及用户基础等。在孵化阶段&#xff0c;Apache软件基金会主要关注项目的开放性和合作性。首先&#xf…...

什么是高可用架构

一、什么是高可用 在运维中&#xff0c;经常听到高可用&#xff0c;那么什么是高可用架构呢&#xff1f;通俗点讲&#xff0c;高可用就是在服务故障&#xff0c;节点宕机的情况下&#xff0c;业务能够保证不中断&#xff0c;服务正常运行。 举个例子&#xff0c;支付宝&#…...

【Vuforia+Unity】AR04-地面、桌面平面识别功能(Ground Plane Target)

不论你是否曾有过相关经验,只要跟随本文的步骤,你就可以成功地创建你自己的AR应用。 官方教程Ground Plane in Unity | Vuforia Library 这个功能很棒,但是要求也很不友好,只能支持部分移动设备,具体清单如下: 01.Vuforia的地面识别功能仅支持的设备清单: Recommended…...

【Git】解决‘每次初始化一个新仓库时,都需要执行git config --global --add safe.directory命令‘

问题 这个命令是用来将一个安全目录添加到全局的 Git 配置中。但每次克隆一个仓库或者新建一个仓库&#xff0c;并且对该仓库进行操作时&#xff0c;都需要执行该命令&#xff0c;十分麻烦&#xff01; 这是因为&#xff0c;Git 近期进行了版本升级&#xff0c;添加了新的目录…...

Qt的QThread、QRunnable和QThreadPool的使用

1.相关描述 随机生产1000个数字&#xff0c;然后进行冒泡排序与快速排序。随机生成类继承QThread类、冒泡排序使用moveToThread方法添加到一个线程中、快速排序类继承QRunnable类&#xff0c;添加到线程池中进行排序。 2.相关界面 3.相关代码 widget.cpp #include "widget…...

windows安装部署node.js并搭建Vue项目

一、官网下载安装包 官网地址&#xff1a;https://nodejs.org/zh-cn/download/ 二、安装程序 1、安装过程 如果有C/C编程的需求&#xff0c;勾选一下下图所示的部分&#xff0c;没有的话除了选择一下node.js安装路径&#xff0c;直接一路next 2、测试安装是否成功 【winR】…...

【计算机】本科考研还是就业?

其实现在很多计算机专业的学生考研&#xff0c;也是无奈的选择 技术发展日新月异&#xff0c;而在本科阶段&#xff0c;大家学着落后的技术&#xff0c;出来找工作自然会碰壁。而且现在用人单位的门槛越来越高&#xff0c;学历默认研究生起步&#xff0c;面试一般都是三轮起步…...

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(三)

在人工智能成为我们日常互动中无处不在的一部分的时代&#xff0c;与大型语言模型(llm)有效沟通的能力是无价的。“良好提示的26条原则”为优化与这些复杂系统的交互提供了全面的指导。本指南证明了人类和人工智能之间的微妙关系&#xff0c;强调清晰、专一和结构化的沟通方法。…...

小程序一键链接WIFI

1.小程序一键链接WIFI connectWifi: function() {var that this;//检测手机型号wx.getSystemInfo({success: function(res) {var system ;if (res.platform android) system parseInt(res.system.substr(8));if (res.platform ios) system parseInt(res.system.substr(4…...

结构体位域保存传感器数据

1、原理图分析&#xff1a; 8个74HC4052共用两个选通引脚&#xff0c;8个输入引脚&#xff0c;一共可以检测64个数字红外传感器。74HC4052的功能表如下,nY0表示所有Y0引脚。 S1 S0 Channel on 0 0 nY0 0 1 nY1 1 0 nY2 1 1 nY3 enum sensor_id{HS01 0, HS02, HS03, HS0…...

66-ES6:var,let,const,函数的声明方式,函数参数,剩余函数,延展操作符

1.JavaScript语言的执行流程 编译阶段&#xff1a;构建执行函数&#xff1b;执行阶段&#xff1a;代码依次执行 2.代码块&#xff1a;{ } 3.变量声明方式var 有声明提升&#xff0c;允许重复声明&#xff0c;声明函数级作用域 访问&#xff1a;声明后访问都是正常的&…...

prime_series_level-1靶场详解

环境搭建 官网https://www.vulnhub.com/entry/prime-1,358/ 直接导入靶机 解题思路 arp-scan -l 确认靶机ip为192.168.236.136 也可以使用nmap扫网段 nmap -sn 192.168.236.0/24 使用nmap扫描靶机开放的端口 nmap -sS -T5 --min-rate 10000 192.168.236.136 -sC -p- &#xf…...

LeetCode刷题笔记之二叉树(三)

一、寻找特定节点 1. 404【左叶子之和】 题目&#xff1a; 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。代码&#xff1a; class Solution {public int sumOfLeftLeaves(TreeNode root) {//左叶子不止是最左边的叶子&#xff0c;而是二叉树中每个节点的左叶子…...

IBM在闪存系统集成实时恶意软件I/O检测功能

IBM在其最新一代FlashCore Modules&#xff08;FCMs&#xff09;固件中集成了使用机器学习进行实时勒索软件和其他攻击检测的功能。这些FCMs是专用于IBM FlashSystem 5000和Storwize阵列的闪存驱动器&#xff0c;采用U.2外形尺寸及NVMe接口。现有的第三代FCMs分别提供4.8、9.6、…...

bpmn-js中实现xml数据转为json数据

开发bpmn-js建模器,希望将bpmn数据格式转为json数据格式更加清晰的展示数据层次,以结果为导向分析需求,实现功能的思路有两种方式: 通过bpmn-js转化为JS数据对象,然后通过JS中提供的JSON模块转换为json数据将xml解析成dom对象,通过dom对象转化为json格式数据三方库这里主…...

HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)(A,B,C,D,E,F,G)

看不懂的英文&#xff0c;题意很难理解&#xff0c;这场还是有点难度的。 C需要处理&#xff0c;D是不太明显的dijikstra&#xff0c;E是线段树优化dp&#xff0c;F是个不好想的线段树&#xff0c;主席树应该也能做。 我觉得讲的很好的宝藏up主->B站视频讲解。之后会比较忙…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言&#xff1a; 在人工智能快速发展的浪潮中&#xff0c;快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型&#xff08;LLM&#xff09;。该模型代表着该领域的重大突破&#xff0c;通过独特方式融合思考与非思考…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...