当前位置:   article > 正文

k8s-replicaset控制器_k8s的replicas

k8s的replicas

前面我们一起学习了pod的原理和一些基本使用,但是在实际使用的时候并不会直接使用pod,而是会使用各种控制器来满足我们的需求,kubernetes中运行了一系列控制器来确保集群的当前转台与期望状态保持一致,他们就是kubernetes的大脑,例如,replicaset控制器负责维护集群汇总运行的pod数量,node控制器负责监控节点的状态,并在节点出现故障时及时作出相应,总而言之,在kubernetes中,每个控制器只负责某种类型的特定资源。

控制器 kubernetes控制器会监听资源的 创建/更新/删除事件,并出发reconcile函数作为响应, 调整过程称为reconcile loop 调谐循环,或者sync loop 同步循环,reconcile是一个使用资源对象的命名空间和资源对象名称来调用的函数,使得资源对象的实际状态与资源清单中定义的状态保持一致,调用完成后,reconcile会将资源对象的状态更新为当前实际状态,就是kubernetes项目中的一个通用编排模式,控制循环control  loop 

repliaSet

RS 的主要作用就是维持一组pod副本的运行,保证一定数量的pod的集群中正常运行,replicaset控制器会将持续监听,控制这些pod的运行状态,pod发送故障数量减少或者增加时会触发调用过程,始终保持一定副本数量

  1. apiVersion: app/v1
  2. kind: ReplicaSet
  3. metadata:
  4. name: nginx-rs
  5. namespace: dafault
  6. spec:
  7. replicas:3
  8. selector:
  9. matchLabels:
  10. app: nginx
  11. template:
  12. metadata:
  13. labels:
  14. app: nginx
  15. spec:
  16. containers:
  17. - name: nginx
  18. images: nginx
  19. ports:
  20. - containerPort: 80

上面的yaml文件结构和我们之前定义的pod看上去没太大两样,有常见的apiVersion ,kind,metadata,在spec下面描述的replicaSet的基本信息,其中包含三个重要内容

replicas 表示期望的pod的基本数量

selector :Label Selector用来匹配要控制的pod标签,需要和下面的pod模板中的标签一致

template: pod模板,实际上就是以前我们定义的pod内容,相当于pod的描述以模板的形式嵌入到replicaset中来

pod模板  template  这个概念非常重要,因为后面我们讲解到的大多数控制器都会使用pod模板来统一定义它所要管理的pod

 

通过查看rs kubectl  get  rs  nginx-rs  可以看到当前资源对象的描述信息,包括SESIRED   CURRENT  READY  的状态值,创建完成后

kubectl   get pods  -l  app=nginx

查看pod状态,selector选中,matchLabels。 -l  app=nginx ,创建是使用的是默认的namespace:dafault,此处不需要代  -n

可以看到现在有3个pod,这三个pod就是我们在RS声明的副本数  replicas:3

可以看出又重新出现了一个pod,这个就是上面我们说的replicaSet控制器为我们做的工作,我们在yaml文件中声明了3个副本,然后删除了一个副本,这时候pod,DESIRED和CURRENT不一致,所以就需要启动一个新的pod来保持三个副本,这个过程上面我们说了就是调谐的过程,同样可以查看RS的描述信息来查看到相关的事件信息

  1. [root@master1 ~]# kubectl describe rs nginx-rs
  2. Name: nginx-rs
  3. Namespace: default
  4. Selector: app=nginx
  5. Labels: <none>
  6. Annotations: <none>
  7. Replicas: 3 current / 3 desired
  8. Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed
  9. Pod Template:
  10. Labels: app=nginx
  11. Containers:
  12. nginx:
  13. Image: nginx
  14. Port: 80/TCP
  15. Host Port: 0/TCP
  16. Environment: <none>
  17. Mounts: <none>
  18. Volumes: <none>
  19. Events:
  20. Type Reason Age From Message
  21. ---- ------ ---- ---- -------
  22. Normal SuccessfulCreate 44m replicaset-controller Created pod: nginx-rs-6pgn4
  23. Normal SuccessfulCreate 44m replicaset-controller Created pod: nginx-rs-vrn6z
  24. Normal SuccessfulCreate 44m replicaset-controller Created pod: nginx-rs-rwnnm
  25. Normal SuccessfulCreate 43m replicaset-controller Created pod: nginx-rs-529q6

可以发现最开始通过replicaSet控制器创建了3个pod,后面我们删除了pod后,replicaSet控制器又为我们创建了一个pod,和上面我们的描述是一致的,如果这个时候我们吧RS 资源对象replicas改为2

 可以看到replicaSet控制器在发现我们的资源声明中副本数变为2后,就主动删除了一个pod,这样副本数就和期望保持一致了

我们可以查看一个pod的描述信息可以看到这个pod的所属控制器信息。另外被replicaSet持有的pod有一个metadata.ownerReferences指针指向当前的replicaSet,表示当前的pod的所有者,这个引用主要会被集群中的垃圾收集器使用以清理丢失所有者的pod对象,这个ownerRefences和数据库中的外键是不是非常类似。

如果要彻底删除pod,我们就只能删除RS对象

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/189855
推荐阅读
相关标签
  

闽ICP备14008679号