-
-
[分享]集权系列科普 | 0 成本学新技能,k8s科普指南,一目了然
-
发表于: 2024-9-20 13:49 1733
-
Kubernetes介绍
Kubernetes(简称“k8s”)是 Google 在 2014 年 6 月开源的一个容器集群管理系统,使用Go语言开发,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单且高效,Kubernetes 具有资源调度、部署管理、服务发现、扩容缩容、 监控、维护等功能优势,逐渐成为跨主机集群的自动部署、扩展以及运行应用程序容器的平台。它支持一系列容器工具,包括 Docker 等,主要支持的功能如下:
自我修复:一旦某一个容器崩溃,能够在1秒中迅速启动新的容器。
弹性伸缩:可以根据需求,自动对集群中正在运行的容器数量进行调整。
服务发现:通过自动发现的形式找到它所依赖的服务。
负载均衡:如果多个容器启动,能够自动实现请求的负载均衡。
版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本。
存储编排:可以根据容器自身的需求自动创建存储卷。
Kubernetes原理
kubernetes 采用 “控制面/数据面”架构,集群中计算机被称为“节点”(node),节点可以是实体机器,也可以是虚拟机器,少量的节点用作控制面来执行集群的维护工作,其他的大部分节点被规划为数据面,用来跑业务应用。
控制面的节点在 kubernetes 里叫做Master Node,一般简称为Master,它是整个集群的重要部分,相当于 kubernetes 的大脑和心脏。
数据面的节点在 kubernetes 里叫做Woker Node,一般简称为 Worker 或者 Node,相当于 kubernetes 的手和脚,在Master的指挥下进行工作。
控制面 Master 节点
Kubernetes 集群的控制中心是 Master 节点,它负责管理集群的状态、调度应用程序、监视集群状态等。Master节点由多个组件组成,包括:API Server、Scheduler、Controller Manager和etcd。
API-Server:
负责对外提供集群各类资源的增删改查及 Watch 接口,它是 Kubernetes 集群中各组件数据交互和通信的枢纽。当收到一个创建 Pod 写请求时,对请求进行认证、限速、授权、准入机制并检查,写入到 etcd 即可。kube-apiserver在设计上可水平扩展,高可用 Kubernetes集群中一般多副本部署。
Scheduler:
Scheduler是调度器组件,负责集群 Pod 的调度。通过监听 kube-apiserver 获取待调度的 Pod,基于一系列筛选和评优算法,为 Pod 分配最佳的 Node 节点。
Controller-Manager:
Controller-Manager 包括一些子控制器(副本控制器,节点控制器、命名空间控制器和服务账号控制器等),控制器作为集群内部的管理控制中心,负责集群内的 Node、Pod副本、服务端点(Endpoint)、命名空间 (Namespace)、服务账号 (ServiceAccount)、资源定额 (ResourceQuota)的管理。当Node意外宕机时,Controller-Manager会及时发现并执行自动化修复流程,确保集群中的 pod 副本始终处于预期的工作状态。
Controller-Manager 监测 node 节点机制:
● controller-manager 控制器每间隔 5 秒检查一次节点的状态;
● 如果 controller-manager 控制器没有收到节点的心跳,则将该 node 节点被标记为不可达;
● controller-manager 将在标记为无法访问之前等待 40 秒;
● 如果该 node 节点被标记为无法访问后 5 分钟还没有恢复,controller-manager 会驱逐当前 node 节点的所有 pod,并在其它可用节点重建此 pod。
Pod 高可用机制:
● node monitor period:节点监测周期 5s
● node monitor grace peroiod:节点监视器宽限期 40s
● node eviction timeout:pod 驱逐超时时间 5m
etcd 组件:
作为 Kubernetes 的首要数据存储,etcd 能够存储和复制 Kubernetes 集群所有状态。etcd 是 Kubernetes 集群的关键组件。
Node 节点
Worker 节点,也称为 Node,是 Kubernetes 集群中的工作节点,负责运行应用程序的容器实例。Node上运行的Kubernetes组件有kubelet、kube-proxy和Pod网络。
Kubelet:
负责 Pod 的创建运行,部署在每个节点上的 Agent 的组件。通过监听 APIServer 获取分配到其节点上的 Pod,然后根据 Pod 规格详情,调用运行时组件创建 pause 和业务容器等。
kube-proxy:
Kubernetes 网络代理运行在所有节点上,包括 master 节点,它反映了 node 上 Kubernetes AP1 中定义的服务,并可以通过一组后端进行简单的 TCP UDP 和 SCTP 流转发或者在一组后端进行循环 TCP UDP 和 SCTP 转发,用户必须利用 api Server API 创建一个服务来配置代理,即kube-proxy 通过在主机上维护网络规则并执行连找转发来实现 Kubernetes 服务访问。
kube-proxy 运行在每个节点上,监听 API Server 中服务对象的变化,再通过管理 IPtables 或者 IPVS 规则来实现网络的转发。
Pod:
Pod是最小部署单元,一个Pod由一个或多个容器组成,Pod中容器共享存储和网络,在同一台 Docker 主机上运行。每个 Pod 都会包含一个 “根容器”,包含一个或者多个紧密相连的业务容器。
● Pod 运行在节点 Node 中;
● Pod 是对容器的封装,是 k8s 最小的调度单元,也是 Kubernetes 最重要的基本概念。
Pause 容器是每个 Pod 都有的“根容器”,其对应的镜像属于 Kubernetes 平台的一部分。Kubernetes 为何如此设计Pod?
● 在一组容器作为一个单位的情况下,我们难以判断整组容器的状态。如果其中一个容器死亡,此时是去定义整组容器死亡,还是定义 N/M 的死亡率呢?通过引入与业务无关且不易死亡的 Pause 容器作为 Pod 的根容器,以它的状态代表整组容器的状态,即可解决。
● Pod 里的多个业务容器共享 Pause 容器 IP,共享 Pause 容器挂接Volume,这样既简化了关联的业务容器间的通信问题,也解决了它们之间的文件共享问题。
Kubernetes 为每个 Pod 都分配了唯一的 IP 地址,称之为 Pod IP,一个 Pod ⾥的多个容器共享 Pod IP。Kubernetes 要求底层网络支持集群内任意两个 Pod 之间的 TCP/IP 直接通信,因此一个 Pod 容器与另外主机上的 Pod 容器能够直接通信。
最后,关于k8s科普指南,我们接下来将为大家介绍k8s的攻击面,感谢关注。