k8s学习 - 概念 - ReplicaSet

k8s学习 - 概念 - ReplicaSet

首先,ReplicaSet 和 ReplicationController 基本上一样,除了上篇说到的selector有不同之外,没有啥区别。(官网也是这么说的)。但是为什么官方建议的不是ReplicaController + Deployment的集合呢?咋们也不敢说,咋们也不敢问。反正我就知道,用 ReplicationController 的值得被鄙视,用ReplicationSet +deployment 的现在是正统。

ReplicaSet

它和ReplicationController一样用来控制pod的。ReplicationSet + deployment中,ReplicationSet都是由deployment自动生成的,我们不需要再写一个replicaset.yaml。因为我们看中的是deployment的回滚、版本记录等功能,deployment依赖的ReplicationSet自动生成会好过我们手动生成ReplicationSet。否则我们手动配置的哪个地方和deployment要求的不一样,就很难查了。

下面是我用deployment自动生成的一个ReplicationSet的yaml配置文件:

kubectl get rs frontend-5c548f4769 -o=yaml
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
annotations:
    deployment.kubernetes.io/desired-replicas: "3"
    deployment.kubernetes.io/max-replicas: "4"
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: 2019-07-09T06:28:38Z
  generation: 1
  labels:
    app: guestbook
    pod-template-hash: "1710490325"
    tier: frontend
  name: frontend-5c548f4769
  namespace: default
  ownerReferences:
  - apiVersion: extensions/v1beta1
    blockOwnerDeletion: true
    controller: true
    kind: Deployment
    name: frontend
    uid: c970981e-a212-11e9-89ff-025000000001
  resourceVersion: "1471299"
  selfLink: /apis/extensions/v1beta1/namespaces/default/replicasets/frontend-5c548f4769
  uid: c972e269-a212-11e9-89ff-025000000001
spec:
  replicas: 3
  selector:
    matchLabels:
      app: guestbook
      pod-template-hash: "1710490325"
      tier: frontend
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: guestbook
        pod-template-hash: "1710490325"
        tier: frontend
    spec:
      containers:
      - env:
        - name: GET_HOSTS_FROM
          value: dns
        image: gcr.io/google-samples/gb-frontend:v4
        imagePullPolicy: IfNotPresent
        name: php-redis
        ports:
        - containerPort: 80
          protocol: TCP
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
status:
  availableReplicas: 3
  fullyLabeledReplicas: 3
  observedGeneration: 1
  readyReplicas: 3
  replicas: 3

spec.template就完全是一个pod的配置,前面章节已经说过了。所以整个配置文件缩略下来就是下面这个样子:

kubectl get rs frontend-5c548f4769 -o=yaml
apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
  ...
  generation: 1
  ...
  ownerReferences:
  - apiVersion: extensions/v1beta1
    blockOwnerDeletion: true
    controller: true
    kind: Deployment
    name: frontend
    uid: c970981e-a212-11e9-89ff-025000000001
  resourceVersion: "1471299"
  selfLink: /apis/extensions/v1beta1/namespaces/default/replicasets/frontend-5c548f4769
  uid: c972e269-a212-11e9-89ff-025000000001
spec:
  replicas: 3
  selector:
    matchLabels:
      app: guestbook
      pod-template-hash: "1710490325"
      tier: frontend
  template:
    ...
status:
  availableReplicas: 3
  fullyLabeledReplicas: 3
  observedGeneration: 1
  readyReplicas: 3
  replicas: 3

我们就一个个研究这些没有见过的配置:

metadata.generation & status.observedGeneration

这两个是对应的,metadata.generation 就是这个 ReplicationSet 的元配置数据被修改了多少次。这里就有个版本迭代的概念。每次我们使用 kuberctl edit 来修改 ReplicationSet 的配置文件,或者更新镜像,这个generation都会增长1,表示增加了一个版本。

这个版本迭代是配置文件只要有改动就进行版本迭代。observedGeneration就是最近观察到的可用的版本迭代。这两个只有在镜像升级的时候有可能不同,当我们使用 kubectl rollout status 来探测一个deployment的状态的时候,就是检查observedGeneration是否大于等于generation。

metadata.ownerReferences

这个字段就需要说到 owner 对象的概念了。文章中这个 ReplicaSet 是通过 Deployment 自动生成的,所以这个 ReplicaSet 是属于某个 Deployment的,那么那个 Deployment 就叫做它的 Owner,当前这个 ReplicaSet 就叫做那个 Deployment 的 Dependent。这个字段就是标注这个 ReplicaSet 的 Owner 信息。

blockOwnerDeletion 这个字段表示在删除 Owner 对象的时候,是否要先删除当前这个 Dependent。删除一个 Owner 对象有两种模式,一种是后台模式,就是先把 Owner 对象删除,再在后台删除它的 Dependent。另外一种是前台模式,先把所有的 Dependent 删除(标记删除),然后再删除 Owner 对象。这里的 blockOwnerDeletion 就是表示当它的 Owner 的删除策略是前台删除的时候,是否需要考虑先删除它。

controller 表示这个对象是否有管理它的控制器。

name, uid, kind 都是指向 Owner 对象的唯一标识。

metadata.resourceVersion

每个资源在底层数据库都有版本的概念,我们可以使用 watch 来看某个资源,某个版本之后的操作。这些操作是存储在 etcd 中的。当让,并不是所有的操作都会永久存储,只会保留有限的时间的操作。这个 resourceVersion 就是这个资源对象当前的版本号。

