zoukankan      html  css  js  c++  java
  • 编排其实很简单:“谈谈控制器模型”

    编排其实很简单:“谈谈控制器模型”

    img

    定义一个Deployment的例子

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.16.1
            ports:
            - containerPort: 80
    

    这个Deployment的编排定义的很简单,保证了携带app=nginx标签的Pod的副本数永远等于2,这就意味着这个集群中,携带了app=nginx的标签大于2的时候就会又旧的Pod被删除,反之,就会有Pod被创建;

    Kubernetes中都遵循了一种通用的编排模式 ,叫做控制循环(control loop),Go语言代码来描述这个控制循环

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

    实际状态一般来源于Kubernets集群本身,比如Kubelet通过心跳汇报容器的状态和节点状态,这些都是实际状态;

    期望状态一般来源于用户提交的YAML文件,比如Deployment对象中的Replicas字段的值,都保存在ETCD当中;

    Deployment的控制器模型实现

    Deployment控制器从ETCD中获取携带了"app=nginx"标签的Pod,进行统计,这就是实际状态

    Deployment对象的Replicas字段的值就是期望状态;

    Deployment的控制器就要对这两个状态进行比较,决定是否创建或删除Pod;

    img

    Deployment这样的控制器,实际上就是由上半部分的控制器定义(包括期望状态)和下半部分的被控制对象的模板组成。

  • 相关阅读:
    邻接表
    分治
    当遇到error: stray '241' in program错误的解决方法
    cmd / msys2 添加到右菜单
    洛谷P1003 铺地毯
    【洛谷P3372】【模板】线段树 1
    【codevs1082】线段树练习 3
    【codevs1081】线段树练习 2
    【codevs1080】线段树练习1
    【洛谷P1731】生日蛋糕
  • 原文地址:https://www.cnblogs.com/Spider-Man-1/p/12751727.html
Copyright © 2011-2022 走看看