【hcie-cloud】【23】容器编排【k8s】【Kubernetes常用工作负载、Kubernetes调度器简介、Helm简介、缩略词】【下】

文章目录

  • 单机容器面临的问题、Kubernetes介绍与安装、Kubernetes对象的基本操作、Kubernetes YAML文件编写基础
  • Kubernetes常用工作负载
    • Kubernetes常用工作负载简介
    • 创建一个无状态nginx集群
    • 无状态工作负载Deployment说明
    • 无状态工作负载Deployment常见操作
    • 创建一个有状态的MySQL
    • 有状态工作负载StatefulSet说明
    • 创建一个Zabbix客户端的进程守护集
    • 创建一个普通任务
    • 创建一个周期性任务
    • 为无状态工作负载创建一个反向代理
    • Service的代理方式
    • Ingress简介
    • 为Service创建一个http访问链接
    • ConfigMap简介
    • Secret简介
    • Kubernetes的认证与授权
    • Kubernetes认证机制简介
    • 授权机制RBAC简介
  • Kubernetes调度器简介
    • Kube-scheduler调度过程
    • 将有GPU需求的Pod调度到特定Node上
    • 将无GPU需求的Pod尽量不要调度到特定Node上
    • 干预调度的机制简介
      • 污点和容忍
      • 亲和性与反亲和性
  • Helm简介
    • Helm介绍
    • Helm介绍
    • Helm基本操作
    • Chart目录结构
    • Chart.yaml文件简介
    • Values.yaml文件简介
    • Templates目录简介
    • Helm语法简介
  • 缩略语

单机容器面临的问题、Kubernetes介绍与安装、Kubernetes对象的基本操作、Kubernetes YAML文件编写基础

看这篇文章
【hcie-cloud】【22】容器编排【k8s】【单机容器面临的问题、Kubernetes介绍与安装、Kubernetes对象的基本操作、Kubernetes YAML文件编写基础】【上】

Kubernetes常用工作负载

Kubernetes常用工作负载简介

在这里插入图片描述

创建一个无状态nginx集群

  • 需求:创建一个nginx集群,其中包含3个nginx服务。集群中的服务随时可以进行更新、回滚、恢复等操作
    在这里插入图片描述

无状态工作负载Deployment说明

  • Deployment可通过命令行创建,也可以使用YAML文件创建

  • Deployment YAML文件包含三部分:

    • GVK
    • 元数据信息
    • 对象规格
      • 副本数
      • 标签选择器
      • 更新策略
      • Pod规格信息
  • GVK和元数据信息和Pod YAML文件格式及参数基本一致

  • Deployment的标签选择器用于根据Pod标签来判断副本数是否满足

  • Deployment支撑两种更新策略:

    • Recreate
      • 删除所有的Pod,然后重新创建
    • RollingUpdate
      • 滚动更新
        • maxSurge:滚动更新时最大更新数
        • maxUnavailable:滚动更新时不可用数
  • maxSurge:滚动更新时最大更新数,例如一共有3个Pod,maxSurge设置为1,在更新流程为:新创1个----》4个-----》删除1个----》3个-----》新创1个-----》4个-----》删除1个------》3个-----》新创1个----》4个-----》删除1个----》3个

  • maxUnavailable:滚动更新时最大不可用Pod的数量。例如一共有3个Pod,maxUnavailable设置为1,在更新流程为:删除1个----》2个-----》新创1个-----》3个—》删除-1个----》2个-----》新创1个-----》3个—》删除-1个----》2个-----》新创1个-----》3个

  • 如果maxSruge和maxUnavailable同时存在时,更新策略选取maxSurge的值

  • maxSruge和maxUnavailable的值可以使用百分比表示

无状态工作负载Deployment常见操作

-修改
- 命令“kubectl edit”修改
- 直接修改YAML文件

  • 更新
    • 命令“kubectl apply”进行更新
  • 回滚
    • 更新deployment时,使用“–record”记录版本
    • 使用命令“kubectl rollout history deployment/deployment名称”查询更新记录,添加“–revision”可查看对应版本的信息
    • 使用命令“kubectl rollout undo deployment/deployment名称 --to-revision=版本号”可将其回滚到指定版本

