首页 > 其他分享 >3-4、Pod控制器-ReplicaSet

3-4、Pod控制器-ReplicaSet

时间:2022-11-14 23:56:10浏览次数:46  
标签:控制器 副本 ReplicaSet rs pod Pod

Pod控制器:
ReplicationController(简称RC,已经淘汰)
ReplicaSet
Deployment
DaemonSet
Job
Cronjob
StatefulSet

自主式POD:delete pod后不会被重新拉起的,不是由pod控制器控制和管理的pod

1、ReplicaSet:



简称RS,是pod控制器类型的一种实现,用于确保由其管控的pod对象副本数在任一时刻都能精确满足期望的数量。ReplicaSet控制器资源启动后会查找集群中匹配其标签选择器的pod资源对象,当前活动对象的数量与其期望的数量不吻合时,多则删除,少则通过pod模板创建以补足,等pod资源副本数量符合期望值后即进入下一轮和解循环。



RS的副本数量、标签选择器甚至是pod模板都可以随时按需进行修改,不过仅改动期望的副本数量会对现存的pod副本产生直接影响。修改标签选择器可能会使得现有的pod副本的标签变得不在匹配,此时rs控制器要做的不过是不再计入它们而已。另外,在创建完成后,rs也不再关注pod对象中的实际内容,因此pod模板的改动也只会对后来新建的pod副本产生影响。相比较于手动创建和管理pod资源来说,rs能够实现以下功能:



1、确保pod资源对象的数量反映期望值:rs需要确保由其控制运行的pod副本数量精确吻合配置中定义的期望值,否则就会自动补足所缺或终止所余。



2、确保pod监控运行:探测到由其管控的pod对象因其所在的工作节点故障而不可用时,自动请求由调度器于其他工作节点创建缺失的pod副本。



3、弹性伸缩:业务规模因各种原因经常存在明显波动,在波峰或波谷期间,可以通过rs控制器动态调整相关pod资源对象数量。此外,在必要时还可以通过hpa(HroizontalPodAutoscaler)控制器实现pod资源规模的自动伸缩。
二、创建RS



类似于pod资源,创建rs控制器对象同样可以使用yaml或json格式的清单文件定义其配置,而后使用相关的创建命令来完成资源创建。



replicas:期望的pod对象副本数



selector:当前控制器匹配pod对象副本的标签选择器,支持matchLabels和matchExpressions两种匹配机制。



template:用于补足pod副本数量时使用的pod模板资源。



minReadySeconds:新建的pod对象,在启动后的多长时间内如果其容器未发生崩溃等异常情况即被视为就绪;默认0s,表示一旦就绪性探测成功,即被视作可用。
四、更新rs控制器



rs控制器的核心组成部分是标签选择器、副本数量及pod模板,但更新操作一般是围绕raplicas和template两个字段值进行的,改动pod模板的定义对已经创建完成的活动对象无效,但在用户逐个关闭其旧版本的pod资源后就能以新代旧,实现控制器下应用版本的滚动升级。另外,修改副本数量也就意味着应用规模的扩展或收缩。

关于RC/RS的一些特性和作用:
大部分情况下,我们可以通过定义一个RC实现的Pod的创建和副本数量的控制
RC中包含一个完整的Pod定义模块(不包含apiversion和kind)
RC是通过label selector机制来实现对Pod副本的控制的
通过改变RC里面的Pod副本数量,可以实现Pod的扩缩容功能
通过改变RC里面的Pod模板中镜像版本,可以实现Pod的滚动升级功能(但是不支持一键回滚,需要用相同的方法去修改镜像地址)


五、删除rs控制器资源



使用kubectl delete命令删除rs对象时默认会一并删除其管控的各pod对象。又是,考虑到这些pod资源未必由其创建,或者即使由其创建却也并非其自身的组成部分。故而使用“--cascade=false”选项,取消级联删除相关的pod对象。尽管rs控制器功能强大,但在实践中,它却并非时用户直接使用的控制器,而是deployment。
Kubernetes官方强烈建议避免直接使用ReplicaSet,而应该通过Deployment来创建RS和Pod。

