图说Kubernetes

网友投稿 699 2022-10-24

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

图说Kubernetes

简介

Kubernetes是用于管理容器化应用程序集群的工具,此过程通常被称为编排。Kubernetes协调许多微服务,这些微服务一起形成了有用的应用程序。Kubernetes不断自动地监视集群并对其组件进行调整。了解Kubernetes架构对于部署和维护容器化的应用程序至关重要。

什么是Kubernetes?

Kubernetes,简称为k8s(K和S之间8个字母),用于自动执行应用程序部署。现代分布式系统通常分布在云,虚拟机和服务器之上,手动管理应用程序代价极高,k8s就是为简化分布式应用、微服务或云原生应用的部署和管理而生。

K8s将虚拟机和物理机统一起来,开发人员可以使用Kubernetes API来部署、扩展和管理容器化的应用程序。k8s为分布式系统提供了灵活的框架,提供自动扩缩容、故障转移等功能。

k8s自动管理运行应用程序的容器,并确保生产环境中没有停机时间。如果某个容器发生故障,另一个容器会自动取代其位置,而最终用户根本不会感知该过程。

Kubernetes除了编排功能之外,还维护了一组彼此独立,也相互关联的控制进程;其可以维护系统当前状态,也可以根据配置向所需方向演进和发展。

Kubernetes架构和组件

管理员创建应用程序的所需状态并将其放入yaml文件中。使用CLI或UI将文件提供给Kubernetes API Server。Kubernetes的默认命令行工具称为kubectl。Kubernetes将文件(应用程序的所需状态)存储在称为键值存储的数据库(etcd)中。Kubernetes在集群内的所有相关应用程序上实现所需的状态。Kubernetes持续监视集群的元素,以确保应用程序的当前状态不会与所需状态有所不同。

k8s总体架构图

接下来,我们将通过介绍Kubernetes集群的各个组件,以更详细地了解该过程。

Kubernetes Master

Kubernetes Master(Master Node)接收来自客户通过CLI(命令行界面)或UI(用户界面)调用k8s API的请求。通过master node,用户可以定义想要Kubernetes维护的Pod,ReplicateSet和service等。例如,要使用哪些容器镜像,暴露哪些接口以及需要多少Pod副本数量等等。而且,用户可以为该集群中运行的应用程序进行所需状态的参数化配置。

k8s master架构图

API Server

API Server是k8s的前端,是用户唯一可以直接交互的k8s组件。通过API server, k8s为内部系统组件和外部用户组件,提供了统一的API调用和通信方式。

键值存储etcd

键值存储(也称为etcd)是k8s备份所有集群数据的数据库。它存储集群的整个配置和状态。主节点查询etcd以检索node,container和container的状态参数。

Controller

Controller的作用是通过API Server获得所需状态。它检查要控制的节点的当前状态,确定是否与所需状态存在差异,并最终配置为所需状态。

Scheduler

Scheduler会监视来自API Server的请求,并将其分配给运行状况良好的节点。它对节点的质量进行排名,并将Pod部署到最适合的节点。如果没有合适的节点,则将Pod置于挂起状态,直到出现合适的节点。

注意:最好不要在主节点上运行用户应用程序。让k8s master node完全专注于管理集群。

Kubernetes Worker

Worker node监听来自API server的工作分配,并执行被分配的工作,然后将结果报告回k8s Master.

k8s worker架构图

Kubelet

集群中每个节点上都运行kubelet,它是k8s最重要组件之一。通过安装kubelet,节点的CPU、内存和存储成为所处集群的一部分。它监听来自API Server的任务,执行相应任务,并报告给master节点。它还会监控Pod,如果Pod不能完全正常运行,则会向控制层报告。基于以上信息,master可以决定如何分配任务和资源以达到所需状态。

容器运行时

容器运行时从容器镜像库中拉取镜像,控制启动或停止容器。容器运行时由第三方软件或插件(例如Docker)实现。

Kube-proxy

kube-proxy确保每个节点都获得其IP地址,实现本地iptables和规则以处理路由和流量负载均衡。

Pod

在k8s中,Pod是调度的最小元素。没有它,容器就不能成为集群的一部分。如果需要扩展应用程序,只能通过添加或删除Pod来实现。