创建一个有状态的MySQL

  • 需求:创建一个包含3个副本的MySQL有状态工作负载

在这里插入图片描述

有状态工作负载StatefulSet说明

  • StatefulSet YAML文件包含三部分:
    • GVK
    • 元数据信息
    • 对象规格
      • 副本数
      • 标签选择器
      • 网络标识
      • Pod规格信息
  • StatefulSet有以下特点:
    • 有序创建、有序删除、有序更新
    • 支持更新,但是不支持更新策略
    • 有稳定的网络标识
    • 一般都会有由PV和PVC实现的持久化存储

创建一个Zabbix客户端的进程守护集

  • 需求:为集群中的主机安装Zabbix客户端
  • DaemonSet说明:
    • DaemonSet YAML文件有三部分组成:
      • GVK
      • 元数据信息
      • 对象规格
        • 标签选择器
        • Pod规格信息
  • DaemonSet有以下特点:
    • 每个节点都会运行一个且只有一个Pod副本

在这里插入图片描述

创建一个普通任务

  • 需求:尝试ping 192.168.100.11,测试该地址是否能够被ping通
  • Job说明:
    • Job YAML文件有三部分组成:
      • GVK
      • 元数据信息
      • 对象规格
        • backoffLimit:如果任务失败,重试的次数
        • activeDeadlineSeconds:任务的存活时长
  • Job有以下特点:
    • Job是一个一次性任务,可以包含一个或多个Pod
    • Job YAML文件中的restartPolicy用来规定Pod如果故障执行的策略

在这里插入图片描述

  • activeDeadlineSeconds中的时间如果到了,系统会忽略backoffLimit中的时长,即只要activeDeadlineSeconds的存活时间到了,即时backoffLimit中的次数没有到,任务也会被终止
  • restartPolicy针对的是Pod,而不是Pod中的任务

创建一个周期性任务

需求:将上页图片中的job设置为每天晚上3点周期性执行

  • Cronjob说明:
    • Cronjob YAML文件有三部分组成:
      • GVK
      • 元数据信息
      • 对象规格
        • Schedule
        • JobTemplate
  • Cronjob有以下特点:
    • Cronjob是一个周期性任务,可以理解为周期性执行job
    • 对象规格中schedule规定了执行任务的周期

在这里插入图片描述

  • Schedule中的五个字段按照顺序分别是:分、时、日、月、周

为无状态工作负载创建一个反向代理

  • 需求:为nginx服务创建一个反向代理服务,通过该代理,可以负载均衡的访问到由多个nginx组成的集群
  • Service是一个将运行在一组 Pods上的应用程序公开为网络服务的抽象方法
  • Service是通过kube-proxy实现的
  • Service可以提供负载均衡的功能,实现方式有两种:
    • Iptables
    • Ipvs
  • Service YAML文件有三部分组成:
    • GVK信息
    • 元数据信息
    • 对象规格

在这里插入图片描述

  • 此处的nginx集群可以借助前面创建的无状态工作负载,标签为app: web,副本数为3。

Service的代理方式

  • Service提供了四种代理方式:

    • ClusterIP:为工作负载提供一个虚拟IP,该IP仅能被集群内部访问
    • NodePort:在ClusterIP的基础上为每一个node绑定一个端口,这样可以在集群外通过 nodeIP:端口号 的形式访问到该服务。可用的端口范围为30000-32767
    • LoadBalancer:用在云计算场景中,通过云计算中的ELB服务将请求转发到NodePort上
    • ExternalName:用于将外部的服务引入到集群内
  • ClusterIP会被coreDNS映射一个域名,格式为:servicename.namespace.svc.cluster.local

  • ClusterIP可以被设置为none,意味着不为该集群分配虚拟IP,因此,如果只采用这种方式访问业务的Pod,dnsPolicy需要设置为ClusterFirst

  • ClusterIP方式中的虚拟IP和NodePort总的port可以手动指定,也可以自动生成