status

replicas 实际的 pod 副本数
availableReplicas 现在可用的 Pod 的副本数量,有的副本可能还处在未准备好,或者初始化状态
readyReplicas 是处于 ready 状态的 Pod 的副本数量
fullyLabeledReplicas 意思是这个 ReplicaSet 的标签 selector 对应的副本数量,不同纬度的一种统计

原文地址:https://www.cnblogs.com/yjf512/p/11209433.html

时间: 2024-10-28 23:16:50

k8s学习 - 概念 - ReplicaSet的相关文章

k8s学习 - 概念 - Deployment

k8s学习 - 概念 - Deployment 有了 ReplicaSet 还需要有 Deployment 的原因是希望有一个控制器能管理部署更新时候的版本控制问题.一个 Deployment 可以管理多个 ReplicaSet, 一个 ReplicaSet 可以管理多个 Pod.最通用的场景是当我们对某个 Pod 里面的镜像进行升级的时候,我们非常迫切需要有一个版本号概念,并且在发现问题的时候可以随时回滚.那么这个就是 Deployment 的使命. 使用 官方和很多文章都是使用 nginx

k8s学习 - 概念 - Pod

k8s学习 - 概念 - Pod 这篇继续看概念,主要是 Pod 这个概念,这个概念非常重要,是 k8s 集群的最小单位. 怎么才算是理解好 pod 了呢,基本上把 pod 的所有 describe 和配置文件的配置项都能看懂就算是对 pod 比较了解了. Pod 我们通过调用一个kubectl describe pod xxx 可以查看某个 pod 的具体信息. describe 的信息我们用注释的形式来解读. Name: task-pv-pod Namespace: default // 没

k8s基本概念-配置调度策略之(Taints-and-Tolerations)

k8s基本概念-配置调度策略之(Taints-and-Tolerations) 2018/4/12 通过定义 Taints and Tolerations 来达到 node 排斥 pod 的目的 通过一个典型实例来描述 taint 和 toleration 之间的关联 测试前的集群状态 部署app whoami-t1 测试 taint 的用法 测试结果 测试使用 toleration 测试结果 如何移除指定的 taint 呢? 聊一聊 Taints and Tolerations 的细节 概念

ASP.NET Core on K8S学习初探(1)K8S单节点环境搭建

当近期的一个App上线后,发现目前的docker实例(应用服务BFF+中台服务+工具服务)已经很多了,而我司目前没有专业的运维人员,发现运维的成本逐渐开始上来,所以容器编排也就需要提上议程.因此我决定开始学习Kubernetes,会将学习当中的过程记录下来,预计会形成一个系列,暂且命名为:ASP.NET Core on K8S,而这个系列会由3个部分组成,且会在不同的时期写完: ASP.NET Core on K8S学习初探:在Docker for Windows中搭建单节点环境,初步了解有个感

集成学习 概念介绍

集成学习(Esemble learning) 在机器学习领域,如何根据观察数据学习一个精确的估计数据是一个主要问题. 通常,我们通过训练数据应用某个算法得出一个训练模型,然后使用评估数据来评估这个模型的预测正确率,最后如果我们可以接受这个正确率就使用该模型进行预测数据.通常我们将训练数据进行交叉验证,比如说10则交叉验证,我们将训练数据平均分为10份,循环用其中的9份数据来训练模型,用另一份数据验证准确率,最后将结果准确率平均就是最后的分类准确率.当然还有其他方法. 但是寻找一个可以有很高准确率

k8s基本概念-如何使用Services

k8s基本概念-如何使用Services 2018/1/5 Services 使用示例 Virtual IPs and service proxies Publishing services - service types 通过命令行来控制 Service 通过 yaml 配置文件来定义 Service Virtual IPs and service proxies Proxy-mode: userspace 轮询 Proxy-mode: iptables v1.2开始作为默认选项 比 user

k8s基本概念-如何使用Deployments

k8s基本概念-如何使用Deployments 2018/1/5 Deployments 使用示例 创建一个 app 查看 app 状态 更新 app 回滚 app 扩缩容 app 删除 app 创建一个 app 通过 yaml 配置文件来定义 Deployment 关于 apiVersion 的写法,请参考: https://github.com/kubernetes/kubernetes/blob/630dbedef9de9ef678f16132796b103b8a03fcda/pkg/ap

kubernetes(k8s) 基础概念

K8S基础概念 1.Node Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod.Node上运行着Kubernetes的Kubelet.kube-proxy服务进程,这些服务进程负责Pod的创建.启动.监控.重启.销毁.以及实现软件模式的负载均衡. Node包含的信息: Node地址:主机的IP地址,或Node ID. Node的运行状态:Pending.Running.Terminated三种状态. Node Condition:- N

k8s基本概念

一.k8s基本概念 k8s大部分概念比如Node,Pod.RC,service等都可以看做一种资源对象,几乎所有的资源对象都可以通过k8s提供的kubectl工具执行增,删,改,查等操作并将其保存在etcd中持久化存储. 二.master master指的是集群控制节点,来负责整个集群的管理和控制,基本上k8s的所有控制命令都是发给它.我们后面执行的命令基本都是在master节点上运行的.通常它会占据一个独立的x86服务器(或一个虚拟机). master节点上运行一些关键进程: k8s API