云端技术驾驭DAY12——Pod调度策略、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调度策略

调度策略概述
  • 什么是调度分配?
    • 在k8s中,调度是将Pod分配到合适的计算节点上,然后对应节点上的Kubelet运行这些Pod
    • kube-scheduler是默认调度器,是集群的核心组建
  • 调度器是如何工作的?
    • 调度器通过k8s的监测机制来发现集群中尚未被调度到节点上的Pod。调度器依据调度原则将Pod分配到一个合适的节点上运行
  • 调度流程
    • 调度器给一个Pod做调度选择包含两个步骤:过滤和打分
  • 第一步:过滤
    • 首先要筛选出满足Pod所有的资源请求的节点,这里包含计算资源、内存、存储、网络、端口号等等,如果没有节点能满足Pod的需求,Pod将一直停留在Pending状态,直到调度器能够找到合适的节点运行它
  • 第二部:打分
    • 在打分阶段,调度器会根据打分规则,为每一个可调度节点进行打分。选出其中打分最高的节点来运行Pod。如果存在多个得分最高的节点,调度器会从中随机选取一个。
  • 绑定
    • 在确定了某个节点运行Pod之后,调度器将这个调度决定通知给kube-apiserver,这个过程叫做绑定
Pod定向调度
  • 基于节点名称的调度
    • 在创建Pod过程中,我们可以配置相关的调度规则,从而让Pod运行在制定的节点上

    • nodeName标签,让Pod运行在制定的节点上

      [root@master ~]# vim myhttp.yaml

      kind: Pod
      apiVersion: v1
      metadata:
      name: myhttp
      spec:
      nodeName: node-0001 // 基于节点名称进行调度
      containers:

      • name: apache
        image: myos:httpd

      [root@master ~]# kubectl apply -f myhttp.yaml
      pod/myhttp created
      [root@master ~]# kubectl get pods -o wide
      NAME READY STATUS RESTARTS AGE IP NODE
      myhttp 1/1 Running 0 3s 10.244.1.6 node-0001

标签与Pod调度

标签管理
  • 标签是什么?

    • 标签(Labels)是附加到Kubernetes对象上的键值对
  • 标签的用途

    • k8s在创建、删除、修改资源对象的时候可以使用标签来确定要修改的资源对象。在Pod调度的任务中,使用标签可以更加灵活地完成调度人物
    • 标签可以在创建时附加到对象,也可以在创建之后随时添加和修改。标签可以用于组织和选择对象的子集
  • 查看筛选标签

    • 使用--show-labels查询标签

      [root@master ~]# kubectl -n kube-system get pods --show-labels
      NAME READY STATUS RESTARTS AGE LABELS
      calico-kube-controllers-fc945b5f7-kv9gc 1/1 Running 3 (17m ago) 4d19h k8s-app=calico-kube-controllers,pod-template-hash=fc945b5f7
      calico-node-2wz65 1/1 Running 3 (17m ago) 4d17h controller-revision-hash=766786f67c,k8s-app=calico-node,pod-template-generation=1
      calico-node-6jp85 1/1 Running 3 (17m ago) 4d17h controller-revision-hash=766786f67c,k8s-app=calico-node,pod-template-generation=1
      ... ...

  • 管理标签语法格式

命令 解释
kubectl label 资源类型 [资源名称] <key>=<value> 设置标签
kubectl label 资源类型 [资源名称] <key>- 删除标签
kubectl label 资源类型 [资源名称] --show-labels 查看标签
kubectl label 资源类型 [资源名称] -l <key>=<value> 筛选标签
  • 设置标签、删除标签

    [root@master ~]# kubectl get pods --show-labels
    NAME READY STATUS RESTARTS AGE LABELS
    mylinux 1/1 Running 0 7s <none>
    [root@master ~]# kubectl label pods mylinux app=apache // 设置标签
    pod/mylinux labeled
    [root@master ~]# kubectl get pods --show-labels
    NAME READY STATUS RESTARTS AGE LABELS
    mylinux 1/1 Running 0 42s app=apache
    [root@master ~]# kubectl label pods mylinux app- // 删除标签
    pod/mylinux unlabeled

  • 过滤标签

    [root@master ~]# kubectl get nodes -l kubernetes.io/hostname=master // 使用-l筛选标签
    NAME STATUS ROLES AGE VERSION
    master Ready control-plane 4d19h v1.26.0

  • 资源文件标签

    [root@master ~]# vim myhttp.yaml

    kind: Pod
    apiVersion: v1
    metadata:
    name: myhttp
    labels:
    app: httpd
    name: apache
    spec:
    containers:
    - name: apache
    image: myos:httpd
    [root@master ~]# kubectl apply -f myhttp.yaml
    pod/myhttp created
    [root@master ~]# kubectl get pods --show-labels
    NAME READY STATUS RESTARTS AGE LABELS
    myhttp 1/1 Running 0 90s app=httpd,name=apache

Pod标签调度

Pod资源管理

Pod资源管理

资源管理概述
  • 为什么要资源配额?
    • 当多个应用共享固定节点数目的集群时,人们担心某些应用无法获得足够的资源,从而影响其正常运行,我们需要设定一些规则,用来保证应用能获得其运行所需资源
  • CPU和内存资源类型
