zoukankan      html  css  js  c++  java
  • Kubernetes & Replication Controller

    Kubernetes & Replication Controller

    RC是Kubernetes系统中的核心概念之一,简单来说,它其实定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值,所以RC的定义包括如下几个部分。

    • ◎ Pod期待的副本数量。
    • ◎ 用于筛选目标Pod的Label Selector。
    • ◎ 当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模板(template)。

    如下所示:

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: myweb
    spec:
      replicas: 5
      selector:
        app: myweb
      template:
        metadata:
          labels:
            app: myweb
        spec:
          containers:
          - name: myweb
            image: kubeguide/tomcat-app:v1
            ports:
            - containerPort: 8080
            env:
            - name: MYSQL_SERVICE_HOST
              value: 'mysql'
            - name: MYSQL_SERVICE_PORT
              value: '3306'
    

    在我们定义了一个RC并将其提交到Kubernetes集群中后,Master上的Controller Manager组件就得到通知,定期巡检系统中当前存活的目标Pod,并确保目标Pod实例的数量刚好等于此RC的期望值,如果有过多的Pod副本在运行,系统就会停掉一些Pod,否则系统会再自动创建一些Pod。

    可以说,通过RC,Kubernetes实现了用户应用集群的高可用性,并且大大减少了系统管理员在传统IT环境中需要完成的许多手工运维工作(如主机监控脚本、应用监控脚本、故障恢复脚本等)。

    此外,在运行时,我们可以通过修改RC的副本数量,来实现Pod的动态缩放(Scaling)

    # 查看rc数量
    roverliang@roverliangdeMac-mini ~ % kubectl get rc
    NAME    DESIRED   CURRENT   READY   AGE
    mysql   1         1         1       5h56m
    myweb   5         5         5       5h37m
    
    #调整Rc数量
    roverliang@roverliangdeMac-mini ~ % kubectl scale rc myweb --replicas=3
    replicationcontroller/myweb scaled
    
    #查看RC数量
    roverliang@roverliangdeMac-mini ~ % kubectl get rc
    NAME    DESIRED   CURRENT   READY   AGE
    mysql   1         1         1       5h56m
    myweb   3         3         3       5h37m
    

    需要注意的是,删除RC并不会影响通过该RC已创建好的Pod。为了删除所有Pod,可以设置replicas的值为0,然后更新该RC。另外,kubectl提供了stopdelete命令来一次性删除RC和RC控制的全部Pod。

    应用升级时,通常会使用一个新的容器镜像版本替代旧版本。我们希望系统平滑升级,比如在当前系统中有10个对应的旧版本的Pod,则最佳的系统升级方式是旧版本的Pod每停止一个,就同时创建一个新版本的Pod,在整个升级过程中此消彼长,而运行中的Pod数量始终是10个,几分钟以后,当所有的Pod都已经是新版本时,系统升级完成。通过RC机制Kubernetes很容易就实现了这种高级实用的特性,被称为“滚动升级”(Rolling Update)。

    总结一下RC(Replica Set)的一些特性与作用。

    • 在大多数情况下,我们通过定义一个RC实现Pod的创建及副本数量的自动控制。

    • RC通过Label Selector机制实现对Pod副本的自动控制。

    • 通过改变RC里的Pod副本数量,可以实现Pod的扩容或缩容。

    • 通过改变RC里Pod模板中的镜像版本,可以实现Pod的滚动升级。

  • 相关阅读:
    CompoundButton.OnCheckedChangeListener与RadioGroup.OnCheckedChangeListener冲突
    C# String.Format格式化json字符串中包含"{" "}"报错问题
    在IHttpHandler中获取session
    你真的会玩SQL吗?删除重复数据且只保留一条
    activity结束之后刷新之前的activity的内容
    jQuery打造智能提示插件二(可编辑下拉框)
    byte数组转float 以及byte转其他类型时为什么要&0xff
    为什么byte的取值范围是-128到127
    MySQL修改表、字段、库的字符集及字符集说明
    MySQL分布式jdbc连接
  • 原文地址:https://www.cnblogs.com/roverliang/p/13434964.html
Copyright © 2011-2022 走看看