k8s资源调度

2023-05-16

k8s资源调度

文章目录

  • k8s资源调度
    • nodeSelector
    • nodeAffinity
    • taint
    • tolerations

k8s基本架构如下

Scheduler调度器做为Kubernetes三大核心组件之一, 承载着整个集群资源的调度功能,其根据特定调度算法和策略,将Pod调度到最优工作节点上,从而更合理与充分的利用集群计算资源。其作用是根据特定的调度算法和策略将Pod调度到指定的计算节点(Node)上,其做为单独的程序运行,启动之后会一直监听API Server,获取PodSpec.NodeName为空的Pod,对每个Pod都会创建一个绑定。默认情况下,k8s的调度器采用扩散策略,将同一集群内部的pod对象调度到不同的Node节点,以保证资源的均衡利用。

具体的调度过程,一般如下:

  1. 首先,客户端通过API Server的REST API/kubectl/helm创建pod/service/deployment/job等,支持类型主要为JSON/YAML/helm tgz。

  2. 接下来,API Server收到用户请求,存储到相关数据到etcd。

  3. 调度器通过API Server查看未调度(bind)的Pod列表,循环遍历地为每个Pod分配节点,尝试为Pod分配节点。调度过程分为2个阶段:

    1. 第一阶段:预选过程,过滤节点,调度器用一组规则过滤掉不符合要求的主机。比如Pod指定了所需要的资源量,那么可用资源比Pod需要的资源量少的主机会被过滤掉。
    2. 第二阶段:优选过程,节点优先级打分,对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把容一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等。
  4. 选择主机:选择打分最高的节点,进行binding操作,结果存储到etcd中。

  5. 所选节点对于的kubelet根据调度结果执行Pod创建操作。

nodeSelector

nodeSelector是最简单的约束方式。nodeSelectorpod.spec的一个字段

通过--show-labels可以查看指定node的labels

[root@master ~]# kubectl get node node1 --show-labels
NAME    STATUS     ROLES    AGE     VERSION   LABELS
node1   NotReady   <none>   4d21h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux

如果没有额外添加 nodes labels,那么看到的如上所示的默认标签。我们可以通过 kubectl label node 命令给指定 node 添加 labels:

[root@master ~]# kubectl label node node1 disktype=ssd
node/node1 labeled
[root@master ~]# kubectl get node node1 --show-labels
NAME    STATUS     ROLES    AGE     VERSION   LABELS
node1   NotReady   <none>   4d21h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux

当然,你也可以通过 kubectl label node 删除指定的 labels(标签 key 接 - 号即可)

[root@master ~]# kubectl label node node1 disktype-
node/node1 labeled
[root@master ~]# kubectl get node node1 --show-labels
NAME    STATUS     ROLES    AGE     VERSION   LABELS
node1   NotReady   <none>   4d21h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux

创建测试 pod 并指定 nodeSelector 选项绑定节点:

[root@master mainfest]# kubectl label node node1 disktype=ssd
node/node1 labeled
[root@master mainfest]# kubectl get nodes node1 --show-labels
NAME    STATUS   ROLES    AGE     VERSION   LABELS
node1   Ready    <none>   4d21h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux

[root@master mainfest]# vim test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: test
  labels:
    env: test
spec:
  containers:
  - name: test
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disktype: ssd

查看pod调度的节点

[root@master mainfest]# kubectl get pod -o wide
NAME   READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
t1     1/1     Running   0          73s   10.244.1.31   node1   <none>           <none>
test   1/1     Running   0          6s    10.244.1.32   node1   <none>           <none>

可以看出,test这个pod被强制调度到了有disktype=ssd这个label的node上。

nodeAffinity

nodeAffinity意为node亲和性调度策略。是用于替换nodeSelector的全新调度策略。目前有两种节点亲和性表达:

  1. RequiredDuringSchedulingIgnoredDuringExecution:
    必须满足制定的规则才可以调度pode到Node上。相当于硬限制
  2. PreferredDuringSchedulingIgnoreDuringExecution:
    强调优先满足制定规则,调度器会尝试调度pod到Node上,但并不强求,相当于软限制。多个优先级规则还可以设置权重值,以定义执行的先后顺序。