Ingress简介

  • Service的NodePort代理方式有两个不足:
    • 管理复杂:当服务的数量较多时,所暴露端口的管理就会变的复杂
    • 影响性能:NodePort后台借助iptables进行,占用宿主机的资源
  • Ingress是一种基于Service的七层代理服务
  • Ingress有两部分组成:
    • ingressController:流量的入口
    • Ingress:用于描述流量转发规则

在这里插入图片描述

  • 要想使用ingress,必须先配置SVC,因为ingress不用于发现后端的Pod ip和Pod所监控的端口
    ingressController能够解析ingress资源对象生成相应转发规则,同时能够实时感知后端Pod的变化以更新负载均衡后端地址

为Service创建一个http访问链接

  • 需求:通过创建一个ingress对象,使用户可以通过http的方式访问到前面创建的Service nginx-proxy
  • Ingress YAML由三部分组成:
    • GVK
    • 元数据信息
      -annotations:固定为“kubernetes.io/ingress.class: “nginx””
    • 对象规格
      • host:暴露的外网域名,需要能够将其解析成ingress-controller地址
      • http:使用的协议
      • service:被代理的service信息
      • paths:访问路径,可以使用不同的路径对应不同的服务
      • pathType:路径的匹配模式
        • Prefix
        • Exact
          -ImplementationSpecific

在这里插入图片描述

  • 图片中service使用的是前面创建的service
  • pathType有三种方式:
    • Prefix:基于以 / 分隔的 URL 路径前缀匹配
    • Exact:精确匹配 URL 路径,且区分大小写
    • ImplementationSpecific:对于这种路径类型,匹配方法取决于 IngressClass。 具体实现可以将其作为单独的 pathType 处理或者与 Prefix 或 Exact 类型作相同处理

ConfigMap简介

  • 需求:在某应用开发时,需要对接MySQL,用户名为user1,密码为Huawei@123,为了避免密码直接在YAML文件中体现而导致泄露,因此需要将该应用的YAML文件和密码相关的配置分开存放
  • ConfigMap是一种用于存储应用所需配置信息的资源类型,用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件
  • 通过ConfigMap可以方便的做到配置解耦,使得不同环境有不同的配置
  • ConfigMap最为常见的使用方式就是在环境变量和Volume中引用

在这里插入图片描述

Secret简介

  • 需求:(接上页)密码以明文的方式放在configMap中,仍然存在泄露的风险,因此kubernetes提供了一种用于保存敏感信息的方式——Secret
  • Secret是一种加密存储的资源对象,可以将认证信息、证书、私钥等保存在Secret中,而不需要把这些敏感数据暴露到镜像或者Pod定义中,从而更加安全和灵活
  • Secret与ConfigMap非常像,都是key-value键值对形式,使用方式也相同,不同的是Secret会加密存储,所以适用于存储敏感信息。

在这里插入图片描述

Kubernetes的认证与授权

  • 需求:为某部门创建名称为“business”的命名空间,保证该命名空间中的Pod仅能被用户yftyxa使用
  • 需求中的“对命名空间Pod的使用”可以细化为具体的权限,在kubernetes中使用Role进行定义
  • 需求中的用户为被赋权者,可以看做被作用的对象,在kubernetes中使用Subject进行定义
  • 在kubernetes中,将Role的权限赋给Subject使用RoleBinding完成

在这里插入图片描述

Kubernetes认证机制简介

  • Kubernetes中的用户分为两种:
    • 普通用户(User)
      普通用户一般是指由独立于Kubernetes之外的其它服务管理的用户账号,Kubernetes中不存在表示此类用户账号的对象,作用于系统全局,名称必须全局唯一
    • 服务账户(ServiceAccount)
      服务账户为Pod中的进程调用Kubernetes API设计,通常需要绑定于特定的名称空间,作用仅局限在他们所在的Namespace,他们由API Server创建,或者通过API调用手动创建,附带着一组存储为Secret的用于访问API Server的凭据
  • Kubernetes支持多种认证方式,例如:
    • LS双向认证
    • 静态令牌文件
    • 启动引导令牌
    • 服务账号令牌
    • OpenID Connect(OIDC)令牌
    • Webhook 令牌身份认证
    • 身份认证代理

