ToB企服应用市场:ToB评测及商务社交产业平台

标题: Kubernetes的概述与架构 [打印本页]

作者: 万万哇    时间: 6 天前
标题: Kubernetes的概述与架构
Kubernetes 的概述

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,方便进行声明式配置和自动化。Kubernetes 拥有一个庞大且快速增长的生态体系,其服务、支持和工具的利用范围广泛。
Kubernetes 这个名字源于希腊语,意为“舵手”或“飞行员”。K8s 这个缩写是因为 K 和 s 之间有 8 个字符的关系。 Google 在 2014 年开源了 Kubernetes 项目。 Kubernetes 建立在 Google 大规模运行生产工作负载十几年履历的底子上, 联合了社区中最良好的想法和实践。
为什么必要 Kubernetes,它能做什么?

容器是打包和运行应用程序的好方式。在生产情况中, 你必要管理运行着应用程序的容器,并确保服务不会下线。 比方,假如一个容器发生故障,则你必要启动另一个容器。 假如此举动交由给体系处理,是不是会更轻易一些?
这就是 Kubernetes 要来做的事情! Kubernetes 为你提供了一个可弹性运行分布式体系的框架。 Kubernetes 会满足你的扩展要求、故障转移你的应用、提供摆设模式等。 比方,Kubernetes 可以轻松管理体系的 Canary (金丝雀) 摆设。
Kubernetes 为你提供:

Kubernetes 不是什么

Kubernetes 不是传统的、包罗万象的 PaaS(平台即服务)体系。 由于 Kubernetes 是在容器级别运行,而非在硬件级别,它提供了 PaaS 产物共有的一些广泛适用的功能, 比方摆设、扩展、负载均衡,允许用户集成他们的日志记录、监控和警报方案。 但是,Kubernetes 不是单体式(monolithic)体系,那些默认解决方案都是可选、可插拔的。 Kubernetes 为构建开发人员平台提供了底子,但是在告急的地方保留了用户选择权,能有更高的灵活性。
Kubernetes:

Kubernetes 的历史配景

让我们回顾一下为何 Kubernetes 能够裨益四方。

传统摆设期间:
早期,各个组织是在物理服务器上运行应用程序。 由于无法限定在物理服务器中运行的应用程序资源利用,因此会导致资源分配标题。 比方,假如在同一台物理服务器上运行多个应用程序, 则可能会出现一个应用程序占用大部分资源的情况,而导致其他应用程序的性能下降。 一种解决方案是将每个应用程序都运行在不同的物理服务器上, 但是当某个应用程序资源利用率不高时,剩余资源无法被分配给其他应用程序, 而且维护许多物理服务器的成本很高。
假造化摆设期间:
因此,假造化技术被引入了。假造化技术允许你在单个物理服务器的 CPU 上运行多台假造机(VM)。 假造化能使应用程序在不同 VM 之间被彼此隔离,且能提供一定程度的安全性, 因为一个应用程序的信息不能被另一应用程序随意访问。
假造化技术能够更好地利用物理服务器的资源,并且因为可轻松地添加或更新应用程序, 而因此可以具有更高的可扩缩性,以及降低硬件成本等等的好处。 通过假造化,你可以将一组物理资源呈现为可丢弃的假造机集群。
每个 VM 是一台完整的盘算机,在假造化硬件之上运行全部组件,包括其自己的操纵体系。
容器摆设期间:
容器类似于 VM,但是更宽松的隔离特性,使容器之间可以共享操纵体系(OS)。 因此,容器比起 VM 被认为是更轻量级的。且与 VM 类似,每个容器都具有自己的文件体系、CPU、内存、进程空间等。 由于它们与底子架构分离,因此可以跨云和 OS 发行版本进行移植。
容器因具有许多上风而变得盛行起来,比方:

Kubernetes 架构

Kubernetes采用主从架构设计。Kubernetes 集群由一个控制平面(相称于管理主机)和一组用于运行容器化应用的工作机器(相称于工作从机)构成, 这些工作机器称作节点(Node)。每个集群至少必要一个工作节点来运行 Pod。
工作节点托管着构成应用负载的 Pod。控制平面管理集群中的工作节点和 Pod。 在生产情况中,控制平面通常跨多台盘算机运行,而一个集群通常运行多个节点,以提供容错和高可用。
一个完整且可运行的 Kubernetes 集群所需的组件如下图。

控制平面组件

控制平面组件会为集群做出全局决策,好比资源的调理。 以及检测和响应集群事件,比方当不满足 Deployment 的 replicas 字段时,要启动新的 Pod)。
控制平面组件可以在集群中的任何节点上运行。 然而,为了简单起见,安装脚本通常会在同一个盘算机上启动全部控制平面组件, 并且不会在此盘算机上运行用户容器。
kube-apiserver

API 服务器是 Kubernetes 控制平面的组件, 该组件负责公开了 Kubernetes API,负责处理担当哀求的工作。 API 服务器是 Kubernetes 控制平面的前端。
Kubernetes API 服务器的主要实现是 kube-apiserver。 kube-apiserver 设计上考虑了程度扩缩,也就是说,它可通过摆设多个实例来进行扩缩。 你可以运行 kube-apiserver 的多个实例,并在这些实例之间均衡流量。
etcd

一致且高可用的键值存储,用作 Kubernetes 全部集群数据的背景数据库。
假如你的 Kubernetes 集群利用 etcd 作为其背景数据库, 请确保你针对这些数据有一份 备份计划。
kube-scheduler

