首页 > 其他分享 >什么是K8s架构?一文让你全面了解K8s(Kubernetes)

什么是K8s架构?一文让你全面了解K8s(Kubernetes)

时间:2024-04-26 09:11:52浏览次数:26  
标签:容器 K8s 架构 Kubernetes 应用程序 集群 K8S 节点

K8S架构定义

K8S是一个开源的容器部署和管理平台。它提供容器编排、容器运行时、以容器为中心的基础设施编排、负载平衡、自我修复机制和服务发现。K8S体系结构,有时也称为K8S应用程序部署体系结构或K8S客户端-服务器体系结构,用于跨主机集群组成、扩展、部署和管理应用程序容器。

运行K8S的环境由以下基本组件组成:控制平面(K8Scontrolplane)、用于保持集群状态一致性的分布式密钥值存储系统(etcd)和集群节点(Kubelets,也称为工作节点或小黄人)。

图中描绘了一个K8S体系结构图,其中包含不同的组件,如控制平面、节点、pod等等。

有关K8S技术的相关技术讲解, 你可以在虚拟化容器技术Docker+K8s课程中找到。课程收益包括但不限于Kubernetes(K8s)的架构与应用;掌握基于Docker和Kubernetes的企业应用架构;掌握基于虚拟化容器Docker与Kubernetes的体系架构、管理、部署,以及相应组件的原理和应用场景;让学员具备部署基于企业虚拟化云平台环境的能力。以下是有关K8S架构的常见问题:

什么是K8S架构?

K8S集群是K8S部署体系结构的一种形式。K8S的基本架构分为两部分:控制平面和节点或计算机。每个节点可以是物理机,也可以是虚拟机,并且是自己的Linux环境。每个节点还运行由容器组成的pod。

K8S架构组件或K8s组件包括K8S控制平面和集群中的节点。控制平面机组件包括K8Sneneneba API服务器、K8S调度程序、Kuberneses控制器管理器等。K8S节点组件包括一个容器运行时引擎或docker、一个Kubelet服务和一个K8S代理服务。

K8S控制平面

控制平面是控制集群的K8S集群架构组件所在的神经中枢。它还维护集群所有K8S对象的配置和状态的数据记录。

K8S控制平面与计算机保持持续联系,以确保集群按配置运行。控制器响应集群更改来管理对象状态,并驱动系统对象的实际、观察到的状态或当前状态以匹配所需的状态或规范。

几个主要组件包括控制平面:API服务器、调度程序、控制器管理器等等。这些核心K8S组件确保容器在足够数量的必要资源下运行。这些组件都可以在一个主节点上运行,但许多关心容错的企业会在多个节点上复制它们,以实现高可用性。

K8S API服务器

作为K8S控制平面的前端,API服务器通过为各种类型的应用程序提供API来支持更新、扩展和其他类型的生命周期编排。客户端必须能够从集群外部访问API服务器,因为它充当网关,支持每个阶段的生命周期编排。在这个角色中,客户端使用API服务器作为通向pod、服务和节点的隧道,并通过API服务器进行身份验证。

K8S调度器

K8S调度器存储每个计算节点的资源使用数据;确定集群是否健康;并确定是否应该部署新容器,如果应该,则确定它们应该放置在哪里。调度器通常会考虑集群的健康状况以及pod的资源需求,例如CPU或内存。然后,它选择适当的计算节点并调度任务、pod或服务,同时考虑资源限制或保证、数据位置、服务质量要求、反亲和性和亲和性规范以及其他因素。

K8S控制器管理器

K8S生态系统中有各种控制器,它们驱动端点(pod和服务)、令牌和服务帐户(命名空间)、节点和复制(自动缩放)的状态。控制器管理器——有时被称为云控制器管理器或简称为控制器——是一个使用多个控制器函数运行K8S集群的守护进程。

控制器在运行K8S核心控制循环时监视它在集群中管理的对象。它通过API服务器观察它们的期望状态和当前状态。如果被管理对象的当前状态和所需状态不匹配,则控制器采取纠正措施将对象状态推向所需状态。K8S控制器还执行核心生命周期功能。

ETCD

分布式和容错etcd是一个开源的键值存储数据库,用于存储配置数据和有关集群状态的信息。etcd可以在外部配置,尽管它通常是K8S控制平面的一部分。

