ZWEI

Time flies.

Kubernetes中的亲和性

现实中应用的运行对于kubernetes在亲和性上提出了一些要求,可以归类到以下几个方面:

1.Pod固定调度到某些节点之上
2.Pod不会调度到某些节点之上
3.Pod的多副本调度到相同的节点之上
4.Pod的多副本调度到不同的节点之上

阅读全文 »

kube-sheduler 启动流程

作用简介

kube-scheduler是k8s中的调度模块,负责调度Pod,pod是k8s最基本的运行单元。再我们剖析代码之前,可以猜测一下k8s是如何工作的。kube-scheduler需要对未被调度的Pod进行Watch,同时也需要对node进行watch,因为pod需要绑定到具体的Node上,当kube-scheduler监测到未被调度的pod,它会取出这个pod,然后依照内部设定的调度算法,选择合适的node,然后通过apiserver写回到etcd,kube-scheduler的工作也就结束了。实际kube-scheduler的代码就是这样工作的。

阅读全文 »

默认调度规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 默认过滤规则14个
NoVolumeZoneConflictPred
MaxEBSVolumeCountPred
MaxGCEPDVolumeCountPred
MaxAzureDiskVolumeCountPred
MaxCSIVolumeCountPred
MatchInterPodAffinityPred
NoDiskConflictPred
GeneralPred
CheckNodeMemoryPressurePred
CheckNodeDiskPressurePred
CheckNodePIDPressurePred
CheckNodeConditionPred
PodToleratesNodeTaintsPred
CheckVolumeBindingPred

// 过滤规则
factory.RegisterFitPredicate("PodFitsPorts", predicates.PodFitsHostPorts)//这个只是为了兼容旧版本,所以仍旧保留,较新的版本已经用PodFitsHostPorts这个名字取代了PodFitsPorts,也就是下面的一个预选算法
factory.RegisterFitPredicate(predicates.PodFitsHostPortsPred, predicates.PodFitsHostPorts)
factory.RegisterFitPredicate(predicates.PodFitsResourcesPred, predicates.PodFitsResources)
factory.RegisterFitPredicate(predicates.HostNamePred, predicates.PodFitsHost)
factory.RegisterFitPredicate(predicates.MatchNodeSelectorPred, predicates.PodMatchNodeSelector)
阅读全文 »

Pod 配置服务质量等级

Pod 可以配置特定的服务质量(QoS)等级。Kubernetes 使用 QoS 等级来确定何时调度和终结 Pod 。

QoS 等级

当 Kubernetes 创建一个 Pod 时,它就会给这个 Pod 分配一个 QoS 等级:

  • Guaranteed
  • Burstable
  • BestEffort
阅读全文 »

kube-sheduler leader 选举代码分析

所使用的包clinet-go 模块中的tools/leaderelection 包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// If leader election is enabled, run via LeaderElector until done and exit.
if c.LeaderElection != nil {
// 设置callbacks 方法started/stopped
c.LeaderElection.Callbacks = leaderelection.LeaderCallbacks{
OnStartedLeading: run,
OnStoppedLeading: func() {
utilruntime.HandleError(fmt.Errorf("lost master"))
},
}

leaderElector, err := leaderelection.NewLeaderElector(*c.LeaderElection)
if err != nil {
return fmt.Errorf("couldn't create leader elector: %v", err)
}

// 启动选举方法
leaderElector.Run()

return fmt.Errorf("lost lease")
}
阅读全文 »

k8s 集群网络方案介绍

flanneld 功能介绍

背景介绍

  • Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。
阅读全文 »
0%