Kubernetes基础概念

Kubernetes是一个开源平台,用于管理容器化工作负载和服务,提供声明式配置和自动化。它可以做服务发现、负载均衡、存储编排、自动部署和回滚等。基本概念包括Pod、控制平面、节点、控制器等。Pod是最小部署单位,控制平面管理集群,节点运行容器,控制器确保系统状态。Kubernetes不能提供PaaS、构建应用或内置服务。关键组件包括kube-apiserver、kube-scheduler、kube-control-manager等,还有DNS、Dashboard等插件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Kubernetes是什么

Kubernetes (k8s)是一个可移植的(portable)、可扩展的(extensible)开源平台(open-source platform),用于管理容器化的工作负载(containerized workloads)和服务,可促进声明式配置(declarative configuration)和自动化。

传统部署方式vs虚拟化部署vs容器化部署
在这里插入图片描述

Kubernetes能做什么

  • 服务发现和负载均衡(service discovery & load balancing)
  • 存储编排(storage orchestration)
  • 自动部署和回滚(automated rollouts & rollbacks)
  • 自动完成装箱计算(automatic bin packing)
  • 自我修复(self-healing)
  • 密钥与配置管理(secret & configuration management)

Kubernetes不能做什么

  • 不是一个传统的、包罗万象的PaaS;
  • 不限制支持的应用程序类型;
  • 不部署源代码,也不构建你的应用程序;
  • 不提供应用程序级别的服务作为内置服务,例如中间件、数据库、数据处理框架、缓存、集群存储系统;
  • 不要求日志记录、监控或警报解决方案;
  • 不提供也不采用任何全面的机器配置、维护、管理或自我修复系统。

基本概念

Pod

Pod是可以在Kubernetes中创建和管理的、最小的可部署的计算单元。Pod是一组(一个或多个)正在运行的容器;这些容器共享存储、网络、以及怎样运行这些容器的声明(specifications)。Pod中的内容总是并置(colocated)的并且一同调度,在共享的上下文(context)中运行。Pod所建模的是特定于应用(application-specific)的“逻辑主机”(logical host),其中包含一个或多个应用容器, 这些容器是相对紧密的耦合在一起的。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于在同一逻辑主机上运行的云应用。

控制平面(control plane)

控制平面是指容器编排层,它暴露 API 和接口来定义、 部署容器和管理容器的生命周期。这个编排层是由多个不同的组件组成,例如以下(但不限于)几种: etcd、API服务器、调度器、控制器管理器、云控制器管理器。这些组件可以以传统的系统服务运行也可以以容器的形式运行。运行这些组件的主机过去称为master节点

节点(node)

Kubernetes中的工作机器称作节点。工作机器可以是虚拟机也可以是物理机,取决于集群的配置。其上部署了运行Pods所必需的本地守护进程或服务,并由主控组件来管理。节点上的的守护进程包括kubelet、kube-proxy以及一个Docker这种实现了CRI的容器运行时。

控制器(controller)

在Kubernetes中,控制器通过监控集群的公共状态,并致力于将当前状态转变为期望的状态。控制器(控制平面的一部分)通过apiserver监控集群中的公共状态。

容器(container)

容器是可移植、可执行的轻量级的镜像,包含其中的软件及其相关依赖。容器使应用和底层的主机基础设施解耦,降低了应用在不同云环境或者操作系统上的部署难度,便于应用扩展。

工作负载(Workload)

工作负载是在Kubernetes上运行的应用程序。代表不同类型或部分工作负载的各种核心对象包括DaemonSet、Deployment、Job、ReplicaSet和 StatefulSet。具有Web服务器和数据库的工作负载可能在一个StatefulSet中运行数据库, 而Web服务器运行在Deployment。

服务(service)

将运行在一组Pods上的应用程序公开为网络服务的抽象方法。服务所针对的Pod集(通常)由选择算符确定。 如果有Pod被添加或被删除,则与选择算符匹配的Pod集合将发生变化。 服务确保可以将网络流量定向到该工作负载的当前Pod集合。

命名空间(Namespace)

命名空间是Kubernetes为了在同一物理集群上支持多个虚拟集群而使用的一种抽象。命名空间用来组织集群中对象,并为集群资源划分提供了一种方法。同一命名空间内的资源名称必须唯一,但跨命名空间时不作要求。

DaemonSet

确保Pod的副本在集群中的一组节点上运行。用来部署系统守护进程,例如日志搜集和监控代理,这些进程通常必须运行在每个节点上。

Deployment

Deployment是管理应用副本的API对象,通常通过运行没有本地状态的Pods来实现。应用的每个副本就是一个Pod,并且这些Pod会分散运行在集群的节点上。

Kubernetes 组件

