k8s(一)基础概念和理解

1.了解 Kubernetes

1.1简述功能

  • Kubernetes 是一个软件系统,它允许你在其上很容易地部署和管理容器化的应用。

  • 它依赖于 Linux容器的特性来运行异构应用, 而无须知道这些应用的内部详情, 也不需要手动将这些应用部署到每台机器.

  • 通过 Kubernetes 部署应用程序时,你的 集群包含多少节点都是 一样的 。集群规模不会造成什么差异性,额外的集群节点只是代表 一 些额外的可用来部署应用的资源

1.2核心功能

  • 开发者把 一个应用列表提 到主节点, Kubemetes 会将它们部署 到集群的工作节点。

  • 组件被部署在哪个节点对于开发者和系统管理员来说都不用 关心 。

image-20230217161122748.png
  • 开发者能指定一些应用必须一起运行, Kubemetes 将会在一个工作节点上部署它们 。

  • 其他的将被分散部署到集群中,但是不管部署在哪儿,它们都能以相同的方式互相通信

1.3友好人群

  • 帮助开发者聚焦核心应用功能

Kubemetes 可以被当作集群的一 个操作系统来看待。它降低了开发者不得不在他们的应用里实现一些和基础设施相关服务的心智负担。

他们现在依赖于 Kubemetes 来提供这些服务,包括服务发现、扩容、负载均衡、自恢复,甚至领导者的选举 。

应用程序开发者因此能 集中精力实现应用本身 的功能而不用浪费时间思 索怎样集成应用与基础设施 。

  • 帮助运维团队获取更高的资源利用率

Kubemetes 将你的容器化应用运行在集群的某个地方,井提供信息给应用组件来发现彼此并保证它们的运行 。

因为你的应用程序不关心它运行在哪个节点上,Kubemetes 能在任何时间迁移应用并通过混合和匹配应用来获得比手动调度高很多的资源利用率 。

2.Kubernetes 集群架构

2.1基础架构

在硬件级别, 一 个 Kubernetes 集群由很多节点组成, 这些节点被分成以下两种类型 :

  • 主节点 ,它承载着 Kubernetes控制和管理整个集群系统的控制面板

  • 工作节点,它们运行用户实际部署的应用

2.2 控制面板-主节点