etcd基于Raft一致性算法存储集群状态。这有助于处理在复制的状态机上下文中出现的常见问题,并涉及多个服务器就值达成一致。Raft定义了三个不同的角色:领导者、候选人和追随者,并通过选举领导者来达成共识。

通过这种方式,etcd充当所有K8S集群组件的单一真值源(SSOT),响应来自控制平面的查询,并检索容器、节点和pods状态的各种参数。etcd还用于存储配置详细信息,如ConfigMaps、子网和Secrets,以及集群状态数据。

K8S集群体系结构

由控制平面管理的集群节点是运行容器的机器。每个节点运行一个代理,用于与控制平面通信,kubelet是主K8S控制器。每个节点还运行容器运行时引擎,如Docker或rkt。该节点还运行用于监视、日志记录、服务发现和可选附加的其他组件。

下面是一些重点关注的K8S集群组件:

节点

K8S集群必须至少有一个计算节点,尽管它可能有许多计算节点,这取决于对容量的需求。已编排并计划在节点上运行Pods,因此需要更多节点来扩展集群容量。

节点为K8S集群执行工作。它们连接应用程序和网络、计算和存储资源。

节点可以是数据中心中的云本机虚拟机(VM)或裸机服务器。

容器运行时引擎

每个计算节点使用容器运行时引擎运行和管理容器生命周期。K8S支持开放容器计划兼容的运行时,如Docker、CRI-O和rkt。Kubelet服务

每个计算节点都包括一个kubelet,这是一个与控制平面通信的代理,以确保pod中的容器正在运行。当控制平面需要在节点中发生特定操作时,kubelet通过API服务器接收pod规范并执行该操作。然后,它确保相关的容器是健康和运行的。

Kube代理服务

每个计算节点都包含一个称为kube代理的网络代理,该代理有助于K8S网络服务。kube代理要么自己转发流量,要么依赖操作系统的数据包过滤层来处理集群内外的网络通信。

kube代理在每个节点上运行,以确保服务对外部方可用,并处理单个主机子网。它在其节点上充当网络代理和服务负载均衡器,管理UDP和TCP数据包的网络路由。事实上,kube代理为所有服务端点路由流量。

Pods

到目前为止,我们已经涵盖了内部和以基础设施为重点的概念。相比之下,pod是K8S的核心,因为它们是开发人员交互的关键外向结构。

pod表示应用程序的单个实例,也是K8S对象模型中最简单的单元。然而,pod是K8S的核心和关键。每个pod由一个容器或一系列紧密耦合的容器组成,这些容器在逻辑上结合在一起,以及控制容器运行方式的规则。

吊舱的寿命有限,在升级或缩小规模后最终会死亡。然而,尽管pod是短暂的,但它们可以通过连接到持久存储来运行有状态的应用程序。

Pods还能够水平自动缩放,这意味着它们可以增加或减少运行的实例数量。它们还可以执行滚动更新和金丝雀部署。

pod在节点上一起运行,因此它们共享内容和存储,并可以通过localhost访问其他pod。容器可能跨越多台机器,因此吊舱也可能。一个节点可以运行多个pod,每个pod收集多个容器。

pod是K8S生态系统中的核心管理单元,是共享资源和上下文的容器的逻辑边界。pod分组机制减轻了虚拟化和容器化方面的差异,该机制允许同时运行多个依赖进程。

通过创建副本集在运行时实现pod的扩展,副本集通过不断维护预定义的pod集来提供可用性,确保部署始终运行所需数量。服务可以向外部或内部消费者公开单个pod或复制集。

服务将特定的标准与pod相关联,以实现它们的发现。播客和服务通过称为选择器和标签的键值对进行关联。pod标签和选择器之间的任何新匹配都将由服务自动发现。

其他K8S Web应用程序体系结构组件

K8S管理应用程序的容器,但它也可以管理集群附加的应用程序数据。K8S用户可以在不了解底层存储基础结构详细信息的情况下请求存储资源。

K8S卷只是pod可以访问的目录,pod可以保存数据。卷的内容、形成方式以及支持它的介质由卷类型决定。永久卷(PV)是特定于集群的,通常由管理员提供,并绑定到现有存储资源中。因此,PV可以比特定吊舱更耐用。

