浅析kubernetes的控制器和标签

目录
  • 01 k8s中的常用控制器
    • RC控制器
    • Deployment控制器
    • Statefulset控制器
  • 02 Label(标签)的概念

01 k8s中的常用控制器

之前我们了解了Pod是k8s集群中调度的最小单元,Pod是由Pause容器+应用容器组成的。

在k8s中,经常会出现一种资源对象管理另一种资源对象的情况,我们把这类资源对象称之为"控制器"。

我们简单看看控制器的类型,以及他们的功能,其实每种控制器都有他们的特点,后续我们会逐一分析,现在只需要有个概念即可。

RC控制器

它定义了一个期望的场景,它声明某种Pod的副本数量任意时刻都符合某个特定的预期值。例如MySQL的一主两从结构,我们期望,任意时刻都有2个从库,如果不够了,就需要扩充一个从库。

它的定义中,需要下面3个关键参数:

1、预期的Pod数量

2、Pod的标签,也就是一个类型标识

3、创建新Pod的Pod模板

它的大概结构如下:

apiVersion:vl
kind: ReplicationController
metadata:
    name: rc-mysql-slave
spec :
    replicas: 2  # 期望值
    selector:    # 标签
      app: mysql
    template:    # 模板
      xxx:  xxx

对照上面的文字,可以看到RC的基本yaml文件模板。

RC一旦定义并提交到k8s的master,那么controller manager就会巡检当前存活的目标Pod,并确保当前存活的Pod等于期望的Pod,如果多了,则删除,如果少了,则创建。

Deployment控制器

它是k8s 1.2版本引入的新概念,这个控制器和RC控制器的相似程度达到了90%,它和RC的不同是它可以随时获取当前Pod的"部署进度"。它的yaml文件定义大概如下:

apiVersion: extensions / vlbetal
kind : Deployment
metadata:
    name: dep-mysql-slave
spec:
    replicas: 2
    selector:
       xxxx:xxxx
    template:
       xxxx:xxxx

有了Deployment之后,使用RC的场景几乎都可以使用Deployment来替代。

Statefulset控制器

这个控制器也是生成某些Pod的期望值,但是它与RC和Deployment的不同点在于,它生成的Pod是有状态的。

在RC和Deployment生成的Pod中,我们只需要生成期望值个Pod即可,类似1主2从架构中MySQL的2个从库一样。他们没有先后顺序、权重的概念。而Statefulset控制器控制的Pod,生成顺序或者权重存在一定的逻辑关系,例如MySQL主从架构中,需要先生成主节点,然后在生成从节点,这个时候,使用statefulset就比较合适。

常用的控制器类型还有一些,这些内容我们下次再详细分享,这里我们知道"控制器"的概念即可。

02 Label(标签)的概念

上一篇文章中,我们说了k8s中Pod的yaml文件中的几个关键字段,今天我们来看另外一个Pod的一个属性,就是Label。

Label的含义是标签,它的格式也是key-value格式的,它可以附加到k8s集群中的某个对象上,包括但不限于Pod,Node,RC等。资源对象和Label的绑定关系可以使一对一,也可以是多对一,不同的label可以对资源进行分组管理。

当我们给某个资源打上标签后,就可以使用标签选择器Label Selector来选择这个资源进行调度,如下:

apiVersion : vl
kind: Pod
metadata:
    name : myweb
    labels:
       app : mysql

上面的例子为我们定义一个Pod,它的标签是app=mysql。

然后我们定义一个"控制器",利用控制器中的标签选择器selector,让它选择这个app=mysql的这个Pod,并保持这个Pod在集群中有2个副本,方法如下:

apiVersion : vl
kind : ReplicationController
metadata:
    name: myweb
spec :
    replicas : 2
    selector:
        app : mysql
    template:
        xxxx

新版本的Selector还可以指定更为详细的筛选条件,它主要借助下面参数:

apiVersion : vl
kind : ReplicationController
metadata:
    name: myweb
