一文读懂K8S
- 格式:docx
- 大小:144.31 KB
- 文档页数:4
k8s 元数据理解什么是 k8s 元数据?在了解 k8s 元数据之前,首先需要了解 Kubernetes(简称 k8s)。
Kubernetes是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。
它提供了一种简化和自动化容器部署、扩展和管理的方法。
在 Kubernetes 中,元数据是指用于描述和管理资源的数据。
元数据提供了关于资源的详细信息,包括名称、标签、注释、创建时间等。
它是一种描述资源的信息,帮助 Kubernetes 系统进行资源的管理和调度。
k8s 元数据的作用k8s 元数据在 Kubernetes 中起着重要的作用,它具有以下几个方面的功能:1. 标识和查询资源元数据可以用于标识和查询 Kubernetes 中的资源。
每个资源都有一个唯一的名称,可以通过这个名称来定位和操作资源。
例如,可以使用元数据中的名称来查找和删除一个 Pod。
2. 资源的分类和组织元数据可以用于对资源进行分类和组织。
通过给资源添加标签(Labels),可以将相似的资源归为一类。
标签是键值对的形式,可以根据标签对资源进行过滤、选择和操作。
例如,可以使用标签来选择具有相同标签的一组 Pod 进行扩展或缩减。
3. 管理和调度资源元数据可以用于管理和调度 Kubernetes 中的资源。
通过给资源添加注释(Annotations),可以提供关于资源的额外信息,如配置信息、版本号、相关链接等。
注释可以帮助管理员和开发人员更好地了解和管理资源。
4. 监控和日志记录元数据可以用于监控和日志记录 Kubernetes 中的资源。
通过元数据中的时间戳信息,可以记录资源的创建时间、修改时间和删除时间。
这些时间戳信息可以用于监控资源的状态变化和性能指标,并进行日志记录和分析。
5. 安全和权限控制元数据可以用于安全和权限控制 Kubernetes 中的资源。
通过元数据中的命名空间(Namespace)信息,可以将资源划分为不同的命名空间,实现资源的隔离和权限控制。
k8s 概念Kubernetes(简称为K8s)是开源容器管理平台,旨在帮助用户自主管理和部署容器化应用程序。
Kubernetes能够实现跨云、多云和混合云的应用程序的自动化部署、扩展和管理。
Kubernetes中一些核心的概念包括:1. Pod(容器组)Pod是Kubernetes系统中最小的部署单元。
Pod是由一个或多个容器共享网络和存储资源所组成的。
也就是说Pod可以同时运行多个容器,并且它们共享IP,端口和存储卷。
Pod提供了容器之间互相通信的环境,并且可以动态地伸缩和扩展。
Pod的声明周期是短暂的,当Pod停止运行时,它的数据会被清理掉。
2. Service(服务)Service充当Pod和其他应用程序之间的网络代理。
Service是由Kubernetes创建的虚拟IP和端口,它们可以被其他应用程序访问。
每个Service都代表了一组Pod,这些Pod拥有相同的标签。
Service实现了负载均衡,可以在Pod的扩展和缩减中自动地对它们进行调整。
3. Replication Controller(副本控制器)Replication Controller监视运行中的Pod,如果有Pod终止,则会自动重新创建一个新的Pod。
Replication Controller确保指定数量的Pod始终在运行状态,可以动态缩减或扩展Pod的副本数量。
Replication Controller通常与Service一起使用,以确保运行的Pod数量恰好满足Service的需求。
每个Pod都有一个唯一的ID和一个副本数,这些副本通常归组到同一个Replication Controller。
4. Deployment(部署)Deployment是一种非常强大的资源,用于管理Pod的声明周期。
使用Deployment,你可以动态地添加,更新或删除Pod。
Deployment使用ReplicaSet实现Pod的自动扩展和缩减,并且可以对应用程序的版本进行滚动升级或回滚操作。
Kubernetes(K8s)的原理解析1. 什么是Kubernetes(K8s)?Kubernetes(简称K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。
它提供了一种高度可扩展的架构,可以管理大规模的容器集群,并提供了强大的自动化和声明式配置的能力。
Kubernetes的设计目标是使应用程序在集群中的部署和管理变得更加简单和高效。
它通过提供一组丰富的功能和抽象层,将应用程序与底层基础设施解耦,使开发人员能够专注于应用程序的开发和运维。
2. Kubernetes的基本原理Kubernetes的基本原理涉及以下几个核心概念和组件:2.1 PodPod是Kubernetes的基本调度单位,它是一个或多个相关容器的集合。
Pod中的容器共享网络和存储资源,并在同一主机上运行。
Pod提供了一种逻辑上独立的环境,使容器之间可以进行通信和资源共享。
2.2 控制器控制器是Kubernetes的核心组件之一,负责管理Pod的生命周期和状态。
控制器根据用户定义的期望状态,自动调整Pod的副本数,并确保Pod的运行状态与期望状态一致。
常见的控制器类型包括:•ReplicaSet:用于确保Pod的副本数与期望副本数一致。
•Deployment:用于在滚动升级或回滚应用程序时管理ReplicaSet。
•StatefulSet:用于管理有状态应用程序的Pod。
•DaemonSet:用于确保每个节点上都运行一个Pod的副本。
2.3 服务发现Kubernetes提供了内置的服务发现机制,使容器之间可以通过服务名进行通信,而不必关心具体的IP地址和端口。
服务发现通过创建一个虚拟的服务来暴露一组Pod,使用标签选择器将请求路由到正确的Pod。
2.4 调度器调度器是Kubernetes的另一个核心组件,负责将Pod调度到集群中的合适节点上运行。
调度器根据一组调度策略和节点资源的可用性,选择最佳的节点进行调度。
K8s核⼼概念详解kubernetes(通常简称为K8S),是⼀个⽤于管理在容器中运⾏的应⽤的容器编排⼯具。
Kubernetes不仅有你所需要的⽤来⽀持复杂容器应⽤的所有东西,它还是市⾯上最⽅便开发和运维的框架。
Kubernetes的⼯作原理是通过将容器分组来把⼀个应⽤程序拆分成多个逻辑单元,以⽅便管理和发现。
它对由⼩且独⽴的服务组成的微服务应⽤特别有⽤。
尽管Kubernetes运⾏在Linux上,他其实是平台⽆关的,可以在裸机、虚拟机、云实例或OpenStack上运⾏。
ClusterCluster 是计算、存储和⽹络资源的集合,Kubernetes 利⽤这些资源运⾏各种基于容器的应⽤。
MasterMaster 是 Cluster 的⼤脑,它的主要职责是调度,即决定将应⽤放在哪⾥运⾏。
Master 运⾏ Linux 操作系统,可以是物理机或者虚拟机。
为了实现⾼可⽤,可以运⾏多个 Master。
NodeNode 的职责是运⾏容器应⽤。
Node 由 Master 管理,Node 负责监控并汇报容器的状态,并根据 Master 的要求管理容器的⽣命周期。
Node 运⾏在Linux 操作系统,可以是物理机或者是虚拟机。
在前⾯交互式教程中我们创建的 Cluster 只有⼀个主机 host01,它既是 Master 也是 Node。
PodPod 是 Kubernetes 的最⼩⼯作单元。
每个 Pod 包含⼀个或多个容器。
Pod 中的容器会作为⼀个整体被 Master 调度到⼀个 Node 上运⾏。
Kubernetes 引⼊ Pod 主要基于下⾯两个⽬的:可管理性。
有些容器天⽣就是需要紧密联系,⼀起⼯作。
Pod 提供了⽐容器更⾼层次的抽象,将它们封装到⼀个部署单元中。
Kubernetes 以 Pod 为最⼩单位进⾏调度、扩展、共享资源、管理⽣命周期。
通信和资源共享。
Pod 中的所有容器使⽤同⼀个⽹络 namespace,即相同的 IP 地址和 Port 空间。
一文搞懂K8S的基础概念Kubernetes是Google团队发起的开源项目,它的目标是管理跨多个主机的容器,提供基本的部署,维护以及运用伸缩,主要实现语言为Go语言。
Kubernetes构建于Google数十年经验,一大半来源于Google生产环境规模的经验。
结合了社区最佳的想法和实践。
在分布式系统中,部署,调度,伸缩一直是最为重要的也最为基础的功能。
Kubernetes就是希望解决这一序列问题的。
一、什么是 KubernetesKubernetes,从官方网站上可以看到,它是一个工业级的容器编排平台。
Kubernetes 这个单词是希腊语,它的中文翻译是“舵手”或者“飞行员”。
在一些常见的资料中也会看到“ks”这个词,也就是“K8s”,它是通过将 8 个字母“ubernete ”替换为“8”而导致的一个缩写。
Kubernetes 为什么要用“舵手”来命名呢?比如:这是一艘载着一堆集装箱的轮船,轮船在大海上运着集装箱奔波,把集装箱送到它们该去的地方。
我们之前其实介绍过一个概念叫做 container,container 这个英文单词也有另外的一个意思就是“集装箱”。
Kubernetes 也就借着这个寓意,希望成为运送集装箱的一个轮船,来帮助我们管理这些集装箱,也就是管理这些容器。
这个就是为什么会选用 Kubernetes 这个词来代表这个项目的原因。
更具体一点地来说:Kubernetes 是一个自动化的容器编排平台,它负责应用的部署、应用的弹性以及应用的管理,这些都是基于容器的。
二、Kubernetes 的核心的功能①服务的发现与负载的均衡;②容器的自动装箱,我们也会把它叫做 scheduling,就是“调度”,把一个容器放到一个集群的某一个机器上,Kubernetes 会帮助我们去做存储的编排,让存储的声明周期与容器的生命周期能有一个连接;③Kubernetes 会帮助我们去做自动化的容器的恢复。
k8s知识点一、什么是k8sKubernetes(简称k8s)是一个开源的容器编排和管理工具,用于自动化管理部署、扩展和运行容器化应用程序。
它提供了一种高度可扩展的平台,可以帮助开发者和管理员轻松地管理容器化应用程序的生命周期。
二、k8s的主要特点2.1 自动化部署和扩展Kubernetes提供了自动化的部署和扩展功能。
通过定义和配置Pod、ReplicaSet和Deployment等资源对象,用户可以轻松地将应用程序部署到集群中,并根据应用程序的负载自动扩展应用程序的实例数量。
2.2 服务发现和负载均衡Kubernetes通过Service对象实现了服务发现和负载均衡的功能。
用户可以创建一个Service对象,并将其与Pod对象关联,这样就可以通过Service对象的访问地址访问到后端的Pod实例。
Kubernetes会自动将请求分布到不同的Pod实例上,从而实现负载均衡的效果。
2.3 滚动更新和回滚Kubernetes支持滚动更新和回滚功能。
用户可以通过更新Deployment对象的版本,并修改其定义文件中的镜像版本等属性,来实现应用程序的滚动更新。
如果出现了问题,可以通过回滚操作将应用程序恢复到之前的版本。
2.4 健康检查和自愈能力Kubernetes可以通过健康检查来监控应用程序的状态,并根据健康检查的结果进行自愈操作。
如果某个Pod实例无法正常工作,Kubernetes会自动将其重启或替换掉,确保应用程序的可用性和稳定性。
2.5 水平扩展和高可用性Kubernetes可以根据应用程序的负载自动进行水平扩展。
用户可以定义HorizontalPodAutoscaler对象,并设置目标的CPU利用率或其他指标,Kubernetes会根据目标的值自动扩展或缩减应用程序的实例数量。
这种方式可以确保应用程序始终具有足够的计算资源来应对高负载。
同时,Kubernetes还支持通过多副本的方式提供高可用性服务,确保即使某个Pod实例出现故障,应用程序也能继续正常运行。
k8s基础知识和操作什么是k8sKubernetes(简称k8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。
它提供了一种容器编排的解决方案,可以帮助用户更好地管理和运行容器化的应用程序。
k8s的特点•自动化部署和扩展:Kubernetes可以自动化地部署和扩展应用程序,根据应用程序的需求自动调整资源的分配和调度。
•负载均衡和服务发现:Kubernetes提供了负载均衡和服务发现的功能,可以将流量分发到不同的容器实例,并自动发现和管理服务。
•自我修复:Kubernetes可以自动检测和修复容器实例的故障,确保应用程序的高可用性和稳定性。
•水平扩展:Kubernetes可以根据应用程序的需求自动扩展容器实例的数量,以满足流量的增长。
•灵活的存储:Kubernetes支持多种存储解决方案,包括本地存储、网络存储和云存储,可以根据应用程序的需求选择最合适的存储方式。
k8s的架构Kubernetes的架构主要包括以下几个组件: - Master节点:负责整个集群的管理和控制。
包括以下组件: - API Server:提供对外的API接口,用于管理和操作集群。
- Controller Manager:负责管理集群中的控制器,用于自动化管理集群的状态。
- Scheduler:负责将Pod调度到合适的节点上运行。
- etcd:分布式键值存储系统,用于保存集群的状态数据。
- Node节点:负责运行容器实例。
包括以下组件: - Kubelet:负责与Master节点通信,接收和执行Master节点下发的指令。
- Container Runtime:负责运行和管理容器实例,如Docker。
-Kube-proxy:负责实现集群内部的网络代理和负载均衡。
k8s的基本操作安装和配置k8s集群1.安装Docker:Kubernetes使用Docker作为容器运行时,需要先安装Docker。
k8s最简单的理解全文共四篇示例,供读者参考第一篇示例:Kubernetes,简称K8s,是一个开源的容器编排平台,可以实现容器的部署、扩缩容和管理。
K8s是Google基于Borg系统的经验所开发出来的项目,现由Cloud Native Computing Foundation(CNCF)维护。
作为容器编排领域的领先技术,K8s在云原生应用开发中占据着重要的地位。
Kubernetes的最简单理解可以从以下几个方面来阐述:1. 节点:K8s由多个节点组成,每个节点可以是物理机器、虚拟机器或者云实例。
节点分为Master节点和Worker节点,Master节点负责集群管理和控制,Worker节点负责运行应用程序。
2. Pod:K8s最小的部署单元是Pod,一个Pod可以包含一个或多个容器。
Pod是一个逻辑概念,它代表了一个应用程序或服务的一个实例。
多个容器共享网络和存储空间,可以共享数据和通信。
3. 控制器:K8s通过控制器来管理Pod的生命周期。
控制器是一个控制器对象,它定义了Pod的期望状态和实际状态之间的关系,并负责调整Pod的数量和状态。
4. Service:服务是一个抽象的概念,它定义了一组Pod的访问方式。
Service可以通过标签选择器来选择一组Pod,并提供一个稳定的访问入口,以实现负载均衡和服务发现。
5. Namespace:Namespace用于在K8s集群中创建多个虚拟集群,可以将资源隔离和划分成不同的逻辑单元。
每个Namespace可以有自己的Pod、Service和其他资源。
6. 存储:K8s提供了多种存储方式,包括PV(持久卷)、PVC(持久卷声明)和StorageClass(存储类)。
通过这些API对象可以实现容器对持久化存储的访问。
7. 扩缩容:K8s支持自动扩缩容,可以根据应用的负载和资源利用率来动态调整Pod的数量。
通过HorizontalPodAutoscaler(HPA)和VerticalPodAutoscaler(VPA)实现水平和垂直扩缩容。
k8s 用法1. 什么是 Kubernetes(k8s)?Kubernetes,简称为 k8s,是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。
它提供了一种高度可扩展的架构,可以轻松管理大规模的容器集群。
Kubernetes 最初由 Google 开发,并于2014年开源。
它基于 Google 内部的Borg 系统,借鉴了多年来 Google 在容器化技术方面的经验和最佳实践。
Kubernetes 的目标是简化容器化应用程序的部署和管理,并提供强大的自动化能力。
它通过抽象和自动化底层基础设施来隐藏复杂性,并为开发人员提供一种简单且一致的方式来管理应用程序。
2. Kubernetes 的核心概念在学习和使用 Kubernetes 之前,我们需要了解一些核心概念:2.1 PodPod 是 Kubernetes 中最小且最基本的部署单元。
它可以包含一个或多个紧密相关的容器,并共享同一个网络命名空间、存储卷等资源。
Pod 是在节点上运行容器的逻辑主机。
2.2 NodeNode(节点)是 Kubernetes 集群中的一个工作节点,可以是物理机或虚拟机。
Node 负责运行容器,并由 Kubernetes 主节点进行管理和调度。
2.3 DeploymentDeployment(部署)是一种用于定义 Pod 和 ReplicaSet 的对象。
它指定了应该如何创建和更新 Pod,并可以实现滚动升级、回滚等操作。
2.4 ServiceService(服务)是一种抽象,用于定义一组 Pod 的访问方式。
它为 Pod 提供了一个稳定的网络地址和域名,使得其他应用程序可以通过该地址与 Pod 进行通信。
2.5 NamespaceNamespace(命名空间)是一种资源隔离机制,用于在 Kubernetes 集群中创建多个虚拟集群。
每个命名空间都有自己的资源配额、网络策略等设置,可以将不同的应用程序隔离开来。
Kubernetes(K8s)持久化存储与数据管理在当今云原生应用的发展中,Kubernetes(简称K8s)已经成为了最受欢迎的容器编排平台之一。
K8s提供了许多功能和特性,其中持久化存储和数据管理是构建可靠应用的关键部分。
本文将深入探讨K8s 持久化存储的原理和实践,并介绍数据管理的重要性以及解决方案。
一、K8s持久化存储(Persistent Storage)持久化存储是指将数据保存在长期存储介质中,并能够从不同的容器或节点中进行访问和恢复。
在容器环境下,持久化存储解决了容器的短暂性以及数据的持久性需求。
K8s通过提供持久化卷(Persistent Volume)和持久化卷声明(Persistent Volume Claim)的机制,来实现持久化存储的管理和分配。
持久化卷是实际的存储资源,可以是云服务商提供的块存储、文件存储、分布式存储系统等。
持久化卷声明是对持久化卷的请求,类似于虚拟机中的磁盘挂载。
K8s根据持久化卷声明的要求,动态地将合适的持久化卷绑定到应用程序中。
二、常见的持久化存储类型1. 云存储大多数云服务提供商都提供了云存储服务,比如Amazon EBS、Azure Disk和Google Cloud Persistent Disk等。
这些云存储可以轻松地集成到K8s集群中,通过声明式配置即可使用。
云存储优点在于高可靠性、高可用性和弹性扩展性。
2. 分布式存储系统分布式存储系统可以提供高性能和横向扩展的存储能力。
常见的分布式存储系统包括GlusterFS、Ceph和Rook等。
这些存储系统可以动态地创建和扩展存储卷,并提供数据冗余和故障转移机制。
3. 独立存储解决方案如果不使用云存储或分布式存储系统,还可以选择一些独立的存储解决方案,比如NFS(Network File System)和iSCSI(Internet Small Computer System Interface)。
一文了解K8S
1.什么是k8s?
k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。
2.为什么使用集群?
使用集群是为了掩盖底层的无能,在各种环境中,底层的硬件各不相同,有的是各种低廉的服务器,有的各种云环境,有的是各种vm,有的各种host machine,要想屏蔽底层的细节,增强可靠性和稳定性,从而需要创建集群。
3.创建集群的好处是什么?
创建集群的好处就是,统一对外提供接口,无须进行各种复杂的调用;提供更好的可靠性,服务器宕机那么频繁,物理磁盘那么容易损坏,无须担心,集群统一进行调配;提供更好的性能,组合集群中各个机器的计算存储网络资源,提供更好的TPS和PS;提供横向扩容的能力,在进行横向扩容的时候,性能基本上能呈线性增长。
4.使用集群的主要目标是啥?
用来提供服务,让开发开发的应用程序能在集群上运行,从而需要让开发能运行一个应用来进行测试。
5.在部署完成应用之后,就可以看到应用的名称,期望状态是运行一个pod,当前有一个pod,活动的也是一个,还有启动的时间,那么什么是pod呢?
在k8s里面,集群调度的最小单元就是一个pod,一个pod可以是一个容器,也可以是多个容器,例如你运行一个程序,其中使用了nginx,使用mysql了,使用了jetty,那么可以将这三个使用在同一个pod中,对他们提供统一的调配能力,一个pod只能运行在一个主机上,而一个主机上可以有多个pod。
6.为什么使用pod?
那么有人会问,为什么要使用pod,为什么不能直接使用容器呢?使用pod,相当与一个逻辑主机,还记得创建一个vm,在vm上运行几个进程么,其实道理是一样的,pod的存在主要是让几个紧密连接的几个容器之间共享资源,例如ip地址,共享存储等信息。
如果直接调度容器的话,那么几个容器可能运行在不同的主机上,这样就增加了系统的复杂性。
发布应用主要就是对外提供服务,可能会有人提出疑问,我都运行了服务,为什么还不能提供服务,这是因为在集群当中,创建的ip地址等资源,只有在同一个集群中才能访问,每个pod也有独一的ip地址,当有多个pod提供相同的服务的时候,就需要有负载均衡的能力,从而这里就涉及到一个概念就是service,专门用来提供服务的。
7.K8s架构概览
K8s集群由主结点和工作结点两类结点构成。
其中主结点上运行着K8s Control Plane,控制并管理着整个K8s系统;工作结点上运行用户实际部署到K8s应用。
K8s的结点上运行着一些组件,共同协作以完成容器编排,其中主要的组件有:
Etcd:一款开源软件。
提供可靠的分布式数据存储服务,用于持久化存储K8s集群的配置和状态。
K8s API server :用户程序(如kubectl)、K8s其它组件之间通信的接口。
K8s其它组件之间不直接通信,而是通过API server通信的。
这一点在上图的连接中可以体现,例如,只有API server连接了etcd,即其它组件更新K8s集群的状态时,只能通过API server读写etcd 中的数据。
Scheduler:排程组件,为用户应用的每一可部署组件分配工作结点。
Controller Manager: 执行集群级别的功能,如复制组件、追踪工作结点状态、处理结点失败等。
Controller Manager组件是由多个控制器组成的,其中很多控制器是按K8s的资源类型划分的,如Replication Manager(管理ReplicationController 资源),ReplicaSet Controller,PersistentVolume controller。
kube-proxy:在应用组件间负载均衡网络流量。
Kubelet:管理工作结点上的容器。
Container runtime: Docker, rkt等实际运行容器的组件。
8.在K8s中运行一个容器应用
下面通过运行一个容器应用的过程,来一起理解一下K8s组件是如何协作的。
开发者开发一个应用后,打包Docker镜像,上传到Docker registry;然后编写一个yaml 部署描述文件,以描述应用的结构和资源需求。
开发者通过kubectl(或其它应用),将部署描述文件提交到API server,API server将部署需求更新到etcd。
etcd在K8s管理结点中的作用相当于数据库,其它组件提交到API server的数据都存储于etcd。
API server非常轻量,并不会直接去创建或管理Pod等资源,在多数场景下甚至不会去主动调用其它的K8s组件发出指令。
其它组件通过建立和API server的长连接,监视关心的对象,监视到变化后,执行所负责的操作。
继续我们的启动应用之旅,如图所示,Controller Manager中的控制器监视到新的部署描述后,根据部署描述,创建ReplicaSet、Pod等资源。
Scheduler监视到新的Pod资源后,结合集群的资源情况,选定一或多个工作结点运行Pod。
工作结点上的Kubelet监视到有Pod 被计划在自己的结点后,向Docker等Container runtime发出启动容器的指令,Docker engineer 将按照指令从Docker registy拉取镜像,然后启动并运行容器。
9.K8s集群的高可用部署
通过之前的介绍,我们看到K8s可以在多个工作结点上启动并管理容器,下面来学习一下,如何实现管理结点的高可用部署。
上图的K8s高可用部署中有3个管理结点。
etcd自身是一个分布式数据存储系统,按照其多实例部署方案,结点只需在启动时知道其它结点的IP和端口号即可组成高可用环境。
和通常的应用服务器一样,API Server是无状态的,可以运行任意多个实例,且彼此之间无需互相知道。
为了能使kubectl等客户端和Kubelet等组件连接到健康的API Server、减轻单台API Server的压力,需使用基础架构提供的负载均衡器作为多个API Server实例的入口。
如上图的部署方法,每个主结点上都运行了一个etcd实例,这样API Server只需连接本地的etcd实例即可,无需再使用负载均衡器作为etcd的入口。
Controller Manager和Scheduler需要修改K8s集群,同时修改时可能引发并发问题。
假设两个ReplicaSet Controller同时监视到需创建一个Pod,然后同时进行创建操作,就会创建出两个Pod。
K8s为了避免这个问题,一组此类组件的实例将选举出一个leader,仅有leader 处于活动状态,其它实例处于待命状态。
Controller Manager和Scheduler也可以独立于API server部署,通过负载均衡器连接到多个API server实例。