IgnoredDuringExecution的意思是:

如果一个pod所在的节点在pod运行期间标签发生了变更,不在符合该pod的节点亲和性需求,则系统将忽略node上lable的变化,该pod能机选在该节点运行。

NodeAffinity 语法支持的操作符包括:

  • In:label 的值在某个列表中
  • NotIn:label 的值不在某个列表中
  • Exists:某个 label 存在
  • DoesNotExit:某个 label 不存在
  • Gt:label 的值大于某个值
  • Lt:label 的值小于某个值

nodeAffinity规则设置的注意事项如下:

  1. 如果同时定义了nodeSelector和nodeAffinity,name必须两个条件都得到满足,pod才能最终运行在指定的node上。
  2. 如果nodeAffinity指定了多个nodeSelectorTerms,那么其中一个能够匹配成功即可。
  3. 如果在nodeSelectorTerms中有多个matchExpressions,则一个节点必须满足所有matchExpressions才能运行该pod。
apiVersion: v1
kind: Pod
metadata:
  name: test1
  labels:
    app: nginx
spec:
  containers:
  - name: test1
    image: nginx
    imagePullPolicy: IfNotPresent
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:		//硬策略
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            values:
            - ssd
            operator: In
      preferredDuringSchedulingIgnoredDuringExecution:		//软策略
      - weight: 10
        preference:
          matchExpressions:
          - key: name
            values:
            - test
            operator: In      

给node2打上disktype=ssd的标签

[root@master mainfest]# kubectl label node node2 disktype=ssd
node/node2 labeled
[root@master mainfest]# kubectl get node node2 --show-labels
NAME    STATUS   ROLES    AGE     VERSION   LABELS
node2   Ready    <none>   4d22h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux

给node1打上name=test的label和删除name=test的label并测试查看结果

[root@master ~]# kubectl label node node1 name=test
node/node1 labeled
[root@master ~]# kubectl get node node1 --show-labels
NAME    STATUS   ROLES    AGE     VERSION   LABELS
node1   Ready    <none>   4d22h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux,name=test

[root@master mainfest]# kubectl apply -f test1.yaml 
pod/test1 created
[root@master mainfest]# kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
t1      1/1     Running   0          36m   10.244.1.31   node1   <none>           <none>
test    1/1     Running   0          35m   10.244.1.32   node1   <none>           <none>
test1   1/1     Running   0          3s    10.244.1.33   node1   <none>           <none>

删除node1上name=test的label

[root@master mainfest]# kubectl label node node1 name-
node/node1 labeled
[root@master mainfest]# kubectl get node node1 --show-labels
NAME    STATUS   ROLES    AGE     VERSION   LABELS
node1   Ready    <none>   4d22h   v1.20.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux

[root@master mainfest]# kubectl apply -f test1.yaml 
pod/test1 created
[root@master mainfest]# kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
t1      1/1     Running   0          40m   10.244.1.31   node1   <none>           <none>
test    1/1     Running   0          39m   10.244.1.32   node1   <none>           <none>
test1   1/1     Running   0          7s    10.244.2.44   node2   <none>           <none>

上面这个pod首先是要求要运行在有disktype=ssd这个label的node上,如果有多个node上都有这个label,则优先在有name=test这个label上创建

taint

使用kubeclt taint命令可以给某个node设置五点,node被设置污点之后就和pod之间存在了一种相斥的关系,可以让node拒绝pod的调度执行,甚至将node上本已存在的pod驱逐出去

污点的组成如下:

key=value:effect

每个污点有一个key和value作为污点的标签,其中value可以为空,effect描述污点的作用

[root@master mainfest]# kubectl taint node node1 name=test:NoSchedule
node/node1 tainted
[root@master mainfest]# kubectl describe node node1|grep -i taint
Taints:             name=test:NoSchedule

创建一个名为test2的pod测试