Pod是k8s中一个抽象化概念,是由一个或多个容器组合在一起的共享资源。根据资源的可用性,master会把Pod调度到特定工作节点上,并与容器运行时协调以启动容器。

k8s Pod

在Pod意外无法执行任务的情况下,k8s不会修复它们,而是创建并启动一个新的Pod。新Pod是原Pod的一个副本,与原Pod相比只有DNS和IP地址不同。此功能对开发人员设计应用程序的方式产生了深远的影响。由于k8s架构的灵活性,不再需要将应用程序绑定到Pod的特定实例。取而代之的是,需要对应用程序进行设计,以便在集群内任何位置创建的全新Pod可以无缝取代它。为了协助此过程,k8s使用了service。

Kubernetes Services

Pod不是恒定不变的,无法正常运行的Pod会被新的Pod取代。但是,这些新的Pod具有一组不同的IP。这可能导致调用出现问题。如果放任不管,此属性将高度不可靠。

为了将稳定的IP地址和DNS名称引入到不稳定的Pod世界中,Kubernetes引入了Service来提供可靠的网络连接。通过控制进出Pod的流量,Service提供了稳定的Endpoint-固定的IP,DNS和端口。有了Service,可以添加或删除任意Pod,而不必担心网络信息会改变。

Kubernetes Service 如何工作?

Pod通过标签(Label)和选择器(Selector)的键值对与Service相关联。Service会自动发现带有与选择器匹配标签的新Pod。此过程无缝地将新Pod添加到Service,同时,从群集中删除已终止的Pod。

例如,如果所需状态定义了需要一个Pod的三个副本,而运行一个副本的节点发生故障,则当前状态将减少为两个Pod。Kubernetes观察到所需的状态是三个Pod。然后,它会调度创建一个新副本来代替发生故障的Pod,并将其分配给集群中的另一个节点。

通过添加或删除容器来扩展或缩放应用程序时,同样适用。一旦我们更新了所需状态的定义,k8s就会注意到差异并添加或删除Pod以匹配yaml文件里定义的所需状态。k8s控制面负责记录,实现和运行后台调度,循环不断地检查环境是否符合用户定义的环境要求。

什么是容器化部署 - Container Deployment?

为了充分理解k8s如何协调以及协调什么,我们需要探索容器部署的概念。

传统部署

最初,开发人员在单个物理服务器上部署了应用程序。这种部署带来了一些挑战,物理资源的共享意味着一个应用程序可能占用大部分处理能力,从而限制了同一台计算机上其他应用程序的性能。

传统部署

扩展硬件容量需要花费很长时间,增加很多成本。为了解决硬件限制,虚拟化出现了。

虚拟化部署

虚拟化部署允许在单个物理服务器上创建隔离的虚拟环境,即虚拟机(VM)。该解决方案隔离了VM中的应用程序,限制了资源的使用并提高了安全性。一个应用程序不能再自由访问另一个应用程序处理的信息。

虚拟机部署

通过虚拟化部署,可以快速扩展并分散单个物理服务器的资源,随意更新单个VM中的应用程序,并且控制硬件成本。每个VM都有其操作系统,并且可以在虚拟化硬件之上运行所有必要的系统。

容器化部署

容器部署变得更加灵活和高效。就像虚拟机一样,容器具有单独的内存,系统文件和处理空间,严格隔离不再是限制因素。现在,多个应用程序可以共享相同的基础操作系统。此功能使容器比成熟的VM效率更高。它们可跨越云,跨不同的设备,在几乎所有OS发行版间进行移植。

容器化部署

应用程序收缩到容器内,作为更小的独立个体运行,之后在多台计算机上动态部署和管理它们。如此精细的结构和任务的划分难以手动管理,需要一个像k8s这样的自动化解决方案,更加有效管理此过程中涉及的所有组件。

总结

Kubernetes采用了非常简洁的方式管理和操作容器。用户输入期望系统达成的状态,Kubernetes对比期望状态和集群当前状态,然后将系统设定为所需状态。

上一篇:游戏外包公司维塔士:持续通过收购和建立新工作室进行扩张
下一篇:习近平同马耳他总统维拉就中马建交50周年互致贺电 李克强同马耳他总理阿贝拉互致贺电
相关文章

 发表评论

暂时没有评论,来抢沙发吧~