K8S依赖于存储在容器注册表中的容器映像。它可以是第三方注册中心,也可以是组织配置的注册中心。

命名空间是物理集群中的虚拟集群。它们旨在为多个用户、团队提供虚拟分离的工作环境,并通过限制他们可以访问的K8S对象来防止团队相互阻碍。

在pod级别,pod中的K8S容器可以通过localhost访问其他端口,并共享它们的IP地址和网络名称空间。

K8S架构最佳实践

K8S体系结构以可用性、可扩展性、可移植性和安全性为前提。它的设计旨在更有效地在可用资源中分配工作负载,从而优化基础设施的成本。

高可用性

大多数容器编排引擎都提供应用程序可用性,但K8S的高可用性架构旨在实现应用程序和基础设施的可用性。

K8S体系结构使用复制控制器、副本集和宠物集确保了应用程序前端的高可用性。用户可以随时设置运行pod的最小数量。如果pod或容器崩溃,声明性策略可以将部署返回到所需的配置。使用pet集配置有状态工作负载以实现高可用性。

K8S HA架构还支持各种存储后端的基础设施可用性,从谷歌计算引擎持久磁盘和亚马逊弹性块存储(EBS)等块存储设备,到GlusterFS和网络文件系统(NFS)等分布式文件系统,以及Flocker等专用容器存储插件。

此外,每个K8S集群组件都可以进行高可用性配置。运行状况检查和负载均衡器可以进一步确保容器化应用程序的可用性。

可扩展性

部署在K8S中的应用程序是微服务,由许多容器组成,这些容器以pod的形式分组成一系列。每个容器在逻辑上都被设计为执行单个任务。

K8S 1.4支持集群自动伸缩,谷歌云上的K8S也支持自动伸缩。在自动扩展过程中,当没有可用的节点可以扩展pod时,K8S和底层基础设施会协调向集群添加额外的节点。

便携性

K8S旨在为云平台、容器运行时、操作系统、处理器架构和PaaS提供选择。例如,您可以在各种Linux发行版上配置K8S集群,包括CoreOS、Red Hat Linux、CentOS、Fedora、Debian和Ubuntu。它可以部署为在裸金属环境中本地运行;以及在基于vSphere、KVM和libvirt的虚拟化环境中。K8S的无服务器架构可以在Azure、AWS和Google cloud等云平台上运行。还可以通过在本地和跨云提供商混合和匹配集群来创建混合云功能。

安全

K8S应用程序体系结构在多个级别上进行了安全配置。有关K8S Security的详细信息,请参阅此处的讨论。

配置K8S架构安全性

为了保护K8S集群、节点和容器的安全,有几个基于DevOps实践和云原生原则的最佳实践需要遵循:

将K8S更新到最新版本:只有最新的三个版本的K8S才支持针对新发现的漏洞的安全补丁。

安全地配置K8S API服务器:停用匿名/未经身份验证的访问,并对API服务器和kubelets之间的连接使用TLS加密。

安全蚀刻:etcd本身是一个受信任的源,但仅通过TLS为客户端连接提供服务。

固定kubelet:停用对kubelet的匿名访问。使用–匿名auth=false标志启动kubelet,并使用NodeRestriction准入控制器限制kubelet可以访问的内容。

在容器生命周期的早期嵌入安全性:确保DevOps和安全团队之间有共同的目标。

使用K8S本机安全控制降低操作风险:在可能的情况下,利用本机K8S控件来强制执行安全策略,这样您自己的安全控件和协调器就不会发生冲突。

如何更好的学习K8S?

Docker和K8s在容器化领域至关重要,彻底改变了应用程序部署、可扩展性和管理。本质上,Docker和K8s一起为应用程序开发和部署实践的现代化做出了重大贡献,使它们成为不断发展的云计算和容器化领域中的关键技术。如果你希望更系统地学习,可以考虑参加虚拟化容器技术Docker+K8s培训课程。可以点击-小编头像,进入小编主页了解更多相关信息

一、K8S 简介

1.1 什么是 K8S

K8S,全称 Kubernetes,是一个用于管理容器的开源平台。它可以让用户更加方便地部署、扩展和管理容器化应用程序,并通过自动化的方式实现负载均衡、服务发现和自动弹性伸缩等功能。

