K8s: 控制器之ReplicaSet对象

ReplicaSet 控制副本

1 ) 概述

  • pod 是一个无状态的,并且可以被任意的按需的调度,在各个work node上运行的组件

  • 谁来控制这类调度就变得非常复杂,不可能去手工的去维护某一个pod的一个运行实例

  • 如果那样的话呢,它就失去了容器的概念,就会像一个虚拟机一样去运行

  • K8s中提供了 controller 这个概念,对于副本管理来说,有两种

    • 一种是 Replica Set (RS) 副本控制器
    • 一种是 Replication Controller(RC)已经不推荐使用了
    • 都是用于确保集群中特定数量的 Pod 副本始终运行的服务
    • Replica Set 是对 Replication Controller 的改进和升级,具备更强大的获取标签label功能
    • 新版本中推荐用 Deployment 来控制 ReplicaSet,用 ReplicaSet 控制pod副本数量
  • Replica Set

    • 它是维护在任何时候都处于运行状态pod副本的一个稳定集合
    • 通常它是用来保证给定数量和完全相同的pod的一个可用性
    • 可以认为它是一个管理员,要保证集群的pod的数量是一个稳定的
    • 比如设定了3个副本的nginx, 如果你主动销毁一个副本,它会自动新建一个补充
  • RS 可以独立使用,但是也可以被 Deployment 用来协调

2 )应用

  • 新建 rep-nginx.yaml

    yaml 复制代码
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: rep-nginx
    spec:
      replicas: 3
      selector: # 选择器选择的是 满足 app: rep-nginx 的 pod
        matchLabels:
          app: rep-nginx
      template: # 这里的模板就是创建一系列的 pod
        metadata:
          name: rep-nginx
          labels:
            app: rep-nginx
        spec:
          containers:
          - name: rep-nginx
            image: nginx
            ports:
            - containerPort: 80
  • $ kubectl apply -f rep-nginx.yaml 创建副本

    conf 复制代码
    replicaset.apps/rep-nginx created
  • $ kubectl get all

    conf 复制代码
    NAME                  READY   STATUS    RESTARTS   AGE
    pod/rep-nginx-k6k8g   1/1     Running   0          2m16s
    pod/rep-nginx-sh969   1/1     Running   0          2m16s
    pod/rep-nginx-tcrsb   1/1     Running   0          2m16s
    
    NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
    service/kubernetes   ClusterIP   10.1.0.1     <none>        443/TCP   6d
    
    NAME                        DESIRED   CURRENT   READY   AGE
    replicaset.apps/rep-nginx   3         3         3       2m17s
  • 这时候开两个 bash窗口, 来监控运行

    • $ kubectl get po -w 这个窗口一直做监控,命名窗口为A窗口
    • $ kubectl delete pod/rep-nginx-tcrsb 这个窗口删除一个pod, 命名窗口为B窗口
  • 我们可以在A窗口这个监控窗口中看到

    • 之前被删除的pod的状态是立即变成: Terminating
    • 并且同时有一个新的pod被创建出来,状态为: Pending -> ContainerCreating -> Running 的变化
  • 回到B窗口中运行 $ kubectl get po 发现依旧是 3个 pod

  • 这个说明副本控制器就是一直在工作来维持副本运行的稳定性

相关推荐
程序员阿超的博客1 小时前
云原生核心技术 (10/12): K8s 终极实战:从零部署一个 Spring Boot + MySQL + Redis 应用
spring boot·云原生·kubernetes
风清再凯2 小时前
docker-compose容器单机编排
docker·容器·dubbo
互联网搬砖老肖3 小时前
Web 架构之 Kubernetes 弹性伸缩策略设计
前端·架构·kubernetes
Akamai中国4 小时前
什么是云计算的边缘原生应用?
人工智能·kubernetes·云计算·边缘计算
masx2004 小时前
minio web console已死,Web管理功能全砍!使用 OpenMaxIO 恢复 MinIO 社区版的 Web 控制台功能!
docker·容器
爱学语言的人5 小时前
Docker快速构建并启动Springboot程序,快速发布和上线/
spring boot·docker·容器
大千AI助手5 小时前
5分钟玩转Swagger UI:Docker部署+静态化实战
ui·docker·容器·swagger·swaggerui
江湖有缘6 小时前
【Docker管理工具】安装容器管理工具Oxker
运维·docker·容器
东林牧之6 小时前
Docker搭建2FAuth服务
云原生·eureka
昌sit!6 小时前
K8S多维度问题排查
云原生·容器·kubernetes