来人阿,先上个架构图
图片来源 官网
从架构图上面看的出来,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
,支援http
与https
,因为http安全性低,建议还是以https为主,不管https或是http,api格式都相同。
目前k8s套件或是工具都是使用REST API
跟k8s取得资料,如果有使用 client-go套件跟k8s取资料时就知道,它本身都是打REST API
-- 资料来源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
以下二个因为个人使用上比较无感...所以就单纯列出功能说明
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当成是一台主机,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
前言 这是 Obsidian 使用教学 — 基础篇的第 8 篇文章。 在 上一篇文章 中,我介绍了一...
前面介绍完了全端,今天要来介绍环境 什麽是环境呢,环境就是你要写程序之前所需要准备好的东西 意思就是...
Cookie HTTP cookie 简称为Cookie,当使用者浏览网页时,web server会...
Spark 支援批次资料、查询分析、资料流、机器学习及图处理(Graph Processing),...
今天是30天程序语言研究的第十三天,由於深度学习老师多让我们上了python的进阶课程里面包括之前没...