⒈简介

  最初,ReplicationController是Kubernetes用于复制和在异常时重新调度节点的唯一组件,后来Kubernetes又引入了一个名为ReplicaSet的类似资源。它是新一代的ReplicationController,并且最终将完全替换掉ReplicationController(ReplicationController最终将被弃用)。它们几乎完全相同,因此ReplicaSet与ReplicationController的替换过程中几乎不会碰到任何麻烦。
  通常不会直接创建它们,而是在创建更高层级的Deployment资源时自动创建它们。

⒉比较ReplicaSet 和ReplicationController

  ReplicaSet的行为与ReplicationController完全相同,但pod选择器的表达能力更强。ReplicationController的标签选择器只允许包含某个标签然后去匹配pod,而ReplicaSet的标签选择器还允许匹配缺少某个标签的pod,或包含特定标签名的pod而无论其值如何。
  另外,举个例子,单个ReplicationControler 无法将pod与标签env=production和env=deve1同时匹配。因为这两个标签拥有相同的LabelKey,它只能匹配带有env=deve1标签的pod或带有env=devel标签的pod。但是一个ReplicaSet可以匹配两组pod并将它们视为一个大组。
  ReplicationController无法仅基于标签名(LebelKey)的存在来匹配pod,而ReplicaSet则可以。例如,ReplicaSet可匹配所有LabelKey为env的标签的pod,无论这个标签的LabelValue的实际值是什么(可以理解为env=*)。

⒊定义(创建)ReplicaSet

  使用JSON或YAML创建k8s资源

apiVersion: apps/v1  #指定当前描述文件遵循apps/v1版本的KubernetesAPI,它不再属于v1,ReplicaSet不再是v1 API的一部分而属于apps/v1,需要确保在创建资源时指定正确的apiVersion。
kind: ReplicaSet #我们在描述一个ReplicaSet
metadata:
name: coreqi-manual #指定ReplicaSet的名称
spec:
replicas: #pod实例的目标数目
selector: #pod选择器决定了ReplicaSet的操作对象,和ReplicationController定义区别,在选择器中不必在selector属性中直接列出pod需要的标签,而是在selector.matchLabels下指定它们。这是ReplicaSet中定义标签选择器更简单(也更不具表达力)的方式
matchLabels: #这里使用了更简单的matchLabels选择器,这非常类似于ReplicationController的选择器
app: coreqi #当前ReplicaSet将确保符合标签选择器app=coreqi的pod实例始终是三个,当没有足够的pod时,将使用下面的pod模板创建新的pod
template: #创建新pod所使用的pod模板
metadata:
labels:
app: coreqi #模板中的pod标签显然必须和ReplicationController的标签选择器相匹配,否则控制器将无休止的创建新的pod实例。因为创建新的pod不会使实际的副本数量接近期望的副本数量。为了防止出现这种情况,Kubernetes API服务会校验ReplicaSet的定义不会接收错误的配置。
#不指定ReplicaSet的标签选择器也是一种选择,因为ReplicaSet会自动从模板中提取标签,而且描述文件也将更简短
spec:
containers:
- name: coreqi
image: fanqisoft/coreqi
ports:
- containerPort:

  创建此ReplicaSet后将会从当前所有的pod中匹配app=coreqi选择器,ReplicaSet将把符合选择器的pod归为自己的管辖范围,如果满足当前ReplicaSet要求的实例数量则不会触发创建任何新的pod。

apiVersion指定了两件事情:

  • API组(在这种情况下是apps)
  • 实际的API版本(v1)

  某些Kubernetes资源位于所谓的核心API组中,该组并不需要在apiVersion字段中指定API组仅仅只需指定实际的API版本即可,例如ReplicationController
  Kubermetes在后续的版本中引入其他资源,被分为几个API组。

  创建以上描述文件后使用kubectl命令创建ReplicaSet

kubectl create -f coreqi-manual.yaml

  可以使用kubectl get 和 kubectl describe来检查ReplicaSet

#rs是ReplicaSet的缩写
kubectl get rs
kubectl describe rs

⒋ 使用ReplicaSet更富表达力的标签选择器

ReplicaSet 相对于ReplicationController的主要改进是它更具表达力的标签选择器。在上面定义ReplicaSet示例中,用较简单的matchLabels选择器来确认ReplicaSet与ReplicationController没有区别。现在,我们用更强大的matchExpressions 属性来重写选择器。

apiVersion: apps/v1  #指定当前描述文件遵循apps/v1版本的KubernetesAPI,它不再属于v1,ReplicaSet不再是v1 API的一部分而属于apps/v1,需要确保在创建资源时指定正确的apiVersion。
kind: ReplicaSet #我们在描述一个ReplicaSet
metadata:
name: coreqi-manual #指定ReplicaSet的名称
spec:
replicas: #pod实例的目标数目
selector: #pod选择器决定了ReplicaSet的操作对象,和ReplicationController定义区别,在选择器中不必在selector属性中直接列出pod需要的标签
matchExpressions: #选择器表达式,每个表达式都必须包含一个key,一个operator(运算符),并且可能还有一个values列表(取决于运算符),如果指定多个表达式,之间为and的关系,即表达式之间都为true
- key: app #此选择器要求该pod包含名为"app"的标签
operator: In #运算符,有四个有效的运算符
#In:LabelValue的值必须和values列表中的一个值相匹配
#NotIn:LabelValue的值不与values列表中的值相匹配
#Exists:pod必须包含一个指定名称的LabelKey(值不重要)。使用此运算符,不应指定values字段。
#DoesNotExist:pod不得包含有指定名称的LabelKey。使用此运算符,不得指定values
values: #values列表(取决于运算符)
- coreqi #标签的值必须为"coreqi"
template: #创建新pod所使用的pod模板
metadata:
labels:
app: coreqi #模板中的pod标签显然必须和ReplicationController的标签选择器相匹配,否则控制器将无休止的创建新的pod实例。因为创建新的pod不会使实际的副本数量接近期望的副本数量。为了防止出现这种情况,Kubernetes API服务会校验ReplicaSet的定义不会接收错误的配置。
#不指定ReplicaSet的标签选择器也是一种选择,因为ReplicaSet会自动从模板中提取标签,而且描述文件也将更简短
spec:
containers:
- name: coreqi
image: fanqisoft/coreqi
ports:
- containerPort:

