kubernetes之ReplicaSet
2022/7/25 23:22:47
本文主要是介绍kubernetes之ReplicaSet,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.什么是ReplicaSet?
-
1.1ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。
-
1.2在kubernetes环境中,通过RelicaSet这种资源对象就可以为我们实现集群的高可用。ReplicaSet(RS)的主要作用就是为了维持一组Pod副本的运行,保证一定数量的Pod在集群正常运行,RelicaSet Controller会持续监听它控制的这些Pod的运行状态,以及数量,保证应用集群高可用。例如:现在节点有Pod挂掉了,控制器会一直监视Pod的数量,发现少了一个Pod,它会挑选一台合适的节点给我们拉起来,始终维持总数不变。不需要我们手动去处理,系统自己会为我们处理。
-
1.3ReplicaSet和Deployment联合起来控制无状态应用。ReplicaSet并不是我们直接应该使用的控制器,虽然说它是一个非常重要的基础的控制器。而更加高级的抽象的也是我们使用最多的控制器叫Deployment。借助一到多个ReplicaSet便捷的管理Pod。从某种意义来讲,Deployment是ReplicaSet控制器。Deployment控制器在定义的时候却不定义与Replicaset有任何关系。定义的所有内容都是Pod模板。Pod副本之类的。也就对用户而言,即便我们使用Deployment控制器,用户即便使用的是ReplicaSet控制器,用户对中间的Replicaset甚至无从感知的。
正常情况是Deploy->ReplicaSet->Pod。 -
1.4官方文档:https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/replicaset/
2.RepliicaSet的组成部分
2.1 ReplicaSet控制器包含了3个基本的组成部分;
1.Selector:标签选择器,匹配并关联Pod对象,并加入控制器的管理;
2.Replicas:期望的副本数,期望在集群所运行的Pod的数量;
3.template:Pod模板,其实就是Pod的规范,相当于把一个Pod的描述以模板嵌套进了ReplicaSet;
3.ReplicaSet的资源规范
点击查看代码
ReplicaSet配置文件示例: apiVersion: apps/v1 # 所在群组是apps/v1群组和Deployment一样; kind: ReplicaSet # 资源类型为ReplicaSet; metadata: name: # Pod的名称; namespace: # Pod所在的namespace,默认是Default; spec: minReadySeconds <integer> # Pod就绪后多少秒内任一容器crash方可视为"就绪" replicas <integer> # 期望的Pod副本数,默认为1。如果期望Pod的副本数增加,只需要更改replicas的数字即可。如果你写2个,创建的Pod就是根据template定义的规范去运行起来的。Pod启动后就会被我们标签选择器所管理,进而被我们RS所管理。 selector: # 这里的标签选择器与Service的标签选择器是不一样的,不是选择器的功能不一样,而是选择器的格式不同; matchExpressions <[]Object> matchLabels <map[string]string> template: # 定义Pod的模板,用来描述Pod的详情;比如定义containers、images、resoucre、lifecycle,把它做成一个模板。 metadata: labels: # 定义Pod的标签, spec:
4.RelicaSet配置示例
点击查看代码
# cat nginx-test-replicas.yaml apiVersion: apps/v1 kind: ReplicaSet metadata: name: nginx-rs # RS控制器名称 namespace: default spec: # 定义RS规范 replicas: 2 minReadySeconds: 20 selector: matchLabels: app: nginx-test template: metadata: labels: app: nginx-test spec: containers: - name: nginx image: nginx ports: - name: http containerPort: 80 # kubectl apply -f nginx-test-replicas.yaml replicaset.apps/nginx-rs created # 这两个副本都能提供服务且是相同的服务。 # kubectl get pods -l app=nginx-test NAME READY STATUS RESTARTS AGE nginx-rs-542db 1/1 Running 0 2m1s nginx-rs-hcxh9 1/1 Running 0 2m1s # ReplicaSet可以简写为rs,写replicaset或者rs都可以。 # kubectl get rs nginx-rs NAME DESIRED CURRENT READY AGE nginx-rs 2 2 2 85s # DESIRED:期望是2个Pod # CURRENT:正常运行是2个 # READY: 正在运行是2个 # AGE:运行时间 # 如果我把某一个Pod删除以后,控制器是自己会创建Pod的。ReplicaSet会始终维持与我们所期望的副本数保持一致; # kubectl delete pods nginx-rs-hcxh9 pod "nginx-rs-hcxh9" deleted # kubectl get pods -l app=nginx-test NAME READY STATUS RESTARTS AGE nginx-rs-542db 1/1 Running 0 7m32s nginx-rs-n8995 0/1 Running 0 5s
这篇关于kubernetes之ReplicaSet的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-23云原生周刊:利用 eBPF 增强 K8s
- 2024-12-20/kubernetes 1.32版本更新解读:新特性和变化一目了然
- 2024-12-19拒绝 Helm? 如何在 K8s 上部署 KRaft 模式 Kafka 集群?
- 2024-12-16云原生周刊:Kubernetes v1.32 正式发布
- 2024-12-13Kubernetes上运行Minecraft:打造开发者平台的例子
- 2024-12-12深入 Kubernetes 的健康奥秘:探针(Probe)究竟有多强?
- 2024-12-10运维实战:K8s 上的 Doris 高可用集群最佳实践
- 2024-12-022024年最好用的十大Kubernetes工具
- 2024-12-02OPA守门人:Kubernetes集群策略编写指南
- 2024-11-26云原生周刊:K8s 严重漏洞