分享

非云环境中Kubernetes的配置和运行: Kubernetes 架构

 黄爸爸好 2020-09-01
本文将主要介绍 Kubernetes 的架构及主要组件,包括 Pods、服务、卷、命名空间等。

想要先睹为快的读者,可直接克隆该项目的 GitHub 代码库。代码库中的文档正在持续改进中,并完全可用。代码库地址为:

https://github.com/mvallim/kubernetes-under-the-hood

1 Kubernetes

“Kubernetes 是一种用于管理容器化工作负载和服务的可移植、可扩展的开源平台,便于声明式配置和自动化。Kubernetes 生态系统规模庞大,且增长快速,其服务,支持和工具已得到广泛使用。

“Google 于 2014 年开源了 Kubernetes 项目。Kubernetes 的建立基于 Google 十五年大规模生产工作负载的经验,并综合了来自社区的最佳思考和实践。

引用自: 

https:///docs/concepts/overview/what-is-kubernetes/

Kubernetes 的优点包括:

  • 敏捷应用开发和部署:与使用虚拟机镜像相比,Kubernetes 改进了容器镜像创建的便捷性和效率。

  • 容器开发、集成和部署:支持高频次、可靠的容器镜像构建和部署,并由于镜像的不可更改性,使得回滚更为快速和简单

  • 有效隔离开发(Dev)和运维(Ops):应用容器镜像创建是在构建 / 发布阶段,而非部署阶段,使应用得以从架构中解耦。

  • 可观察性(Observability):不仅涵盖操作系统层级的信息和度量,而且涉及应用健康等深层信息。

  • 跨开发、测试和生产的环境一致性:无论对于云环境中,还是在个人笔记本上,都具有一致的运行环境。

  • 云 / 操作系统发行版的可移植性:可运行在任何环境中,包括 Debian、Ubuntu、CoreOS、本地部署、Google Kubernetes Engine、Amazon Elastic Container Service 等。

  • 以应用为中心的管理:将抽象层级从在虚拟硬件上运行操作系统,提升为使用逻辑资源在操作系统上运行应用。

  • 松耦合、分布式、弹性、无约束的微服务:应用切分为可动态部署并管理的更小尺度独立部分,而非运行在专用机器上的单体应用。

  • 资源隔离:支持应用性能可预测。

  • 资源使用:更高效、更紧密。

引用自: 

https:///docs/concepts/overview/what-is-kubernetes/

为尽可能提供完备的功能,Kubernetes 依赖并使用了其它一些开源工具。其中包括:

  • 注册:例如 Docker Registry。

  • 网络:例如 Flannel、 Calico、 MetalLB、 CoreDNS 等。

  • 遥测:例如 Prometheus、 Sysdig 和 Istio。

  • 安全:例如 LDAP、 SELinux、 RBAC 和具有多层的 OAuth。

  • 服务:对于过去常用应用模式创建的内容,支持以多种目录形式提供。

2 Kubernetes 架构

Kubernetes 管理的集群通常具有两个主要操作单元:主节点(Master)和工作节点(Worker)。

  • 主节点(Master):负责编排运行在工作节点上的所有容器相关活动。其中,主节点负责安排和部署集群应用,获取工作节点和 Pod 的相关信息。

  • 工作节点(Worker):是支持 Kubernetes 所管理容器得以有效运行的机器(节点)。工作节点可以是物理机,也可以是虚拟机。为了使工作节点可被 Kubernetes 管理,必须在其上安装 Kubernetes 的 Kubelet 代理。工作节点通过 Kubelet 代理完成与主机的所有通信,实现执行集群操作。

Kubernetes 主节点从开发人员 / 运维人员(即 DevOps)处接收指令,并传递给工作节点。这些指令由一组服务做处理,并重新传输。上述服务可自动确定最适合处理所请求任务的工作节点,然后将资源分配并指定给满足所请求指令的选定工作节点。

容器管理运行在更高层级上,其中已充分考虑工作细节。容器和工作节点的运作,无需手工主动干预。

主节点和工作节点的组件

