helios741 / myblog

觉得好请点小星星,欢迎有问题交流(issue/email)
109 stars 21 forks source link

Kubernetes中控制器模式 #53

Closed helios741 closed 5 years ago

helios741 commented 5 years ago

控制循环

kubernetes/pkg/controller/ 下面的都是控制器,这个下面的都是遵循 kube-controller-manager的。

他们都遵循统一的编排模式,即:控制循环,下面的伪代码来解释一下:


for {
    实际状态 := 获取集群中对象 X 的实际状态(Actual State)
    期望状态 := 获取集群中对象 X 的期望状态(Desired State)
    if 实际状态 == 期望状态{
        什么都不做
    } else {
        执行编排动作,将实际状态调整为期望状态
    }
}

实际状态的来源可能是:kubelet通过心跳得到容器或节点的状态监控系统保存的应用监控数据控制器主动收集

Deployment控制器模型的实现举个例子:

  1. Deployment 控制器从 Etcd 中获取到所有携带了“app: nginx”标签的 Pod,然后统计它们 的数量,这就是实际状态;
  2. Deployment 对象的 Replicas 字段的值就是期望状态;
  3. Deployment 控制器将两个状态做比较,然后根据比较结果,确定是创建 Pod,还是删除已有 的 Pod

image

水平伸缩和滚动升级

Deployment和replicaset的关系 image