组件 - 图2

核心组件

配置存储中心→etcd服务
高可用奇数个

主控( master )节点

kube-apiserver

  • 提供了集群管理的RESTAPI接口(包括鉴权、数据校验及集群状态变更)
  • 负责其他模块之间的数据交互,承担通信枢纽功能
  • 是资源配额控制的入口
  • 提供完备的集群安全机制

    kube-controller-manager

  • 由一系列控制器组成,通过apiserver监控整个集群的状态,并确保集群处于预期的工作状态

Node Controller
Deployment Controller
Service Controller
Volume Controller
Endpoint Controller
Garbage Controller
Namespace Controller
Job Controller
Resource quta Controller

kube-scheduler

  • 主要功能是接收调度pod到适合的运算节点上
  • 预选策略( predict )
  • 优选策略( priorities )

    运算(node)节点

    kube- kubelet

  • 简单地说, kubelet的主要功能就是定时从某个地方获取节点上pod的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等等) ,并调用对应的容器平台接口达到这个状态

  • 定时汇报当前节点的状态给apiserver,以供调度的时候使用
  • 镜像和容器的清理工作,保证节点上镜像不会占满磁盘空间,退出的容器不会占用太多资源

    Kube-proxy

  • 是K8S在每个节点 上运行网络代理, service资源的载体

  • 建立了pod网络和集群网络的关系( clusterip >podip )
  • 常用三种流量调度模式

Userspace
Iptables
Ipvs

  • 负责建立和删除包括更新调度规则、通知apiserver自己的更新,或者从apiserver哪里获取其他kube- proxy的调度规则变化来更新自己的

    CLI客户端

    kubectl

    Kubernetes 命令行工具,kubectl,使得你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。

    核心附件

    CNI网络插件→flannel/calico

    k8s设计了网络模型,但却将他的实现交给了网络插件,CNI网络插件最主要的功能就是实现POD资源能够跨主机进行通信
    种类众多,以**flannel**为例
    三种常用工作模式
    优化SNAT规则

    服务发现用插件→coredns

    服务(应用)之间相互定位的过程
    集群网络> Cluster IP
    Service资源→Service Name .
    **Coredns**软件>实现了Service Name和Cluster IP的自动关联

    服务暴露用插件→traefik

    Ingress资源→专用于暴露7层应用到K8S集群外的一-种核心资源(http/https)
    Ingress控制器>一个简化版的nginx (调度流量) + go脚本(动态识别yaml)
    **Traefik**软件→实现了ingress控制器的一个软件

    GUI管理插件→Dashboard