zoukankan      html  css  js  c++  java
  • Replication Controller

    RC保证在同一时间能够运行指定数量的Pod副本,保证Pod总是可用。如果实际Pod数量比指定的多就结束掉多余的,如果实际数量比指定的少就启动缺少的。

    当Pod失败、被删除或被终结时,RC会自动创建新的Pod来保证副本数量,所以即使只有一个Pod,也应该使用RC来进行管理。

    来个简单例子:

     1 apiVersion: v1
     2 kind: ReplicationController  //ReplicationController类型
     3 metadata:
     4   name: nginx               //pod名字
     5 spec:
     6   replicas: 2               //2个副本
     7   selector:                 
     8     app: nginx              //通过这个标签找到生成的pod
     9   template:                 //定义pod模板,在这里不需要定义pod名字,就算定义创建的时候也不会采用这个名字而是.metadata.generateName+5位随机数。
    10     metadata:
    11      labels:                //定义标签
    12       app: nginx            //key:v   这里必须和selector中定义的KV一样
    13     spec:
    14      containers:            //rc 的容器重启策略必须是Always(总是重启),这样才能保证容器的副本数正确
    15       - image: nginx
    16         name: nginx
    17         ports:  
    18         - containerPort: 80

    提示:

    K8S 通过template来生成pod,创建完后模板和pod就没有任何关系了,rc通过 labels来找对应的pod,控制副本

    查询rc

    [root@kubernetes-master pods]# kubectl get rc nginx
    NAME DESIRED CURRENT READY AGE
    nginx      2              2                2        1m

    查询pod容器

    [root@kubernetes-master pods]# kubectl get pod --selector app=nginx 

    NAME           READY       STATUS        RESTARTS          AGE
    nginx-2jhlv      1/1              Running              0                     2m
    nginx-hbtqj     1/1               Running              0                     2m

    同时查询rc和rc创建的pod
    [root@kubernetes-master pods]# kubectl get pod --selector app=nginx --label-columns app
    NAME           READY            STATUS           RESTARTS          AGE       APP
    nginx-2jhlv      1/1                  Running                 0                     2m       nginx
    nginx-hbtqj     1/1                  Running                  0                    2m        nginx

    删除pod会后会立刻在拉起一个pod

     删除rc后pod也被删除(--cascade=false只删除rc保留创建的pod)

    [root@kubernetes-master pods]# kubectl delete rc nginx
    replicationcontroller "nginx" deleted

    模板和RC可意分别定义

    1先定义一个模板,然后创建

     1 apiVersion: v1
     2 kind: PodTemplate
     3 metadata:
     4   name: my-nginx
     5 template:
     6     metadata:
     7      labels:
     8       app: nginx
     9     spec:
    10      containers:
    11       - image: nginx
    12         name: nginx
    13         ports:  
    14         - containerPort: 80

    创建后并不会把pod拉起来

    [root@kubernetes-master pods]# kubectl create -f template.yml
    podtemplate "my-nginx" created

    查看模板池

    2定义rc

    1 apiVersion: v1
    2 kind: ReplicationController
    3 metadata:
    4   name: my-nginx
    5 spec:
    6  replicas: 2
    7  templateRef:
    8     app: nginx        

    这个暂时有问题还无法通过RC拉起来templatekubectl create -f rc.yml 

    修改rc模式下的一个pod label

    [root@kubernetes-master pods]# kubectl label pod nginx-qqf16 app=debug --overwrite
    pod "nginx-qqf16" labeled

    当修改一个pod标签后就摆脱RC控制了,如果将标签在改回去那么将有一个POD被干掉,超过了RC最大副本数 

    将标签改回去

    弹性伸缩(手动):

    kubectl scale replicationcontroller 【pod-name】 --replicas=1

    自动伸缩:

    Kubernetes有一个HPA(Horizontal Pod Autoscaler)的东东,可以实现基于CPU使用率的Pod自动伸缩的功能。 HPA基于Master Node上的kube-controller-manager服务启动参数--horizontal-pod-autoscaler-sync-period定义的时长(默认为30秒),周期性的检测Pod的CPU使用率(需要事先安装heapster)。使用kubeadm初始化的集群,如果需要设置--horizontal-pod-autoscaler-sync-period可以在Master Node上的/etc/kubernetes/manifests/kube-controller-manager.json中修改。

    [root@kubernetes-master pods]# kubectl create -f nginx.yaml
    replicationcontroller "my-nginx" created

    cpu超过%80就会拉起一个pod,最大5个pod,当cpu使用率小于%80 pod就会缩小
    [root@kubernetes-master pods]# kubectl autoscale rc my-nginx --min=1 --max=5 --cpu-percent=80   
    replicationcontroller "my-nginx" autoscaled

  • 相关阅读:
    Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】
    Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】
    Servlet第四篇【request对象常用方法、应用】
    Servlet第三篇【request和response简介、response的常见应用】
    Tomcat就是这么简单
    JProfiler远程监控Linux上Tomcat的安装过程细讲(步骤非常详细!!!)
    FileChannel类的理解和使用
    Lifetime-Based Memory Management for Distributed Data Processing Systems
    Spark的核心RDD(Resilient Distributed Datasets弹性分布式数据集)
    Hadoop与Spark之间的比较
  • 原文地址:https://www.cnblogs.com/menkeyi/p/7214800.html
Copyright © 2011-2022 走看看