控制面板用于控制集群并使它工作。它包含多个组件,组件可以运行在单个主节点上或者通过副本分别部署在多个主节点以确保高可用性。 这些组件是 :

  • Kubernetes API 服务器,你和其他控制面板组件都要和它通信

  • Scheculer,它调度你的应用(为应用的每个可部署组件分配一 个工作节点〕

  • Controller Manager,它执行集群级别的功能,如复制组件、持续跟踪工作节点、处理节点失败等

  • etcd,一个可靠的分布式数据存储,它能持久化存储集群配置


    image-20230217161949414.png

控制面板的组件持有并控制集群状态,但是它们不运行你的应用程序。这是由工作节点完成的 。

2.2工作节点

工作节点是运行容器化应用的机器。运行、监控和管理应用服务的任务是由以 下组件完成的 :

  • Docker、rtk或其他的容器类型

  • Kubelet,它与 API 服务器通信,并管理它所在节点的容器

  • Kubernetes Service Proxy (kube-proxy),它负责组件之间的负载均衡网络流量

3.运行应用

image-20230217171600012.png

3.1基础步骤和意义

  • 为了在 Kubernetes 中运行应用,首先需要将应用打包进一个或多个容器镜像, 再将那些镜像推送到镜像仓库

  • 然后将应用的描述发布到 Kubemetes API 服务器 。描述包括:

    • 诸如容器镜像或者包含应用程序组件的容器镜像、这些组件如何相互关联

    • 哪些组件需要同时运行在同一个节点上和哪些组件不需要同时运行等信息。

    • 此外该描述还包括哪些组件为内部或外部客户提供服务且应该通过单个IP地址暴露 ,并使其他组件可以发现 。

3.2描述信息怎么运行的容器

  • 当 API服务器处理应用的描述时,调度器调度指定组的容器到可用的工作节点上,

  • 调度是基于每组所需的计算资源,以及调度时每个节点未分配的资源。

  • 然后那些节点上的 Kubelet 指示容器运行时(例如 Docker)拉取所需的镜像并运行容器

3.3保持容器运行

  • 一旦应用程序运行起来, Kubernetes 就会不断地确认应用程序的部署状态始终与你提供的描述相匹配。

  • 如果你指出你需要运行五个 web 服务器实例,那么 Kubernetes 总是保持正好运行五个实例。

  • 如果实例之一停止了正常工作,比如当进 程崩溃或停止响应时, Kubernetes 将自动重启它 。

  • 如果整个工作节点死亡或无法访问, Kubernetes 将为在故障节点上运行的所有容器选择新节点,并在新选择的节点上运行它们 。

3.4扩展副本数量

  • 当应用程序运行时,可以决定要增加或减少副本量 ,而 Kubemetes将分别增加附加的或停止多余的副本。

  • 甚至可以把决定最佳副本数目的工作交给 Kubemetes。

  • 它可以根据实时指标(如 CPU 负载、内存消耗、每秒查询或应用程序公开的任何其他指标)自动调整副本数 。

3.5命中移动目标

  • Kubemetes 可能需要在集群中迁移你的容器。当它们运行的节点失败时,或者为了给其他容器腾出地方而从节点移除时就会发生

  • 如果容器向运行在集群中的其他容器或者外部客户端提供服务,那么当容器在集群内频繁调度时,它们该如何正确使用这个容器?

  • 当这些容器被复制并分布在整个集群中时,客户端如何连接到提供服务的容器呢?

  • 上述两条中的的其他容器外部客户端需要考虑寻找的容器是移动的,即移动目标!!

  • 为了让客户能够轻松地找到提供特定服务的容器,可以告诉 Kubemetes 哪些容器提供相同的服务,

  • 而 Kubemetes将通过一个静态IP地址暴露所有容器,并将该地址暴露给集群中运行的所有应用程序。

  • 这是通过环境变量完成的,但是客户端也可以通过良好的DNS查找服务IP。

  • kube-proxy 将确保到服务的连接可跨提供服务的容器实现负载均衡。服务的 IP 地址保持不变,

  • 因此客户端始终可以连接到它的容器,即使它们在集群中移动

4.使用 Kubernetes 的好处

4.1简化应用程序部署

  • k8s将其所有工作节点公开为一个部署平台,因此应用程序开发人员可以自己开始部署应用程序,不需要了解组成集群的服务器。

  • 现在所有节点都是一组等待应用程序使用它们的计算资源。开发人员通常不关心应用程序运行在哪个服务器上,只要服务器能够为应用程序提供足够的系统资源即可。

  • 如果开发人员因为节点异构原因确实想知道自己的程序跑到了那个节点,节点硬件符不符合自己的需求。

  • 那么可以直接告诉k8s你这个程序想跑那个节点即可

4.2更好地利用硬件

  • 通过在服务器上装配 K8s,并使用它运行应用程序而不是手动运行它们, 你己经将应用程序与基础设施分离开来。

  • 当你告诉 K8s运行你的应用程序时,你在让它根据应用程序的资源需求描述和每个节点上的可用资源选择最合适的节点来运行你的应用程序。

  • 通过使用容器,不再用把这个应用绑定到一个特定的集群节点,而允许应用程序在任何时候都在集群中自由迁移

  • 所以在集群上运行的不同应用程序组件可以被混合和匹配来紧密打包到集群节点。这将确保节点的硬件资源得到尽可能好的利用。

  • 可以随时在集群中移动应用程序的能力,使得 Kubemetes 可以比人工更好地利用基础设施

4.3健康检查和自修复

  • K8s 监控你的应用程序组件和它们运行的节点,并在节点出现故障时自动将它们重新调度到其他节点。

  • 运维不用去重新部署应用,专注修复节点本身,然后将其修好送回硬件资源池

4.4自动扩容

  • Kubemetes 监视每个应用程序使用 的资源,并不断调整每个应用程序 的运行实例数 量。

  • 如果 Kubemetes 运行在 云基础设施上,在这些基础设施中,添加额外的节点就 像通过云供应商的 API 请求它们一样简单

  • 那么 Kubemetes 甚至可以根据部署的应用程序的需要自动地将整个集群规模放大或缩小 。

5.小结

  • 单体应用程序更容易部署,但随着时间的推移更难维护,并且有时难以扩展。

  • 基于微服务的应用程序体系结构使每个组件的开发更容易,但是很难配置和部署它们作为单个系统工作。

  • Linux 容器提供的好处与虚拟机差不 多,但它们轻量许多 ,并且允许更好地利用硬件 。

  • 通过允许更简单快捷地将容器化应用和其操作系统环境 一起管理, Docker改进了现有的 Linux 容器技术 。

  • Kubernetes将整个数据中心暴露为用于运行应用程序的单个计算资源。

  • 开发人员可以通过Kubernetes部署应用程序,而无须系统管理员的帮助。

  • 通过让Kubernetes自动地处理故障节点, 系统管理员可以睡得更好。

你可能感兴趣的:(k8s(一)基础概念和理解)