k8s入门到实战(一)—— kubernetes概述

k8s 概述

k8s github地址:https://github.com/kubernetes/kubernetes

官方文档:https://kubernetes.io/zh-cn/docs/home/

k8s,全程是 kubernetes,这个名字源于希腊语,意为"舵手"或"飞行员”

k8s 这个缩写是因为 k 和 s 之间有八个字符

Google 在2014年开源了 k8s 项目,k8s 是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。同样类似的容器编排工具还有 docker swarm/mesos 等,但 k8s 应用最为广泛,社区更为活跃。

什么是 k8s

k8s 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。它最初由 Google 开发,现由 Cloud Native Computing Foundation(CNCF)维护。k8s 的目标是简化应用程序的部署和管理,提供弹性、可扩展、高可用的服务。

k8s 基于容器技术,如 docker,作为应用程序的基本构建块。容器是一种轻量级的虚拟化技术,可以将应用程序及其依赖项打包到一个独立的、可移植的运行环境中。通过使用容器,开发者可以将应用程序与其运行环境隔离开来,并实现快速部署和跨平台运行。

k8s 提供了一套丰富的功能,用于管理容器化应用的生命周期。它的核心概念包括:

  • Pod:Pod 是 k8s 管理的最小调度单位,它可以包含一个或多个容器,并共享网络和存储资源。Pod 提供了容器之间的通信和协作。
  • Deployment:Deployment 定义了应用程序的期望状态,并负责创建和管理 Pod 的副本。它支持滚动更新、回滚和扩缩容等操作。
  • Service:Service 定义了一组 Pod 的访问方式和网络策略,为 Pod 提供了稳定的网络端点。Service 可以通过负载均衡将请求分发到后端的 Pod上。
  • Namespace:Namespace 提供了一种逻辑隔离的机制,用于将集群中的资源划分为多个虚拟集群。不同的 Namespace 可以拥有独立的资源配额、访问控制策略等。
  • Volume:Volume 是用于持久化数据的抽象,它可以在 Pod 之间共享和持久化存储数据。k8s 支持多种类型的 Volume,如本地磁盘、网络存储等。

除了上述核心概念之外,k8s 还提供了许多其他功能,包括自动扩展、存储管理、配置管理、日志和监控等。它支持水平扩展和自动化恢复,可以根据应用程序的资源需求和约束条件自动调度和管理容器的运行。k8s 还提供了丰富的 API 和命令行工具,使得开发者和运维人员可以方便地管理和操作容器化应用。

k8s 的设计目标是高度可扩展和高可用的,可以在大规模的集群上运行和管理应用程序。它可以部署在各种云平台和裸机环境中,支持多种操作系统和容器运行时。k8s 已经成为容器编排领域的事实标准,被广泛应用于云原生应用的开发和运维中。

为什么要使用 k8s

当你的应用只是跑在一台机器,直接一个 docker + docker-compose 就够了,方便轻松;

当你的应用需要跑在3、4台机器上,你依旧可以每台机器单独配置运行环境 + 负载均衡;

当你应用访问数不断增加,机器逐渐增加到十几台、上百台、上千台时,每次加机器、软件更新、版本回滚,都会变得非常麻烦、痛不欲生

这时候,k8s 就可以一展身手了;

它是一个全新的基于容器技术的分布式架构领先方案,是谷歌十几年依赖大规模应用容器技术的经验积累和升华的一个重要成果。

运维、部署问题。集群拓展问题、容器编排管理问题

若是咱们的系统设计遵循了 k8s 的设计思想,那么传统系统架构中那些和业务没有多大关系的底层代码或功能模块,均可以马上从咱们的视线消失,咱们没必要再费心于负载均衡器和部署实施问题,没必要再考虑引用或本身开发一个复杂的服务治理框架,没必要再头疼于服务监控和故障处理模块的开发。使用 k8s 提供的解决方案,咱们节省了超过30%的开发成本,同时能够将精力更加集中于业务自己,并且因为 k8s 提供了强大的自动化机制,因此系统后期的运维难度和运维成本也大幅度下降。

k8s 是一个开放的开发平台。没有限定任何编程接口,因此不管是 Java、Go、C++ 还是用 python 编写的服务,均可以毫无困难地映射为 k8s 的Service,并经过标准的 TCP 通讯协议进行交互。此外,因为 k8s 平台对现有的编程语言、编程框架、中间价没有任何侵入性,所以现有的系统很容易改造升级并迁移到 k8s 平台上。

IT 行业历来都是一个由新技术驱动的行业。

