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

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

相关推荐
Gold Steps.37 分钟前
OpenEBS — 云原生 CNS 高性能存储
云原生·kubernetes·存储
大雨淅淅1 小时前
Eureka从入门到精通:开启微服务架构的钥匙
微服务·云原生·eureka·架构
oMcLin1 小时前
2025年必备的Docker命令指南与实战示例
docker·容器·eureka
sun cat1 小时前
Docker详细介绍(6)
docker·容器·docker-compose
AI架构全栈开发实战笔记1 小时前
Eureka 对大数据领域服务依赖关系的梳理
大数据·ai·云原生·eureka
广州中轴线8 小时前
OpenStack on Kubernetes 生产部署实战(十三)
容器·kubernetes·openstack
晚霞的不甘8 小时前
Flutter for OpenHarmony天气卡片应用:用枚举与动画打造沉浸式多城市天气浏览体验
前端·flutter·云原生·前端框架
Tadas-Gao8 小时前
TCP粘包现象的深度解析:从协议本质到工程实践
网络·网络协议·云原生·架构·tcp
礼拜天没时间.9 小时前
深入Docker架构——C/S模式解析
linux·docker·容器·架构·centos
切糕师学AI9 小时前
Helm Chart 是什么?
云原生·kubernetes·helm chart