K8s | 青训营笔记

76 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第12天 在传统的项目部署时,使用物理机或者VM(虚拟机)来直接安装。如左图所示,在内核的上层是运行环境(需要一系列手动安装或使用脚本主动安装),上层运行着一个一个独立的APP。对于VM来说,它是可以整体迁移的,但是这个迁移还是比较重,主要体现在VM是整个操作系统的镜像实例,在做扩容和迁移时需要大费周章。 转到右图,容器是一个更轻量级的概念,他存在于VM之上,拥有自己的文件系统,也拥有一个独立的ip,等等。每一个应用均运行在一个容器中,有容器为其提供所需要的基础资源和运行时环境。它更适合扩展和迁移,并且迁移成本极低(镜像发布)。 (二)K8s是用来做什么的 简单来说,Docker不具备自动扩容、负载均衡以及分布式集群部署的能力。Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。它是基于容器(通常是Docker)之上的。 (二)Master 首先K8s是基于主从(Master-Slaver)模型的,Master节点负责整个集群的调度管理工作,不负责应用的运行。在K8s中,Master节点可以简称为Master,SLave节点可以简称Node。在企业级K8s集群中,通常存在多个Master节点以实现HA(高可用)。 Master节点全部的持久化数据都存储在ETCD上,除此之外,Node、Pod的运行状态、用户的配置信息等也都存放在此。值得注意的是,只有Api-SERVCER组件有权限读写ETCD,因此只能通过API-SERVER来访问ETCD。 Master节点还包含Scheduler进行资源调度,将Pod调度到满足条件的Node上运行。 ControllerManager负责管理全部的Controller,这些Controller负责监控、调度集群的状态,比如故障检测、自动扩展、滚动更新等。 ApiServer负责接收K8S所有请求,是k8s资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制。API Server根据的具体请求,去通知其他组件干活。 (三)Node 在Node上通常有Kublet、Kybe-proxy以及Conatiner-Runtime。 Kubelet是Node的监视器。每个节点上都运行一个 kubelet 服务进程,默认监听 10250 端口,接收并执行 master 发来的指令,管理 Pod 及 Pod 中的容器。每个 kubelet 进程会在 API Server 上注册节点自身信息,定期向 master 节点汇报节点的资源使用情况,并监控节点和容器的资源,维护node节点上Pod的生命周期。 Kube-Proxy是K8S的网络代理。Kube-Proxy负责Node在K8S的网络通讯、以及对外部网络流量的负载均衡。 Container Runtime是Node的运行环境。容器运行时(Container Runtime)是 Kubernetes 最重要的组件之一,负责真正管理镜像和容器的生命周期。Kubelet 通过 Container Runtime Interface (CRI) 与容器运行时交互,以管理镜像和容器。Docker是比较常见的容器运行时。 相关术语解释 (一)Node Node即一台物理机或者VM。 Node是Kubernetes中的工作节点,最开始被称为minion。每个Node(节点)具有运行pod的一些必要服务,并由Master组件进行管理,Node节点上的服务包括Docker、kubelet和kube-proxy。