ReplicaSet
vi pod-replicaset-demo.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: myapp
  namespace: default
spec:
  replicas: 2
  selector:
      matchLabels:
          app: myapp
          release: canary
  template:
      metadata:
          name: myapp-pod
          labels: 
              app: myapp
              release: canary
              environment: test
      spec:
          containers:
          - name: myapp-container
            image: ikubernetes/myapp:v1
            ports:
            - name: http
              containerPort: 80



apiVersion: apps/v1
kind: ReplicaSet
metadatsa:
  name: frontend
  labels:
    app: guestbook
    tier: frontend
spec:
  # this replicas value is default
  # modify it according to your case
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
    matchExpressions:
      - {key: tier, operator: In, values: [frontend]}
  template:
    metadata:
      labels:
        app: guestbook
        tier: frontend
    spec:
      containers:
      - name: php-redis
        image: gcr.io/google_samples/gb-frontend:v3
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        env:
        - name: GET_HOSTS_FROM
          value: dns
          # If your cluster config does not include a dns service, then to
          # instead access environment variables to find service host
          # info, comment out the 'value: dns' line above, and uncomment the
          # line below.
          # value: env
        ports:
        - containerPort: 80

 

标签:控制器,副本,ReplicaSet,rs,pod,Pod
From: https://www.cnblogs.com/skyzy/p/16890996.html

相关文章

  • 3-5、Pod控制器-StatefulSet
    StatefulSet有状态的集合,管理所有有状态的服务,比如MySQL、MongoDB集群等。StatefulSet:是一种给Pod提供唯一标志的控制器,它可以保证部署和扩展的顺序。Pod一致性:包含......
  • 1-4 pod生命周期
    1pod生命周期pod的创建过程用户通过kubectl或其他api客户端提交podspec给apiserverapiserver尝试着将pod对象的相关信息存入etcd中,待写入操作执行完成,apiserver即......
  • 实验6:开源控制器实践——RYU
    搭建下图所示SDN拓扑,协议使用OpenFlow1.0,并连接Ryu控制器,通过Ryu的图形界面查看网络拓扑。阅读Ryu文档的TheFirstApplication一节,运行当中的L2Switch,h1pingh2或h3,......
  • 实验4:开源控制器实践——OpenDaylight + 实验2:Open vSwitch虚拟交换机实践
    实验4:开源控制器实践——OpenDaylight1.基础要求1)扑生成并连接控制器的结果2)启动ODL3)打开Postman接口调试工具4)DELETEURL:http://127.0.0.1:8181/restconf/conf......
  • Pod详解之Pod生命周期
    Pod生命周期我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期,它主要包含下面的过程:-pod创建过程-运行初始化容器(initcontainer)过程-运行主容器(mainc......
  • 实验6:开源控制器实践——RYU
     一、实验目的能够独立部署RYU控制器;能够理解RYU控制器实现软件定义的集线器原理;能够理解RYU控制器实现软件定义的交换机原理。二、实验环境Ubuntu20.04Desktop......
  • 实验5:开源控制器实践——POX
     一、实验目的能够理解POX控制器的工作原理;通过验证POX的forwarding.hub和forwarding.l2_learning模块,初步掌握POX控制器的使用方法;能够运用POX控制器编写自定义......
  • 第五章 k8s Pod水平自动缩放
    官网​​https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale/​​原理基本原理:HPA通过监控分析控制器控制的所有Pod的负载变化情况来确......
  • 【ASP.NET Core】MVC控制器的各种自定义:应用程序约定的接口与模型
    从本篇起,老周会连发N篇水文,总结一下在MVC项目中控制器的各种自定义配置。本文内容相对轻松,重点讨论一下MVC项目中的各种约定接口。毕竟你要对控制器做各种自定义时,多......
  • 实验6:开源控制器实践——RYU
    (一)基本要求1.搭建下图所示SDN拓扑,协议使用OpenFlow1.0,并连接Ryu控制器。 a.建立拓扑sudomn--topo=single,3--mac--controller=remote,ip=127.0.0.1,port=8080......