Kubernetes( 一丶基础知识与核心组件)

本文介绍了Kubernetes的基础知识,包括它的核心组件、分层架构和工作原理。Kubernetes作为自动化容器操作的开源平台,能实现容器的部署、复制、扩展等功能。文章详细阐述了Master节点、Node节点、Pod、Replication Controller、Service等概念,并概述了k8s的分层架构和组件通信方式。

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

原文链接: k8s(Kubernetes 一丶基础知识与核心组件).

1. 什么是Kubernetes?

Kubernetes(又名k8s ,8是中间8个字母 "ubernete"的缩写)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,那么可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket(另一种容器技术)
使用Kubernetes可以:

  • 自动化容器的部署和复制
  • 随时扩展或收缩容器规模
  • 将容器组织成组,并且提供容器间的负载均衡
  • 很容易地升级应用程序容器的新版本
  • 提供容器弹性,如果容器失效就替换它,等等…

基本概念

  • Master
    Master节点是控制节点,由三个紧密协作的独立组件组合而成。其中,APIServer负责API服务;Controller Manager负责负责容器编排;Scheduler负责容器调度。
  • Node
    节点是计算节点,其中也有很多其他组件
  • kubelet
    主要负责同容器运行时打交道
    CRI,远程调用接口,定义了容器运行时的各项核心操作
    OCI,通过容器运行时规范同底层的Linux系统进行交互,即把CRI请求翻译成对Linux操作系统的调用(操作Linux的Cgroups和Namespace)
  • Pod
    PodKubernetes的基本操作单元,把相关的一个或多个容器构成一个Pod,通常Pod里的容器运行相同的应用。Pod包含的容器运行在同一个Node上,看作一个统一管理单元,共享相同的volumesnetwork namespace/IPPort空间
  • Replication Controller
    Replication Controller确保任何时候Kubernetes集群中有指定数量的pod副本(replicas)在运行, 如果少于指定数量的pod副本(replicas),Replication Controller会启动新的Container,反之会杀死多余的以保证数量不变。Replication Controller使用预先定义的pod模板创建pods,一旦创建成功,pod 模板和创建的pods没有任何关联,可以修改pod 模板而不会对已创建pods有任何影响,也可以直接更新通过Replication Controller创建的pods。对于利用pod 模板创建的podsReplication Controller根据label selector来关联,通过修改podslabel可以删除对应的pods
  • Service
    Service也是Kubernetes的基本操作单元,是真实应用服务的抽象,每一个服务后面都有很多对应的容器来支持,通过Proxyport和服务selector决定服务请求传递给后端提供服务的容器,对外表现为一个单一访问接口,外部不需要了解后端如何运行,这给扩展或维护后端带来很大的好处。
  • Label
    Label是用于区分Pod、Service、Replication Controllerkey/value键值对Pod、Service、 Replication Controller可以有多个label,但是每个label的key只能对应一个valueLabelsServiceReplication Controller运行的基础,为了将访问Service的请求转发给后端提供服务的多个容器,正是通过标识容器的labels来选择正确的容器。同样,Replication Controller也使用labels来管理通过pod 模板创建的一组容器,这样Replication Controller可以更加容易,方便地管理多个容器,无论有多少容器。

k8s架构图

2. k8s分层架构

Kubernetes 设计理念和功能其实就是一个类似 Linux 的分层架构
在这里插入图片描述

  1. 核心层:Kubernetes 最核心的功能,对外提供 API 构建高层的应用,对内提供插件式应用执行环境
  2. 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等) 和路由(服务发现、DNS 解析等)
  3. 管理层:系统度量(如基础设施、容器和网络的度量) ,自动化(如自动扩展、动态 Provision 等) 以及策略管理(RBAC、Quota、PSP、NetworkPolicy 等)
  4. 接口层:kubectl 命令行工具、客户端 SDK 以及集群联邦
  5. 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴
  6. Kubernetes 外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps 等
  7. Kubernetes 内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

3. k8s核心组件

Kubernetes 主要由以下几个核心组件组成:

  • etcd 保存了整个集群的状态;
  • kube-apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • kube-controller-manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • kube-scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
  • kubelet 负责维持容器的生命周期,同时也负责 Volume(CVI) 和网络 (CNI) 的管理;
  • Container runtime 负责镜像管理以及 Pod 和容器的真正运行 (CRI) ,默认的容器运行时为 Docker
  • kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡;

除了核心组件,还有一些推荐的 Add-ons:

  • kube-dns 负责为整个集群提供 DNS 服务
  • Ingress Controller 为服务提供外网入口
  • Heapster 提供资源监控
  • Dashboard 提供 GUI
  • Federation 提供跨可用区的集群
  • Fluentd-elasticsearch 提供集群日志采集、存储与查询

4. 组件通信

Kubernetes 多组件之间的通信原理为

  • API Server 负责 etcd 存储的所有操作,且只有 API Server 才直接操作 etcd 集群
  • API Server 对内(集群中的其他组件) 和对外(用户) 提供统一的 REST API,其他组件均通过 API Server 进行通信
    Controller Manager、Scheduler、Kube-proxy 和 Kubelet 等均通过 API Serverwatch API 监测资源变化情况,并对资源作相应的操作
    所有需要更新资源状态的操作均通过 API Server 的 REST API 进行
  • API Server 也会直接调用 Kubelet API(如 logs, exec, attach 等) ,默认不校验
  • Kubelet 证书,但可以通过 --kubelet-certificate-authority 开启(而 GKE通过 SSH 隧道保护它们之间的通信)
    比如典型的创建 Pod 的流程为:
    创建pod
  1. 用户通过 REST API 创建一个 Pod
  2. API Server 将其写入 etcd
  3. Scheduluer 检测到未绑定 Node 的 Pod,开始调度并更新 Pod 的 Node 绑定
  4. Kubelet 检测到有新的 Pod 调度过来,通过 Container Runtime 运行该 Pod
  5. Kubelet 通过 Container Runtime 取到 Pod 状态,并更新到 API Server 中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值