美文网首页Kubernets
kuberntes - pod调度

kuberntes - pod调度

作者: 条子在洗澡 | 来源:发表于2019-04-03 06:58 被阅读20次

影响调度的因素

待调度Pod列表
可用node列表
调度算法 :主机过滤 | 主机打分
调度策略

主机过滤

#考虑的因素.....
NoDiskConflict
PodFitsResources
PodFitsPorts
MatchNodeSelector
HostName
NoVolumeZoneConflict
PodToleratesNodeTaints
CheckNodeMemoryPressure
CheckNodeDiskPressure
MaxEBSVolumeCount
MaxGCEPDVolumeCount
MaxAzureDiskVolumeCount
MatchInterPodAffinity
GeneralPredicates
NodeVolumeNodeConflict
........


主机打分

不同模式的打分规则
LeastRequestedPriority
公式
score=cpu ( ( capacity - sum ( requested ) ) * 10 / capacity) + memory
( ( capacity - sum ( requested) ) * 10 / capacity )/2

BalanceResourceAllocation
公式
score = 10 -abs ( cpuFraction - memoryFraction ) * 10

CalculateSpreadPriority 公式
Score = 10 * ((maxCount -counts)/ (maxCount))

手动指定

#给节点设置标签 name=vlue
kubectl get nodes --show-labels
kubectl label node k8s-node1 disktype=hdd
kubectl label node k8s-node2 disktype=ssd
#删除标签 name-
kubectl label node node2 disktype-

#使用标签查看nodes
[root@k8s-master1 k8s_yml]# kubectl get nodes --show-labels
NAME          STATUS    ROLES     AGE       VERSION   LABELS
k8s-master1   Ready     master    3d        v1.11.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=k8s-master1,node-role.kubernetes.io/master=
k8s-node1     Ready     <none>    3d        v1.11.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=hdd,kubernetes.io/hostname=k8s-node1
k8s-node2     Ready     <none>    3d        v1.11.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/hostname=k8s-node2

[root@k8s-master1 k8s_yml]# kubectl get nodes --show-labels --selector=disktype=ssd
NAME        STATUS    ROLES     AGE       VERSION   LABELS
k8s-node2   Ready     <none>    3d        v1.11.1   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/hostname=k8s-node2

#定义pod的yaml (nodeSelector 参数)
vim nginx_pod_nodeselector.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    app: web2
spec:
  nodeSelector:
    disktype: ssd
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80
          protocol: TCP

#创建pod
[root@k8s-master1 k8s_yml]# kubectl apply -f nginx_pod_nodeselector.yaml
pod/static-web created
#查看pod信息,很明显在指定的k8s-node2上创建
[root@k8s-master1 k8s_yml]# kubectl get pods -o wide
NAME         READY     STATUS    RESTARTS   AGE       IP            NODE
static-web   1/1       Running   0          26s       10.244.2.23   k8s-node2

由于维护需要关停某个节点

#cordon 新创建的pod不会被调度到此node上已经调度上去的pod还在运行,需要删除pod让其重新在其他节点生成
#开始维护
kubectl cordon k8s-node1
#创建10个pod
kubectl run nginx --image=nginx --replicas=10
#解除维护
kubectl uncordon k8s-node1
#将nginx容器增加到20个
kubectl scale --replicas=20 deployment/nginx
#查看容器信息
kubectl get pods -o wide
#删除容器
kubectl delete deployments. nginx

#drain 标记后 此节点不再被调度pod,且此节点上已经运行的pod会被驱逐(evicted)到其他节点
#创建5个pod
kubectl run nginx --image=nginx --replicas=5
#查看容器信息
[root@k8s-master1 k8s_yml]# kubectl get pods -o wide
NAME                     READY     STATUS    RESTARTS   AGE       IP            NODE
nginx-64f497f8fd-2mn8h   1/1       Running   0          7s        10.244.1.23   k8s-node1
nginx-64f497f8fd-5gp5h   1/1       Running   0          7s        10.244.2.35   k8s-node2
nginx-64f497f8fd-6p6hf   1/1       Running   0          7s        10.244.1.25   k8s-node2
nginx-64f497f8fd-847nd   1/1       Running   0          7s        10.244.1.24   k8s-node1
nginx-64f497f8fd-dqdnr   1/1       Running   0          7s        10.244.2.34   k8s-node2

#开始维护
kubectl drain k8s-node1 --ignore-daemonsets
#查看容器信息
[root@k8s-master1 k8s_yml]# kubectl get pods -o wide
NAME                     READY     STATUS    RESTARTS   AGE       IP            NODE
nginx-64f497f8fd-2png4   1/1       Running   0          16s       10.244.2.37   k8s-node2
nginx-64f497f8fd-5gp5h   1/1       Running   0          33s       10.244.2.35   k8s-node2
nginx-64f497f8fd-dqdnr   1/1       Running   0          33s       10.244.2.34   k8s-node2
nginx-64f497f8fd-nbv77   1/1       Running   0          16s       10.244.2.39   k8s-node2
nginx-64f497f8fd-wghff   1/1       Running   0          16s       10.244.2.38   k8s-node2

#解除维护
kubectl uncordon k8s-node1
#查看容器信息
kubectl get pods -o wide


#taint 只有标签为keyxx=valuexx的pod才能调度到此node,否则不能
#查看taint
kubectl describe nodes k8s-node1 | grep -A1 Tain
#设置taint
kubectl taint nodes k8s-node1 keyxx=valuexx:NoSchedule
#解除taint
kubectl taint nodes k8s-node1 keyxx:NoSchedule-


vim nginx_pod_taint.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  restartPolicy: OnFailure
  tolerations: 
  - key: "keyxx"
    operator: "Equal"
    value: "valuexx"
    effect: "NoSchedule"
  containers: 
  - name: myapp-container
    image: nginx




相关文章

  • kuberntes - pod调度

    影响调度的因素 待调度Pod列表可用node列表调度算法 :主机过滤 | 主机打分调度策略 主机过滤 主机打分 手...

  • 关于kubernates的Pod调度策略

    Pod调度方式有,自动调度、定向调度、Node亲和性调度、Pod亲和性和互斥性调度 自动调度:Deployment...

  • K8s Scheduler(4)

    scheduler故名思维负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上。 调度流程 给pod做调度...

  • 容器云基础系列 01 pod

    pod是容器云调度的基础单位也就是最小单位,在容器集群中,容器是以pod为单位进行调度的。 pod是什么? pod...

  • K8S-污点与污点容忍

    Taints(污点):避免Pod调度到特定的Node上Tolerations(污点容忍): 允许Pod调度到持有T...

  • pod调度

    kube-scheduler 是 Kubernetes 集群的默认调度器; 在做调度决定时需要考虑的因素包括: 单...

  • 20.kubernetes笔记 Pod资源调度(三)污点与容忍度

    目录概述污点和容忍度Pod调度顺序示例1: 把Pod调度到master 对master:NoSchedule标识容...

  • Kubernetes中pod绑定node节点

    固定节点nodeName和nodeSelector调度 一、Kubernetes Pod调度说明 Schedule...

  • pod学习3

    node 节点选择器 我们在创建 pod 资源的时候,pod 会根据 schduler 进行调度,那么默认会调度到...

  • Pod调度(指定节点、污点、亲和性)

    创建一个Pod的工作流程 相关概念 工作流程图 Pod中影响调度的主要属性 资源调度依据 调度策略 资源限制对Po...

网友评论

    本文标题:kuberntes - pod调度

    本文链接:https://www.haomeiwen.com/subject/jxvobqtx.html