kkwen

kubernetes集群组件
本节介绍kubernetes集群层面的组件apiserver、controller-manager、schedul...
扫描右侧二维码阅读全文
16
2019/01

kubernetes集群组件

本节介绍kubernetes集群层面的组件apiserver、controller-manager、scheduler、etcd以及kubelet、kube-proxy、容器引擎。

Master节点主要由apiserver、controller-manager、scheduler三个组件,以及一个用于集群状态存储的etcd存储服务组成
Node节点则主要包含 kubelet、kube-proxy以及容器引擎(最常见的就是Docker)
此外完整集群服务还依赖于KubeDNS

Master组件

  1. API Server
    apiserver负责输出RESTful风格的kubernetes API,它是发往集群所有REST操作命令的接入点,负责接收、校验并响应所有的REST请求,结果状态被存储于etcd中,API Server是整个集群的网关
  2. 集群状态存储(Cluster State Store)
    k8s所有的状态信息都存储于etcd中。etcd是独立的服务组件,并不隶属于k8s自身,生产环境中应该以etcd集群的方式运行确保其服务可用性
  3. 控制器管理器(Controller Manager)
    k8s集群级别的大多数功能是由几个被称为控制器的进程执行实现的,这几个进程被集成于kube-controller-manager守护进程中,控制器主要完成生命周期功能和API业务逻辑

    • 生命周期功能: 包括Namespace创建和生命周期、Event垃圾回收、Pod终止相关的垃圾回收、级联垃圾回收及Node垃圾回收
    • API业务逻辑: 例如由ReplicaSet执行的Pod的扩展等
  4. 调度器(Scheduler)
    API Server确认Pod对象的创建请求之后,需要由Scheduler根据集群内各节点的可用资源状态,以及要运行的容器的资源需求做出调度决策

Node组件

Node负责提供容器运行环境,并接受Master的管理

  1. Node的核心代理程序kubelet
    kubelet是运行于工作节点之上的守护进程,它从API Server接收关于Pod对象的配置信息并确保它们处于期望的状态,kubelet会在API Server上注册当前工作节点,定期向Master汇报节点资源使用情况,并通过cAdvisor监控容器和节点的资源占用状况
  2. 容器运行时环境
    每个Node都要提供一个容器运行时环境,他负责下载镜像并运行容器

kubelet并未固定链接至某容器运行环境时,而是以插件的方式载入配置的容器环境,这种方式清晰的定义了各组件的边界
目前k8s支持Docker、RKT、cri-o和Fraki等

  1. kube-proxy
    每个工作节点都需要运行一个kube-proxy守护进程,它能够按需为Service资源对象生成iptables或ipvs规则,从而捕获访问当前Service的ClusterIP的流量并将其转发至正确的后端Pod对象

核心组件

kubernetes集群还依赖于一组称为"附件"(add-ons)的组件以提供完整的功能,它们通常是第三方提供的特定应用程序,且托管于k8s组件之上

  • KubeDNS: 在k8s集群中调度运行提供DNS服务的Pod,同一集群中的其他Pod可使用此DNS服务解决主机名。k8s自1.11版本开始默认使用CoreDNS项目为集群提供服务注册和服务发现的动态名称解析服务,之前用到的是kube-dns项目,而SkyDNS是更早的项目
  • Kubernetes Dashboard: k8s集群的全部功能都要基于WEB的UI,来管理集群中的应用甚至是集群自身
  • Heapster: 容器和节点的性能监控与分析系统,它收集并解析多种指标数据,如资源利用率、生命周期事件等。新版本的k8s中,其功能逐渐由Prometheus结合其它组件代替
  • Ingress Controller: service是一种工作于传统层的负载均衡器,而Ingress是在应用层实现的HTTP(s)负载均衡机制。不过Ingress资源自身并不能进行"流量穿透",它仅是一组路由规则的集合,这些规则需要通过Ingress控制器发挥作用。目前可用的项目有Nginx、Traefik、Envoy及HAProxy等
最后修改:2019 年 01 月 18 日 03 : 27 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论