具体来说,Kubernetes 可以将应用程序打包成容器,并将这些容器部署到一个集群中,然后自动处理容器的生命周期管理、自动扩容等操作,让用户更加专注于应用程序的开发和业务逻辑。同时,Kubernetes 还提供了一系列的资源管理机制,如资源调度、容器网络、存储编排等,控制整个容器集群的运行状态,并保证应用程序在容器集群中的高可用性和可靠性。

总之,Kubernetes 提供了一种优秀的容器化应用程序管理解决方案,可以让用户更加轻松地部署、扩展和管理容器化应用程序,提高应用程序的可靠性和稳定性。

1.2 历史和背景

Kubernetes(简称 K8S)最初是由 Google 开发的一个用于管理容器化应用的开源项目,其设计目标是为了解决 Google 内部大规模容器集群的管理问题。Google 于 2014 年首次将 Kubernetes 以开源软件的形式发布,并逐渐形成了强大的社区,吸引了越来越多的公司和组织参与其中。

随着时间的推移,Kubernetes 社区逐渐成为了一个庞大的开源生态系统,在全球范围内得到广泛的应用和推广。目前,Kubernetes 的社区成员包括了 Google、Red Hat、Microsoft、IBM、Docker 等业界领先的公司,他们通过贡献代码、技术支持等方式,致力于推动 Kubernetes 的发展和普及。

Kubernetes 的出现,很大程度上改变了云计算行业的格局,将容器技术推向了新的高度。在过去几年中,Kubernetes 已经成为了容器编排和管理领域的事实标准,并得到了越来越广泛的运用。无论是在公有云、私有云,还是混合云环境中,Kubernetes 都拥有广泛的适用场景,并能够帮助企业更加轻松地构建分布式应用和服务,提高应用程序的可靠性和弹性。

1.3 K8S 的使用场景

Kubernetes(简称 K8S)是一个用于管理容器的开源平台,通常在以下场景中被广泛使用:

1.3.1 微服务架构

Kubernetes 可以将微服务打包成容器,并将这些容器部署到一个集群中,并且在多个容器之间提供负载均衡和服务发现等功能,帮助用户更加方便地管理复杂的微服务架构。

1.3.2 自动化部署

Kubernetes 可以根据用户自定义的部署规范,自动将应用程序部署到指定的服务器或容器中,提高了部署的标准化和自动化程度,减少了出错可能性和手工操作的繁琐性。

1.3.3 弹性伸缩

Kubernetes 可以根据应用程序的负载情况,进行自动的容器伸缩操作,让用户可以更加高效地利用资源并提高应用程序的性能和可靠性。

1.3.4 多租户环境

Kubernetes 支持多租户环境,可以为不同的用户或部门提供独立的 Kubernetes 集群,并管理这些集群的资源配额、权限控制等,帮助用户更好地管理多个租户共享的资源。

1.3.5 持续集成和持续部署

Kubernetes 可以与持续集成和持续部署工具集成,实现自动化部署、测试、发布等操作,可以大大提高开发和发布效率。

总之,Kubernetes 是一个非常强大的容器管理平台,可以为用户带来很多便捷和优势。它在企业级应用程序和云计算环境中得到了广泛的应用和认可,成为当前最流行的容器编排和管理平台之一。

二、K8S 架构

Kubernetes 中一个集群通常由多个节点(Node)组成,其中 Master 节点作为整个集群的控制中心,主要负责集群的管理和调度工作。

2.1 Master 节点

2.1.1 API Server

API Server 是 Kubernetes 最核心的组件之一,它提供了 Kubernetes 集群中各个组件之间的通信和管理接口,所有操作都需要通过 API Server 发起和处理。当用户使用 kubectl 命令或者其他 Kubernetes 客户端工具时,实际上是通过 API Server 和集群进行交互的。

2.1.2 Etcd

Etcd 是 Kubernetes 集群中的分布式键值存储系统,用于保存集群中的所有状态信息和元数据。所有与 Kubernetes 集群相关的信息,包括 Pod、Service、Deployment 等对象的创建、更新和删除等操作,都将被记录在 Etcd 中。这样可以使得 Kubernetes 系统具有高可用性和复原能力,并且允许多个 Master 节点之间进行数据同步和共享。

2.1.3 Controller Manager

