pod 代表了 k8s 中的基本部署单元,但是在实际应用场景中,服务不可能是单个pod运行的,否则会出现“单点”。在 k8s 中对 pod 的托管部署,专门抽象成了单独的资源。其中包含了 ReplicationController 或 Deloyment ,由他们来管理实际的 pod。

  试想一下,当你创建未托管的 pod 的时候,会选择一个集群来运行 pod,在集群中选择节点来运行容器。如果节点中某些 pod 丢失,或者失败,这时候就需要自动重启他们,并且产生新的 pod 来替代他们,这些工作就是有 ReplicationController 的资源来进行托管的。

ReplicationController

  下面找了幅图来说明,ReplicationController 旨在创建和管理一个 pod 的多个副本(replica),这就是 ReplicationController 的由来。

 

  在 k8s 中,ReplicationController 的工作就是确保 pod 的数量始终和其标签选择器匹配,如果不匹配则需要适当的“调度”来满足。这里可以想象成 k8s 始终在循环的检查对应的 RepliactionController 资源状态,如果符合 yaml 文件的描述则跳过,如果不满足则进行调度调整。

  在创建 ReplicationController 中,声明 yaml 只需要三个主要的部分:

  • label seoector(标签选择器),用于确定 ReplicationController 作用域中有哪些 pod
  • replica count(副本个数),指定运行的 pod 数量
  • pod template(pod模板),用于创建 pod 副本
apiVersion: v1
kind: ReplicationController
metadata:
name: kubia // ReplicationController 的名字
spec:
replicas: 3
selector:
app: kubia // 确保标签选择器 app=kubia 的pod实例始终只有3个
template:
metadata:
name: kubia
labels:
app: kubia // 这里可以不指定,它会被自动配置,如果指定必须和上面的 selector一致
spec: // 创建新 pod 所用的 pod 模板
containers:
- name: kubia
image: luksa/kubia
ports:
- containerPort: 8080

  相关执行命令

# 创建 ReplicationController
$ kubectl create -f ./kubia-rc.yaml # 查看 rc
$ kubectl get rc # 查看详情
$ kubectl describe rc {ReplicationController名称} # 将pod移入或移出,只需要更改标签即可
$ kubectl label pod {pod名字} {标签名}={标签值} --overwrite ## 这里的标签修改后,与rc的不匹配则会导致 ReplicationController 重新拉起一个 pod,并且这个被修改的pod是完全独立的,并且会一直运行直到你手动删除它 # 修改 rc 模板
$ kubectl edit rc {ReplicationController名称} # 扩缩容
$ kubectl scale rc {ReplicationController名称} --replicas={副本数量} # 删除 ReplicationController
$ kubectl delete rc {ReplicationController名称}

ReplicaSet

  ReplicaSet 的功能其实和 ReplicationController 一模一样,但是不同的是 ReplicaSet 对于 pod 的选择器提供更多的语法来进行匹配。

  举个栗子,单纯 ReplicationController 无法将 pod 与标签 env=dev 和 env=prod 的进行同时匹配,但是 ReplicaSet 可以进行同时符合这连个标签的 pod 来进行管理。

  比较简单的选择器 selector.matchLabels

apiVersion: apps/v1beta2
kind: ReplicaSet
metadata:
name: kubia-rs
spec:
selector:
matchLabels:
app: kubia-rs
template:
....后面和ReplicationController一样

  更复杂的选择器 selector.matchExpressions

selector:
matchExpressions:
- key: app // 此选择器要求该 pod 包含名为"app"的标签,下面则是对 app 这个标签的筛选
operator: In
values:
- kubia-rs

选择器每个表达式必须包含一个 key,和一个 operator 运算符。其中运算符分为:

- In:Label 的值必须与其中一个指定的 values 匹配
- NotIn: Label 的值与任何指定的 values 不匹配
- Exists: pod 必须包含一个指定名称的标签
- DoesNotExist: pod 不得包含有指定名称的标签