授权机制RBAC简介

  • RBAC全称Role-Based Access Control,是Kubernetes集群基于角色的访问控制,实现授权决策,允许通过Kubernetes API动态配置策略
  • RBAC中的重要概念:
    • Role:一组权限的集合,例如Role可以包含列出Pod权限及列出Deployment权限,Role用于给某个NameSpace中的资源进行鉴权
    • ClusterRole:一组权限的集合,但与Role不同的是,ClusterRole可以在包括所有NameSpace和集群级别的资源或非资源类型进行鉴权
    • Subject:被授权的对象,包括Service Account、User Account、Groups
    • RoleBinding与ClusterRoleBindin:将Subject绑定到Role或ClusterRole。RoleBinding将使规则在命名空间内生效,而ClusterRoleBinding将使规则在集群中的所有命名空间中生效

Kubernetes调度器简介

Kube-scheduler调度过程

  • 节点过滤(Predicate)
    • 用于排除不满足条件的节点
    • 人为设置的调度策略,在此阶段生效
  • 节点打分(Priority)
    • 对满足条件的节点进行打分
  • 打分完成后,调度器会将Pod调度到分数最高的节点上。如果最高分的Node有多个,调度器会将Pod调度到随机的其中一台Node上

将有GPU需求的Pod调度到特定Node上

  • 需求:某公司有图像处理业务,承载这些业务的Pod在进行计算时需要使用node节点上的GPU,因此需将Pod固定到指定的Node节点上
    • 实施说明:
    • 为node添加固定标签,例如针对以上需求可以为其添加“GPU”的标签,具体命令格式为:
      • kubectl label node 节点名称 key=value
    • 在对应的YAML文件中,添加“nodeSelector”
[root@k8s01 ~]# kubectl label node k8s02 type=GPU
node/k8s02 labeled  
[root@k8s01 yaml]# cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:namespace: test
……..nodeSelector:type: GPU
[root@k8s01 yaml]# kubectl describe pod nodelabel -n test
……
Events:Type        Reason         Age     From                   Message----           ------          ----        ----                      -------Normal  Scheduled      17s   default-scheduler  Successfully assigned test/nodelabel to k8s02

将无GPU需求的Pod尽量不要调度到特定Node上

  • 需求:(接上页)该公司的其他非图像处理需使用非GPU Node,当此业务偶尔需求量较大时,也可将其调度到GPU节点上
  • 实施说明:
    • 为node添加污点(taint),并对该污点设置指定类型(PreferNoSchedule)例如针对以上需求可以为其添加“GPU”的污点
    • 在对应的YAML文件中,添加对污点相关的容忍度
[root@k8s01 ~]# kubectl taint nodes k8s02 type=GPU:PreferNoSchedule
node/k8s02 tainted  
[root@k8s01 yaml]# cat deploy-taint.yaml
apiVersion: apps/v1
kind: Deployment
metadata:namespace: test
……..tolerations:- key: "type"effect: "PreferNoSchedule“
[root@k8s01 yaml]# kubectl get pod -n test -o wide 
NAME                                    READY   STATUS    RESTARTS   AGE       IP                    NODE
nodelabel3-868b59d4b5-ghsdj    1/1      Running     0            2m8s    10.244.235.137   k8s03   nodelabel3-868b59d4b5-v5mkd   1/1     Running     0            2m8s    10.244.236.176   k8s02   nodelabel3-868b59d4b5-wjmkx   1/1     Running     0            2m8s    10.244.235.136   k8s03

干预调度的机制简介