Controller Manager 是 Kubernetes 集群中的另一个核心组件,它负责监控和维护集群中所有资源对象的状态,以及进行自动化控制和管理操作。Controller Manager 中包含多个控制器,每个控制器负责监控和维护一种资源对象的状态,如 Deployment、ReplicaSet、DaemonSet 等,同时根据用户的需求,自动进行相应的容器调度、扩容、缩容等操作。

2.1.4 Scheduler

Scheduler 是 Kubernetes 集群中的另一个重要组件,主要负责根据集群中各个节点的负载情况,以及用户的调度策略,将新创建的 Pod 分配到合适的节点上。Scheduler 会根据 Pod 的资源需求、节点的资源情况、节点之间的网络距离等因素进行智能调度,从而实现负载均衡和资源最大化利用的目标。

2.2 Node 节点

除了 Master 节点外,Kubernetes 集群中还包括多个 Node 节点,它们是容器化应用程序真正运行的地方。

2.2.1 kubelet

kubelet 是运行在每个 Node 节点上的代理程序,它负责与 Master 节点上的 API Server 进行通信,并根据 Master 节点下发的指令,调度和管理本地节点上的容器。kubelet 可以监控本地节点上的容器状态,如启动、停止、健康状况等,并定期向 Master 节点报告节点状态信息。

2.2.2 kube-proxy

kube-proxy 是 Kubernetes 集群中的网络代理组件,它主要负责实现集群内 Service 的负载均衡和访问控制等功能。每个 Node 节点上都会部署一个 kube-proxy 组件来负责处理该节点上所有 Service 的流量转发和路由等操作。

2.2.3 容器运行时

容器运行时是 Kubernetes 中用于运行容器的底层组件,它负责将容器镜像转换为可以运行的进程,并提供容器的隔离、资源管理和网络管理等功能。Kubernetes 支持多种容器运行时,如 Docker、CRI-O、containerd 等,用户可以根据实际需求选择合适的容器运行时。容器运行时通常与 kubelet 紧密集成,在 Kubernetes 集群中发挥着至关重要的作用。

2.3 组件与插件

除了核心组件外,Kubernetes 还提供了许多组件和插件,以拓展其功能和实现更多的服务。以下是几个常用的 Kubernetes 组件和插件:

2.3.1 Kubernetes DNS

Kubernetes DNS 是 Kubernetes 集群中的域名解析系统,它为集群中所有容器提供了简单而可靠的 DNS 服务。通过 Kubernetes DNS,用户可以使用容器名称或 Service 名称等别名方式,轻松地访问到集群中运行的各种应用程序和服务。

2.3.2 Dashboard

Dashboard 是 Kubernetes 集群中的 Web 界面管理工具,它提供了一个易于使用和定制化的界面,让用户可以在不熟悉命令行操作的情况下,轻松地监控和管理集群中的资源对象和应用程序。Dashboard 支持多种自定义插件和主题,用户可以根据自己的需要进行定制和扩展。

2.3.3 Heapster

Heapster 是 Kubernetes 集群中的监控工具,它可以收集和分析各种容器和节点的性能指标,并将结果汇总和展示给用户。Heapster 支持多种存储后端,如 InfluxDB、ElasticSearch 等,用户可以选择适合自己的存储方式。

2.3.4 Ingress Controller

Ingress Controller 是 Kubernetes 集群中的负载均衡和流量路由组件,它可以将外部请求路由到集群内的不同 Service 或 Pod 上,并提供了多种负载均衡算法和路由规则。Ingress Controller 支持多种后端实现,如 Nginx、HAProxy 等,用户可以根据自己的需求进行选择和配置。 以上是 Kubernetes 中一些常用的组件和插件介绍,它们可以帮助用户更加高效地管理和操作 Kubernetes 集群中的容器应用程序。Kubernetes 的丰富生态系统和庞大社区,为用户提供了各种完善的支持和解决方案,让用户可以更加轻松地使用和掌握 Kubernetes。

三、K8S 核心概念

Kubernetes 是一个基于容器化技术的分布式应用程序编排平台,其核心概念主要包括 Pod、Service、Namespace、Deployment、StatefulSet、DaemonSet、Job 和 CronJob 等。

3.1 Pod

Pod 是 Kubernetes 中最小的调度和管理单元,它代表着集群中运行的一个或多个容器实例。在一个 Pod 中,所有容器共享相同的网络命名空间、进程命名空间和存储卷,因此它们可以互相通信和共享数据。Pod 可以通过控制器进行创建、扩缩容和更新等操作。

