您现在的位置是:首页 >技术杂谈 >1.1 Kubernetes概述和特性网站首页技术杂谈

1.1 Kubernetes概述和特性

肆悟先生 2024-06-17 10:43:10
简介1.1 Kubernetes概述和特性

1.1 Kubernetes概述和特性

1.1.1 Kubernetes基本介绍

Kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是2014年由谷歌开源的一个容器集群管理系统,谷歌在其内部系统中已经使用了十几年,后来经过各种完善后做了开源供很多人使用,用于管理云平台中多个主机上的容器化的应用,这里要注意Kubernetes是一个容器管理工具,Kubernetes的目标是让部署容器化的应用简单且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常中,并不利于可移植性。

新的方式是通过部署容器方式实现,这是目前一种比较主流的方式,而用容器化的好处是我们可以做一个带环境安装,可以省略里面很多不必要的麻烦,让生产环境和测试环境保持一致,使应用的部署,更加简单,更加方便,更加快速,每个容器之间相互隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,机器文件系统解耦(耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。 解耦就是用数学方法将两种运动分离开来处理问题,常用解耦方法就是忽略或简化对所研究问题影响较小的一种运动,只分析主要的运动。)的,所以他能在不同云、不同版本操作系统间进行迁移。

容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build和release的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似的,容器比虚拟机轻量、更透明,这更便于监控和管理。

容器化大家首先想到的技术就是Docker,Docker确实能做到容器化,但Docker在实际应用中经常在我们的单机版运行,随着用户量的增加,开发的服务不可能只是单机版,这就需要做集群部署,使用Docker虽然很多功能也能做到集群化,但并不是很方便。

使用Kubernetes就可以解决Docker中很多不方便的地方,因为它能够实现我们的各种操作,比如说我们使用Docker可以让我们的运维人员不需要进行复杂的手工配置和处理,而使用Kubernetes可以做自动化部署或者说大规模的升级回滚操作,用它会特别方便,Kubernetes是谷歌开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂得的手工配置和处理。

这里我们要强调要理解的是

  1. Kubernetes是谷歌在2014年开源的容器化集群管理系统
  2. 使用Kubernetes进行容器化应用部署
  3. 使用Kubernetes使得我们服务器部署更加方便,有利于程序的扩展和维护。
  4. 使用Kubernetes的目标是让我们的部署容器化应用更加简洁和高效,使这个过程更加方便,因为Kubernetes是一个管理系统,使用之后使得管理部署更加的简洁,可以极大的节约我们的工作量,使我们的过程能够更加高效的进行下去。

1.1.2 Kubernetes的特性

1. 自动装箱

简单的说就是让我们的过程不需要手动的过多干预,通过Kubernetes管理系统可以让我们的部署自动完成这一过程,如自动启动服务器,这是因为Kubernetes基于容器对应用运行环境的资源配置要求自动部署应用容器

2. 自我修复(自愈能力)

如我们有两个节点,每个节点都有相关的应用或者容器或者叫做副本,两个节点中当第一个节点挂掉了,此时就可以通过Kubernetes将第一个节点的应用飘到第二节点,第二节点可以马上运行起来让当前已经挂掉的服务还可以继续运行下去。

当容器失败时,会对容器进行重启

当所部署的Node节点有问题时,会对容器进行重新部署和重新调度。

当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务。说的通俗一点就是两个节点中第一个节点挂掉了,此时需要第二个节点提供服务,此时第二个节点需要启动,启动是需要时间的,当第二个节点没有完全正常启动之前,第二个节点不提供服务,只有当第二个节点完全都启动之后包括第二个节点中的服务、各种应用都启动之后才对外提供服务,客户端才能访问,第二个节点才能接收到对外的各种请求并为之服务。

3. 水平扩展

通过简单的命令、用户UI界面或基于CPU等资源使用情况,对应用容器进行规模扩大或规模裁减,这个比较好理解,比如目前服务器中有节点,节点中有多个应用或者副本,假如现在正处于高峰期,如双十一双十二会出现大量的请求,此时的高峰期可以使副本数量本来是三个情况下增加至十个副本提供服务,当高峰期过后再将副本降低为六或者三,使我们的资源更合理充分的利用。即当有更多的请求之后让其副本数量增加以提供更多的服务,可以满足我们不同的需求。

4. 服务发现(负载均衡)

用户不需要使用额外的服务发现机制,就能够基于Kubernetes自身能力实现服务发现和负载均衡。

如在提供服务的集群中有两个节点,两个节点在对外提供服务的时候这两个节点并不是直接对外提供服务,他需要对外有一个统一的入口,这个入口就是在后面我们将要学习的Service,这个入口从事的工作我们从购物这个例子来理解一下,如果顾客操作订单相关的服务时,入口就会将该请求分配给订单相关的节点,如果顾客操作购物车的相关服务,入口将该请求分配给购物车的服务节点,此外在入口处可以做负载均衡,比如在订单里有多个应用,入口就会把请求平均分担到各个节点。即对外提供一个统一的入口让其从事节点的调度包括负载均衡的过程。

5. 滚动更新

可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新。

滚动更新的理解:如在集群中增加一个新的节点或增加一个新的功能,如现在我们一次性增加三个应用,Kubernetes在添加应用时并不是三个应用都直接加进去就马上提供服务,如增加第一个应用时当他检测可以应用时才对外提供服务,如此类推添加第二个、第三个服务都是检测之后没有问题才提供服务。

6. 版本回退

可以根据应用部署情况,对应用容器运行的应用,进行历史版本即时回退。

如我们在集群中增加了新的功能,但是发现功能里面有BUG,此时我们考虑要回滚到之前的版本上,让其还可以按照之前的效果继续运行,这就是版本回退。

7. 秘钥和配置管理

这就类似我们经常所说的热部署,在不需要重新构建镜像的情况下,可以部署和更新秘钥和应用配置。就是不需要把集群都重启起来,Kubernetes增加了一个应用配置可以把它自动加进去直接运行不需要重启集群,因为在集群中肯定不可能一台机器,要重启是一个庞大的工程。我们使用热部署的机制就不需要重启。

8. 存储编排

支持访问外部的挂载应用,如公有云、网络存储等。

自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要,存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph等)、公共存储服务。

9. 批处理

提供一次性任务,定时任务(比如每天某个时段进行某个操作);满足批量数据处理和分析的场景。

以上就是Kubernetes的相关的特性及功能,这些特性和功能如果单纯用容器化技术Docker很多服务是无法实现的,即便能做到也是非常复杂的,因此使用Kubernetes更加方便和简洁,更高效的实现容器化的部署或者说容器化操作。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。