apiVersion: v1
kind: Pod
metadata:
  name: test2
  labels:
    app: nginx
spec:
  containers:
  - name: test2
    image: nginx
    imagePullPolicy: IfNotPresent
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: disktype
            values:
            - ssd
            operator: In
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: name
            values:
            - test
            operator: In
            
[root@master mainfest]# kubectl apply -f test2.yaml 
pod/test2 created
[root@master mainfest]# kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
t1      1/1     Running   0          6h25m   10.244.1.31   node1   <none>           <none>
test    1/1     Running   0          6h24m   10.244.1.32   node1   <none>           <none>
test1   1/1     Running   0          8m13s   10.244.2.45   node2   <none>           <none>
test2   1/1     Running   0          6m31s   10.244.2.46   node2   <none>           <none>

正常情况下,test2应该创建在node1上,但由于node1上我们设置了污点,所以并不会创建在node1上,当我们删除污点后,就可以创建在node1上

[root@master mainfest]# kubectl taint node node1 name-
node/node1 untainted
[root@master mainfest]# kubectl describe node node1|grep -i taint
Taints:             <none>

[root@master mainfest]# kubectl apply -f test2.yaml 
pod/test2 created
[root@master mainfest]# kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
t1      1/1     Running   0          6h29m   10.244.1.31   node1   <none>           <none>
test    1/1     Running   0          6h28m   10.244.1.32   node1   <none>           <none>
test1   1/1     Running   0          12m     10.244.2.45   node2   <none>           <none>
test2   1/1     Running   0          9s      10.244.2.47   node1   <none>           <none>

删除污点后,test2就被创建在了node1上

effect说明

上面的例子中effect的取值为NoSchedule,下面对effect的值作下简单说明:

  • NoSchedule: 如果一个pod没有声明容忍这个Taint,则系统不会把该Pod调度到有这个Taint的node上
  • PreferNoSchedule:NoSchedule的软限制版本,如果一个Pod没有声明容忍这个Taint,则系统会尽量避免把这个pod调度到这一节点上去,但不是强制的。
  • NoExecute:定义pod的驱逐行为,以应对节点故障。NoExecute这个Taint效果对节点上正在运行的pod有以下影响:
    • 没有设置Toleration的Pod会被立刻驱逐
    • 配置了对应Toleration的pod,如果没有为tolerationSeconds赋值,则会一直留在这一节点中
    • 配置了对应Toleration的pod且指定了tolerationSeconds值,则会在指定时间后驱逐
    • 从kubernetes 1.6版本开始引入了一个alpha版本的功能,即把节点故障标记为Taint(目前只针对node unreachable及node not ready,相应的NodeCondition "Ready"的值为Unknown和False)。激活TaintBasedEvictions功能后(在–feature-gates参数中加入TaintBasedEvictions=true),NodeController会自动为Node设置Taint,而状态为"Ready"的Node上之前设置过的普通驱逐逻辑将会被禁用。注意,在节点故障情况下,为了保持现存的pod驱逐的限速设置,系统将会以限速的模式逐步给node设置Taint,这就能防止在一些特定情况下(比如master暂时失联)造成的大量pod被驱逐的后果。这一功能兼容于tolerationSeconds,允许pod定义节点故障时持续多久才被逐出。

tolerations

设置了污点的Node将根据taint的effect:NoSchedule、PreferNoSchedule、NoExecute和Pod之间产生互斥的关系,Pod将在一定程度上不会被调度到Node上。

但我们可以在Pod上设置容忍 (Toleration),意思是设置了容忍的Pod将可以容忍污点的存在,可以被调度到存在污点的Node上

  tolerations:
  - key: name
    value: test
    operator: Equal
    effect: NoSchedule

其中key,vaule,effect要与Node上设置的taint保持一致

operator的值为Exists将会忽略value值

tolerationSeconds 用于描述当 Pod 需要被驱逐时可以在 Pod 上继续保留运行的时间