Pod资源配额
  • 创建资源对象文件

    [root@master ~]# vim minpod.yaml

    kind: Pod
    apiVersion: v1
    metadata:
    name: minpod
    spec:
    terminationGracePeriodSeconds: 0
    nodeSelector:
    kubernetes.io/hostname: node-0003
    containers:
    - name: linux
    image: myos:8.5
    command: ["awk", "BEGIN{while(1){}}"]
    resources:
    requests: // 配额策略
    memory: 1100Mi // 内存资源配额
    cpu: 800m // 计算资源配额

    [root@master ~]# for i in app{1..5};do sed "s,minpod,${i}," minpod.yaml;done | kubectl apply -f -
    pod/app1 created
    pod/app2 created
    pod/app3 created
    pod/app4 created
    pod/app5 created
    [root@master ~]# kubectl get pods
    NAME READY STATUS RESTARTS AGE
    app1 1/1 Running 0 4s
    app2 1/1 Running 0 4s
    app3 0/1 Pending 0 4s
    app4 0/1 Pending 0 4s
    app5 0/1 Pending 0 4s

Pod资源限额
  • 为什么要使用资源限额

    • 限额策略是为了防止某些应用对节点资源过度使用,而配置的限制性策略,限额与配额相反,它不检查节点资源的剩余情况,只限制应用对资源的最大使用量
    • 资源限额使用limits进行配置
  • 限制内存、CPU

    [root@master ~]# vim maxpod.yaml

    kind: Pod
    apiVersion: v1
    metadata:
    name: maxpod
    ... ...
    command: ["awk", "BEGIN{while(1){}}"]
    resources:
    limits:
    cpu: 800m // 计算资源限额
    memory: 2000Mi // 内存资源限额
    [root@master ~]# kubectl apply -f maxpod.yaml
    pod/maxpod created

全局资源管理

全局资源管理概述
  • 全局资源配额
    • 如果有大量的容器需要设置资源配额,为每个Pod设置资源配额策略不方便且不好管理
    • 可以以名称空间为单位,限制其资源的使用与创建。在该名称空间中创建的容器都会受到规则的限制
  • k8s支持的全局资源配额方式有:
    • 对单个Pod内存、CPU进行配额:LimitRange
    • 对资源总量进行配额:ResourceQuota
LimiRange
  • 为名称空间work设置默认资源配额

    [root@master ~]# kubectl create namespace work
    namespace/work created
    [root@master ~]# vim limit.yaml

    kind: LimitRange
    apiVersion: v1
    metadata:
    name: mylimit // 策略名称
    namespace: work // 规则生效的名称空间
    spec:
    limits: // 全局规则
    - type: Container // 资源类型
    default: // 对没有限制策略的容器添加规则
    cpu: 300m // 计算资源限额
    memory: 500Mi // 内存资源限额
    defaultRequest:
    cpu: 8m // 计算资源配额
    memory: 8Mi // 内存资源配额
    [root@master ~]# kubectl apply -f limit.yaml -n work
    limitrange/mylimit created

  • 设置资源使用范围

    • 设置名称空间的最大限额和最小配额

      [root@master ~]# vim limit.yaml

      kind: LimitRange
      apiVersion: v1
      metadata:
      name: mylimit
      namespace: work
      spec:
      limits:

      • type: Container
        default:
        cpu: 300m
        memory: 500Mi
        defaultRequest:
        cpu: 8m
        memory: 8Mi
        max: // 资源限额
        cpu: 800m // 计算资源限额
        memory: 1000Mi // 内存资源限额
        min: // 资源配额
        cpu: 2m // 计算资源配额
        memory: 8Mi // 内存资源配额
        [root@master ~]# kubectl apply -f limit.yaml -n work
        limitrange/mylimit configured
  • Pod资源配额

    • 对整个Pod设置总限额

      ... ...
      spec:
      limits:

      • type: Pod // 限制Pod资源总量
        max:
        cpu: 1200m
        memory: 1200Mi
        min:
        cpu: 2m
        memory: 8Mi
ResourceQuota
  • 限制配额总量

    [root@master ~]# vim quota.yaml

    apiVersion: v1
    kind: ResourceQuota // 全局资源对象
    metadata:
    name: myquota // 规则名称
    namespace: work // 规则作用的名称空间
    spec:
    hard: // 创建强制规则
    requests.cpu: 1000m // 计算资源配额总数
    requests.memory: 2000Mi // 内存资源配额总数
    limits.cpu: 5000m // 计算资源限额总数
    limits.memory: 8Gi // 内存资源限额总数
    pods: 3 // 限制创建资源对象总量

    [root@master ~]# kubectl -n work apply -f quota.yaml
    resourcequota/myquota created
    [root@master ~]# kubectl describe namespaces work
    Name: work
    Labels: kubernetes.io/metadata.name=work
    Annotations: <none>
    Status: Active

    Resource Quotas
    Name: myquota
    Resource Used Hard
    -------- --- ---
    limits.cpu 0 5
    limits.memory 0 8Gi
    pods 0 3
    requests.cpu 0 1
    requests.memory 0 2000Mi

相关推荐
阿7_QuQ5 分钟前
Mac屏幕共享怎么使用?
运维·服务器·macos
Linux运维老纪7 分钟前
Linux之 grep、find、ls、wc 命令
linux·运维·服务器·数据库·云计算·运维开发
飞鹰服务器11 分钟前
DDoS本地防御与绕线防御的区别
服务器·ddos
IT闫13 分钟前
【AI】——结合Ollama、Open WebUI和Docker本地部署可视化AI大语言模型
docker·语言模型·容器
梁萌23 分钟前
06-DevOps-自动构建Docker镜像
运维·docker·devops
Codeking__25 分钟前
Linux——信号(1)信号的产生
linux·运维·服务器
Ares-Wang28 分钟前
Linux》》bash 、sh 执行脚本
linux·运维·bash
RedCong34 分钟前
使用sealos部署kubernetes集群并实现集群管理
云原生·容器·kubernetes
阿里云云原生36 分钟前
乐言科技:云原生加速电商行业赋能,云消息队列助力降本 37%
科技·云原生
野生派蒙3 小时前
Linux:显示 -bash-4.2$ 问题(CentOS 7)
linux·运维·服务器·centos·bash