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

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

来个简单例子:

 apiVersion: v1
kind: ReplicationController //ReplicationController类型
metadata:
name: nginx //pod名字
spec:
replicas: 2 //2个副本
selector:
app: nginx //通过这个标签找到生成的pod
template: //定义pod模板,在这里不需要定义pod名字,就算定义创建的时候也不会采用这个名字而是.metadata.generateName+5位随机数。
metadata:
labels: //定义标签
app: nginx //key:v 这里必须和selector中定义的KV一样
spec:
containers: //rc 的容器重启策略必须是Always(总是重启),这样才能保证容器的副本数正确
- image: nginx
name: nginx
ports:
- 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先定义一个模板,然后创建

 apiVersion: v1
kind: PodTemplate
metadata:
name: my-nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
ports:
- containerPort: 80

创建后并不会把pod拉起来

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

查看模板池

2定义rc

 apiVersion: v1
kind: ReplicationController
metadata:
name: my-nginx
spec:
replicas: 2
templateRef:
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

Replication Controller的更多相关文章

  1. kubernetes进阶之五:Replication Controller&Replica Sets&Deployments

    一:Replication Controller RC是kubernetes的核心概念之一.它定义了一个期望的场景即声明某种Pod的副本数量在任意时候都要符合某个预期值. 它由以下几个部分组成: 1. ...

  2. kubernetes 1.3管中窥豹- RS(Replica Sets):the next-generation Replication Controller

    前言 kubernates 1.3出了几个新的概念,其中包括deployments,Replica Sets,并且官网称之为是the next-generation Replication Contr ...

  3. Replication Controller 和 Replica Set

    使用Replication Controller . Replica Set管理Pod Replication Controller (RC) 简写为RC,可以使用rc作为kubectl工具的快速管理 ...

  4. Replication Controller、Replica Set

    假如我们现在有一个Pod正在提供线上的服务,我们来想想一下我们可能会遇到的一些场景: 某次运营活动非常成功,网站访问量突然暴增 运行当前Pod的节点发生故障了,Pod不能正常提供服务了 第一种情况,可 ...

  5. kubernetes concepts -- Replication Controller

    Edit This Page ReplicationController NOTE: A Deployment that configures a ReplicaSet is now the reco ...

  6. kubernets之Replication Controller

    一  Replication Controller的介绍      pod可能会由于各种原因消失和多出来,例如node节点去除集群或者人为的手工创建,所以为了方便和管理pod的数量,k8s里面 的另外 ...

  7. kubernetes in action - Replication Controller

    理解这个问题,就是pods在Kubernetes中怎么进行failover 在Kubernetes的work node上有kubelet,会负责监控该work node上的pods,如果有contai ...

  8. kubernetes的Controller Manager

    1. Controller Manager简介 Controller Manager作为集群内部的管理控制中心,负责集群内的Node.Pod副本.服务端点(Endpoint).命名空间(Namespa ...

  9. Kubernetes Controller Manager

    Controller Manager 作为集群内部的管理控制中心,负责集群内的Node.Pod副本.Service Endpoint.NameSpace.ServiceAccount.Resource ...

随机推荐

  1. 字符加密 cipher

    评测传送门 Description: Valentino 函数的定义: 对于一个由数字和小写字母组成的字符串 S,两个整数 K,M,将 S 视为一个 P 进制数,定义: Valentino(S, K, ...

  2. Hive笔记之导出查询结果

    一.导出到本地 导出查询结果到本地: INSERT OVERWRITE LOCAL DIRECTORY "/tmp/hive-result/t_visit_video" SELEC ...

  3. 29、HashSet简介

    Set的特点 Set里面存储的元素不能重复,没有索引,存取顺序不一致. package com.monkey1024.set; import java.util.HashSet; /** * Set的 ...

  4. GreenTrend

    ExpertforSQLServer(4.7.2)和ZhuanCloud(1.0.0)工具收集内容(在个人笔记本上测试) --SZC_Info.txt :: SQL专家云 v1. :: 开始收集 :: ...

  5. 配置多个ssh-key

    搞了三天没搞出来,还在男朋友面前哭了一场,真心觉得我只该吃屎,我好没用.哎.. 首先在上一篇记录了如何生成ssh-key,并使本地可以通过ssh的方式克隆和推送项目.但如果你有个github账号,有个 ...

  6. [转]C++ 取代switch的三种方法

    1.常规switch enum EnumType { enumOne, enumTwo, enumThree }; void showMessage(int type) { switch(type) ...

  7. Libheap:一款用于分析Glibc堆结构的GDB调试工具

    Libheap是一个用于在Linux平台上分析glibc堆结构的GDB调试脚本,使用Python语言编写.         安装 Glibc安装 尽管Libheap不要求glibc使用GDB调试支持和 ...

  8. C# 读取指定文件夹下所有文件

    #region 读取文件 //返回指定目录中的文件的名称(绝对路径) string[] files = System.IO.Directory.GetFiles(@"D:\Test" ...

  9. Team Foundation Server 2010服务器安装

    本安装指南使用Windows Server 2008企业版为基础,安装Windows Server 2008 SP2(必须),在此操作系统环境上进行TFS2010的安装与配置. 三.系统用户设置 1. ...

  10. bzoj 1083 繁忙的都市

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1083 题解: 在bzoj里能遇到如此如此水的题真是不容易…… 乍一看好像有点吓人,其实是一 ...