[root@master mainfest]# kubectl taint node node2 name=test:NoSchedule
node/node2 tainted
[root@master mainfest]# kubectl describe node node2|grep -i taint
Taints:             name=test:NoSchedule

[root@master mainfest]# kubectl apply -f test2.yaml 
pod/test2 created
[root@master mainfest]# kubectl get pod -o wide
NAME    READY   STATUS    RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS GATES
t1      1/1     Running   0          6h38m   10.244.1.31   node1   <none>           <none>
test    1/1     Running   0          6h37m   10.244.1.32   node1   <none>           <none>
test1   1/1     Running   0          21m     10.244.2.45   node2   <none>           <none>
test2   1/1     Running   0          7s      10.244.2.49   node2   <none>           <none>

可以看到,虽然我们在node2上设置了污点,但因为我们在资源清单中定义了污点容忍,所以pod依旧能创建在node2上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

k8s资源调度 的相关文章

  • k8s之ReplicaSet

    我们在定义pod资源时 可以直接创建一个kind Pod类型的自主式pod 但是这存在一个问题 假如pod被删除了 那这个pod就不能自我恢复 就会彻底被删除 线上这种情况非常危险 所以今天就给大家讲解下pod的控制器 所谓控制器就是能够管
  • centos 安装k8s

    第一步 每台机子都做 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 第二步 每台机子都做 永久关闭selinux sed i s enforcing disabled
  • (5)minikube玩转k8s集群之访问pod里的服务

    配套视频教程 1 Minikube介绍 简单说 创建k8s集群很麻烦 minikube可以让我们快速搭建一个k8s集群用于学习 Minikube 是一种可以让您在本地轻松运行 Kubernetes 的工具 Minikube 在笔记本电脑上的
  • K8s中的Deployment

    Deployment是kubernetes在1 2版本中引入的新概念 用于更好的解决Pod的编排问题 为此 Deployment在内部使用了ReplicaSet来实现目的 我们可以把Deployment理解为ReplicaSet的一次升 级
  • K8S 工作负载(一)

    K8S 工作负载 1 Pod Pod 是 Kubernetes 中创建 管理和调度的最小计算单元 用户可以在 K8S 中通过调用 Pod API生成一个 Pod 让 K8S 对其进行调度 Pod 是一组 一个或多个 容器 这些容器共享存储
  • k8s Trouble Shooting 故障排除

    本文要讲的是k8s的故障排除 比较浅 最近刚入门 主要涵盖的内容是查看k8s对象的当前运行时信息 对于服务 容器的问题是如何诊断的 对于某些复杂的问题例如pod调度问题是如何排查的 1 查看系统的Event事件 在对象资源 pod serv
  • Harbor镜像仓库搭建

    1 安装docker comprose docker comprose是docker容器批量管理工具 curl L https get daocloud io docker compose releases download 1 25 0
  • Liveness、Readiness 和 Startup Probes

    liveness apiVersion v1 kind Pod metadata labels test liveness name liveness exec spec containers name liveness image k8s
  • k8s英伟达GPU插件(nvidia-device-plugin)

    安装方法 Installation Guide NVIDIA Cloud Native Technologies documentation 1 本地节点添加 NVIDIA 驱动程序 要求 NVIDIA drivers 384 81 先确保
  • wireshark 抓包学习TLS握手(ECDHE)

    首先放出经典的流程图 TLS 握手共分四个阶段 为了便于理解 我用wireshark抓了包来分析每一个阶段 Client Hello 第一次握手 客户端首先会发一个 Client Hello 消息 消息里面有客户端使用的 TLS 版本号 支
  • 初学容器:Docker

    1 环境初始化 1 1 安装git vim curl等常用工具 sudo apt update sudo apt install y git vim curl jq 1 2 ubuntu是不支持远程连接的 需要安装ssh服务 sudo ap
  • k8s基础概念、ETCD

    原理 和k8s结合点 etcd与k8s的交集 维护 基础概念 物理组件 逻辑组件 网络组件 工作负载 1 物理组件 Master Control plane kube apiserver 提供唯一api接口 提供集群管理接口 用户认证授权
  • k8s基本命令

    k8s命令 https kubernetes io zh docs tutorials kubernetes basics 官网地址 基本命令 查看节点服务器 kubectl get nodes 查看命名空间 kubectl get ns
  • Kubernetes + Dashboard 集群搭建

    1 环境说明 基于kubeadm工具部署k8s 集群 还有基于二进制的部署方式但是需要单独部署k8s的每个组件比较繁琐 kubeadm是 Kubernetes官 提供的 于快速部署Kubernetes集群的 具 基于Kubernetes v
  • k8s Failed to create pod sandbox错误处理

    错误信息 Failed to create pod sandbox rpc error code Unknown desc failed to get sandbox image k8s gcr io pause 3 2 failed to
  • namespace命令空间

    目录 1 解决什么问题 2 基本介绍 2 1 定义 2 2 应用场景 3 使用案例 4 资源配额 5 标签 5 1 定义 5 2 pod资源打标签 5 3 查看标签 1 解决什么问题 命令空间类似于C 中的命名空间 当用户数量较多的集群 才
  • 十二. Kubernetes Pod 与 探针

    目录 一 Pod Pod 中的多容器协同 Pod 的组成与paush 重要 Pod 的生命周期 Pod状态与重启策略 静态Pod 二 探针 1 livenessProbe存活探针 2 readinessProbe就绪探针 3 startup
  • Kubernets原理分解

    主节点 master 快速介绍 master也要装kubelet和kubeproxy 前端访问 UI CLI kube apiserver scheduler controller manager etcd kubelet kubeprox
  • kubeadm集群化部署多master节点(生产环境适用)

    一 背景介绍 k8s通过master集中式管理worknode的容器编排系统 而在生产环境为了维护高可用性 master的地位起到举无轻重的作用 一旦master节点失守 则会导致整个集群服务不可用 因此配置多master集群在生产环境非常
  • k8s部署Prometheus抓取pods的metrics

    1 暴露pods给Prometheus抓取 spec replicas app replicas template metadata annotations prometheus io scrape true prometheus io p

