如何理解kubernetes概念

一,k8s框架与组件

etcd(持久化存储)

Etcd是CoreOS开源的一个高可用强一致性的分布式存储服务。
Kubernetes使用Etcd作为数据存储后端,把需要记录的pod、rc、service等资源信息存储在Etcd中


Etcd使用raft算法将一组主机组成集群,raft 集群中的每个节点都可以根据集群运行的情况在三种状态间切换:
follower、candidate与leader。
leader 和follower 之间保持心跳,如果follower在一段时间内没有收到来自leader的心跳,就会转为candidate,发出新的选主请求。当一个节点获得了大于一半节点的投票后会转为leader节点

apiServer(k8s访问接口)

API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。
在 kubernetes 集群中,API Server 有着非常重要的角色。API Server负责和etcd交互(其他组件不会直接操作etcd,只有 API Server 这么做),是整个 kubernetes 集群的数据中心,所有的交互都是以API Server为核心的。简单来说,API Server 提供了以下功能:

1. 整个集群管理的API接口:所有对集群进行的查询和管理都要通过API Server来进行
2. 集群内部各个模块之间通信的枢纽:所有模块之之间并不会之间互相调用,而是通过和 API Server 打交道来完成自己那部分的工作
3. 集群安全控制:API Server 提供的验证和授权保证了整个集群的安全

Controller-manager(管理控制)

Controller Manager 是一个集群内部的管理控制中心,有一组控制器构成,这组控制器负责集群内部的 Node、Pod、Endpoint、Namespace、ServiceAccount、ResourceQuota 等等资源的管理。
每个Controller通过API Server提供的接口实时监控整个集群的每个资源对象的当前状态,当发生各种故障导致系统状态发生变化时,会尝试将系统状态修 复到“期望状态”。

scheduler(调度)

负责集群的资源调度,为新建的pod分配机器。
根据特定的调度算法将pod调度到指定的工作节点(Node)上,这一过程也叫绑定(bind)。Scheduler的输入为需要调度的Pod 和可以被调度的节点(Node)的信息,输出为调度算法选择的Node,并将该pod bind到该Node。

调度过程分为两步, predicate以及prioritize
1. predicate筛选满足条件的node
2. prioritize给剩下node打分,选择分数最高的node,作为bind的node

kube-proxy(网络转发)

kube-proxy负责service的实现,即实现了k8s内部从pod到service和外部从node port到service的访问。

集群中的每个 Node 都有 Kubelet 进程,该进程用于处理 Master 节点下发到本节点的任务,管理 Pod 以及Pod 中的容器。
节点管理:kubelet 启动时向 API Server 注册节点信息,并定时向 API Server 汇报节点状况;
Pod管理:创建/删除 Pod,下载容器镜像,用 Pause 创建容器,运行容器,校验容器是否正确等;

kubelet(任务执行)

容器健康检查: 通过访问容器的 HTTP 接口(HTTP 状态码作为判断依据)来判断容器是否健康;
cAdvisor 资源监控: cAdvisor 集成到 kubelet 程序的代码之中,负责查找当前节点的容器,自动采集容器级别的 CPU、内存、文件系统和网络使用的统计信息。

二,k8s基本原语与操作

namespace(命名空间)

通过将系统内部的对象“分配”到不同的Namespace中,形成逻辑上分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理,namespace与Resource Quota(配额)一起提供多租户管理
Kubernetes集群在启动后,会创建一个名为“default”的Namespace,如果不特别指明Namespace,则用户创建的Pod、RC、Service都被系统创建到“default”的Namespace中。
kube-system是预留的命名空间,系统服务在kube-system下运行可以通过配置RBAC, 每个用户只能使用自己命名空间下的资源

resource quota(配额)
1. 用于限制命名空间下资源的使用
2. 命名空间下如果没有配额, 则视为无限制
3. 可以限制cpu,memory,存储卷等
4. 目前主要是限制pod的创建

Pod(容器组)

K8S中最小的调度单位
 一个pod只会调度到一台机器,不会横跨两台机器
 一个pod调度完成之后,不会移动到其他机器
容器组中包含一个或多个容器

• 共享网络空间
• infra 容器用于维持容器组IP
• 共享存储卷

pod来源:
• 用户可以创建pod
• Job,Rs,Deployment,Statefulset产生 

Label&Annotation(标签&注释)

所有k8s元素共有属性
• label
key=value,value是简单字符串
• 用于资源选择以及简单的数据存放

deployment

pod生命周期
Pending (pod中至少还有一个容器还没有启动)
Running (pod中所有容器都启动了,并且至少一个容器还在运行中)
Succeed (pod中所有容器都退出了,并且都成功退出)
Failed (pod中所有容器都退出了,并且至少一个容器失败退出)
Unknow (无法或者容器状态)


广告位

猜你喜欢

转载自blog.csdn.net/wannuoge4766/article/details/103147215