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

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

相关推荐
JuiceFS4 分钟前
JuiceFS writeback:写加速机制与适用场景解析
后端·云原生·云计算
Bug退退退12316 小时前
关于微服务下的不同服务之间配置不能通用的问题
微服务·云原生·架构
@寄居蟹21 小时前
Docker 命令大全
docker·容器·eureka
qq_364371721 天前
Docker 常见命令
运维·docker·容器
照物华1 天前
k8s之 Pod 资源管理与 QoS
云原生·容器·kubernetes
hhzz1 天前
重温 K8s 基础概念知识系列八( K8S 高级网络)
网络·容器·kubernetes
Insist7531 天前
K8s--调度管理:node节点、Pod亲和性、污点与容忍
linux·容器·kubernetes
Insist7531 天前
k8s——持久化存储 PVC
java·容器·kubernetes
zzz.101 天前
Linux问答题:调优系统性能
linux·运维·云原生
无级程序员1 天前
kubernetes-dashboard使用http不登录
http·容器·kubernetes