经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Kubernetes » 查看文章
Kubernetes(k8s)控制器(四):ReplicaSet
来源:cnblogs  作者:人生的哲理  时间:2023/2/10 9:19:08  对本文有异议

一.系统环境

服务器版本 docker软件版本 Kubernetes(k8s)集群版本 CPU架构
CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 v1.21.9 x86_64

Kubernetes集群架构:k8scloude1作为master节点,k8scloude2,k8scloude3作为worker节点

服务器 操作系统版本 CPU架构 进程 功能描述
k8scloude1/192.168.110.130 CentOS Linux release 7.4.1708 (Core) x86_64 docker,kube-apiserver,etcd,kube-scheduler,kube-controller-manager,kubelet,kube-proxy,coredns,calico k8s master节点
k8scloude2/192.168.110.129 CentOS Linux release 7.4.1708 (Core) x86_64 docker,kubelet,kube-proxy,calico k8s worker节点
k8scloude3/192.168.110.128 CentOS Linux release 7.4.1708 (Core) x86_64 docker,kubelet,kube-proxy,calico k8s worker节点

二.前言

使用ReplicaSet的前提是已经有一套可以正常运行的Kubernetes集群,关于Kubernetes(k8s)集群的安装部署,可以查看博客《Centos7 安装部署Kubernetes(k8s)集群》https://www.cnblogs.com/renshengdezheli/p/16686769.html。

三.ReplicaSet概览

ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。

ReplicaSet与ReplicationController控制器类似,都是用来维持pod副本数,关于ReplicationController的详细内容,请查看博客《Kubernetes(k8s)控制器(三):ReplicationController》。

ReplicaSet一般作为deployment控制器的底层控制器。关于deployment控制器的详细内容,请查看博客《Kubernetes(k8s)控制器(一):deployment》。

四.ReplicaSet工作原理

ReplicaSet 是通过一组字段来定义的,包括一个用来识别可获得的 Pod 的集合的选择算符、一个用来标明应该维护的副本个数的数值、一个用来指定应该创建新 Pod 以满足副本个数条件时要使用的 Pod 模板等等。 每个 ReplicaSet 都通过根据需要创建和删除 Pod 以使得副本个数达到期望值, 进而实现其存在价值。当 ReplicaSet 需要创建新的 Pod 时,会使用所提供的 Pod 模板。

ReplicaSet 通过 Pod 上的 metadata.ownerReferences 字段连接到附属 Pod,该字段给出当前对象的属主资源。 ReplicaSet 所获得的 Pod 都在其 ownerReferences 字段中包含了属主 ReplicaSet 的标识信息。正是通过这一连接,ReplicaSet 知道它所维护的 Pod 集合的状态, 并据此计划其操作行为。

ReplicaSet 使用其选择算符来辨识要获得的 Pod 集合。如果某个 Pod 没有 OwnerReference 或者其 OwnerReference 不是一个控制器, 且其匹配到某 ReplicaSet 的选择算符,则该 Pod 立即被此 ReplicaSet 获得。

五.ReplicaSet使用场景

ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。 然而,Deployment 是一个更高级的概念,它管理 ReplicaSet,并向 Pod 提供声明式的更新以及许多其他有用的功能。 因此,建议使用 Deployment 而不是直接使用 ReplicaSet, 除非你需要自定义更新业务流程或根本不需要更新。这意味着,你可能永远不需要操作 ReplicaSet 对象:而是使用 Deployment,并在 spec 部分定义你的应用。

六.创建ReplicaSet

配置replicaset,replicas: 3 指定pod副本数为3个

  1. [root@k8scloude1 daemonset]# vim ReplicaSet.yaml
  2. [root@k8scloude1 daemonset]# cat ReplicaSet.yaml
  3. apiVersion: apps/v1
  4. kind: ReplicaSet
  5. metadata:
  6. name: rs
  7. labels:
  8. app: guestbook
  9. spec:
  10. replicas: 3
  11. selector:
  12. matchLabels:
  13. tier: frontend
  14. template:
  15. metadata:
  16. labels:
  17. app: guestbook
  18. tier: frontend
  19. spec:
  20. terminationGracePeriodSeconds: 0
  21. containers:
  22. - name: nginx
  23. imagePullPolicy: IfNotPresent
  24. image: nginx

创建replicaset

  1. [root@k8scloude1 daemonset]# kubectl apply -f ReplicaSet.yaml
  2. replicaset.apps/rs created
  3. [root@k8scloude1 daemonset]# kubectl get rs
  4. NAME DESIRED CURRENT READY AGE
  5. rs 3 3 3 25s

现在有3个pod

  1. [root@k8scloude1 daemonset]# kubectl get pod -o wide
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. rs-d58dk 1/1 Running 0 34s 10.244.112.173 k8scloude2 <none> <none>
  4. rs-fn2tw 1/1 Running 0 34s 10.244.251.231 k8scloude3 <none> <none>
  5. rs-v676w 1/1 Running 0 34s 10.244.112.175 k8scloude2 <none> <none>

七.扩展replicaset副本数

通过kubectl scale rs 扩展replicaset副本数,--replicas=5 设置pod副本数为5

  1. [root@k8scloude1 daemonset]# kubectl scale rs rs --replicas=5
  2. replicaset.apps/rs scaled

现在就有5个pod了

  1. [root@k8scloude1 daemonset]# kubectl get pod -o wide
  2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  3. rs-554fh 0/1 ContainerCreating 0 2s <none> k8scloude2 <none> <none>
  4. rs-d58dk 1/1 Running 0 93s 10.244.112.173 k8scloude2 <none> <none>
  5. rs-fn2tw 1/1 Running 0 93s 10.244.251.231 k8scloude3 <none> <none>
  6. rs-ltmpv 0/1 ContainerCreating 0 2s <none> k8scloude3 <none> <none>
  7. rs-v676w 1/1 Running 0 93s 10.244.112.175 k8scloude2 <none> <none>
  8. [root@k8scloude1 daemonset]# kubectl get pod -o wide
  9. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
  10. rs-554fh 1/1 Running 0 3s 10.244.112.174 k8scloude2 <none> <none>
  11. rs-d58dk 1/1 Running 0 94s 10.244.112.173 k8scloude2 <none> <none>
  12. rs-fn2tw 1/1 Running 0 94s 10.244.251.231 k8scloude3 <none> <none>
  13. rs-ltmpv 1/1 Running 0 3s 10.244.251.232 k8scloude3 <none> <none>
  14. rs-v676w 1/1 Running 0 94s 10.244.112.175 k8scloude2 <none> <none>

删除replicaset

  1. [root@k8scloude1 daemonset]# kubectl delete -f ReplicaSet.yaml
  2. replicaset.apps "rs" deleted
  3. [root@k8scloude1 daemonset]# kubectl get rs
  4. No resources found in daemonset namespace.
  5. [root@k8scloude1 daemonset]# kubectl get pod -o wide
  6. No resources found in daemonset namespace.

原文链接:https://www.cnblogs.com/renshengdezheli/p/17107648.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号