本帖最后由 不懂就问 于 2020-4-29 10:29 编辑
PS:本文图片来自Kubernetes中文社区官网和CSDN论坛。
一、前言 关注我的小伙伴肯定知道,我前面几个分享介绍了容器的基本原理与使用,了解到容器的很多优势。但是每个技术都有优劣,如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都存在很大的障碍。我们需要一套管理系统,对容器进行更高级更灵活的管理。而Kubernetes正是目前最流行的容器编排管理系统,今天我们将介绍k8s的架构。
二、k8s概述 Kubernetes是一个开源容器调度平台,可以管理各种不同的底层容器。熟悉OpenStack的肯定知道,OpenStack通过管理底层大量的虚拟化节点构成一个庞大的集群,提供云服务。而k8s通过管理底层的容器节点,自动化应用容器的部署、扩展和操作,提供以容器为中心的基础架构。 三、k8s架构 kubernetes集群包含master节点和worker节点,每个节点可以是一台物理机(物理部署),也可以是一台虚拟机(虚拟化部署)。
master节点(主节点也称控制节点):提供集群控制,管理整个集群,例如集群资源调度、提供API接口等。通常在master节点上不运行用户容器(不在master节点上运行业务)。
master节点上有四个重要的组件:Kube-apiserver、Etcd、kube-controller-manager、kube-scheduler。 Kube-apiserver:对外暴露Kubernetes API,是 Kubernetes 前端控制层,负责API服务。它被设计为水平扩展,可以通过部署更多实例来缩放。 Etcd:Etcd是一种k-v存储仓库,可用于服务发现程序,是Kubernetes集群中的重要组件,记录了集群中各种资源对象信息,它除了具备状态存储的功能,还有事件监听和订阅功能,实际Master上核心组件的通信,并不是互相调用 API 来完成,而是把状态写入 ETCD,其他组件通过监听 ETCD 的状态的的变化(类似订阅消息),然后做后续的处理,然后再一次把更新的数据写入ETCD kube-controller-manager:运行控制器,负责整个集群的容器编排服务。 kube-scheduler:主要是资源监控与调度功能,监视每个节点的资源情况,在新增POD时调度最佳节点来创建POD。
worker节点:是实际承载用户容器的节点,主要包括Docker、kubelet、kube-proxy、Fluentd、Pod等组件。 kubelet:主要负责监视调度到该节点上的Pod,包括创建、修改、监控、删除等。kubelet可以调用网络插件和存储插件为容器配置网络和持久化存储。这两个插件与kubelet交互的接口,分别是CNI(container network interface)和CSI(container storage interface) kube-proxy:管理service的访问入口,为Pod提供代理,包括集群内pod到service的访问和集群外访问service。 Fluentd:主要负责节点的日志收集、存储与查询。 Pod:是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。
四、典型创建服务工作流 我们以创建一个nginx服务为例:
master节点: 通过kubectl命令行创建nginx服务,kubectl会调用API Server往ETCD里面写入一个Deployment对象。 Controller-Manager监听到有新的Deployment对象被写入,获取对象信息后,根据对象信息做任务调度,创建出对应的Pod信息。 Scheduler监听到有新的Pod被创建,读取到Pod对象信息,根据集群状态将Pod调度到某一节点上,然后更新Pod信息(在信息中加入了节点绑定配置) worker节点: Kubelet服务监听到当前节点被指定了新的Pod,就根据对象信息实际的运行Pod Pod的网络访问由节点的Kube-proxy服务进行Iptables的转发规则设定
|