新兴的容器化技术当前已经被不少公司所采用,其从单机走向集群已成为必然,而云计算的蓬勃发展正在加速这一进程。k8s 做为当前惟一被业界普遍承认和看好的容器分布式系统解决方案,能够预见,在将来几年内,会有大量的新系统选择它,无论这些系统是运行在企业本地服务器或者是被托管到公有云上。

项目部署的发展历程

谈起 k8s 的发展历史,首先回顾一下项目部署的发展历程,分布经历了物理机、虚拟机、容器化三个阶段的演变。

在这里插入图片描述

  • 传统部署时代:

早期,应用程序直接在物理服务器上运行,无法为物理服务器中的应用程序定义资源边界,这会导致资源分配问题。例如,如果在物理服务器上运行多个应用程序,则可能会出现一个应用程序占用大部分资源的情况,结果可能导致其他应用程序的性能下降。一种解决方案是在不同的物理服务器上运行每个应用程序,但是由于资源利用不足而无法扩展,并且维护许多物理服务器的成本很高。

  • 虚拟化部署时代:

为了解决物理机存在的弊端,引入了虚拟化技术,支持在单个物理服务器的 CPU 上运行多个虚拟机(VM),每个 VM 是一台完整的计算机,在虚拟化硬件之上运行所有组件,包括其自己的操作系统。虚拟化技术允许应用程序在 VM 之间隔离,提供一定程度的安全,一个应用程序的信息不能被另一应用程序随意访问。虚拟化技术能够更好地利用物理服务器上的资源,由于可轻松地添加或更新应用程序而实现更好的可伸缩性,降低了硬件成本。

  • 容器部署时代:

容器类似于 VM,但是具有被放宽的隔离属性,可以在应用程序之间共享操作系统,因此容器被认为是轻量级的隔离。容器与 VM 类似,具有自己的文件系统、CPU、内存、进程空间等,由于它们与基础架构分离,因此可以跨云和操作系统发行版本进行移植。

问题出现:一旦容器多了,如何进行管理

随着微服务、容器化等技术的发展,解决了资源利用率不高的问题,但是随之而来却是如何进行容器管理,过多的容器使得运维工作也成为了一种负担,因此容器编排对于大型依托于容器化部署的分布式系统至关重要。在容器编排方面,k8s 所扮演的角色如下图所示:

在这里插入图片描述

k8s 相当于在容器之上,对服务器资源以及容器调度等过程进行管理

k8s 的特点与功能

特点:

  • 可移植:支持公有云,私有云,混合云,多重云;
  • 可扩展:模块化,插件化,可挂载,可组合;
  • 自动化:自动部署,自动重启,自动复制,自动伸缩/扩展。

功能:

  • 自动装箱:基于容器对应用运行环境的资源配置要求自动部署应用容器。
  • 自我修复(自愈能力):当容器失败时,会对容器进行重启;当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度;当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务。
  • 水平扩展:通过简单的命令、用户UI 界面或基于 CPU 等资源使用情况,对应用容器进行规模扩大或规模剪裁。
  • 服务发现:用户不需使用额外的服务发现机制,就能够基于 k8s 自身能力实现服务发现和负载均衡。
  • 滚动更新:可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新。
  • 版本回退:可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退。
  • 密钥和配置管理:在不需要重新构建镜像的情况下,可以部署和更新密钥和应用配置,类似热部署。
  • 存储编排:自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要,存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph、Cinder 等)公共云存储服务等

k8s 优点

k8s 作为一个容器编排平台,具有许多优点,使其成为云原生应用开发和运维的首选工具

  • 自动化管理:k8s 可以自动化地部署、扩展和管理应用程序。它提供了丰富的功能,如自动调度、自动伸缩、自动恢复等,减轻了人工管理的负担,提高了应用程序的可靠性和稳定性。
  • 弹性扩展:k8s 支持水平扩展,可以根据应用程序的负载情况动态调整应用程序的副本数量。当负载增加时,k8s 可以自动添加新的副本来处理更多的请求,当负载减少时,k8s 可以自动缩减副本数量,以节省资源。
  • 高可用性:k8s 具有高可用性的设计,可以在集群中自动进行容器的调度和迁移,以实现故障转移和负载均衡。它可以检测到容器或节点的故障,并自动重新调度容器到可用节点上,从而确保应用程序的连续可用性。
  • 灵活的部署模型:k8s 可以部署各种类型的应用程序,包括微服务架构、传统的单体应用程序、批处理作业等。它提供了丰富的部署配置选项,可以根据应用程序的需求进行定制化配置,并支持多种部署策略,如滚动更新、蓝绿部署等。
  • 跨平台和云厂商无关性:k8s 可以在各种云平台和裸机环境中部署和运行,它与特定的操作系统和容器运行时无关。这意味着开发者可以在不同的环境中无缝迁移应用程序,而不必担心依赖于特定的硬件或软件。
  • 强大的生态系统:k8s 拥有庞大的社区和丰富的生态系统,提供了许多插件和工具,用于扩展和增强其功能。开发者可以从这些插件中选择适合自己需求的工具,以满足特定的开发和运维需求。
  • 可观测性和监控:k8s 提供了丰富的监控和日志功能,可以实时监控应用程序的状态和性能指标,帮助开发者快速诊断和解决问题。它还支持集成外部监控工具和日志分析系统,以进一步增强可观测性。