3.1.1 容器

Pod 中的容器是指实际运行业务逻辑的进程,可以使用 Docker、CRI-O、containerd 等各种容器运行时来运行。每个 Pod 中可以包含一个或多个容器,这些容器可以通过共享网络和存储资源,实现相互通信和协作。

3.1.2 生命周期

Pod 的生命周期包括 Pending、Running、Succeeded、Failed 和 Unknown 等几个阶段。在创建一个 Pod 后,它会首先进入 Pending 阶段,等待被调度到某个节点上。如果调度成功,Pod 就会进入 Running 阶段,开始正常运行。如果 Pod 运行失败或者所有容器都退出了,Pod 就会进入 Failed 或 Succeeded 阶段。如果调度和运行过程中出现了异常,Pod 就会进入 Unknown 阶段。

3.1.3 Pod 网络

Pod 网络是指 Kubernetes 中用于实现容器之间通信的网络环境。Pod 中的每个容器都有一个独立的 IP 地址,但它们共享相同的网络命名空间和端口空间,因此可以互相访问和通信。Kubernetes 支持多种网络插件和方案,如 Flannel、Calico、Cilium 等,用户可以根据实际情况进行选择和配置。

3.2 Service

Service 是 Kubernetes 中用于提供内部负载均衡和服务发现的组件,它可以将同一个应用程序的不同副本暴露在集群内部,并为这些副本提供唯一的虚拟 IP 地址和 DNS 域名。Service 可以通过控制器进行创建、更新和删除操作。

3.2.1 ClusterIP

ClusterIP 是 Service 的默认类型,它会分配一个集群内部的虚拟 IP 地址,并将该地址绑定到 Service 上。当其他 Pod 或容器需要访问 Service 时,只需要使用该虚拟 IP 地址即可。

3.2.2 NodePort

NodePort 是一种扩展 ClusterIP 的功能,它会在每个节点上分配一个唯一的端口号,并将该端口号映射到 Service 上。当其他节点或外部网络需要访问 Service 时,只需要使用该节点 IP 地址和映射的端口号即可。

3.2.3 LoadBalancer

LoadBalancer 是一种针对外部流量的负载均衡方案,它可以通过云服务商提供的负载均衡器或自定义的负载均衡器,将流量从外部网络转发到集群内部的 Service 上。

3.3 Namespace

Namespace 是 Kubernetes 中用于隔离和管理资源对象的逻辑分区,它可以帮助用户将不同的资源对象归类、管理和隔离。Kubernetes 中默认存在一些 Namespace,如 default、kube-system 等,用户也可以根据需要创建自定义的 Namespace。

3.4 Deployment

Deployment 是 Kubernetes 中用于管理 Pod 副本集的控制器,它可以控制一组 Pod 的创建、扩缩容和更新等操作。Deployment 支持滚动更新和回滚等功能,可以实现无缝的应用程序版本升级。

3.5 StatefulSet

StatefulSet 是 Kubernetes 中用于管理有状态应用程序副本集的控制器,它可以为每个 Pod 分配唯一的标识符和稳定的网络名称,保证每个 Pod 的唯一性和可访问性。StatefulSet 还支持有序部署和扩缩容等功能,可以实现高可靠性的有状态应用程序部署和管理。

3.6 DaemonSet

DaemonSet 是 Kubernetes 中用于在每个节点上运行一组 Pod 的控制器,它通常用于运行系统级别的服务或代理程序等,在每个节点上保证资源对象的一致性和状态。

3.7 Job

Job 是 Kubernetes 中用于管理一次性任务的控制器,它会创建一个或多个 Pod 来执行某个任务,并在任务完成后自动删除这些 Pod。Job 还支持任务成功和失败的检测和处理等功能。

3.8 CronJob

CronJob 是 Kubernetes 中用于周期性执行任务的控制器,它可以根据用户定义的时间表,自动创建和删除相应的 Job 对象。CronJob 还支持任务成功和失败的检测和处理等功能。

四、K8S 配置和部署

4.1 安装和配置 K8S

4.1.1 安装方式

