[DAY3]K8S元件初探-Control Plane Components

控制平面元件(Control Plane Components)

来人阿,先上个架构图

图片来源 官网

从架构图上面看的出来,Control Plane Components整个k8s丛集最核心的模组。
大概跟人类的大脑一样的概念,进行发号施令的机构,像是调度POD阿,重启POD,或是scale POD等等行为,关於POD,後面会写篇文章介绍。
它主要是由下面几个元件组成,因为这部份有点硬....,所以就用重点的方法介绍为主:

  • kube-apiserver:

    提供Kubernetes API,包括认证授权、数据校验以及集群状态变更等,供用户端及其他元件调用;
    代理集群中的一些附加元件元件,如 Kubernetes UI、metrics-server、npd 等;
    创建 kubernetes 服务,即提供 apiserver 的 Service,kubernetes Service;
    资源在不同版本之间的转换;

    kube-apiserver 使用 REST API,支援httphttps,因为http安全性低,建议还是以https为主,不管https或是http,api格式都相同。
    目前k8s套件或是工具都是使用REST API跟k8s取得资料,如果有使用 client-go套件跟k8s取资料时就知道,它本身都是打REST API /images/emoticon/emoticon01.gif
    -- 资料来源kube-apiserver 的设计与实现
    -- kube-apiserver细部说明API Server

  • etcd:
    分散式key-value资料库,储存k8s的网路设置和pod的状态资料

  • kube-scheduler:
    负责调度cluster里面的pod,根据可用资源,把pod分配到对应的node上面。
    kube-scheduler在调度pod时,会依据下面状态,後面会再说明一下亲和力(affinity 和 anti-affinity),在进行特定服务调度到指定node时用到

    • 公平调度
    • 资源高效利用
    • Qos(Quality of Service) (会再说明)
    • 亲和力(affinity 和 anti-affinity) (会再说明)
    • 资料本地化(data locality)
    • 内部负载干扰(inter-workload interference)
    • deadlines

    -- 资料来源kube-scheduler

以下二个因为个人使用上比较无感...所以就单纯列出功能说明/images/emoticon/emoticon47.gif

  • kube-controller-manager:

    • 节点控制器(Node Controller): 负责在节点出现故障时进行通知和回应
    • 任务控制器(Job controller): 监测代表一次性任务的 Job 对象,然後创建 Pods 来运行这些任务直至完成
    • 端点控制器(Endpoints Controller): 填充端点(Endpoints)物件(即加入 Service 与 Pod)
    • 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建预设帐户和 API 访问令牌
  • cloud-controller-manager

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

    -- 资料来源Kubernetes 元件

Node

简单说,可以把node当成是一台主机,pod运行在node上面,k8s会透过Control Plane把pod调度至最适合的node上面,node在k8s是一个可随时scale的元件,只要有设定auto-scaling的话,会根据资源使用率进来node的缩放,所以当服务loaing过大时,可以随时加机器上去应付需求,真的超方便,实体主机就无法这样子搞了。

而Node包含以下元件

  • kubelet:基於 PodSpec 来工作的。 每个 PodSpec 是一个描述 Pod 的 YAML 或 JSON 物件。 kubelet 接受通过各种机制(主要是通过apiserver)提供的一组PodSpec,并确保这些PodSpec中描述的容器处於运行状态且运行状况良好。 kubelet 不管理不是由 Kubernetes 创建的容器
  • kube-proxy:集群中每个节点上运行的网路代理, 实现 Kubernetes 服务(Service) 概念的一部分
  • Container Runtime:Kubernetes 支援多个容器运行环境: Docker、 containerd、CRI-O 以及任何实现Kubernetes CRI (容器运行环境介面)。

以GKE来说,GKE NODE VERSOIN 1.19後就DEFAULT使用containerd 的 Container-Optimized OS(cos_containerd),而不是使用DOCKER 的 Container-Optimized OS (cos) ,但是docker image还是可以正常的运作在cos_containerd上面。

-- 资料来源kubelet
-- 资料来源Container Runtime
-- 资料来源kube-proxy


<<:  [区块链&DAPP介绍 Day3] 什麽是智能合约

>>:  Day 11:ProgressBar 忙碌圈圈

Day 11 : 操作基础篇 8 - 倍速提升你的操作速度,14 个 Obsidian 快捷键设定建议

前言 这是 Obsidian 使用教学 — 基础篇的第 8 篇文章。 在 上一篇文章 中,我介绍了一...

全端入门Day10_全端之IDE环境首篇

前面介绍完了全端,今天要来介绍环境 什麽是环境呢,环境就是你要写程序之前所需要准备好的东西 意思就是...

19. Cookie/ LocalStorage/ SessionStorage 的差别

Cookie HTTP cookie 简称为Cookie,当使用者浏览网页时,web server会...

大数据平台:分散式计算

Spark 支援批次资料、查询分析、资料流、机器学习及图处理(Graph Processing),...

30天程序语言研究

今天是30天程序语言研究的第十三天,由於深度学习老师多让我们上了python的进阶课程里面包括之前没...