2020-05-21【Kubernetes核心组件】

突然想到了龙卷风

今日鸡汤

我所向往的自律,是每天能够高效地完成工作,然后有充足的时间去享受生活,而不是完美而严苛的时间表。因为,自律本身并不诱人,自律背后的自由才诱人。

今天来看看Kubernetes的核心组件——API Server、

Kubernetes API Server

它的核心功能是提供Kubernetes各类资源对象的增删改查及Watch等HTTP Rest接口,成为集群内各个功能模块之间数据交互和通信的中心枢纽。

Kubernetes API Server是如何运行的?

通过运行在master上的Kube-apiserver进程提供服务。我们可以通过kubectl命令与它交互。

如何保障Kubernetes API Server的安全性?

采用HTTPS安全传输通道与CA签名数字证书强制双向认证。

如何保障Kubernetes API Server的高性能?

  1. 拥有大量高性能的底层代码。在源码中使用协程+队列这种轻量级的高性能并发代码,使单进程的API Server具备多核处理能力。
  2. 普通List接口结合异步Watch接口。
  3. 高性能的etcd数据库。

Kubernetes API Server的架构是什么?

API Server从上到下有四层:

  • API 层:以REST方式提供各种API接口
  • 访问控制层:Authentication+Authorization+Admission Control
  • 注册表层:Kubernetes所有的资源都在注册表中
  • etcd数据库:持久化存储Kubernetes对象的KV数据库

Kubernetes API Server与其他模块通信的典型场景?

  • 与kubelet进程通信:每个Node上的kubelet每隔一个时间周期,就会调用一次API Server的REST接口报告自身状态,API Server收到这些信息后将节点信息更新到etcd中。
  • 与kube-controller-manager交互:kube-controller-manager中的 Node Controller通过API Server提供的Watch接口实时监控Node信息并处理。
  • 与kube-schedule交互:Scheduler通过API Server的Watch接口监听到新建Pod副本的信息后,会执行Pod调度逻辑。

Controller Manager

Kubernetes各个模块的管理者,管理8种Controller。

Replication Controller的作用是什么?

副本控制器是为了确保在任何时候集群某个RC关联的Pod数量都保持预设值。
1) 重新调度:确保在当前cluster有且仅有N个Pod实例。
2)弹性伸缩:调整RC的spec.replicas实现系统的扩容和缩容。
3)滚动升级:改变RC的Pod模板实现系统的滚动升级。

Node Controller的作用是什么?

Node Controller 通过API Server实时获取Node相关信息,实现管理和监控集群中各个Node。

ResourceQuota Controller的作用是什么?

确保指定的资源对象在任何时候都不会超量占用系统物理资源,包括三个层次:
1) 容器级别:对CPU和Memory限制;
2)Pod级别:对Pod内所有容器的可用资源限制;
3)Namespace级别:为同一个Namespace级别的资源限制;

Namespace Controller的作用是什么?

定时通过API Server读取存储在etcd的namespace信息。

Endpoints Controller和Service Controller的作用是什么?

Endpoints Controller负责生成和维护所有Endpoints对象,监听Service和对应的Pod副本的变化,当Service被删除、新建、更改时,删除、新建、更改和该Service同名的Endpoints对象。

Service Controller 监听Service的变化。

Scheduler

Kubernetes Scheduler负责接收Controller Manager创建的新的Pod,将待调度的Pod按照特定调度算法和调度策略绑定到集群中某个合适的Node上,并将绑定信息写在etcd中。

kubelet

每个节点都会启动一个kubelet服务进程,用于处理Master下发到本节点的任务,管理Pod及Pod中的容器。它会在API Server上注册节点自身的信息,定期向Master汇报节点情况。

kube-proxy

在Kubernetes每个Node都会运行一个kube-proxy服务进程,用于将到某个Service的访问请求转发到后端多个Pod实例上。

你可能感兴趣的:(2020-05-21【Kubernetes核心组件】)