介绍

关于k8s的kube-scheduler和kube-controller-manager高可用部分,它们使用的选举机制和常用的基于中间件的方式不太一样,在k8s中是基于k8s资源来维护分布式锁。正常的情况下kube-scheduler和kube-controller-manager只有一个副本是处于正常的业务逻辑状态,其他的在一直获取锁,去竞争leader。如果因为某种原因现有的leader退出,或者获取锁失败,则会由其他副本竞争新的leader,并执行正常的业务逻辑。

主题

本文以kube-scheduler为例,逻辑分析不涉及kube-scheduler业务逻辑。 这里直接从scheduler的cobra Run开始

1
2
3
4
5
6
Run: func(cmd *cobra.Command, args []string) {
   if err := runCommand(cmd, args, opts); err != nil {
      fmt.Fprintf(os.Stderr, "%v\n", err)
      os.Exit(1)
   }
},

未完待续…