一个k8s集群(cluster)由一组被称作节点(nodes)的机器组成。这些节点上运行k8s所管理的容器化应用。一个集群至少有一个工作节点(worker node)。工作节点托管(host)作为应用负载的组件的Pod。控制平面(control plane)管理集群中的工作节点和Pod。在生产环境(production environment)中,控制平面一般跨多主机运行,集群跨多个节点运行,以提供容错性和高可用性。
在这里插入图片描述

控制平面组件

控制平面的组件对集群做出全局决策(比如调度),以及检测和响应集群事件。控制平面组件可以在集群中的任何节点上运行。为简单起见,setup脚本通常会在同一台机器上启动所有控制平面组件,且不会在此计算机上运行用户容器。
控制平面组件包括:

kube-apiserver
kube-apiserver是Kubernetes API服务器的主要实现。API服务器是k8s控制平面的前端。kube-apiserver设计上考虑了水平伸缩,也就是说它可以通过部署多个实例进行伸缩。你可以运行kube-apiserver的多个实例,并在这些实例之间平衡流量。

etcd
etcd是兼具一致性和高可用性的键值数据库,可以作为保存Kubernetes所有集群数据的后台数据库。

kube-scheduler
kube-scheduler负责监视新创建的、未指定运行节点的Pods,选调节点让Pod 在上面运行。调度决策考虑的因素包括单个Pod和Pod集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。

kube-control-manager
kube-control-manager是运行控制器(controller)进程的组件。从逻辑上讲,每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。可以运行的控制器包括:

  • 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应;
  • 副本控制器(Replication Controller):负责为系统中的每个副本控制器对象维护正确数量的Pod;
  • 端点控制器(Endpoints Controller):填充端点对象(即加入Service与Pod);
  • 服务账号和令牌控制器(Service Account & Token Controllers):为新的命名空间(namespaces)创建默认帐户和API访问令牌。

cloud-controller-manager
云控制器管理器是指嵌入特定云的控制逻辑的控制平面组件。云控制器管理器允许您链接聚合到云供应商的API中,并将与云平台交互的组件跟与集群交互的组件分离开来。cloud-controller-manager仅运行与云平台相关的控制器。如果你在自己的环境中运行Kubernetes,或者在本地计算机中运行学习环境,所部署的环境中不需要云控制器管理器。与kube-control-manager类似,cloud-controller-manager将若干逻辑上独立的控制回路组合到同一个可执行文件中,以同一进程的方式运行。你可以对其执行水平扩容以提升性能或容错能力。以下的控制器都包含对云平台供应商的依赖:

  • 节点控制器(Node Controller):用于在节点终止响应后检查云供应商以确定节点是否已被删除;
  • 路由控制器(Route Controller):用于在底层云基础架构中设置路由;
  • 服务控制器(Service Controller):用于创建、更新和删除云供应商负载均衡器。

Node组件

节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境(runtime environment)。

kubelet
kubelet是一个在集群中每个节点上运行的代理。 它保证容器都在Pod中运行。kubelet接收一组通过各类机制提供给它的PodSpecs参数,确保这些PodSpecs中描述的容器处于运行状态且健康。kubelet不会管理不是由Kubernetes创建的容器。

kube-proxy
kube-proxy是集群中每个节点上运行的网络代理, 是实现Kubernetes服务概念的一部分。kube-proxy维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与Pod进行网络通信。如果操作系统提供了数据包过滤层(packet filtering layer)并可用的话,kube-proxy会通过它来实现网络规则。否则,kube-proxy仅转发流量本身。

Container runtime
容器运行环境是负责运行容器的软件。Kubernetes支持多个容器运行时(runtimes): Docker、containerd、CRI-O以及任何实现Kubernetes CRI(容器运行环境接口)。

插件(Addons)

插件使用 Kubernetes 资源(DaemonSet、 Deployment等)实现集群功能。 因为这些插件提供集群级别的功能,插件中命名空间域的资源属于kube-system命名空间。
下面是几种常见的插件。

DNS
尽管其他插件都并非严格意义上的必需组件,但几乎所有Kubernetes集群都应该有集群DNS。集群DNS是一个DNS服务器,和环境中的其他DNS服务器一起工作,它为Kubernetes服务提供DNS记录。Kubernetes启动的容器自动将此DNS服务器包含在其DNS搜索列表中。

Web UI (Dashboard)
仪表盘(Dashboard)是Kubernetes集群的通用的、基于Web的用户界面。 它使用户可以管理集群中运行的应用程序以及集群本身,并进行故障排除。

Container Resource Monitoring
容器资源监控将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供用于浏览这些数据的界面。

Cluster-level Logging
集群层面日志机制负责将容器的日志数据保存到一个集中的日志存储中,该存储能够提供搜索和浏览接口。

SOURCE:
[1] https://kubernetes.io/docs/concepts/overview/components/
[2] https://kubernetes.io/zh/docs/reference/glossary/?fundamental=true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值