kube-scheduler 是控制平面的组件, 负责监督新创建的、未指定运行节点(node)的 Pods, 并选择节点来让 Pod 在上面运行。
调理决策考虑的因素包括单个 Pod 及 Pods 聚集的资源需求、软硬件及策略约束、 亲和性及反亲和性规范、数据位置、工作负载间的干扰及最后时限。
kube-controller-manager

kube-controller-manager 是控制平面的组件, 负责运行控制器进程。
从逻辑上讲, 每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在同一个进程中运行。
控制器有许多不同类型。以下是一些例子:

cloud-controller-manager

一个 Kubernetes 控制平面组件, 嵌入了特定于云平台的控制逻辑。 云控制器管理器(Cloud Controller Manager)允许将你的集群毗连到云提供商的 API 之上, 并将与该云平台交互的组件同与你的集群交互的组件分离开来。cloud-controller-manager 仅运行特定于云平台的控制器。 因此假如你在自己的情况中运行 Kubernetes,或者在本地盘算机中运行学习情况, 所摆设的集群不包罗云控制器管理器。
与 kube-controller-manager 类似,cloud-controller-manager 将多少逻辑上独立的控制回路组合到同一个可执行文件中,以同一进程的方式供你运行。 你可以对其执行程度扩容(运行不止一个副本)以提升性能或者加强容错能力。
下面的控制器都包罗对云平台驱动的依靠:

节点组件

节点组件会在每个节点上运行,负责维护运行的 Pod 并提供 Kubernetes 运行时情况。
kubelet

kubelet 会在集群中每个节点(node)上运行。 它包管容器(containers)都运行在 Pod 中。
kubelet 吸收一组通过各类机制提供给它的 PodSpec,确保这些 PodSpec 中形貌的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。
kube-proxy(可选)

kube-proxy 是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。
kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。
假如操纵体系提供了可用的数据包过滤层,则 kube-proxy 会通过它来实现网络规则。 否则,kube-proxy 仅做流量转发。
假如你利用网络插件为 Service 实现本身的数据包转发, 并提供与 kube-proxy 等效的举动,那么你不必要在集群中的节点上运行 kube-proxy。
容器运行时

这个底子组件使 Kubernetes 能够有用运行容器。 它负责管理 Kubernetes 情况中容器的执行和生命周期。
Kubernetes 支持许多容器运行情况,比方 containerd、 CRI-O 以及 Kubernetes CRI (容器运行情况接口) 的其他任何实现。
插件(Addons)

‌Addons的翻译是附加组件、插件或扩展程序。
插件利用 Kubernetes 资源(DaemonSet、 Deployment 等)实现集群功能。 因为这些插件提供集群级别的功能,插件中命名空间域的资源属于 kube-system 命名空间。
下面形貌浩繁插件中的几种。有关可用插件的完整列表, 请参见插件(Addons)。
DNS

只管其他插件都并非严酷意义上的必需组件,但几乎全部 Kubernetes 集群都应该有集群 DNS, 因为许多示例都必要 DNS 服务。
集群 DNS 是一个 DNS 服务器,和情况中的其他 DNS 服务器一起工作,它为 Kubernetes 服务提供 DNS 记录。
Kubernetes 启动的容器自动将此 DNS 服务器包罗在其 DNS 搜索列表中。
Web 界面(仪表盘)

Dashboard 是 Kubernetes 集群的通用的、基于 Web 的用户界面。 它利用户可以管理集群中运行的应用程序以及集群本身,并进行故障排除。
容器资源监控

容器资源监控 将关于容器的一些常见的时序度量值生存到一个会合的数据库中,并提供浏览这些数据的界面。
集群层面日志

集群层面日志机制负责将容器的日志数据生存到一个会合的日志存储中, 这种会合日志存储提供搜索和浏览接口。
网络插件

网络插件 是实现容器网络接口(CNI)规范的软件组件。它们负责为 Pod 分配 IP 地址,并使这些 Pod 能在集群内部相互通信。
架构变种

虽然 Kubernetes 的核心组件保持一致,但它们的摆设和管理方式可能有所不同。 了解这些变化对于设计和维护满足特定运营需求的 Kubernetes 集群至关告急。
控制平面摆设选项

控制平面组件可以通过以下几种方式摆设:
传统摆设
控制平面组件直接在专用机器或假造机上运行,通常作为 systemd 服务进行管理。
静态 Pod
控制平面组件作为静态 Pod 摆设,由特定节点上的 kubelet 管理。 这是像 kubeadm 这样的工具常用的方法。
自托管
控制平面在 Kubernetes 集群本身内部作为 Pod 运行, 由 Deployments、StatefulSets 或其他 Kubernetes 原语管理。
托管 Kubernetes 服务
云平台通常将控制平面抽象出来,将其组件作为其服务的一部分进行管理。
工作负载调理说明

含控制平面组件在内的工作负载的调理可能因集群巨细、性能要求和操纵策略而有所不同:

集群管理工具

像 kubeadm、kops 和 Kubespray 这样的工具提供了不同的集群摆设和管理方法, 每种方法都有自己的组件布局和管理方式。
Kubernetes 架构的灵活性使各组织能够根据特定需求调整其集群,均衡操纵复杂性、性能和管理开销等因素。
定制和可扩展性

Kubernetes 架构允许大幅度的定制:

Kubernetes 架构的灵活性使各组织能够根据特定需求调整其集群,均衡操纵复杂性、性能和管理开销等因素。
参考:Kubernetes中文文档

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4