Kubernetes(k8s)-ReplicaSets介绍

134 阅读4分钟

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。

我们前面从概念到安装,再到pod和master及node的介绍,都是为了让我们对k8s有一个比较直观的理解,今后及后面相当长的时间我们将介绍k8s的各种资源。

ReplicaSets介绍 

我们前面介绍pod的时候通过yaml文件创建了pod,这个pod大概就等于使用docker run 创建的容器。如果我们想对这个容器做更高级的操作(增加pod的数量,更换镜像等),则必须要借助其他控制器,今天我们要介绍的控制器就是ReplicaSets,也可以简称:rs。

ReplicaSets 是 Kubernetes 中的一种资源对象,用于确保指定数量的 Pod 副本处于运行状态。它通过监控正在运行的 Pod,并在需要时创建或销毁 Pod 来保证集群中运行的 Pod 数量与预期相符。尽管 ReplicaSet 可以独立使用,但在实际应用中,通常推荐使用更高层级的抽象如 Deployments,因为 Deployments 提供了声明式更新、回滚等额外功能。

以下是关于 ReplicaSets 的一些关键点:

维持 Pod 副本数:ReplicaSet 确保一定数量的 Pod 副本始终可用。如果一个 Pod 挂掉,ReplicaSet 会启动一个新的来替代它。

选择器(Selector):使用标签选择器来确定由 ReplicaSet 管理的 Pod 集合。所有带有指定标签的 Pod 都会被认为是该 ReplicaSet 的一部分。

Pod 模板(Pod Template):定义了 ReplicaSet 创建的新 Pod 的属性。每个由 ReplicaSet 创建的 Pod 都是从这个模板生成的。

扩展性:用户可以通过修改 ReplicaSet 的副本数来增加或减少 Pod 的数量,从而实现服务的水平扩展。

局限性:如果你直接使用 ReplicaSet 而不是 Deployment,那么你就失去了滚动更新、版本回退等高级特性。

滚动更新和回滚:这些功能通常由 Deployments 提供,但如果你直接管理 ReplicaSet,则需要自己处理这些操作。

替代方案:在大多数情况下,应该使用 Deployments 来代替直接使用 ReplicaSet,因为 Deployments 内部管理了一个 ReplicaSet 并提供了更多的功能。

升级策略:ReplicaSet 自身不提供任何内置的升级策略;对于复杂的部署和升级场景,应考虑使用 Deployments 或 StatefulSets。

范例

apiVersion: apps/v1          # api版本
kind: ReplicaSet             # 产品类型
metadata:
  name: nginx-replicaset
  labels:
    app: nginx
spec:
  replicas: 3  # 设置你想要维持的Pod副本数量
  selector:
    matchLabels:
      app: nginx  # 定义选择器,用于确定哪些Pod属于此ReplicaSet
  template:  # 这是创建新Pod时使用的模板
    metadata:
      labels:
        app: nginx  # 确保Pod标签与选择器匹配
    spec:
      containers:
      - name: nginx
        image: nginx  # 使用Nginx镜像
        imagePullPolicy: IfNotPresent #定义镜像下载策略
        ports:
        - containerPort: 80  # 容器监听的端口

kubectl apply -f xx.yaml

这个时候k8s按照我们的预期,创建了3个pod,如果因为意外或者其他原因,部分pod被删除,那么这个rs的控制器则会自动补齐对应的个数,这样他就通过这个方式来提高了我们的业务的高可用。始终按照我们的预期的方式运行。

[root@master01 ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-replicaset-9ztvk   1/1     Running   0          18m
nginx-replicaset-t6747   1/1     Running   0          18m
nginx-replicaset-tj728   1/1     Running   0          18m
[root@master01 ~]# kubectl  delete pod  nginx-replicaset-tj728
pod "nginx-replicaset-tj728" deleted
[root@master01 ~]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
nginx-replicaset-9ztvk   1/1     Running   0          18m
nginx-replicaset-t6747   1/1     Running   0          18m
nginx-replicaset-z9fjd   1/1     Running   0          3s

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。