spec :
    replicas : 1
    selector:
       matchLabels :
         app: myweb
       matchExpressions:
        - {key: aaa , perator: In , values: [mysql-slave]}
        - {key: bbb , operator : Notin , values: [mysql-master)}
    template:
        xxxx

一个参数是matchLabels,他后面可以跟多个key-value格式的label条件;

另外一个参数是matchExpression,它可以指定一个数组,并结合条件运算,上述例子中表示aaa参数在mysql-slave中,而bbb参数不在mysql-master中的那些Pod

如果这两个参数同时出现,则会自动取AND,以他们的交集作为最终的筛选条件去筛选Pod

可以看到,标签的使用,使得"控制器"选择被控制对象,更加灵活,更加方便了。

以上就是浅析kubernetes的控制器和标签的详细内容,更多关于kubernetes 控制器和标签的资料请关注我们其它相关文章!

(0)

相关推荐

  • 使用Kubernetes部署Springboot或Nginx的详细教程

    1 前言 经过<Maven一键部署Springboot到Docker仓库,为自动化做准备>,Springboot的Docker镜像已经准备好,也能在Docker上成功运行了,是时候放上Kubernetes跑一跑了.这非常简单,一个yaml文件即可. 2 一键部署Springboot 2.1 准备yaml文件 当准备好镜像文件后,要部署到Kubernetes就非常容易了,只需要一个yaml格式的文件即可,这个文件能描述你所需要的组件,如Deployment.Service.Ingress等.定义

  • 如何在kubernetes中创建Pod

    目录 如何创建Pod? kubectl工具 如何创建Pod? 在之前的文章中,我们介绍了容器和Pod的区别和关系.我们知道Pod是k8s调度的最小单位,而一个Pod中可以有多个容器,那么我们如何来定义一个我们自己的Pod呢? 在k8s中,我们通常使用编写配置文件的方式创建一个Pod,配置文件的格式通常采用yaml格式,(yaml格式如何表示list.key-value键值对,这些知识在前一篇文章中说过了),编写好yaml文件之后,通过下面的办法来启动一个Pod: kubectl create -

  • 云原生技术kubernetes(K8S)简介

    目录 01 kubernetes是什么? 02 kubernetes和Compost+Swarm之间的区别 03 一点总结 今天我们看看kubernetes技术的介绍,最近在极客时间上看张磊老师的深入kubernetes技术,讲的非常好,有兴趣的同学可以去收听一下,对于理解kubernetes技术非常有帮助,这里我会按照自己的进度,分享一下学习的笔记. 今天站的角度比较高,概念性质的东西会多一点. 01 kubernetes是什么? 曾经我认为这个问题很好回答,直到不断的去理解kubernete

  • Springboot整合Spring Cloud Kubernetes读取ConfigMap支持自动刷新配置的教程

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 之前介绍了Spring Cloud Config的用法,但对于Kubernetes应用,可能会需要读取ConfigMap的配置,我们看看Springboot是如何方便地读取ConfigMap和Secret. 2 整合Spring Cloud Kubenetes Spring Cloud Kubernetes提供了Spring Cloud应用与Kubernetes服

  • kubernetes YAML文件的使用

    目录 01 YAML文件介绍 YAML---key-value类型 YAML---list类型 02 K8S中Master.Node和Pod的关系 01 YAML文件介绍 K8S在启动Pod的时候,会使用yaml文件的方式来启动,今天我们来看看YAML文件最常用的格式. YAML的语法和JSON语法很像,都是通过key-value形式来组织的,它可以表示list.dict等常用数据类型,它的后缀一般使用".yml",它有如下几个特点: 1.大小写敏感 2.使用缩进表示递进关系 3.缩进

  • 云原生技术kubernetes调度单位pod的使用详解

    k8s中的最小调度单位---pod 之前的文章中,我们对k8s能够解决的问题做了简单介绍,简单来说,它解决的问题是容器的编排与调度,它的核心价值在于:运行在大规模集群的任务之间,实际上存在着各种各样的关系,这些关系的处理,才是任务编排和系统管理最困难的地方,k8s就是为了这个问题而生的. 这句话比较难理解,我们从已有的知识入手,抽丝剥茧,慢慢理解它.我们已经知道,容器的本质是一个进程,它包含三个部分: 如果说容器是云环境的一个进程,那么你可以将k8s理解成云环境中的一个操作系统. 在一个操作系统

  • kubernetes环境部署单节点redis数据库的方法

    kubernetes部署redis数据库(单节点) redis简介 Redis 是我们常用的非关系型数据库,在项目开发.测试.部署到生成环境时,经常需要部署一套 Redis 来对数据进行缓存.这里介绍下如何在 Kubernetes 环境中部署用于开发.测试的环境的 Redis 数据库,当然,部署的是单节点模式,并非用于生产环境的主从.哨兵或集群模式.单节点的 Redis 部署简单,且配置存活探针,能保证快速检测 Redis 是否可用,当不可用时快速进行重启. redis 参数配置 在使用 Kub

  • 详解kubernetes pod的编排和生命周期

    目录 K8S Master基本架构 Pod的编排思想 Pod对象的属性和容器的属性? Pod的生命周期 K8S Master基本架构 K8S的集群运行依赖Master节点和Node节点的通信,为了更好的理解第4部分的Pod生命周期,我们这里先给出K8S Master的简单架构图,后续的文章中,我们会分析Master.Node和Pod之间的关系. Master的架构图: 其中: API Server提供了HTTP Rest接口,它是k8s中的所有资源增删改查的唯一入口,也是集群控制的入口: Sch

  • 如何把Spring Cloud Data Flow部署在Kubernetes上

    1 前言 Spring Cloud Data Flow在本地跑得好好的,为什么要部署在Kubernetes上呢?主要是因为Kubernetes能提供更灵活的微服务管理:在集群上跑,会更安全稳定.更合理利用物理资源. Spring Cloud Data Flow入门简介请参考:Spring Cloud Data Flow初体验,以Local模式运行 2 部署Data Flow到Kubernetes 以简单为原则,我们依然是基于Batch任务,不部署与Stream相关的组件. 2.1 下载GitHu

  • 浅析kubernetes的控制器和标签

    目录 01 k8s中的常用控制器 RC控制器 Deployment控制器 Statefulset控制器 02 Label(标签)的概念 01 k8s中的常用控制器 之前我们了解了Pod是k8s集群中调度的最小单元,Pod是由Pause容器+应用容器组成的. 在k8s中,经常会出现一种资源对象管理另一种资源对象的情况,我们把这类资源对象称之为"控制器". 我们简单看看控制器的类型,以及他们的功能,其实每种控制器都有他们的特点,后续我们会逐一分析,现在只需要有个概念即可. RC控制器 它定

  • Kubernetes特别属性的标签Label的强大作用

    目录 前言 Label的匹配规则: 前言 Label:对k8s中各种资源进行分类.分组,添加一个具有特别属性的标签 Selector:通过一个过滤的语法进行查找到对应标签的资源 Label是k8s中一个比较重要的概念.一个Label的一个key=value的键值对,可以附加到各种资源上. 现总结后讲解 Label的匹配规则: name=nginx:这类是直接匹配 name!=nginx:匹配标签中没有name=nginx的资源 name in (A,B):匹配所有具有name=A和name=B标

  • 浅析Git版本控制器使用

    本篇内容通过GitHub仓库创建过程以及创建连接后的上传与下载,详细介绍了Git版本控制器使用情况,来看下. 首先介绍一下什么是Git:git是目前最流行的版本控制系统,属于分布式版本控制器. 使用Git前先要在GitHub创建代码仓库,或者获取你要应用的GitHub的链接地址. 创建GitHub仓库这里就不细说了,可以根据网页提示一步步操作. 1.初始化:如果是第一次使用Git,首先告诉Git你是谁 git config [--global] user.name "Your Name"

  • go语言K8S 的 informer机制浅析

    目录 正文 使用方法 创建Informer工厂 创建对象Informer结构体 注册事件方法 启动Informer 机制解析 Reflector Controller Processer & Listener Indexer 总结 正文 Kubernetes的控制器模式是其非常重要的一个设计模式,整个Kubernetes定义的资源对象以及其状态都保存在etcd数据库中,通过apiserver对其进行增删查改,而各种各样的控制器需要从apiserver及时获取这些对象,然后将其应用到实际中,即将这

  • 理解k8s控制器DaemonSet创建及使用场景

    目录 DaemonSet 简介 DaemonSet 使用场景 DaemonSet 创建 查看 DaemonSet 更新 DaemonSet 删除 DaemonSet 其它使用场景 容忍性 Toleration 使用 节点亲和性 nodeAffinity 使用 总结 DaemonSet 简介 DaemonSet 的主要作用,是在 Kubernetes 集群里,运行一个 Daemon Pod. DaemonSet 只管理 Pod 对象,然后通过 nodeAffinity 和 Toleration 这

  • 如何给k8s集群里的资源打标签

    目录 如何给k8s集群里的资源打标签 补充:k8s kubernetes给node节点添加标签和删除node节点标签 如何给k8s集群里的资源打标签 给节点添加角色: k8s集群,节点如果有多个角色,需要标记出来,可以给对应的节点打上标签,方便后续了解节点的功能 命令:kubectl label nodes 节点名字 node-role.kubernetes.io/你想要的roles(=/-) 最后括号里的加减号,减号就是删除roles,等号就是增加roles 更新标签,在打标签命令后面添加参数

  • thinkPHP2.1自定义标签库的导入方法详解

    本文详细讲述了thinkPHP2.1自定义标签库的导入方法.分享给大家供大家参考,具体如下: TP的手册似乎跟不上节奏, 对自定义标签只是寥寥几句, 摸索了N久, 终于将自定义的标签进行了导入. 心得如下: 1. 情况:  新建自定义的标签库类: @.Mylib.Tag.TagLibTest - 懂TP的应该知道这代表的路径 使用Examples下的Tag演示文件 <?php // +--------------------------------------------------------

  • 一步一步教你写带图片注释的淡入淡出插件(三)

    其实凭借着之前良好的代码结构,加入控制器很简单(^_^这也就是为什么我说刚开始的架构的代码结构很重要!) 先说一下加入控制器的思路: 根据轮播元素的个数为每一个元素添加一个对应的控制按钮,(这里我直接用a标签来做,考虑语义的话可以用ul或ol),考虑到书写样式的方便可以先create一个控制器父标签,然后依次把每个控制按钮append到控制器父标签,再把父标签append到我们的轮播模块中就ok了.然后再为对应的元素添加上对应的css样式即可 好了,说完思路,咱们动手开始,控制器的绘制应该在in

  • Swift4.1转场动画实现侧滑抽屉效果

    实现使用了Modal转场动画,原因是项目多由导航控制器和标签控制器作为基类,为了不影响导航控制器的代理,转场动画使用模态交互. 代码使用SnapKit进行布局,能够适应屏幕旋转.手势速率大于300或进度超过30%的时候直接完成动画,否则动画回滚取消,具体数值可以修改对应的常量.抽屉出现的时候,主控制有遮罩,对应关键字是mask. 实现文件只有两个 DrawerControl:控制抽屉出现,一行代码即可调用 Animator:负责动画实现,包括了交互式的代理事件和非交互式的代理事件 // // D

  • Thinkphp 框架扩展之行为扩展原理与实现方法分析

    本文实例讲述了Thinkphp 框架扩展之行为扩展原理与实现方法.分享给大家供大家参考,具体如下: 系统核心提供的标签位置包括下面几个(按照执行顺序排列): app_init 应用初始化标签位 path_info PATH_INFO检测标签位 app_begin 应用开始标签位 action_name 操作方法名标签位 action_begin 控制器开始标签位 view_begin 视图输出开始标签位 view_parse 视图解析标签位 template_filter 模板内容解析标签位 v

随机推荐