kubernetes的部署架构
组件架构图
如图所示kubernetes分为master和node端,以及一个外接的cloud端。
- master 控制平面,control plan,包括 kube-apiserver, kube-scheduler, kube-controller-manager, etcd.
- kube-apiserver
将kubernetes 控制平面api暴露出来的api服务。用于接收用户端的请求,是控制平面的前端,是一个无状态的服务,可以启动多个实例用于分流请求流量。
-
- kube-scheduler
用于watch apiserver的资源变动(增删改查),并调度至合适的node节点,从而来创建pod资源。通过一系列的filtering(过滤),scoring(打分)选取合适的node节点,调度pod运行。
-
- kube-controller-manager
每个控制器都是独立的二进制进程,包括node controller, replication controller, endpoints controller, service account & token controllers。通过空置循环将期望状态和运行状态保持一致。
-
- etcd
高可用,KV结构的kubernetes后端数据存储组件。
-
- cloud-controller-manager
与云厂商服务能力对接组件 又称为kubernetes cloudprovider
- node节点 又称为数据平面 data plan 包括 kubelet, kube-proxy, container runtime
- kubelet
运行在集群每个节点的客户端,确保相关容器运行在pod中,通过pod specs标签描述容器的运行状态。
-
- kube-proxy
运行在集群每个节点的网络代理组件,确保kubernetes服务链接和转发的组件。
-
- container runtime
支持运行容器底层环境的软件。支持docker containerd cri-io rktlet等
- cloud端
作为集群外部的附加能力,通过与cloud-controller-manager组件对接,扩展kubernetes集群于云上动态扩展的特性。
- addons 附加组件
使用kubernetes resources增加集群功能,如DNS, Web UI(dashboard),container resources monitoring,cluster-level logging
-
- dns coredns
- cni (flannel, calico)网络插件接口
- Web UI(dashboard)可视化平台
- container resources monitoring 容器资源监控
- cluster-level logging 负责保存,搜索,查看容器日志
工作流程
- master
用户通过(API, Web UI, CLI)向APIserver 发送请求,kube-schedule 监听apiserver资源变动,同时从node节点选取最合适的node节点开始调度,并把调度结果保存到etcd集群中去。
- node
kubelet也会监听apiserver的资源变动,并在复合的node上通过kubelet调用相关docker引擎进行后续打包和构建操作。