⒌删除ReplicaSet

  应始终使用ReplicaSet作为ReplicationController的替代。但仍可以在其他人的部署中找到 ReplicationController。

  使用以下命令删除ReplicaSet

kubectl delete re {reName} 

  删除ReplicaSet会删除所有的pod。这种情况下是需要列出pod来确认的。

Kubernetes组件-ReplicaSet的更多相关文章

  1. kubernetes组件

    kubernetes组件 @(马克飞象)[k8s] 组件 kubernetes除了必备的dns和网络组件外,官方推出大量的cluster-monitoring,dashboard,fluentd-el ...

  2. 构建Docker平台【第三篇】安装 kubernetes 组件

    第一步:准备 1. 安装包: kubeadm-1.6.0-0.alpha.0.2074.a092d8e0f95f52.x86_64.rpm kubernetes-cni-0.3.0.1-0.07a8a ...

  3. centos7下kubernetes(4.kubernetes组件)

    Kubenetes cluster 由master和node组成 Master是kubenetes的大脑.运行着以下进程:kube-apiserver.kube-scheduler.kube-cont ...

  4. Kubernetes组件与架构

    转载请标明出处: 文章首发于>https://www.fangzhipeng.com/kubernetes/2018/09/30/k8s-basic1/ 本文出自方志朋的博客 Kubernete ...

  5. Kubernetes【K8S】(一):Kubernetes组件

    什么是Kubernetes ​ Kubernetes 是一个可移植的.可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化.Kubernetes拥有一个庞大且快速增长的生态系统. ...

  6. 使用 C# 开发 Kubernetes 组件,获取集群资源信息

    写什么呢 前段时间使用 C# 写了个项目,使用 Kubernetes API Server,获取信息以及监控 Kubernetes 资源,然后结合 Neting 做 API 网关. 体验地址 http ...

  7. Kubernetes组件-DaemonSet

    ⒈简介 Replicationcontroller和ReplicaSet都用于在Kubermetes集群上部署运行特定数量的pod.但是,当某些情况下我们希望在集群中的每个节点上运行同一个指定的pod ...

  8. Kubernetes组件及网络基础

    在前面的部分了解了Pod的创建删除 ,查看信息等.那么我们怎么去管理Pod呢?我们可以通过 ReplicationController 去管理维护 Pod. Replication Controlle ...

  9. Kubernetes学习笔记之认识Kubernetes组件

    前言:笔记知识点来源于Kubernetes官方文档说明,链接:https://kubernetes.io/docs/concepts/overview/components/ ,本记录仅仅是学习笔记记 ...

随机推荐

  1. ZOJ 3182 HDU 2842递推

    ZOJ 3182 Nine Interlinks 题目大意:把一些带标号的环套到棍子上,标号为1的可以所以操作,标号i的根子在棍子上时,只有它标号比它小的换都不在棍子上,才能把标号为i+1的环,放在棍 ...

  2. 【poj2431】驾驶问题-贪心,优先队列

    Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 29360   Accepted: 8135 Descr ...

  3. 学密码学一定得学程序(SDUT 2463)

    Problem Description 曾经,ZYJ同学非常喜欢密码学.有一天,他发现了一个很长很长的字符串S1.他很好奇那代表着什么,于是神奇的WL给了他另一个字符串S2.但是很不幸的是,WL忘记跟 ...

  4. 使用setUncaughtExceptionHandler在线程外面捕获异常

    package com.dwz.concurrency.chapter11; /** * Thread的run方法是不能throw出异常的,只能在日志或者console中打印出来 */ public ...

  5. Java ExecutorService四种线程池及自定义ThreadPoolExecutor机制

    一.Java 线程池 Java通过Executors提供四种线程池,分别为:1.newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收 ...

  6. 第11组 Alpha事后诸葛亮

    第11组 Alpha事后诸葛亮   组长博客链接 https://www.cnblogs.com/xxylac/p/11924846.html 设想和目标 我们的软件要解决什么问题?是否定义得很清楚? ...

  7. RabbitMQ交换器的类型

    RabbitMQ常用的交换器类型有:fanout,direct,topic,headers fanout它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中. direct它会把消息路由到哪 ...

  8. python笔记2小数据池,深浅copy,文件操作及函数初级

    小数据池就是在内存中已经开辟了一些特定的数据,经一些变量名直接指向这个内存,多个变量间公用一个内存的数据. int: -5 ~ 256 范围之内 str: 满足一定得规则的字符串. 小数据池: 1,节 ...

  9. MyEclipse环境的项目改为在Eclipse中运行爬坑记【我】

      新检出一个web项目,同事都是运行在MyEclipse中的,我用Eclipse启动, 1.首先是许多jar包报错: 处理方法为 remove掉,然后 选 WEB-INF 下的所有 jar 重新添加 ...

  10. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_24-CMS前端页面查询开发-使用钩子方法实现立即查询

    进入页面默认就去查询数据 这要用到vue的钩子函数,每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听. 编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等. ...