美文网首页
kubernetes(k8s)使用Replication Con

kubernetes(k8s)使用Replication Con

作者: 祁恩达 | 来源:发表于2019-07-08 17:57 被阅读0次

    Replication Controller(RC)

    Replication Controller简称RC,RC是Kubernetes系统中的核心概念之一,简单来说,RC可以保证在任意时间运行Pod的副本数量,能够保证Pod总是可用的。如果实际Pod数量比指定的多那就结束掉多余的,如果实际数量比指定的少就新启动一些Pod,当Pod失败、被删除或者挂掉后,RC都会去自动创建新的Pod来保证副本数量,所以即使只有一个Pod,我们也应该使用RC来管理我们的Pod。
    现在我们来使用RC来管理我们前面使用的Nginx的Pod,YAML文件如下:

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: rc-demo
      labels:
        name: rc
    spec:
      replicas: 3
      selector:                  #可选
        name: rc
      template:
        metadata:
         labels:
           name: rc
        spec:
         containers:
         - name: nginx-demo
           image: nginx
           ports:
           - containerPort: 80
    

    上面的YAML文件相对于我们之前的Pod的格式:
    kind:ReplicationController
    spec.replicas: 指定Pod副本数量,默认为1
    spec.selector: RC通过该属性来筛选要控制的Pod
    spec.template: 这里就是我们之前的Pod的定义的模块,但是不需要apiVersion和kind了
    spec.template.metadata.labels: 注意这里的Pod的labels要和spec.selector相同,这样RC就可以来控制当前这个Pod了。
    这个YAML文件中的意思就是定义了一个RC资源对象,它的名字叫rc-demo,保证一直会有3个Pod运行,Pod的镜像是nginx镜像。

    注意spec.selector和spec.template.metadata.labels这两个字段必须相同,否则会创建失败的,当然我们也可以不写spec.selector,这样就默认与Pod模板中的metadata.labels相同了。所以为了避免不必要的错误的话,不写为好。
    然后我们来创建上面的RC对象(保存为 rc-demo.yaml):

    $ kubectl create -f rc-demo.yaml
    

    查看RC:

    $ kubectl get rc
    

    查看具体信息:

    $ kubectl describe rc rc-demo
    

    然后我们通过RC来修改下Pod的副本数量为2:

    $ kubectl apply -f rc-demo.yaml
    

    或者

    $ kubectl edit rc rc-demo
    

    而且我们还可以用RC来进行滚动升级,比如我们将镜像地址更改为nginx:1.7.9:

    $ kubectl rolling-update rc-demo --image=nginx:1.7.9
    

    但是如果我们的Pod中多个容器的话,就需要通过修改YAML文件来进行修改了:

    $ kubectl rolling-update rc-demo -f rc-demo.yaml
    

    如果升级完成后出现了新的问题,想要一键回滚到上一个版本的话,使用RC只能用同样的方法把镜像地址替换成之前的,然后重新滚动升级。

    Replication Set(RS)

    Replication Set简称RS,随着Kubernetes的高速发展,官方已经推荐我们使用RS和Deployment来代替RC了,实际上RS和RC的功能基本一致,目前唯一的一个区别就是RC只支持基于等式的selector(env=dev或environment!=qa),但RS还支持基于集合的selector(version in (v1.0, v2.0)),这对复杂的运维管理就非常方便了。

    kubectl命令行工具中关于RC的大部分命令同样适用于我们的RS资源对象。不过我们也很少会去单独使用RS,它主要被Deployment这个更加高层的资源对象使用,除非用户需要自定义升级功能或根本不需要升级Pod,在一般情况下,我们推荐使用Deployment而不直接使用Replica Set。

    最后总结下关于RC/RS的一些特性和作用吧:

    大部分情况下,我们可以通过定义一个RC实现的Pod的创建和副本数量的控制
    RC中包含一个完整的Pod定义模块(不包含apiversion和kind)
    RC是通过label selector机制来实现对Pod副本的控制的
    通过改变RC里面的Pod副本数量,可以实现Pod的扩缩容功能
    通过改变RC里面的Pod模板中镜像版本,可以实现Pod的滚动升级功能(但是不支持一键回滚,需要用相同的方法去修改镜像地址)

    相关文章

      网友评论

          本文标题:kubernetes(k8s)使用Replication Con

          本文链接:https://www.haomeiwen.com/subject/vnmahctx.html