容器网络接口(CNI,Container network interface):该网络插件遵循 appc/CNI 规范。规范支持运行在不同节点上的 Pod 间的连接,并支持灵活集成 overlays、纯第三层网络(pure L3)等多种网络解决方案。

  • etcd:支持高可用和一致性的键值存储,用于 Kubernetes 中所有集群数据的存储。如果 Kubernetes 集群的后台存储使用 etcd,需确保具有针对集群数据的备份计划。

  • api-server: 用于提供 Kubernetes API 的主节点组件。API 服务是 Kubernetes 控制平台(Control Plane)的前端,设计上考虑了水平扩展,即随部署实例数量而扩展的能力。

  • 控制平台:容器编排层,提供用于定义、部署和管理容器生命周期的 API 和接口。

  • 调度程序(Scheduler):主节点上的组件,用于监视新创建且未分配给工作节点的 Pod,并调度一个工作节点运行该 Pod。调度策略中考虑的因素包括:个体和全部资源需求、硬件 / 软件 / 策略约束,亲和性和反亲和性(affinity and anti-affinity)规范、数据的本地性、工作负载间的干扰和最后期限等。

  • Controller manager:主节点上运行控制器的组件。每个控制器在逻辑上是独立的进程,但是为了降低复杂性,它们被编译为一个二进制文件,以单个进程运行。

  • kubelet:运行在工作节点上的服务。kubelet 读取 Pod 清单(manifests),确保清单中定义的容器已启动并处于运行状态。

  • containerd:容器运行时,注重于容器的简单性、鲁棒性和可移植性。在 Linux 或 Windows 上,containerd 是以守护程序形式运行的容器运行时,负责获取和存储容器映像、执行容器、提供网络访问等。在我们的解决方案中,我们使用 Docker 实现上述功能。

  • Kube Proxy:运行在群集中每个工作节点上的网络代理。Kube-proxy 负责请求转发,通过一组后端功能支持 TCP/UDP 流转发和轮询转发。

参考资料: 

https:///docs/reference/glossary/?fundamental=true

Kubectl

kubectl 命令行工具提供与 Kubernetes API 服务的交互。用户可使用 kubectl 创建、更新和删除 Kubernetes 对象。

Docker 简述

Docker 功能可直接使用。不同之处在于,Kubernetes 在配置 Pod 时,将指令发送给选定工作节点的 kubelet,其中指定 Docker 去启动或停止容器。进而,kubelet 继续从 Docker 及其容器中收集信息,并将所有这些信息汇总给主节点。其中的主要差异之处在于,所有这些操作都是自动进行的,无需管理员必须手动完成配置和信息收集。

3 Kubernetes 的关键对象

下面简要介绍 Kubernetes 所管理的每个关键对象。

Pod:最小、最简的 Kubernetes 对象。Pod 表示了一组集群中正在运行的容器。Pod 的运行模式通常设置为单个主容器,也可选择添加对日志支持等辅助功能的挎斗模式(sidecar)容器。Pod 通常由 Deployment 管理。

Deployment:管理复制(replicated)应用的 API 对象。每个副本表示为一个分布在集群工作节点间的 Pod。

Service:描述 Pods 等应用访问方式的 API 对象,支持对端口和负载平衡器的描述。访问接入点可位于群集的内部或外部。

卷(Volume):是包含数据并对 Pod 容器可访问的目录。Kubernetes 卷的生命周期与包含它的 Pod 一致。因此,卷的寿命超过 Pod 中运行的所有容器,并且在容器重启后保留数据。

文件系统:在 Kubernetes 中,每个容器都可以在其自身的文件系统中执行读写操作。但是,容器重启或删除后,写入该文件系统的数据将被破坏。

卷:Kubernetes 具有卷。只要 Pod 存在,Pod 中的卷就将存在。卷可在同一 Pod 容器间共享。Pod 重启或移除后,卷将被破坏。

持久卷:Kubernetes 具有持久卷。持久卷提供 Kubernetes 集群中的长期存储。持久卷寿命超出容器、Pods 和工作节点。只要 Kubernetes 集群存在,持久卷就存在。Pod 可声明使用持久卷读取、写入和读写。

命名空间(Namespace):一种 Kubernetes 用于支持在同一物理集群上的多个虚拟集群的抽象。命名空间用于组织集群中的对象,并提供了一种集群资源的划分方法。资源名称在同一命名空间中必须唯一,但在多个命名空间之间则不必唯一。

参考资料:

https:///docs/reference/glossary/?fundamental=true

原文链接

https:///kubernetes-journey-up-and-running-out-of-the-cloud-kubernetes-overview-5012994b8955

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多