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

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

相关推荐
微服务商城技术分享3 分钟前
通过Docker实现openGauss的快速容器化安装
运维·docker·容器
华为云开发者联盟1 小时前
解读Karmada多云容器编排技术,加速分布式云原生应用升级
kubernetes·集群·karmada·多云容器
巅峰程序13 小时前
[docker]拉取镜像失败
docker·容器·eureka
MonkeyKing_sunyuhua15 小时前
sudo docker ps才能查看,docker ps不能查看问题
docker·容器·eureka
小龙在山东15 小时前
使用Docker快速部署FastAPI Web应用
docker·容器·fastapi
苏格拉真没有底15 小时前
docker配置代理解决不能拉镜像问题
运维·docker·容器
A ?Charis18 小时前
我来讲一下-Service Mesh.
云原生·service_mesh
ciao-lk19 小时前
docker desktop运行rabittmq容器,控制台无法访问
docker·容器
严格要求自己20 小时前
nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录
云原生·容器·kubernetes
少吃一口就会少吃一口20 小时前
k8s笔记
云原生·容器·kubernetes