污点和容忍

  • 干预调度有多种方式,推荐使用标签选择器及污点和容忍
  • 标签选择器
    • 即为指定的Node添加特定标签,使匹配标签的Pod可以调度到指定节点
    • 如果为Node添加了多个标签,必须全部匹配才能将Pod调度到该节点上
  • 污点和容忍
    • Taint(污点):
      • 为Node添加污点后,默认情况下,Pod不会被调度至该节点上,如果没有合适的节点,Pod会pending
      • 一个节点可以被打上多个污点标签,污点类型分为:
      • preferNoSchedule
        尽可能的不调度到该节点上
      • NoSchedule
        新创建的Pod不调度到该节点,已经运行在上面的Pod不会受影响
      • NoExecute
        完全不调度到该节点
    • Tolerations(容忍):
      • 一个Pod能都容忍节点上的污点时,表示其将该节点视为没有污点
      • 如果一个Node有多个污点,Pod需要容忍其全部后,才能和其他节点一样

亲和性与反亲和性

  • 干预调度的方式除了标签选择器及污点和容忍,还包括:

    • 亲和性与反亲和性
      • requiredDuringSchedulingIgnoredDuringExecution
        • 表示必须满足标签匹配才会将Pod调度在该节点
      • preferredDuringSchedulingIgnoredDuringExecution
        • 表示优先将Pod调度到标签匹配的节点,如果不匹配,也是可以进行调度
    • 指定节点名称
      • 调度Pod时,将Node的名称作为匹配条件
  • 亲和性和反亲和性需要配合operator进行,例如如果operator的值为In,表示亲和性,如果是NotIn,则表示反亲和性

Helm简介

Helm介绍

  • Kubernetes在部署有多个服务组成的应用时,有以下问题:
    • 无法对所涉服务进行整体管理
    • 无法对所涉服务脚本进行有效复用
    • 无法对应用进行版本管理
  • Helm是kubernetes的包管理工具,是查找、分享和使用软件构建kubernetes的最优方式
  • Helm有以下功能:
    • 从头开始创建新的chart
    • 将chart打包成归档(tgz)文件
    • 与存储chart的仓库进行交互
    • 在现有的Kubernetes集群中安装和卸载chart
    • 管理与Helm一起安装的chart的发布周期

Helm介绍

  • Helm有以下基本概念

    • Chart
      • 创建Kubernetes应用程序所必需的一组信息
    • Config
      • Config 包含了可以合并到打包的chart中的配置信息,用于创建一个可发布的对象
    • Release
      • Release是chart的部署实例,一个chart在一个Kubernetes集群上可以有多个release
  • Helm包含以下组件:

    • Helm客户端
    • Helm库
  • Helm客户端 是终端用户的命令行客户端。负责以下内容:

    • 本地chart开发
    • 管理仓库
    • 管理发布
    • 与Helm库建立接口
      • 发送安装的chart
      • 发送升级或卸载现有发布的请求
  • Helm库 提供执行所有Helm操作的逻辑。与Kubernetes API服务交互并提供以下功能:

    • 结合chart和配置来构建版本
    • 将chart安装到Kubernetes中,并提供后续发布对象
    • 与Kubernetes交互升级和卸载chart

Helm基本操作

  • 配置repo
    • 添加helm源:helm repo add 名称 helm库链接
    • 查看helm源:helm repo list
    • 搜索chart:helm search 名称
  • 操控chart
    • 创建chart:helm create 名称
    • 安装chart:helm install 名称 release
    • 下载并解压chart: helm pull 名称
    • 推送chart:helm push 名称
    • 升级chart:help upgrade 选项
    • 回滚chart:help rollback release
    • 卸载chart: helm uninstall 名称
  • Helm v2和Helm v3有很大的区别,以上列出的为v3版本的命令

Chart目录结构

使用命令helm create用于创建一个chart,系统会自动创建固定结构的目录

