kubernetes 概念,kubernetes提供的是

  kubernetes 概念,kubernetes提供的是

  一开始作为k8s的开篇工作,我并没有马上做集群,而是先介绍概念,用一种慢慢学习的方式了解k8s。不然学了之后什么都不懂就太可惜了。下一章将实际部署集群!

  开发过程我们的项目部署也在经历以下过程。

  传统部署-虚拟部署时代-容器部署时代

  传统部署时代:早期,组织在物理服务器上运行应用程序。无法为物理服务器中的应用程序定义资源边界,这将导致资源分配问题。如果在物理服务器上运行多个程序,一个应用程序可能会占用大部分资源,这可能会导致其他应用程序的性能下降。一种解决方案是将每个应用运行在不同的物理服务器上,但由于资源利用率不足而无法扩展,并且维护许多物理服务器的成本很高。虚拟化部署时代:作为解决方案,引入了虚拟化功能,允许多个虚拟机(VM)运行在单个物理服务器的CPU上。虚拟化允许应用程序在虚拟机之间隔离,并提供一定程度的安全性,因为一个应用程序的信息不能被另一个应用程序自由访问。虚拟化可以轻松添加或更新应用程序,降低硬件成本等。因此虚拟化可以更好地利用物理服务器中的资源,实现更好的可扩展性。每个虚拟机都是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。部署时代:容器类似于VM,但具有轻量级隔离属性,不需要虚拟硬件就可以在应用之间共享操作系统(OS)。因此,容器被认为是轻量级的。类似于VM,容器有自己的文件系统、CPU、内存、进程空间等等。因为它们与基础设施分离,所以可以跨云和操作系统分布进行迁移。容器因其许多优点而变得流行起来。容器的一些好处列举如下:敏捷创建和部署:与使用VM镜像相比,它提高了容器镜像创建的简单性和效率。持续开发、集成和部署:通过简单的回滚(由于映像的不变性)提供可靠和频繁的容器映像构建和部署。与开发操作和维护分离:在构建/部署时创建应用程序容器映像,并将应用程序与基础设施分离。可观察性:您不仅可以显示操作系统级别的信息和指示器,还可以显示应用程序健康状况和其他指示器信号。云与操作系统分发的可移植性:可以运行在Ubuntu、RHEL、RHEL、CoreOS、local、Google Kubernetes引擎等任何地方。以应用为中心的管理:提高抽象级别,从在虚拟硬件上运行操作系统到使用逻辑资源在操作系统上运行应用。分布式和灵活的微服务:应用程序被分解成更小的独立部分,可以动态地部署和管理——而不是在大型的单台机器上运行。资源隔离:可预测的应用程序性能。这些容器管理问题统称为容器编排问题。为了解决这些容器编排问题,已经产生了一些容器编排软件:

  Swarm:Docker自己的容器编排工具

  Mesos:Apache是一个统一管理和控制资源的工具,需要结合马拉松。

  Kubernetes:Google的开源容器编排工具

  库伯内特的诞生

  Kubernetes,简称k8s,之所以叫K8s是因为K和s之间有八个字母,它是一个开源的、基于go语言开发的容器集群管理系统/容器编排平台。主要用于容器应用的自动部署、扩展和管理,提供资源调度、部署管理、服务发现、伸缩、监控等一整套功能。Kubernetes的目标是让部署容器应用程序变得简单高效。

  传统的应用部署方法是通过插件或脚本安装应用。这样做的缺点是,应用的运行、配置、管理以及所有生命周期都会与当前的操作系统绑定,不利于应用升级/回滚的操作。当然,有些功能可以通过创建虚拟机来实现,但是虚拟机非常笨重,不利于移植。

  新方法是通过部署容器来实现的。每个容器都是相互隔离的,每个容器都有自己的文件系统。容器之间的进程不会互相影响,计算资源可以区分。与虚拟机相比,容器可以快速部署。

  Kubernetes是一个轻量级、可扩展的开源平台,用于管理容器化的应用程序和服务。Kubernetes支持应用程序的自动部署和扩展。在Kubernetes中,组成应用程序的容器将被组合成一个逻辑单元,以便于管理和发现。

  Kubernetes在作为Google的生产环境运行工作负载方面积累了15年的经验,并从社区中吸收了最佳的想法和实践。

  K8s是Google在2014年发布的容器化集群管理系统。k8s用于容器化的应用部署。k8s有利于应用扩展。K8S目标实现让容器化的应用部署更加简洁高效。K8s功能1。数据卷Pod是K8s部署的最小单位。数据卷窗格可用于在容器间共享数据。

  2.由于进程堵塞,应用程序运行状况检查容器中的服务可能无法处理该请求。您可以设置监控检查策略来确保可用性。当部署的节点出现问题时,容器将被重新部署和重新调度。当容器未通过监控检查时,容器将被关闭,直到容器正常运行。您可以设置监控检查策略来确保可用性。

  3.复制应用程序实例控制器维护Pod副本的数量,确保一个Pod或一组相似的Pod始终可用。

  4.灵活性通过命令、用户UI界面或基于CPU等资源的使用来扩展或缩减应用程序容器的规模。

  当我们有大量的请求时,我们可以增加副本的数量,从而达到横向扩展的效果。

  5.服务发现使用环境变量或DNS服务插件来确保容器中的程序找到Pod条目的访问地址。用户可以基于Kubernetes自身的能力实现服务发现和负载均衡,而不需要使用额外的服务发现机制。

  为节点调度和负载均衡提供统一的外部门户,相当于微服务中的网关?

  6.负载平衡为一组Pod副本分配一个专用集群IP地址,负载平衡将请求转发到后端容器。集群中的其他pod可以通过该集群IP访问应用程序。

  7.滚动更新更新服务不间断地一次更新一个Pod,而不是同时删除整个服务,可以根据应用的变化一次性或批量更新应用容器运行的应用。

  在添加应用时,需要判断添加的应用是否可以正常使用,而不是马上使用。

  8.服务编排(Service orchestration)通过文件描述服务的部署,使得应用部署更加高效,自动实现存储系统的挂载和应用,特别是对于有状态应用实现数据持久化。存储系统可以来自本地目录、网络存储(NFS、Gluster、Ceph等。)和公共云存储服务。

  9.资源监控节点组件集成了cAdvisor资源收集工具,可以通过Heapster汇总整个集群节点的资源数据,然后存储在InfluxDB时间序列数据库中,再由Grafana显示出来。

  10.提供身份验证和授权,以支持RBAC身份验证和授权。与热部署类似,您可以部署和更新密钥和应用程序配置,而无需重新构建映像。

  Kubernetes架构1,主组件1,Kube-apiserverKubernetes API,集群的统一入口,各个组件的协调者,HTTP API接口服务的所有对象的管理和监控操作都交给APIServer处理,然后提交给Etcd存储。

  2.Kube-controller-manager处理集群中的日常后台任务,一个资源对应一个控制器,ControllerManager负责

  3.Kube-scheduler根据调度算法为新的Pod选择节点。

  二。节点组件1。KubeletKubelet是Master在节点上的代理,管理本地运行容器的生命周期,比如创建容器,用Pod挂载数据卷,下载secret,获取容器和节点状态等。Kublet将每个Pod转换成一组容器。

  2.Kube-proxy在节点中实现Pod网络代理,维护网络规则和四层负载均衡。

  3.码头引擎运行集装箱

  3.Etcd分布式键值存储系统,用于存储集群状态信息;例如Pod、服务和其他对象信息

  完整的架构图如下:

  K8S核心理念1、PodPod是最小的部署单位。

  一个容器可以容纳一个或多个容器。

  通常,一个Pod对应一个集装箱

  2.部署定义了一组pod的副本数量,以及pod、版本等的数量。是由控制器【控制器】【自动回复失败的pod】维护,版本【滚动升级,回滚等。]由控制器按照指定的策略控制。

  3.ServiceService是一个应用服务抽象,定义了Pod的逻辑集合以及访问这个Pod集合的策略。服务代理Pod集在外部表现为一个访问入口,分配一个集群IP地址,来自这个Ip的请求被转发到后端Pod中的容器。服务通过标签选择器选择一组pod来提供服务。

  4.volume volume,实现持久存储和数据共享。在Pod容器中可访问的文件目录可以被安装到Pod中的一个或多个容器中。指定路径下支持多种后端存储抽象【本地存储、分布式存储、云存储】。

  5.名称空间名称空间在逻辑上将对象分配给不同的名称空间,这些名称空间可以由不同的项目、用户等来管理。并设置控制策略以实现多租户。命名空间也称为虚拟集群。集群内的逻辑隔离机制【认证,资源】每个资源属于同一个命名空间。所有资源不能在不同的命名空间中重复,但资源名称可以重复。

  6.标签标签用于区分对象(Pod、服务等。),并且键值对存在;每个对象可以有多个标签,并且这些对象通过标签相关联。

  7.ControllerReplicaset(简称RS)确保在任何给定时间都有指定数量的Pod副本。

  StatefulSetStatefulSet适用于持久性应用,具有唯一网络标识符(IP),持久存储,有序部署,扩展,删除和滚动更新。

  DaemonSetDaemonSet确保所有节点运行同一个Pod。当一个节点加入Kubernetes集群时,Pod将被调度在该节点上运行,当该节点从集群中删除时,DaemonSet将被删除。删除DaemonSet将清除它创建的所有窗格。

  作业是一次性任务,Pod将在运行后被销毁,新容器将不会重新启动。也可以定期运行任务。

  8.我们通过Kubernetes API操作整个集群。

  同时最终可以通过kubectl、ui、curl向API服务器发送http json/yaml请求,进而控制整个K8S集群。K8S中的所有资源对象都可以用yaml或json格式的文件来定义或描述。

  Kubernetes部署流程1。通过Kubectl提交创建RC(复制控制器)的请求,通过APlserver写入etcd。

  2.控制器管理器通过API服务器的接口监听这个RC事件,以监视资源变化。

  3.经过分析,发现当前集群中没有对应的Pod实例。

  4.然后根据RC中的Pod模板定义一个生成的Pod对象,通过APIServer写入etcd。

  5.这个事件被调度器发现了,调度器立即执行了一个复杂的调度过程,为这个新的Pod选择了一个定居的节点,然后通过API服务器将结果写入etcd。

  6.运行在目标节点上的Kubelet进程通过APiserver监控这个‘新生的Pod’,并根据它的定义,启动Pod,不知疲倦地掌管它的余生,直到Pod的生命结束。

  7.然后,我们通过Kubectl提交一个映射到Pod的新服务创建请求。

  8.ControllerManager通过Label标签查询关联的Pod实例,然后生成服务的端点信息,通过APIServer写入etod。

  9.接下来,运行在节点上的所有代理进程通过APIServer查询和监控服务对象及其对应的端点信息,并建立软件负载均衡器,实现服务访问后端Pod的流量转发功能。

  版权归作者所有:原创作品来自博主小二上九8,转载请联系作者取得转载授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: