K8S ReplicaSet 基本使用
K8S ReplicaSet 对象的作用是在任意时间点保持一组稳定的副本Pod运行,因此,它通常用于保证指定数量的相同Pod的可用性。乍一看, ReplicaSet 对象的定义跟 Replication Controller 并没有什么区别,都是维护Pod运行的副本数量。但是 ReplicaSet 和 Replication Controller唯一的区别是:RS支持标签选择器(后续参数配置中有提到).
工作原理
K8S ReplicaSe使用配置文件进行对象定义,包括一个选择器,以及关联pod的副本数量,指示它应该维护多少pod副本。指定一个pod模板,根据Pod模板创建的新pod的对象,以满足副本数量标准。然后,ReplicaSet通过根据需要创建和删除Pod来实现其目的,以达到所需的数量。当ReplicaSet需要创建新的Pod时,它使用其Pod模板。
应用场景
应用场景
ReplicaSet确保在任何给定时间运行指定数量的pod副本。然而Deployments是一个更高级的概念,它管理复制集,并为Pods提供声明性更新以及许多其他有用的功能。因此,我们建议使用Deployments而不是直接使用ReplicaSet,除非您需要自定义更新编排或根本不需要更新。这实际上意味着您可能永远不需要操作ReplicaSet对象:请改用Deployments对象.
演示环境
-
OS 信息
-
minikube 版本信息
-
Kubectl 版本
-
Dokcer 版本
-
启动minikube
minikube start --driver=docker
演示示例
-
创建配置文件
# 创建 frontend.yaml 文件,内容如下 apiVersion: apps/v1 kind: ReplicaSet metadata: name: frontend labels: app: guestbook tier: frontend spec: # modify replicas according to your case replicas: 3 selector: matchLabels: tier: frontend template: metadata: labels: tier: frontend spec: containers: - name: php-redis image: gcr.io/google_samples/gb-frontend:v3
-
创建集群
kubectl apply -f frontend.yaml
-
查看集群状态
kubectl get rs
-
查看集群详细状态
kubectl describe rs/frontend
-
检查Pod示例信息
kubectl get pods | grep frontend
-
验证Pod所属RS信息 - 开发者还可以使用以上Pod实例验证引用的ReplicaSet信息
# 注意 frontend-pts5p 实例名称 需要跟上面三个Pod节点名称一致 kubectl get pods frontend-pts5p -o yaml
配置参数
-
跟其它K8S 对象配置一样,创建ReplicaSet对象时,配置文件必须配置apiVersion、kind和 metadata 字段。对于ReplicaSetd对象,kind配置值必须为 ReplicaSet。
当K8S为ReplicaSet创建新的Pod时,Pod实例的命名是以ReplicaSet对象定义中.metadata.name的值为基础,后面跟上随机字符串。
-
Pod Template
.spec.template 部分定义了 Pod模板信息,该部分需要定义labels标签信息。在frontend.yaml示例中,定义了 label: tier 标签的值为:frontend。对于Pod 模板中重启策略字段 .spec.template.spec.restartPolicy,唯一允许的值为Always,如果不写,则默认为Always。
-
Pod Selector
配置文件中的 .spec.selector 为标签选择器,该选择器用于选择匹配潜在的Pod,在frontend.yaml示例中,选择器是:
matchLabels: tier: frontend
在 ReplicaSet 对象定义中,.spec.template.metadata.labels 必须跟 spec.selector匹配,否则将拒绝创建对象
-
RC 副本
用户可以通过设置.spec.replicas参数,来控制pod的运行数量。可以简单理解为该参数控制pod运行实例的节点数,该参数非常重要,如果未指定.spec.creplica,则默认值为1。
RS扩容
ReplicaSet 可以很轻松的实现HA自动扩容伸缩,动态调整RS中的Pod副本的运行数量。K8S支持两种扩容方式
配置扩容
-
创建配置文件
# vi ha.yaml apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: frontend-scaler spec: scaleTargetRef: kind: ReplicaSet name: frontend minReplicas: 3 maxReplicas: 10 targetCPUUtilizationPercentage: 50
表示当检测到cpu资源利用率超过50%的时候,动态的添加Pod,以满足突发的业务,最大增加到10个Pod实例
-
创建HPA扩容对象
kubectl apply -f ha.yaml
-
查看HPA对象
kubectl get hpa
脚本扩容
此外kubectl命令行工具还提供相关脚本进行扩容,命令如下
kubectl autoscale rs frontend --max=10 --min=3 --cpu-percent=50