[root@k8s01 mytest]# tree mytest
mytest                                            ####chart包目录名              
├── charts                                     ####应用运行的依赖存放目录
├── Chart.yaml                              ####chart定义文件,包含chart的名称版本等信息
├── templates                               ####应用模板目录
│   ├── deployment.yaml
│   ├── _helpers.tpl                        ####存放模板信息
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt                          ####存放提示信息
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests                                  ####用于测试
│       └── test-connection.yaml
└── values.yaml                            ####chart包的参数配置文件,在模板文件中会调用定义的变量

Chart.yaml文件简介

Chart.yaml 中主要是放一些概要信息,比如 chart 的名称、版本、维护者、依赖(即子 chart)

apiVersion: v1
appVersion: 5.7.30
deprecated: true
description: DEPRECATED - Fast, reliable, scalable, and easy to use open-source relationaldatabase system.
home: https://www.mysql.com/
icon: https://www.mysql.com/common/logos/logo-mysql-170x115.png
keywords:
- mysql
- database
- sql
name: mysql
sources:
- https://github.com/kubernetes/charts
- https://github.com/docker-library/mysql
version: 1.6.9
  • 上面内容来自http://mirror.azure.cn/kubernetes/charts/mysql/Chart.yaml
    • appVersion:chart的版本
    • Deprecated:表示当前chart已弃用
    • keywords: 关键字列表,便于检索
    • Name:chart名称
    • Source:下载列表
    • Version:release版本

Values.yaml文件简介

  • 在values.yaml文件中定义的值通过 Values 对象传递到templates下的YAML模板清单中
  • 使用{{ .Values.key }}格式来引用values.yaml中定义好的参数

在这里插入图片描述

Templates目录简介

各类Kubernetes资源的配置模板都放置在templates目录下

[root@k8s01 helm]# ll mysql/templates/
total 48
-rw-r--r-- 1 root root  292 Nov 13  2020 configurationFiles-configmap.yaml
-rw-r--r-- 1 root root 8930 Nov 13  2020 deployment.yaml
-rw-r--r-- 1 root root 1290 Nov 13  2020 _helpers.tpl
-rw-r--r-- 1 root root  295 Nov 13  2020 initializationFiles-configmap.yaml
-rw-r--r-- 1 root root 2036 Nov 13  2020 NOTES.txt
-rw-r--r-- 1 root root  868 Nov 13  2020 pvc.yaml
-rw-r--r-- 1 root root 1475 Nov 13  2020 secrets.yaml
-rw-r--r-- 1 root root  328 Nov 13  2020 serviceaccount.yaml
-rw-r--r-- 1 root root  800 Nov 13  2020 servicemonitor.yaml
-rw-r--r-- 1 root root 1231 Nov 13  2020 svc.yaml
drwxr-xr-x 2 root root   50 May  9 05:24 tests

Helm语法简介

  • helm在全局作用域中有两个重要的全局对象:
    • Values
    • release
  • Value传入chart的值有四个来源
    • chart中的values.yaml文件
    • 若这是个子chart,来自父chart的values.yaml文件
    • 执行 install 或 upgrade 时通过 -f或–values 指定
    • 执行 install 或 upgrade 时通过 --set 选项传入
  • Release代表应用发布时带有的属性:
    • {{ .Release.Name }} # release的名字
    • {{ .Release.Time }} # release部署时间
    • {{ .Release.Namespace }} # kubernetes命名空间
    • {{ .Release.Revision }} # release版本号,是递增值,每次更新都加一
    • {{ .Release.IsUpgrade }} # 若值为true则代表该release是一次更新
    • {{ .Release.IsInstall }} # 若值为true则代表该release是一次安装

缩略语

缩略语英文全称解释
APIApplication Programming Interface应用编程接口,指的是应用程序之间为了保证互相通讯所提供的一系列特殊规则和要求
K8sKubernetesKubernetes的缩写
CLICommand-line Interface命令行视图
LBLoad Balance负载均衡
AIArtificial Intelligence人工智能
OAOffice Automation办公自动化
OTTOver The Top通过互联网向用户提供各种应用服务
CSIContainer Storage Interface容器存储接口
CCECloud Container Engine华为云容器引擎
HCSHUAWEI CLOUD Stack华为云解决方案名称

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

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

