K8s的物理架构是master/node模式:
K8s集群至少需要一个主节点(Master)和多个工作节点(Worker),Master节点是集群的控制节点,负责整个集群的管理和控制,主节点主要用于暴露API,调度部署和节点的管理。工作节点主要是运行容器的。
Master 节点一般包括四个组件,apiserver、scheduler、controller-manager、etcd,他们分别的作用是什么:
Apiserver:上连其余组件,下接ETCD,提供各类 api 处理、鉴权,和 Node 上的 kubelet 通信等,只有 apiserver 会连接 ETCD。
Controller-manager:控制各类 controller,通过控制器模式,致力于将当前状态转变为期望的状态。
Scheduler:调度,打分,分配资源。
Etcd:整个集群的数据库,也可以不部署在 Master 节点,单独搭建。
Node 节点一般也包括三个组件,docker,kube-proxy,kubelet
Docker:具体跑应用的载体。
Kube-proxy:主要负责网络的打通,早期利用 iptables,现在使用 ipvs技术。
Kubelet:agent,负责管理容器的生命周期。
控制平面组件简要说明:
1、kube-apiserver/api接口
对外暴露K8S的api接口,是外界进行资源操作的唯一入口
提供认证、授权、访问控制、api注册和发现等机制
需部署在 master 节点上;是 Kubernetes 控制面的前端。kube-apiserver 在设计上考虑了水平扩展的需要,如果我们需要搭建集群,可以安装基数节点的kube-apiserver,然后可通过负载均衡器做集群
2、etcd/k8s后台数据库
etcd 是兼具一致性和高可用性的键值数据库,官方建议作为 Kubernetes 所有集群数据的后台数据库
Kubernetes集群的etcd数据通常需要有个备份计划
3、kube-scheduler/k8s pod调度器 ==
需部署在 master 节点上,该组件监视那些新创建的未指定运行节点的 Pod,并选择节点让 Pod 在上面运行。
调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。
所有对K8S的集群操作,都必须经过主节点进行调度。
4、kube-controller-manager/k8s管理器
需部署在 master 节点上。 从逻辑上讲,每个控制器都是一个单独的进程,但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。
这些控制器包括:
1、节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应
2、副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod
3、端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)
4、服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌
5、cloud-controller-manager/云控制器管理器
运行与基础云提供商交互的控制器,从k8s1.6之后出现的新功能
也包括了多个控制器:节点控制器、路由控制器、服务控制器、数据卷控制器
6、Node节点组件
kubelet/节点管理工具
一个在集群中每个节点运行的代理。它保证容器都运行在Pod中。
负责维护容器的生命周期、同时也负责Volume(CSI)和网络(CNI)的管理。
kubelet负责管理节点的pod,可以理解为当在master上执行创建、删除对象时,kubelet负责执行从kube-apiserver下达的指令
kube-proxy/网络管理器
kube-proxy运行在每个node节点上,管理维护node上的网络规则
(+负责为Service提供cluster内部的服务发现和负载均衡。)
Container Runtime/容器运行环境
简而言之,就是容器。我们需要在node节点安装runtime作为k8s部署容器的运行环境,目前主流当然是docker
Kubernetes支持多个容器运行环境Dockers、Container、cri-o、rktlet以及任何实现Kubernetes CRI(容器运行环境接口)。
fluentd
是一个守护进程,它有助于提供集群层面日志。
集群插件
域名解析服务:如CoreDNS、Cluster DNS
资源监控服务:Prometheus、Metrics-Server
用户的ui管理界面:Dashboard、Kubesphere
集群日志:ELK
镜像仓库:Harbor
K8S一般应用架构
K8S组件之间关系