在k8s中的控制器和部署服务-ReplicationController和ReplicaSet的更多相关文章

  1. K8S中如何跨namespace 访问服务?为什么ping不通ClusterIP?

    1.K8S中如何跨namespace 访问服务? 2.在Pod中为什么ping不通ClusterIP? 简述: Rancher2.0中的一个用户,在K8S环境中,创建两个namespace,对应用进行 ...

  2. k8s 中 Pod 的控制器

    k8s 中 Pod 的控制器 前言 Replication Controller ReplicaSet Deployment 更新 Deployment 回滚 deployment StatefulS ...

  3. k8s中的dns服务发现

    一.dns服务 1.解决的问题 为了通过服务的名字在集群内进行服务相互访问,需要创建一个dns服务 2.k8s中使用的虚拟dns服务是skydns 二.搭建 1.创建并应用skydns-rc.yaml ...

  4. Kubernetes K8S之资源控制器StatefulSets详解

    Kubernetes的资源控制器StatefulSet详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  5. Kubernetes K8S之资源控制器RC、RS、Deployment详解

    Kubernetes的资源控制器ReplicationController(RC).ReplicaSet(RS).Deployment(Deploy)详解与示例 主机配置规划 服务器名称(hostna ...

  6. Kubernetes K8S之资源控制器Daemonset详解

    Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ...

  7. Kubernetes K8S之资源控制器Job和CronJob详解

    Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  8. Docker & k8s 系列三:在k8s中部署单个服务实例

    本章将会讲解: pod的概念,以及如何向k8s中部署一个单体应用实例. 在上面的篇幅中,我们了解了docker,并制作.运行了docker镜像,然后将镜像发布至中央仓库了.然后又搭建了本机的k8s环境 ...

  9. Kubernetes之在k8s中部署Java应用

    部署好了k8s以后 部署参考https://www.cnblogs.com/minseo/p/12055731.html 怎么在k8s部署应用 项目迁移到k8s平台是怎样的流程 1,制作镜像 2,控制 ...

  10. 从harbor部署到在k8s中使用

    一.概述 harbor是什么呢?英文单词的意思是:港湾.港湾用来存放集装箱(货物的),而docker的由来正是借鉴了集装箱的原理,所以harbor是用于存放docker的镜像,作为镜像仓库使用.官方的 ...

随机推荐

  1. css过去及未来展望—分析css演进及排版布局的考量

    读初二的时候,学校有了计算机,也简单地介绍了下网页,不过那是的html 都是table,也没有去细看.到了高中,qq空间有个html模式,为了让文章好看点.也浅尝辄止地学了下css css简介 在HT ...

  2. 火山引擎ByteHouse:如何用OLAP引擎提升数字营销效果?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群   随着市场竞争的加剧,企业对数字营销投入的效果监测和优化需求日益增强,营销实时监控也成为企业提升运营效率的重要手 ...

  3. 微服务网关 —— SpringCloud Netflix Zuul

    概述 Spring Cloud Zuul 是 Spring Cloud Netflix 子项目的核心组件之一,可以作为微服务架构中的 API 网关使用,有以下用途: 鉴权:对于访问每个服务的请求进行鉴 ...

  4. 【快速阅读二】从OpenCv的代码中扣取泊松融合算子(Poisson Image Editing)并稍作优化

    泊松融合我自己写的第一版程序大概是2016年在某个小房间里折腾出来的,当时是用的迭代的方式,记得似乎效果不怎么样,没有达到论文的效果.前段时间又有网友问我有没有这方面的程序,我说Opencv已经有了, ...

  5. 我“采访”了 ChatGPT

    我"采访"了 ChatGPT 大家好,我是准备认真码字的**老章:. 最近ChatGPT火的爆表,看了很多相关文章,特别焦虑,唯恐自己的进步赶不上 AI 的发展. 还有就是我非常看 ...

  6. ITS实现可滚动表格

    一.ITS不支持TableControl 在ITS条码开发中,遇到需要滚动浏览表格的需求,但是在ITS中是不支持TableControl,并且已经验证在PDA中显示ALV行不通,因为ALV条目过多无法 ...

  7. HTML5 postMessage 跨域跨窗口传递消息

    父页面代码: <!DOCTYPE html> <html> <head> <title>选择位置demo</title> <meta ...

  8. SpringBoot 项目实战 | 瑞吉外卖 Day04

    该系列将记录一份完整的实战项目的完成过程,该篇属于第四天 案例来自B站黑马程序员Java项目实战<瑞吉外卖>,请结合课程资料阅读以下内容 该篇我们将完成以下内容: 文件上传下载 新增菜品 ...

  9. LocalDateTime、LocalDate、Date的相互转换

    1==LocalDateTime 转 LocalDate: 直接调用 toLocalDate() 方法: LocalDateTime localDateTime = LocalDateTime.now ...

  10. java垮平台的原理-垃圾回收-day1

    目录 1. 跨平台原理 2. 垃圾回收 3. DOS的几个基本命令 4. PATH环境变量的作用 5 java的安装 6. 第一个java程序 6. 另外两个环境变量CLASS_PATH 与JAVA_ ...