欢迎访问宙启技术站
智能推送

浅谈kubernetes:k8s的部署架构以及工作原理

发布时间:2023-05-14 09:14:02

Kubernetes(简称k8s)是容器编排系统和平台,用于自动化应用程序容器的部署、扩展和管理。它提供了将容器化的应用程序部署到分布式环境中的框架,可以帮助运维团队轻松地管理数百个、数千个、甚至数万个容器化的应用程序。下面我们来仔细了解一下k8s的部署架构以及工作原理。

一、部署架构

k8s的部署需要经历单元节点和主节点两个阶段,单元节点是容器运行的地方,而主节点则是控制单元节点和容器的地方。下面我们来看一下k8s的部署架构。

1、主节点

主节点是一个核心控制器,负责管理所有工作负载、存储和网络等。它包括kube-apiserver、etcd、kube-scheduler和kube-controller-manager等控制器的集合。它们都是主库访问的核心组件。

- kube-apiserver

kube-apiserver是k8s中最重要的组件之一,是整个k8s系统的进程入口点。所有的k8s管理操作都从这里开始,包括如下内容:

1.集群状态和对象的读取、写入和更新;

2.安全和凭证管理;

3.多群集接口,支持跨群集共享资源;

4.验证和委托授权。

- etcd

etcd是k8s中的一个关键堆栈,是主节点中的一个数据库,持久化保存了k8s集群的所有配置和状态信息。所有k8s对象,例如Pod或Service,都存储在etcd中,并且所有变更都被记录在分布式的集群中。Etcd采用Raft一致性算法,保证数据一致性和高可用性。

- kube-scheduler

kube-scheduler的责任是将未指定节点的Pod分配到集群中的节点上。它监听新创建的Pod和节点上可用的资源,然后根据资源需求、硬件约束、用户指定的策略和单元格位置等因素,为Pod选择一个 的节点。

- kube-controller-manager

kube-controller-manager是k8s系统的核心控制器,它包括了以下组件:

1.节点控制器:检测节点状态,并将任务分配到可用节点;

2.副本控制器:管理Pod副本数量;

3.终端控制器:为Pod提供网络规则和DNS解析;

4.服务帐户和令牌控制器:创建和访问集群帐户。

2、单元节点

单元节点也称为工作节点,是k8s集群中运行容器的主机。每个单元节点都可以托管一个或多个容器,共同组成应用程序。每个单元节点都要连接到主节点,以便接收指令和获取当前的集群状态。

每个单元节点中都有kubelet,kube-proxy和Container Runtime,它们具有不同的职责。

- kubelet

kubelet是单元节点上最重要的组件之一,是k8s系统的代理组件。在单元节点上启动和停止Pod前,kubelet会在集群中获取最新的Pod配置。然后,它会监控每个Pod的容器和节点的状态,并确保Pods中应用程序的容器处于适当的状态。

- kube-proxy

kube-proxy是一个网络代理,它主要负责维护每个节点的网络规则。kube-proxy通过监听API服务器上的Pod和Service对象的变化,维护所有节点的IP地址、端口和主机名的映射关系,以此实现IP负载均衡和服务发现。

- Container Runtime

Container Runtime是一个运行容器的环境。当前,K8s以Docker为主的容器运行时环境,但同时支持其他的容器运行时环境,例如rkt和CRI-O。

二、工作原理

1、Pod

Pod是Kubernetes的最小调度单位,它是一组紧密关联的容器的容器的共享上下文环境。Pod可以包含一个或多个容器,但所有容器共享Pod的网络命名空间、IPC命名空间和文件系统。通常,容器之间具有紧密的协作关系,例如集成应用程序组件和共享存储。

每个Pod都有一个 的IP地址、集群内的卡口和环境变量和进程ID命名空间。Pod可以在任何节点上运行,同时可以随时更改服务器在运行时的位置。

2、容器

容器是装在Pod中的运行环境,可以作为单独的程序包装。在Docker中,容器就是源代码、依赖项和库的封装,可移植到任何环境中。各个容器之间具有隔离性,不会相互影响,能够灵活进行横向扩展,支持快速的部署和更新。

3、SVC

SVC是Kubernetes中用于服务的元素,它通过网络重负载均衡和服务发现的方式实现协作。SVC将可用的Pod IP地址公开给外部应用程序,以便向后端Pod发送请求。SVC还可以根据服务请求的源头,自动路由流量到最优的Pod中,实现了对外部流量的负载均衡。

4、控制器

控制器是Kubernetes中管理Pod和Replication Controller的组件。通过定义Pod的期望状态来保证Pod的控制器在Kubernetes集群中的实际状态始终保持一致。

控制器通过与API服务器通信,派发指令来控制Pod的状态,当Pod的状态不符合期望值时,控制器会自动升级、降级、扩展或缩减Pod数量,以保持Pod的状态与期望状态相符。

5、Deployment

Deployment是Kubernetes中管理Pod的组件,它是控制器的一种实现方式。它可以实现应用程序的自动部署和弹性伸缩,通过简单的声明式配置来定义期望状态。

Deployment是一个协调控件,它将容器运行时定义与底层基础结构的实现隔离开来,提供了一种单一的工作流,帮助用户自动管理应用程序的部署、样图和更新。

六、总结

综合来看,Kubernetes(k8s)作为一种先进的容器编排系统,已经证明了它的优越性和可靠性。在大规模的、分布式的、高可用的应用程序部署和管理中,它发挥了越来越重要的作用。理解K8s的部署架构和工作原理是实现自动化部署和运维的必要条件,对于运维工程师而言,更是必需的技能。