相关文章

04 Redis之命令(Hash型Value命令+List型Value命令+Set型Value命令+有序集合ZSET型Value命令)

3.4 Hash型Value命令 Hash 表就是一个映射表 Map,也是由键-值对构成,为了与整体的 key 进行区分,这里的键称为 field,值称为 value。注意,Redis 的 Hash 表中的 field-value 对均为 String 类型。 3.4.1 hset  格…

第一个hello驱动

Linux驱动程序的分类 字符设备驱动、块设备驱动和网络设备驱动。 Linux驱动程序运行方式 把驱动程序编译进内核里面,这样内核启动后就会自动运行驱动程序了;把驱动程序编译成以.ko为后缀的模块文件,然后在Linux启动后,我们自己…

微信小程序(二十一)css变量-定义页面主题色

注释很详细,直接上代码 上一篇 新增内容: 1.使用css变量 2.消除按钮白块影响 3.修改图标样式 源码: npmTest.json {"navigationStyle": "custom","usingComponents": {//引入vant组件"van-nav-bar"…

Linux多线程——线程池

本章Gitee仓库:线程池、单例模式 文章目录 1. 池化技术简述2. 线程池3. 单例模式3.1 单例模式特点3.2 饿汉方式和懒汉方式3.3 单例模式线程安全 1. 池化技术简述 C中的STL,当空间不够时,会自动扩容,这个并不是我们需要多少&#…

sqli-labs闯关

目录 1.安装靶场2.了解几个sql常用知识2.1联合查询union用法2.2MySQL中的通配符:2.3常用函数2.4数据分组 3.mysql中重要的数据库和表4.开始闯关4.1 Less-14.1.1 首先进行一次常规的注入4.1.2 深入解析 1.安装靶场 1.首先推荐使用github下载靶场源码 https://githu…

Matlab处理excel数据

我们新建个excel文档,用Matlab读取里面的内容,计算和判断里面的计算结果是否正确,并打印到另一个文档当中。 新建文档 新建输入文档,文件名TestExcel 编写脚本 [num,txt] xlsread(TestExcel.xlsx); SNcode num(:,1);%从序号中…

《微信小程序开发从入门到实战》学习九十六

7.2 基础内容组件 7.2.4 progress组件 progress组件的示例代码如下&#xff1a; <progress percent"20" show-info /> 7.3 表单组件 表单组件是用于收集信息的组件。第三章介绍了许多表单组件&#xff0c;包括form、input、textarea、picker、switch、butt…

eclipse启动Java服务及注意事项

1、导入项目 选择file——》import…——》Generate——》Exiting Projects into Workspace——》选择要导入的项目 2、添加tomcat 1&#xff09;点击Serves——》No servers are available. Click this link to create a new server… 2&#xff09;点击“Add…” 3&…

YOLO 全面回顾:从最初的YOLOv1到最新的YOLOv8、YOLO-NAS,以及整合了 Transformers 的 YOLO

YOLO 全面回顾 综述评估指标YOLO v1YOLO v2YOLO v3YOLO v4YOLOv5 与 Scaled-YOLOv4 YOLORYOLOXYOLOv6YOLOv7DAMO-YOLOYOLOv8PP-YOLO, PP-YOLOv2, and PP-YOLOEYOLO-NASYOLO with Transformers 综述 论文&#xff1a;https://arxiv.org/pdf/2304.00501.pdf 代码&#xff1a;gi…

MySQL知识点总结(一)——一条SQL的执行过程、索引底层数据结构、一级索引和二级索引、索引失效、索引覆盖、索引下推

MySQL知识点总结&#xff08;一&#xff09;——一条SQL的执行过程、索引底层数据结构、一级索引和二级索引、索引失效、索引覆盖、索引下推 一条SQL的执行过程索引底层数据结构为什么不使用二叉树&#xff1f;为什么不使用红黑树?为什么不使用hash表&#xff1f;为什么不使用…

Windows Qt C++ VTK 绘制三维曲线

Qt 自带数据可视化从文档上看&#xff0c;只能实现三维曲面。 QwtPlot3D在Qt6.6.0上没编译通过。 QCustomPlot 只能搞二维。 VTK~搞起。抄官网demo。 后续需求&#xff1a; 1、对数轴 2、Y轴逆序 3、Z轴值给色带&#xff0c;类似等高线图的色带 期待各位大佬多多指导。…

ad18学习笔记十六:v割

所谓“V割”是印刷电路板&#xff08;PCB&#xff09;厂商依据客户的图纸要求&#xff0c;事先在PCB的特定位置用转盘刀具切割好的一条条分割线&#xff0c;其目的是为了方便后续SMT电路板组装完成后的分板之用&#xff0c;因为其切割后的外型看起来就像个英文的“V”字型&…

C++从初级工程师到中级工程师【个人学习笔记】

目录 1 背景2 要点2.1 内存分区模型2.1.1 程序运行前2.1.2 代码 2.2.1 程序运行后栈区代码 1 背景 从这一章开始&#xff0c;开始学习C的面向对象编程&#xff0c;是C中的核心。 2 要点 2.1 内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&…

vue3项目+TypeScript前端项目—— vue3搭建项目+eslint+husky

今天来带大家从0开始搭建一个vue3版本的后台管理系统。一个项目要有统一的规范&#xff0c;需要使用eslintstylelintprettier来对我们的代码质量做检测和修复&#xff0c;需要使用husky来做commit拦截&#xff0c;需要使用commitlint来统一提交规范&#xff0c;需要使用preinst…

智能音箱喇叭杂音问题

智能音箱喇叭杂音问题 智能音箱生厂或出货过程会遇到多种喇叭播放有杂音的问题&#xff0e; 螺丝不匹配 智能音箱设备在生产过程&#xff0c;会有SPL测试喇叭失真&#xff0c;发现不良率8%的杂音问题&#xff0e; 分析原因是来料导入了新螺丝&#xff0c; 使用过程进入异物…

Python笔记15-实战小游戏飞机大战(中)

文章目录 创建第一个敌机创建一群敌机创建多行敌机让敌机移动射杀敌机生成新的敌机群结束游戏有敌机到达屏幕底端游戏结束 在上一篇基础上继续 本示例源码地址 点击下载 创建第一个敌机 在屏幕上放置外星人与放置飞船类似。每个外星人的行为都由Alien 类控制&#xff0c;我们…

docker 部署xxl-job

docker 部署xxl-job XXL-JOB github地址 https://github.com/xuxueli/xxl-job XXL-JOB 文档地址 https://www.xuxueli.com/xxl-job/ XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品…

利用ChatGPT提升工作效率的专业指南

利用ChatGPT提升工作效率的专业指南 一、引言 在数字化时代&#xff0c;人工智能助手已经成为提高工作效率的必备工具。其中&#xff0c;ChatGPT以其强大的自然语言处理能力&#xff0c;为我们提供了全新的工作方式。本文将深入探讨如何利用ChatGPT在各个工作领域中提升效率&a…

ChatGPT与文心一言:智能回复与语言准确性的较量

在当今数字化时代&#xff0c;随着人们对智能化技术的需求不断增长&#xff0c;智能回复工具也成为了日常生活中不可或缺的一部分。ChatGPT和文心一言作为两个备受瞩目的智能回复工具&#xff0c;在智能回复、语言准确性以及知识库丰富度等方面各有卓越之处。 本文将对这两者进…

LPC系列一个定时器不同频率

1.背景 最近研究的LPC804里只有一个ctimer&#xff0c;很多时候用的捉襟见肘的&#xff0c;官方给了一份双匹配的参考例程&#xff0c;不过实际用处不大。不过我花了一晚上的时间&#xff0c;终于研究出来将一个定时器拆成四个定时器用的办法了。这个方法适用于用回调函数的LP…