总的来说,k8s 具有自动化管理、弹性扩展、高可用性、灵活的部署模型、跨平台和云厂商无关性、强大的生态系统以及可观测性和监控等优点,使其成为容器编排领域的事实标准,被广泛应用于云原生应用的开发和运维中。

k8s 设计架构

k8s 集群 = 多个 master node + 多个 work node

k8s 中包含了很多新的概念,它通过整合资源,提供了一套便于应用部署的方案及实现,极大减少了系统运维的工作量。

官方架构设计图:

在这里插入图片描述

k8s 通常是集群化部署,一个 k8s 集群由一组被称作节点(Node)的机器组成,一个节点可以理解为一台服务器,这些节点上运行 k8s 所管理的容器化应用。集群具有至少一个控制节点(MasterNode)和若干工作节点(WorkNode),节点可以是物理机或者虚拟机。

控制节点包含了控制平面(Contro Plane),控制平面中的组件用来管理整个集群,工作节点用来托管对应的工作负载 Pod。

一般来说节点上都会包含 kubelet、kube-proxy 等组件以及容器运行时。

需要知道的一些概念:

  • 控制平面:让我们从 k8s 集群的神经中枢(即控制平面)开始说起。在这里,我们可以找到用于控制集群的 k8s 组件以及一些有关集群状态和配置的数据。这些核心 k8s 组件负责处理重要的工作,以确保容器以足够的数量和所需的资源运行。 控制平面会一直与您的计算机保持联系。集群已被配置为以特定的方式运行,而控制平面要做的就是确保万无一失。
  • kube-apiserver:如果需要与您的 k8s 集群进行交互,就要通过 API。k8s API 是 k8s 控制平面的前端,用于处理内部和外部请求。API 服务器会确定请求是否有效,如果有效,则对其进行处理。您可以通过 REST 调用、kubectl 命令行界面或其他命令行工具(例如 kubeadm)来访问 API。
  • kube-scheduler:您的集群是否状况良好?如果需要新的容器,要将它们放在哪里?这些是 k8s 调度程序所要关注的问题。调度程序会考虑容器集的资源需求(例如 CPU 或内存)以及集群的运行状况。随后,它会将容器集安排到适当的计算节点。
  • kube-controller-manager:控制器负责实际运行集群,而 k8s 控制器管理器则是将多个控制器功能合而为一。控制器用于查询调度程序,并确保有正确数量的容器集在运行。如果有容器集停止运行,另一个控制器会发现并做出响应。控制器会将服务连接至容器集,以便让请求前往正确的端点。还有一些控制器用于创建帐户和 API 访问令牌。
  • etcd:配置数据以及有关集群状态的信息位于 etcd(一个键值存储数据库)中。etcd 采用分布式、容错设计,被视为集群的最终事实来源。
  • 容器集 Pod:容器集是 k8s 对象模型中最小、最简单的单元。它代表了应用的单个实例。每个容器集都由一个容器(或一系列紧密耦合的容器)以及若干控制容器运行方式的选件组成。容器集可以连接至持久存储,以运行有状态应用。
  • 容器运行时引擎:为了运行容器,每个计算节点都有一个容器运行时引擎。比如 docker,但 k8s 也支持其他符合开源容器运动(OCI)标准的运行时,例如 rkt 和 CRI-O。
  • kubelet:每个计算节点中都包含一个 kubelet,这是一个与控制平面通信的微型应用。kubelet 可确保容器在容器集内运行。当控制平面需要在节点中执行某个操作时,kubelet 就会执行该操作。
  • kube-proxy:每个计算节点中还包含 kube-proxy,这是一个用于优化 k8s 网络服务的网络代理。kube-proxy 负责处理集群内部或外部的网络通信。

k8s 使用场景

