k8s系列之二:k8s总体架构
k8s简述k8s是Kubernetes的简称,Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么
k8s简述
k8s是Kubernetes的简称,Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。
Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着(比如用户想让apache一直运行,用户不需要关心怎么去做,Kubernetes会自动去监控,然后去重启,新建,总之,让apache一直提供服务),管理员可以加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提升工具以及人性化方面,让用户能够方便的部署自己的应用。
k8s总体架构
Kubernetes主要由以下几个核心组件组成:
- etcd保存了整个集群的状态;
- apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
- controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
- kubelet负责维护容器的生命周期,同时也负责Volume(CSI)和网络(CNI)的管理;
- Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
- kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;
除了核心组件外,k8s还有一些推荐组件:
- CoreDns负责为整个k8s集群提供dns服务
- calico解决k8s集群中的网络通信
- flannel解决k8s集群中的网络通信
- Prometheus提供集群资源监控
k8s主要功能
Kubernetes是编排和管理容器的工具,它是基于Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。Kubernetes提供应用部署、维护、 扩展机制 等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下:
-
数据卷: 实现Pod中容器之间数据共享。
-
应用程序健康检查: 容器内服务可能进程阻塞无法处理请求,可以设置监控检查策略保证应用健壮性。
-
复制应用程序实例: 控制器维护着Pod副本数量,保证一个Pod或一组同类的Pod数量始终可用。
-
弹性伸缩: 根据设定的指标(CPU利用率)自动缩放Pod副本数。
-
服务发现: 使用环境变量或DNS服务插件保证容器中程序发现Pod入口访问地址。
-
负载均衡: 一组Pod副本分配一个私有的集群IP地址,负载均衡转发请求到后端容器。在集群内部其他Pod可通过这个ClusterIP访问应用。
-
滚动更新: 更新服务不中断,一次更新一个Pod,而不是同时删除整个服务。
-
服务编排: 通过文件描述部署服务,使得应用程序部署变得更高效。
-
资源监控: Node节点组件集成cAdvisor资源收集工具,可通过Heapster汇总整个集群节点资源数据,然后存储到InfluxDB时序数据库,再由Grafana展示。
-
提供认证和授权: 支持属性访问控制(ABAC)、角色访问控制(RBAC)认证授权策略
k8s集群
k8s集群包含两个部分:一个master节点(主节点)和一群node节点 (工作节点)。
master节点
master节点负责对集群的总体控制,是用户与k8s集群交互的入口
- API Server: Kubernetes API,集群的统一入口,各组件协调者,以HTTP API提供接口服 务,所有对象资源的增删改查和监听操作都 交给APIServer处理后再提交给Etcd存储
- Scheduler:在整个系统中承担了承上启下的重要功能,承上是指它负责接收controller manager创建新的Pod,为其安排一个落脚的目标Node,启下是指安置工作完成后,目标Node上的kubelet服务进程接管后继工作。也就是说scheduler的作用是通过调度算法为待调度Pod列表上的每一个Pod从Node列表中选择一个最合适的Node。
- Controller Manager: 处理集群中常规后台任务,一个资源对应一个控制器,而 ControllerManager就是负责管理这些控制器的。各 个资源控制器如下:
- Replication Controller: 管理维护 Replication Controller,关联Replication Controller和Pod,保证Replication Controller定义的副本数量与实际运行Pod数量一 致。
- Node Controller: 管理维护Node,定期检查 Node的健康状态,标识出(失效|未失效)的Node节 点。
- Namespace Controller: 管理维护 Namespace,定期清理无效的Namespace,包括 Namesapce下的API对象,比如Pod、Service等。
- Service Controller: 管理维护Service, 提供负载以及服务代理。
- EndPoints Controller: 管理维护 Endpoints,关联Service和Pod,创建 Endpoints为Service的后端,当Pod发生变化时, 实时更新Endpoints (即Pod Ip + Container Port)。
- Service Account Controller: 管理维护 Service Account,为每个Namespace创建默认的 Service Account,同时为Service Account创 建Service Account Secret。
- Persistent Volume Controller: 管理维 护Persistent Volume和Persistent Volume Claim,为新的Persistent Volume Claim分配 Persistent Volume进行绑定,为释放的 Persistent Volume执行清理回收。
- Daemon Set Controller: 管理维护Daemon Set,负责创建Daemon Pod,保证指定的Node上正 常的运行Daemon Pod。
- Deployment Controller: 管理维护 Deployment,关联Deployment和Replication Controller,保证运行指定数量的Pod。当 Deployment更新时,控制实现Replication Controller和 Pod的更新。
- Job Controller: 管理维护Job,为Job创建 一次性任务Pod,保证完成Job指定的任务
- Pod Autoscaler Controller: 实现Pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行Pod的伸缩动作
- etcd 是一个分布式的、可靠的 key-value存储系统,它用于存储分布式系统中的关键数据
node节点
node节点是部署服务的实际运行节点,用户部署使用k8s部署的服务通过master节点上的Scheduler组件调度到对应的node节点上运行。
- pod:Pod是k8s的最小部署单元,一个Pod有一个或多个容器组成,Pod中容器共享存储和网络,在同一台Docker主机上运行
- kubectl:kubelet是Master在Node节点上的Agent,每个节点都会启动 kubelet进程,用来处理 Master 节点下发到本节点的任务,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器
- docker:运行容器的引擎
- kube-proxy:在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作,kube-proxy 本质上,类似一个反向代理。我们可以把每个节点上运行的 kube-proxy 看作 service 的透明代理兼LB(负载均衡)。kube-proxy 监听 apiserver 中service 与Endpoint 的信息,配置iptables 规则,请求通过iptables 直接转发给pod
- fiannel:集群中的网络通信插件
更多推荐
所有评论(0)