1. 首页
  2. Kubernetes

Kubernetes对象之ReplicaSet

Kubernetes 中的 ReplicaSet 主要的作用是维持一组 Pod 副本的运行,它的主要作用就是保证一定数量的 Pod 能够在集群中正常运行,它会持续监听这些 Pod 的运行状态,在 Pod 发生故障重启数量减少时重新运行新的 Pod 副本。

在新版本的 Kubernetes 中建议使用 ReplicaSet(简称为RS )来取代 ReplicationController。ReplicaSet 跟 ReplicationController 没有本质的不同,只是名字不一样,并且 ReplicaSet 支持集合式 selector(ReplicationController 仅支持等式)。

虽然也 ReplicaSet 可以独立使用,但建议使用 Deployment 来自动管理 ReplicaSet,这样就无需担心跟其他机制的不兼容问题(比如 ReplicaSet 不支持 rolling-update 但 Deployment 支持),并且Deployment还支持版本记录、回滚、暂停升级等高级特性。

ReplicaSet 资源定义

一个常见的 ReplicaSet 的定义其实是这样的:

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rs-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      tire: frontend
    matchExpressions:
    - {key: "tire", operator: In, values: ["frontend"]}
  template:
    metadata:
      labels:
        app: nginx
        tire: frontend
    spec:
      containers:
      - name: nginx
        image: nginx:1.14-alpine
        ports:
        - name: http
          containerPort: 80

这里的 YAML 文件除了常见的 apiVersion、kind 和 metadata 属性之外,规格中总共包含三部分重要内容,也就是 Pod 副本数目 replicas、选择器 selector 和 Pod 模板 template,这三个部分共同定义了 ReplicaSet 的规格:

  • spec.selector 字段指定为你需要管理的 Pod 的 label(label的意义体现在此处)。这儿将 spec.selector 设置为 tire: frontend 意味着所有包含 tire: frontend 标签的 Pod 都将被这个 RS 管理。
  • spec.replicas 字段代表了受此 RS 管理的 Pod,需要运行的副本数。
  • spec.template 模块用于定义 Pod 模板,包括 Pod 的名字,Pod 拥有的label 以及 Pod 中运行的应用。template 定义的方法就是定义 Pod 的方法写到 template 字段内部;

创建 ReplicaSet

root@k8s-master-opsbj:~/manifests # kubectl apply -f rs-demo.yaml
replicaset.apps/rs-demo created

root@k8s-master-opsbj:~/manifests # kubectl get rs
NAME      DESIRED   CURRENT   READY   AGE
rs-demo   3         3         3       11m

root@k8s-master-opsbj:~/manifests # kubectl get pods
NAME            READY   STATUS    RESTARTS   AGE
rs-demo-fz8zj   1/1     Running   0          11m
rs-demo-hnvgh   1/1     Running   0          11m
rs-demo-xx2vl   1/1     Running   0          11m

删除 ReplicaSet

使用 kubectl delete 命令会删除此 RS 以及它管理的 Pod 。在 Kubernetes 删除 RS 前,会将 RS 的 replica 调整为 0,等待所有的 Pod 被删除后,在执行 RS 对象的删除。

ReplicaSet 伸缩

使用 kubectl edit 或者通过修改 yaml 文件中的 replicas 的值,可以实时的增加或者缩减 Pod 副本的数量;

举例演示:

kubernetes-rs伸缩示例
kubernetes-rs伸缩示例

如果觉得文章不错,不妨给个『打赏』写作不易,各位的支持,能激发和鼓励我更大的写作热情。谢谢

原创文章,作者:恩志,如若转载,请注明出处:https://www.xbzdr.com/678.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

在线咨询:点击这里给我发消息

邮件:510749025@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code