k8s 适用于各种使用场景,尤其适用于云原生应用的开发和运维。以下是一些常见的k8s 使用场景:

  • 微服务架构:k8s 可以有效地管理和部署微服务架构。它可以将不同的微服务部署为独立的容器,通过 Service 和 Ingress 等机制实现微服务之间的通信和负载均衡。k8s 提供了弹性扩展和自动恢复的能力,可以根据负载情况动态调整微服务的副本数量,确保高可用性和性能。
  • 自动化部署和持续集成/持续交付(CI/CD):k8s 可以与 CI/CD 工具集成,实现自动化的部署和持续交付。开发者可以使用 k8s 的 Deployment 和Service 等资源对象定义应用程序的期望状态,并通过 CI/CD 工具自动构建、测试和发布应用程序到 k8s 集群中。
  • 弹性扩展和负载均衡:k8s 支持水平扩展,可以根据应用程序的负载情况动态调整副本数量。它可以根据负载自动添加或删除容器实例,并通过Service 和 Ingress 等机制实现负载均衡,确保请求能够平均分发到后端的容器上。
  • 多租户和多环境管理:k8s 提供了 Namespace 的概念,可以将集群中的资源划分为多个虚拟集群,实现多租户的管理。通过使用不同的Namespace,可以将不同的应用程序或不同的环境(如开发、测试、生产)隔离开来,提供更好的资源隔离和安全性。
  • 批处理和定时任务:k8s 可以用于批处理作业和定时任务的管理。通过使用 CronJob 等资源对象,可以定义和调度定时任务,例如数据处理、报表生成等。k8s 提供了任务的并行执行、故障恢复和任务状态监控等功能,适用于处理大规模的批处理工作负载。
  • 混合云和多云环境管理:k8s 具有跨平台和云厂商无关性的特性,可以在混合云和多云环境中部署和管理应用程序。它可以在不同的云平台上运行,如 AWS、Azure、Google Cloud 等,同时也可以在私有云和裸机环境中部署。这使得开发者可以在不同的环境中无缝迁移应用程序,并减少对特定云厂商的依赖。

总的来说,k8s 适用于微服务架构、自动化部署和 CI/CD、弹性扩展和负载均衡、多租户和多环境管理、批处理和定时任务,以及混合云和多云环境管理等多种使用场景。它提供了丰富的功能和灵活的配置选项,使开发者能够更方便地管理和运维容器化应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/769659.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

启动性能优化

一、应用启动慢的原因 1.在主线程执行了太多耗时的操作,比如加载数据,或者初始化三方库等等,导致在Application的oncreate或者Activity的oncreate方法中耗时太久 2.布局嵌套太深,或者一些不会立即使用的布局也在一开始一起加载到…

Offlian RL: Weighted Policy Constraints for Offline Reinforcement Learning

AAAI 2023 paper Intro 分布偏移导致离线RL对于OOD数据存在过估计问题。因此一些方法限制策略靠近行为策略。但是着很大程度受限于数据集的质量。若是数据集存在非专家,一个自然的问题是是否有可能构建一个更合理的策略约束方法,该方法通过识别数据集中…

SpringBoot 3整合Elasticsearch 8

这里写自定义目录标题 版本说明spring boot POM依赖application.yml配置新建模型映射Repository简单测试完整项目文件目录结构windows下elasticsearch安装配置 版本说明 官网说明 本文使用最新的版本 springboot: 3.2.3 spring-data elasticsearch: 5.2.3 elasticsearch: 8.1…

2024年软件测试岗现状?“我“进阶了测试开发,一路狂飙...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、测试工程师的现…

SM2098EHD:巴西双电压球泡灯应用

巴西使用的双电压系统主要包括127V和240V。这种双电压系统是为了适应不同的电器设备和需求。在巴西,有些电器设备可能需要127V的电压,而有些则可能需要240V的电压。 因此,如果你在巴西使用电器设备,需要确保设备能够适应巴西的双…

【数据结构】绪论

文章目录 开篇:数据结构的学习之路1、开篇_数据结构在学什么2、数据结构的基本概念数据数据元素、数据项数据结构、数据对象数据类型、抽象数据类型数据结构的三要素逻辑结构数据的物理结构(存储结构)数据的运算 最后总结内容 3、算法的基本概…

Linux 理解文件系统、磁盘结构、软硬链接