随机推荐

  • Qt报错:XXX does not name a type,及解决办法

    一 错误 Qt报错 xff1a XXX does not name a type 二 报错原因 在两个类的头文件中 xff0c 相互引用了对方的头文件 例如 xff1a a h include 34 b h 34 class AClass
  • 成功解决AttributeError: ‘str‘ object has no attribute ‘decode‘

    成功解决AttributeError 39 str 39 object has no attribute 39 decode 39 目录 解决问题 解决思路 解决方法 T1 直接去掉 T2 众多网友好评的建议 解决问题 AttributeE
  • 很实用的latex常用计算符

    本文仅供学习参考使用 xff0c 一切版权和解释权均归原作者所有 xff0c 转载地址 xff1a http blog csdn net garfielder007 article details 51646604 数学符号详细内容见 xf
  • R语言实战——距离判别、贝叶斯判别、Fisher判别理论详细推导与R语言实现

    文章目录 前言1 距离判别1 1 双群体1 1 1 理论推导1 1 2 R语言实现1 1 3 实例分析 1 2 多群体1 2 1 理论推导1 2 2 R语言实现1 2 3 实例分析 2 贝叶斯判别2 1 双群体2 1 1 理论推导2 1 2
  • R语言实战——主成分分析理论推导与R语言实现

    目录 1 总体主成分1 1 主成分的定义与导出1 2 主成分的性质1 3 从相关矩阵出发求主成分 2 样本主成分2 1 从S出发求主成分2 2 从R出发求主成分 3 相关的R函数以及实例3 1 96 princomp 96 函数3 2 96
  • GM(1,1)灰色预测及相关检验指标的MATLAB实现

    本篇文章的代码实现了以下三大方面的功能 xff1a 一 计算级比和光滑比并做级比检验 xff1b 二 序列的灰色预测 xff1b 三 精度检验 xff0c 主要做了以下内容 xff1a 相对残差Q检验 xff08 MAPE xff09 xf
  • R语言实战——ROC曲线的绘制

    前言 xff1a 以前使用Matlab绘制ROC曲线常常是工具箱有就画 xff0c 没有就不画 xff0c 而且在想画的时候工具箱恰恰就没有 xff0c 很纳闷 然后无意间发现了一篇用R语言绘制ROC曲线的文章 xff0c 赶紧学了并分享出
  • 含指数函数的不定积分方法归纳

    本篇博客参照了河北大学数计学院时坚所著的 含指数函数的不定积分方法归纳 xff0c 并在其基础上做了拓展 不定积分为数学分析中一类重要的内容 xff0c 其积分技巧和方法在几百年来一步步得到深入研究和探索 而含指数函数的不定积分为积分学中一
  • MybatisPlus自定义sql分页查询

    自定义sql分页的步骤 Dao层定义查询接口 xff0c 第一个参数必须为分页的参数Ipage xff0c 后面可带其他参数作为传入参数定义自定义查询sql 网上很多博客里面写的多表sql分页查询没带参数 xff0c 这里给一个带参数的列子
  • Error loading “D:\Coding\Anaconda\lib\site-packages\torch\lib\asmjit.dll“

    OSError WinError 126 The specified module could not be found Error loading 34 C Users chunc anaconda3 lib site packages
  • Python实战——VAE的理论详解及Pytorch实现

    参考的论文 xff1a Tutorial on Variational AutoencodersAuto Encoding Variational Bayes 建议参考的文章 xff1a Pytorch里的CrossEntropyLoss详
  • jupyter创建新环境与新kernel

    以下可以参照我的另一篇文章 xff1a Jupyter配置虚拟环境及安装Python包时遇到的问题 创建环境相关 span class token comment 创建环境相关 span span class token comment 创
  • 修改配置文件解决matplotlib中文与正负号乱码问题

    步骤如下 xff1a 1 找到配置文件matplotlibrc 不管是啥系统 xff0c 都可以通过以下方式查找matplotlibrc所在的文件夹 xff08 可以在终端或者编译器中运行以下代码 xff09 span class toke
  • ubuntu查看网络相关信息

    查看ip地址和网卡 xff1a ifconfig 需要确保下载了net tools xff1a sudo apt install net tools 查看DNS xff1a resolvectl status xff08 下图中DNS Se
  • lingo中@size@for@sum函数的使用

    64 size LINGO中的 64 size xff08 xff09 函数用于确定集合中元素的个数 比如你的集合是 注意 xff1a 在使用size的时候直接在 64 size 括号里写上集合名就行 xff0c 不需要写 64 size
  • windows ubuntu18.04 双系统共用蓝牙LE的鼠标

    由于由于双系统的缘故 xff0c 一个蓝牙鼠标并不能无缝的在ubuntu和windows之间切换 由于现在市场上很多是bluetooth LE鼠标 xff0c 所以网上的方法都会失效 这里以华为蓝牙鼠标为例 xff0c 给出一种可行的解决方
  • Apsara Clouder云计算专项技能认证:云服务器ECS入门

    1 xff0e 云服务器ECS以服务化的方式对客户提供 xff0c 阿里云产品售后支持的时间段是 xff1f 单选 A 5 8 B 7 8 C 7 12 D 7 24 2 xff0e 云服务器ECS属于云计算SaaS PaaS laaS哪一
  • Anaconda 下载

    官方下载源 xff08 下载较慢 xff09 xff1a https repo anaconda com archive https repo anaconda com archive 国内下载源 xff08 清华映像站 xff09 xff
  • dpkg: 处理软件包 XXXX (--configure)时出错解决方法

    正在设置 ubuntu drivers common 1 0 4 17 7 var lib dpkg info ubuntu drivers common postinst 21 var lib dpkg info ubuntu drive
  • k8s资源调度

    k8s资源调度 文章目录 k8s资源调度nodeSelectornodeAffinitytainttolerations k8s基本架构如下 Scheduler调度器做为Kubernetes三大核心组件之一 xff0c 承载着整个集群资源的