kubernetes容器编排和调度管理

in with 0 comment

一、容器基本概念

操作系统如何管理进程

什么是容器

容器是一个视图隔离、资源可限制、独立文件系统的进程集合

Container VS VM

什么是容器镜像

运行容器所需要的所有文件集合

Docker

如何运行容器

二、Kubernetes核心概念

什么是Kubernetes

工业级容器编排平台

K8S架构

K8S架构 - 例子

K8S核心功能

Pod

Volume

Deployment

Service

Namespaces

三、容器调度与管理

调度过程

调度器架构

调度流程

Predicates

Priorities

解决问题 - 碎片、容灾、水位、亲和、反亲和

基础调度能力

资源调度用法

      resources:
        limits:
          cpu: 2
          memory: 2000Mi
        requests:
          cpu: 500m
          memory: 1000Mi

如何满足Pod资源要求? -资源Quota

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
    pods: "10"

如何满足Pod与Pod关系要求? -Pod亲和调度

PodAffinity 和 PodAntiAffinity

    spec:
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: security
                operator: In
                values:
                - S1
            topologyKey: kubernetes.io/hostname
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: security
                  operator: In
                  values:
                  - S2
              topologyKey: kubernetes.io/hostname

如何满足Pod与Node关系要求? -Node亲和调度

NodeSelector 和 NodeAffinity

    spec:
      nodeSelector:
        zone: m6
    spec:
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - preference:
              matchExpressions:
              - key: service-type
                operator: In
                values:
                - order
            weight: 1
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: service-type
                operator: In
                values:
                - order
                - product

如何限制调度到某些Node? -Node 污点/容忍

Taints 和 Tolerations

spec:
  taints:
  - effect: NoSchedule
    key: onlytest
    value: "yes"
    spec:
      tolerations:
        - key: "onlytest"
          operator: "Equal"
          value: "yes"
          effect: "NoSchedule"   

高级调度能力

如何做到集群资源合理利用? - 优先级调度

如何做到集群资源合理利用? - 优先级调度配置

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 10000
globalDefault: false
description: "This priority is high."
    spec:
      priorityClassName: high-priority

如何做到集群资源合理利用? - 优先级调度过程

发生在Pending Pod出队列开始调度

  1. Pod1和Pod2先后进入调度队列
  2. 当进行一轮调度时,PriorityQueue会优先Pop
  3. 优先级更大的Pod1出队列调度
  4. 调度成功后,对Pod1进行Bind,开始下一轮调度Pod2

如何做到集群资源合理利用? - 优先级抢占过程

发生在调度失败

  1. Pod2先进行调度,调度成功后分配至Node1上运行
  2. 之后Pod1再进行调度,由于Node1资源不足出现了调度失败,
  3. 此时进入抢占流程
  4. 在经过抢占算法计算后,选中了Pod2作为Pod1的让渡者
  5. 驱逐Node1上运行的Pod2, 并将Pod1调度至Node1