目录 一、理解磁盘结构 1、磁盘的物理结构 2、硬件层面理解 3、磁盘的具体物理存储结构 4、进行逻辑抽象 5、磁盘文件的管理 6、创建新文件的过程 二、理解文件系统 1、文件的构成 2、为何选择4KB而非512字节作为基本单位? 3、文件系统的组成 数据块(Data Blocks&a…

图像抠图DIS——自然图像中高精度二分图像抠图的方法(C++/python模型推理)

概述 DIS(Dichotomous Image Segmentation)是一种新的图像分割任务,旨在从自然图像中分割出高精度的物体。与传统的图像分割任务相比,DIS更侧重于具有单个或几个目标的图像,因此可以提供更丰富准确的细节。 为了研究…

Ubuntu20.04上,VTK9.3在QT5上的环境配置与开发测试

Ubuntu20.04上,VTK9.3在QT5上的环境配置与开发测试 1 背景介绍2 VTK9.3的编译安装2.1 安装ccmake 和 VTK 的依赖项:2.2 建立VTK编译文件夹并下载2.3 cmake配置VTK9.3的编译环境2.4 make编译安装VTK9.32.5 测试VTK安装是否成功 3 基于qmake的QT5的VTK9.3开…

异地共享文件如何设置?

在当今数字化时代,异地办公已成为常态,越来越多的企业和个人需要在不同地区间进行文件共享与访问。为了解决复杂网络环境下的远程连接问题,北京金万维科技有限公司推出了一款名为【天联】的异地组网内网穿透产品。 【天联】组网是一款由北京金…

python基础——语句

一、条件语句 就是 if else 语句 ! 代表不等于 代表等于if 关键字,判断语句,有“如果”的意思,后面跟上判断语句else 常和“if” 连用,有“否则”的意思,后面直接跟上冒号 …

qt学习第三天,qt设计师的第一个简单案例

3月25,应用qt设计师,手动设计界面形状 ​ 如何启动qt设计师,找到对应的安装地点,对应你自己安装的pyside6或其他qt的安装路径来找 ​ 应用qt设计师的优点是不用敲代码然后慢慢调节框框大小,位置等、可以直接修改…

TTS通用播放库技术设计

TTS音频播放库技术设计 目录介绍 01.整体介绍概述 1.1 项目背景介绍1.2 遇到问题1.3 基础概念介绍1.4 设计目标1.5 问题答疑和思考 02.技术调研说明 2.1 语音播放方案2.2 TTS技术分析2.3 语音合成技术2.4 方案选择说明2.5 方案设计思路2.6 文本生成音频 03.系统TTS使用实践 3…

JavaEE企业开发新技术4

2.16 模拟Spring IOC容器功能-1 2.17 模拟Spring IOC容器功能-2 什么是IOC? 控制反转,把对象创建和对象之间的调用过程交给Spring框架进行管理使用IOC的目的:为了耦合度降低 解释: 模仿 IOC容器的功能,我们利用 Map…

LLM - 大语言模型的指令微调(Instruction Tuning) 概述

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/137009993 大语言模型的指令微调(Instruction Tuning)是一种优化技术,通过在特定的数据集上进一步训练大型语言模型(LLMs)&a…

【算法 高级数据结构】树状数组:一种高效的数据结构(二)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:算法题、 基础算法、数据结构~赶紧来学算法吧 💡往期推荐: 【算法基础 & 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定…

RTthread如何引入webclient和cjson来编写自己的模块代码||SecureCRT的安装与激活||安装VScode

目录 1.RTthread如何引入webclient和cjson来编写自己的模块代码 2.SecureCRT的安装与激活 3.static与const的区别 4.安装VScode 1.RTthread如何引入webclient和cjson来编写自己的模块代码 以我自己的工程为例: 首先将新引入的模块在applicatons下新建cpeinfo文件…

【MySQL】一条 SQL 查询语句在数据库中的执行流程 | SQL语句中各个关键字的执行顺序

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ …

知识图表示学习中的负抽样研究综述

摘要 知识图表示学习(KGRL)或知识图嵌入(KGE)在知识构建和信息探索的人工智能应用中起着至关重要的作用。这些模型旨在将知识图中的实体和关系编码到低维向量空间中。在KGE模型的训练过程中&#xff0c;使用正样本和负样本是区分的必要条件。然而&#xff0c;直接从现有的知识…

鸿蒙NXET实战:高德地图定位SDK【获取Key+获取定位数据】(二)

如何申请key 1、创建新应用 进入[控制台]&#xff0c;创建一个新应用。如果您之前已经创建过应用&#xff0c;可直接跳过这个步骤。 2、添加新Key 在创建的应用上点击"添加新Key"按钮&#xff0c;在弹出的对话框中&#xff0c;依次&#xff1a;输入应用名名称&…