安装 Kubernetes 可以通过多种方式,如二进制包部署、容器化部署、包管理器部署等,其中最常用的方式是使用二进制包和工具集进行部署,例如 kubeadm、kubectl 和 kubelet 等。以下是关于 Kubernetes 在 Linux、Windows 和 Mac 平台上的安装方式的详细介绍。

Linux

在 Linux 上安装 Kubernetes 通常需要以下步骤:

  1. 安装 Docker:Kubernetes 使用 Docker 来运行容器。您可以从官方网站(https://docs.docker.com/engine/install/)下载并安装 Docker。
  2. 安装 kubectl:kubectl 是用于与 Kubernetes 集群进行交互的命令行工具。您可以从 Kubernetes 官方网站(https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/)下载 kubectl,并将其复制到 /usr/local/bin/ 目录下。
  3. 安装 Kubernetes:最好使用某个发行版,如 Ubuntu、Debian 或 CentOS。您可以按照以下步骤来安装 Kubernetes:
  • 添加 Kubernetes apt 仓库或 yum 仓库。
  • 安装 kubelet、kubeadm 和 kubectl。
  • 运行 kubeadm init 命令来初始化 Kubernetes 集群。
  • 运行 kubeadm join 命令将其他节点加入集群。

有关更多详细信息,请参见 Kubernetes 官方文档(https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/)。

Windows

在 Windows 上安装 Kubernetes 通常需要以下步骤:

  1. 安装 Docker Desktop for Windows:Docker Desktop for Windows 包括 Kubernetes 工具。您可以从官方网站(https://www.docker.com/products/docker-desktop)下载并安装 Docker Desktop for Windows。
  2. 启用 Kubernetes:在 Docker Desktop for Windows 的设置中启用 Kubernetes。
  3. 安装 kubectl:kubectl 是用于与 Kubernetes 集群进行交互的命令行工具。您可以从 Kubernetes 官方网站(https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/)下载 kubectl,并将其添加到 PATH 环境变量中。
  4. 创建 Kubernetes 集群:在 PowerShell 窗口中运行以下命令:
Copy Codekubectl create cluster

有关更多详细信息,请参见 Kubernetes 官方文档(https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/)。

macOS

在 macOS 上安装 Kubernetes 通常需要以下步骤:

  1. 安装 Docker Desktop for Mac:Docker Desktop for Mac 包括 Kubernetes 工具。您可以从官方网站(https://www.docker.com/products/docker-desktop)下载并安装 Docker Desktop for Mac。
  2. 启用 Kubernetes:在 Docker Desktop for Mac 的设置中启用 Kubernetes。
  3. 安装 kubectl:kubectl 是用于与 Kubernetes 集群进行交互的命令行工具。您可以从 Kubernetes 官方网站(https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/)下载 kubectl,并将其添加到 PATH 环境变量中。
  4. 创建 Kubernetes 集群:在终端窗口中运行以下命令:
Copy Codekubectl create cluster

有关更多详细信息,请参见 Kubernetes 官方文档(https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/)。

4.1.2 配置文件

在 Kubernetes 中,所有的资源对象都可以通过 YAML 或 JSON 文件进行定义和配置。一个典型的 Kubernetes 配置文件包含以下几个部分:

  • API 版本:Kubernetes 提供了不同版本的 API,每个版本都具有其自己的资源对象。在文件中,您需要指定您使用的 API 版本号,以便 Kubernetes 能够正确理解和处理您的配置文件。
  • Metadata:在配置文件中,您需要为资源对象指定元数据信息,这些信息包括名称、标签、注释等。它们对于管理和组织 Kubernetes 应用程序非常重要。例如,在管理 Pod 时,使用标签将容器组合到一起,以便进行统一的操作。
  • Spec:在配置文件中,您需要为资源对象指定规格和配置信息,例如容器镜像、端口、挂载卷等。这些信息描述了如何创建和管理 Kubernetes 资源对象。
  • Status:在配置文件中,您可以为资源对象指定当前状态信息。例如,当容器运行时,Kubernetes 可以更新资源对象的状态,以反映容器的运行状态。这些状态信息对于监控和调试 Kubernetes 应用程序非常有用,可以让您很快了解资源对象的运行状况。

4.2 部署应用程序

4.2.1 Deployment 实战

Deployment 是 Kubernetes 中最常用的应用程序部署控制器,它可以帮助我们创建和管理一个或多个 Pod 的副本集,并实现滚动更新和回滚等功能。

使用 Deployment 部署应用程序需要以下几个步骤:

标签:容器,K8s,架构,Kubernetes,应用程序,集群,K8S,节点
From: https://www.cnblogs.com/exd1189/p/18159190

相关文章

  • Docker - 基本概念、与虚拟机的区别、架构、镜像操作、容器操作、数据卷挂载
    Docker-基本概念、与虚拟机的区别、架构、镜像操作、容器操作、数据卷挂载 一、对Docker 的理解1、Docker基本概念我们平时开发大型项目组件较多,依赖关系复杂,环境差异大,通过Docker就可解决上述问题~ Docker就是一个快速交付应用、运行应用的技术:运行前后:......
  • 【Docker系列】Section 2: Creating Kubernetes Development Clusters, Understandi
    继续上文,【Docker系列】Section2:CreatingKubernetesDevelopmentClusters,Understandingobjects,andExposingServices①引言:在Section2中,我们将转移到Kubernetes集群和对象。本节的第一章将解释如何使用一个流行的工具来创建库集群,称为KinD。我们将解释如何创......
  • kubernetes1.28.0配合apisix-ingress安装过程【1】
    环境介绍主机信息注意:由于资源有限,通过三台vmware虚拟机进行安装。主机名IP操作系统配置k8s-master192.168.199.101Centos7.92CPU、4G内存、100G磁盘k8s-node01192.168.199.102Centos7.92CPU、4G内存、100G磁盘k8s-node02192.168.199.103Centos7......
  • k8s 入门
    k8s是什么?k8s介于应用和服务器之间,能够通过配置协调多个应用服务。使用者通过配置yaml文件来将多个服务自动部署应用到各个服务器上,实现服务的自动扩缩容,并且具有高可用性(某台机器上服务宕机后,自动在另外的服务器上部署应用)。k8s架构原理k8s整体分为控制平面和运行节点,控......
  • k8s网络配置
    1基础概念1.1containerPort、port、nodePort、targetPort的区别与联系containerPort:Container容器暴露的端口。containerPort是在pod控制器中定义的、pod中的容器需要暴露的端口。port:service暴露在集群中的端口,仅限集群内部访问。port是暴露在cluster(集群网络)上的端口,提......
  • K8S集群问题:案例一:Java调用Glibc2.28-69内存分配器无法限制虚拟内存VIRT问题
    一、问题描述1、背景:租户反馈,Apr711:22容器出现夯死现象,容器部署的单个java进程;宿主机上,top显示的容器进程virt内存持续增长32G,目前messages日志没有看到oom的记录,基本是。租户其他bc7、8系统上有添加参数MALLOC_ARENA_MAX进行限制,基本维持在16G左右,目前bcoe21.10系统配置......
  • k8s Java 项目替换 jar 中的 class 文件
    背景紧急需求,客户需要立马上线docker包体积过大,远程不稳定,文件发不过去单点修改,风险低步骤1.获取pod所在宿主机podonhostkubectl-n$namespancegetpods-owide|grep$podname|grepRunning2.获取pod的容器cidkubectl-n$namespancedescribepo$podn......
  • K8S安装
    1、基础设置1.1关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld1.2关闭selinuxsetenforce0#这个是临时关闭1.3关闭swapswapoff-a#这个是临时关闭2、安装docker2.1卸载旧版本sudoyumremovedockerdocker-clientdocker-client-lates......
  • k8s使用存活(liveness)和就绪(readiness)探针的场景
    k8s使用存活(liveness)和就绪(readiness)探针的场景原创 zhuhb 运维笔谈 2024-04-2214:13 上海 听全文存活探针(liveness)主要用于检测容器是否仍然运行正常。如果存活探针检测到容器已经停止运行或者陷入死锁状态,Kubernetes会根据配置的重启策略来决定是否重启该容器。......
  • 【Docker系列】Section 2: Creating Kubernetes Development Clusters, Understandi
    引言:在Section2中,我们将转移到Kubernetes集群和对象。本节的第一章将解释如何使用一个流行的工具来创建库集群,称为KinD。我们将解释如何创建不同的网络集群,其范围从single-node(单节点)集群到使用HAProxy作为工作节点的负载平衡器的multiple-node(多节点)集群。通过一个可工作......