Bootstrap

02 K8S之基础知识

Kubernetes是一个跨多主机的容器编排平台,它使用共享网络将多个主机(物理服务器或虚拟机)构建成统一的集群。其中,一个或少量几个主机运行为Master(主节点),作为控制中心负责管理整个集群系统,余下的所有主机运行为Worker Node(工作节点),这些工作节点使用本地和外部资源接收请求并以Pod(容器集)形式运行工作负载。

Master是集群的网关和中枢,负责诸如为用户和客户端暴露API、确保各资源对象不断地逼近或符合用户期望的状态、以最优方式调度工作负载,以及编排其他组件之间的通信等任务,它是各类客户端访问集群的唯一入口,肩负Kubernetes系统上大多数集中式管控逻辑。

Worker Node负责接收来自Master的工作指令并相应创建或销毁Pod对象,以及调整网络规则以合理完成路由和转发流量等任务,是Kubernetes集群的工作节点。理论上讲,Node可以是任何形式的计算设备,负责提供CPU、内存和存储等计算和存储资源,不过Master会统一将其抽象为Node对象进行管理

Kubernetes程序自身更像是构建在底层主机组成的集群之上的“云操作系统”或“云原生应用操作系统”,而容器是运行其上的进程,但Kubernetes要通过更高级的抽象Pod来运行容器,以便于处理那些具有“超亲密”关系的容器化进程,这些进程必须运行于底层的同一主机之上。

声明式(declarative)编程和命令式(imperative)编程是两种相对的高级编程概念:前者着重于最终结果,如何达成结果则要依赖于给定语言的基础组件能力,程序员只需要指定做什么而非如何去做;后者称为过程式编程更合适,它需要由程序员指定做事情的具体步骤,更注重如何达成结果的过程

Kubernetes属于典型的Server-Client形式的二层架构,在程序级别,Master主要由API Server(kube-apiserver)、Controller-Manager(kube-controller-manager)和Scheduler(kube-scheduler)这3个组件,以及一个用于集群状态存储的etcd存储服务组成,它们构成整个集群的控制平面;而每个Node节点则主要包含kubelet、kube-proxy及容器运行时(Docker是最为常用的实现)3个组件,它们承载运行各类应用容器。

kubelet是Kubernetes中最重要的组件之一,是运行于每个Node之上的“节点代理”服务,负责接收并执行Master发来的指令,以及管理当前Node上Pod对象的容器等任务。它支持从API Server以配置清单形式接收Pod资源定义,或者从指定的本地目录中加载静态Pod配置清单,并通过容器运行时创建、启动和监视容器。

Pod是一组容器组成的集合并包含这些容器的管理机制,它并未额外定义进程的边界或其他更多抽象,因此真正负责运行容器的依然是底层的容器运行时。

kube-proxy是Kubernetes的核心网络组件,它本质上更像是Pod的代理及负载均衡器,负责确保集群中Node、Service和Pod对象之间的有效通信。