Kubernetes是什么?

作者&投稿:何邦 (若有异议请与网页底部的电邮联系)
Kubernetes是什么?

首先,它是一个全新的基于容器技术的分布式架构领先方案。这个方案虽然还很新,但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的重要成果。确切地说,Kubernetes是谷歌严格保密十几年的秘密武器——Borg的一个开源版本。Borg是谷歌的一个久负盛名的内部使用的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化。十几年以来,谷歌一直通过Borg系统管理着数量庞大的应用程序集群。由于谷歌员工都签署了保密协议,即便离职也不能泄露Borg的内部设计,所以外界一直无法了解关于它的更多信息。直到2015年4月,传闻许久的Borg论文伴随Kubernetes的高调宣传被谷歌首次公开,大家才得以了解它的更多内幕。正是由于站在Borg这个前辈的肩膀上,汲取了Borg过去十年间的经验与教训,所以Kubernetes一经开源就一鸣惊人,并迅速称霸容器领域。其次,如果我们的系统设计遵循了Kubernetes的设计思想,那么传统系统架构中那些和业务没有多大关系的底层代码或功能模块,都可以立刻从我们的视线中消失,我们不必再费心于负载均衡器的选型和部署实施问题,不必再考虑引入或自己开发一个复杂的服务治理框架,不必再头疼于服务监控和故障处理模块的开发。总之,使用Kubernetes提供的解决方案,我们不仅节省了不少于30%的开发成本,还可以将精力更加集中于业务本身,而且由于Kubernetes提供了强大的自动化机制,所以系统后期的运维难度和运维成本大幅度降低。

然后,Kubernetes是一个开放的开发平台。与J2EE不同,它不局限于任何一种语言,没有限定任何编程接口,所以不论是用Java、Go、C++还是用Python编写的服务,都可以被映射为Kubernetes的Service(服务),并通过标准的TCP通信协议进行交互。此外,Kubernetes平台对现有的编程语言、编程框架、中间件没有任何侵入性,因此现有的系统也很容易改造升级并迁移到Kubernetes平台上。

最后,Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建的智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。同时,Kubernetes提供了完善的管理工具,这些工具涵盖了包括开发、部署测试、运维监控在内的各个环节。因此,Kubernetes是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台。

在正式开始本章的Hello World之旅之前,我们首先要学习Kubernetes的一些基本知识,这样才能理解Kubernetes提供的解决方案。

在Kubernetes中,Service是分布式集群架构的核心,一个Service对象拥有如下关键特征。

拥有唯一指定的名称(比如mysql-server)。

拥有一个虚拟IP(Cluster IP、Service IP或VIP)和端口号。

能够提供某种远程服务能力。

被映射到提供这种服务能力的一组容器应用上。

Service的服务进程目前都基于Socket通信方式对外提供服务,比如Redis、Memcache、MySQL、

Web Server,或者是实现了某个具体业务的特定TCP Server进程。虽然一个Service通常由多个相关的服务进程提供服务,每个服务进程都有一个独立的Endpoint(IP+Port)访问点,但Kubernetes能够让我们通过Service(虚拟Cluster IP +Service Port)连接到指定的Service。有了Kubernetes内建的透明负载均衡和故障恢复机制,不管后端有多少服务进程,也不管某个服务进程是否由于发生故障而被重新部署到其他机器,都不会影响对服务的正常调用。更重要的是,这个Service本身一旦创建就不再变化,这意味着我们再也不用为Kubernetes集群中服务的IP地址变来变去的问题而头疼了。

容器提供了强大的隔离功能,所以有必要把为Service提供服务的这组进程放入容器中进行隔离。为此,Kubernetes设计了Pod对象,将每个服务进程都包装到相应的Pod中,使其成为在Pod中运行的一个容器(Container)。为了建立Service和Pod间的关联关系,Kubernetes首先给每个Pod都贴上一个标签(Label),给运行MySQL的Pod贴上name=mysql标签,给运行PHP的Pod贴上name=php标签,然后给相应的Service定义标签选择器(Label Selector),比如MySQL Service的标签选择器的选择条件为name=mysql,意为该Service要作用于所有包含name=mysql Label的Pod。这样一来,就巧妙解决了Service与Pod的关联问题。

这里先简单介绍Pod的概念。首先,Pod运行在一个被称为节点(Node)的环境中,这个节点既可以是物理机,也可以是私有云或者公有云中的一个虚拟机,通常在一个节点上运行几百个Pod;其次,在每个Pod中都运行着一个特殊的被称为Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此它们之间的通信和数据交换更为高效,在设计时我们可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod中;最后,需要注意的是,并不是每个Pod和它里面运行的容器都能被映射到一个Service上,只有提供服务(无论是对内还是对外)的那组Pod才会被映射为一个服务。

在集群管理方面,Kubernetes将集群中的机器划分为一个Master和一些Node。在Master上运行着集群管理相关的一组进程kube-apiserver 、 kube-controller-manager和kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理功能,并且都是自动完成的。Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。在Node上运行着Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁,以及实现软件模式的负载均衡器。

最后,看看传统的IT系统中服务扩容和服务升级这两个难题,以及Kubernetes所提供的全新解决思路。服务的扩容涉及资源分配(选择哪个节点进行扩容)、实例部署和启动等环节,在一个复杂的业务系统中,这两个难题基本上靠人工一步步操作才得以解决,费时费力又难以保证实施质量。

在Kubernetes集群中,只需为需要扩容的Service关联的Pod创建一个RC(Replication Controller),服务扩容以至服务升级等令人头疼的问题都迎刃而解。在一个RC定义文件中包括以下3个关键信息。

目标Pod的定义。

目标Pod需要运行的副本数量(Replicas)。

要监控的目标Pod的标签。

在创建好RC(系统将自动创建好Pod)后,Kubernetes会通过在RC中定义的LabelPod实例并实时监控其状态和数量,如果实例数量少于定义的副本数量,则会根据在RC中定义的Pod模板创建一个新的Pod,然后将此Pod调度到合适的Node上启动运行,直到Pod实例的数量达到预定目标。这个过程完全是自动化的,无须人工干预。有了RC,服务扩容就变成一个纯粹的简单数字 游戏 了,只需修改RC中的副本数量即可。后续的服务升级也将通过修改RC来自动完成。

Kubernetes(K8s)是一款由谷歌开源的容器集群管理系统。它基于容器技术,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列功能。
如今,Kubernetes 和更广泛的容器生态系统正在逐渐成熟,形成一个通用的计算平台和生态系统 - 虚拟机 (VM) 是现代云基础架构和应用的基础构建块,它即使没有超越虚拟机,也可以与之抗衡。 此生态系统使组织能够提供高生产力的平台即服务 (PaaS),解决围绕云原生开发、与基础架构和运营相关的多个任务及问题,从而使开发团队可以仅专注于编码和创新。
Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes的目标旨在消除编排物理/虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提供稳定、兼容的基础(平台),用于构建定制化的workflows 和更高级的自动化任务。 Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。 Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。

1 什么是Kubernetes
Kubernetes
是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。它支持一系列容器工具,
包括Docker等。
2 Kubernetes 特点
1、可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
2、可扩展: 模块化, 插件化, 可挂载, 可组合
3、自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
4、快速部署应用,快速扩展应用
5、无缝对接新的应用功能
6、节省资源,优化硬件资源的使用
3 Kubernetes规划组件
Kubernetes定义了一组构建块,它们可以共同提供部署、维护和扩展应用程序的机制。组成Kubernetes的组件设计为松耦合和可扩展的,这样可以满足多种不同的工作负载。可扩展性在很大程度上由Kubernetes
API提供——它被作为扩展的内部组件以及Kubernetes上运行的容器等使用。
Pod
Kubernetes的基本调度单元称为“pod”。它可以把更高级别的抽象内容增加到容器化组件。一个pod一般包含一个或多个容器,这样可以保证它们一直位于主机上,并且可以共享资源。Kubernetes中的每个pod都被分配一个唯一的(在集群内的)IP地址这样就可以允许应用程序使用端口,而不会有冲突的风险。
Pod可以定义一个卷,例如本地磁盘目录或网络磁盘,并将其暴露在pod中的一个容器之中。pod可以通过Kubernetes
API手动管理,也可以委托给控制器来管理。
标签和选择器
Kubernetes使客户端(用户或内部组件)将称为“标签”的键值对附加到系统中的任何API对象,如pod和节点。相应地,“标签选择器”是针对匹配对象的标签的查询。
标签和选择器是Kubernetes中的主要分组机制,用于确定操作适用的组件。
控制器
控制器是将实际集群状态转移到所需集群状态的对帐循环。它通过管理一组pod来实现。一种控制器是一个“复制控制器”,它通过在集群中运行指定数量的pod副本来处理复制和缩放。如果基础节点出现故障,它还可以处理创建替换pod。
其它控制器,是核心Kubernetes系统的一部分包括一个“DaemonSet控制器”为每一台机器(或机器的一些子集)上运行的恰好一个pod,和一个“作业控制器”用于运行pod运行到完成,例如作为批处理作业的一部分。控制器管理的一组pod由作为控制器定义的一部分的标签选择器确定。
服务
Kubernetes服务是一组协同工作的pod,就像多层架构应用中的一层。构成服务的pod组通过标签选择器来定义。
Kubernetes通过给服务分配静态IP地址和域名来提供服务发现机制,并且以轮询调度的方式将流量负载均衡到能与选择器匹配的pod的IP地址的网络连接上(即使是故障导致pod从一台机器移动到另一台机器)。默认情况下,一个服务会暴露在集群中(例如,多个后端pod可能被分组成一个服务,前端pod的请求在它们之间负载平衡);但是,一个服务也可以暴露在集群外部(例如,从客户端访问前端pod)。

kubernetes是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过kubernetes能够进行应用的自动化部署和扩缩容。在kubernetes中,会将组成应用的容器组合成一个逻辑单元以更易管理和发现。kubernetes积累了作为Google生产环境运行工作负载15年的经验,并吸收了来自于社区的最佳想法和实践。
kubernetes功能:
1、自动装箱
基于容器对应用运行环境的资源配置要求自动部署应用容器。
2、自愈能力
当容器失败时,会对容器进行重启。
当所部署的Node节点有问题时,会对容器进行重新部署和重新调度。
当容器未通过监控检查时,会关闭此容器。
直到容器正常运行时,才会对外提供服务。
3、水平扩展
通过简单的命令、用于UI界面或基于CPU等资源使用情况,对应用容器进行规模扩大或规模剪裁。
4、服务发现
用户不需要使用额外的服务发现机制,就能够基于kubernetes自身能力实现服务发现和负载均衡。
5、滚动更新
可以根据应用的变化,对应用容器运行的应用,进行一次性或批量式更新。
6、存储编排
自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录、网络存储公共云存储服务等。

Kubernetes(K8s)作为一个开源的容器编排平台,在近年来得到了广泛的应用和推广,成为了云原生应用开发和部署的事实标准。但是,Kubernetes的使用确实存在一些难点,如复杂的部署和配置、繁琐的维护和升级、缺乏友好的用户界面等问题。

针对这些问题,Kubernetes社区和各个厂商都在不断地进行改进和优化,尝试解决Kubernetes的难用问题。一些解决方案包括:

简化部署和配置:各大云厂商都提供了Kubernetes的托管服务,如AWS的EKS、Azure的AKS、Google Cloud的GKE等,使得用户可以更轻松地部署和配置Kubernetes集群。此外,一些开源项目,如Kubeadm、Kubespray等,也提供了简化部署和配置Kubernetes的工具和脚本。

提供友好的用户界面:为了方便用户管理和操作Kubernetes集群,出现了一些优秀的Kubernetes管理工具和UI界面,如Kubernetes Dashboard、Rancher、Portainer等,这些工具提供了可视化的操作界面,使得用户可以更加直观地管理Kubernetes集群。

推广Kubernetes生态系统:随着Kubernetes生态系统的不断完善,越来越多的应用和工具开始支持Kubernetes,例如Docker、Prometheus、EFK等,这些工具的支持帮助用户更加方便地使用Kubernetes。

尽管Kubernetes存在一些难用的问题,但是Kubernetes社区和各个厂商都在积极地进行改进和优化,使得Kubernetes变得更加易用和友好。同时,Kubernetes的生态系统也在不断扩展,越来越多的工具和应用开始支持Kubernetes,使得用户可以更加方便地使用和部署云原生应用。



~

什么是轻量级虚拟化技术
答:K8S,就是Kubernetes,中文意思是舵手或导航员。Kubernetes这个单词很长,所以大家把中间8个字母缩写成8,就成了K8S。K8S是一个容器集群管理系统,主要职责是容器编排(Container Orchestration)——启动容器,自动化部署、扩展和管理容器应用,还有回收容器。简单来说,K8S有点像容器的保姆。它负责管理容器在...

F5公司在负载均衡领域推出的Kubernetes容器服务解决方案对比开原方案有...
答:F5公司基于多年在负载均衡领域的经验推出了Kubernetes容器服务解决方案,既兼顾了容器环境下应用随时可能启停、迁移等灵活性要求,又具备传统F5稳定、安全、高性能等特性。F5容器服务解决方案实现了容器的南北向服务更加灵活的发布能力。相对于开源方案具备以下优势。1.简化的架构:目前开源方案中,在业务量增大...

3.自动化部署工具有哪些,各自的特点是什么
答:而自动化部署工具的出现,极大的缩短了部署时间,提高了软件交付的速度和质量。本文将介绍几款自动化部署工具并比较它们各自的特点。1.JenkinsJenkins是一款基于Java开发的开源自动化部署工具。它拥有高可扩展性和易用性,能够与GitHub、Docker、Kubernetes、Ansible等工具良好的融入。另外,Jenkins还支持各种作业...

cka是什么意思?
答:CKA是Certified Kubernetes Administrator的缩写,意为“认证Kubernetes管理员”。CKA认证是由Cloud Native Computing Foundation(CNCF)颁发的,用于证明个人在Kubernetes领域的专业知识和技能。CKA认证要求考生展示对Kubernetes集群部署、配置、维护和故障排除的深入理解,以及使用Kubernetes API和工具的经验...

CKA是什么,考的人多吗?
答:CKA ,全称是 Certificated Kubernetes Administrator,也就是官方认证的 Kubernetes 管理员,由 Kubernetes 的管理机构 CNCF 授权。对于想做 Kubernetes 运维类工作的朋友,拿到 CKA 应该算是除了相关工作经验外,最有力的能力背书了。对于想做 Kubernetes 开发类工作的朋友,虽然不直接相关,但也是一个很好...

可以帮助微服务架构实现自动化部署和运维的是什么技术
答:容器化技术,自动化部署工具。1、容器化技术:如Docker、Kubernetes等,可以将微服务打包成容器,实现环境的一致性和快速部署,简化了部署和维护的复杂度。2、自动化部署工具:如Jenkins、GitLabCI/CD等,可以实现自动化的构建、测试和部署流程,提高了部署的效率和准确性。

Docker是什么?
答:都可以运行。谐云自主研发的容器云平台,是基于Docker和Kubernetes技术构建的一套完整IT标准化和自动化框架,以“面向终态、优化IT资源”为目标的新一代PaaS平台,能够提高企业的IT管理能力,在降低运营成本和风险的同时,获得更高的运维效率,保障业务稳定运行和高效迭代。

Kubernetes技术人员有什么发展?
答:一、初级 10. 了解Kubernetes 基础架构与核心组件功能 11. 了解Docker基本概念和用法 12. 理解Docker与Kubernetes的基本关系 13. 能够安装、部署与配置 Kubernetes 集群 14. 熟练使用 kubectl 命令操作各种 Kubernetes 资源对象,了解基本概念和使用方法 15. 能够在 Kubernetes 上部署、运行、管理工作负载并...

程序员的月薪能过万,可是很多大学生都不愿意干这行,根本原因是什么?
答:要说什么是高薪职业,那大家首先就会说程序员,因为这是大家公认的工资高福利好的职业了,不少公司更是直接请你人来帮程序员按摩,这样的福利大家也只能羡慕了。程序员月薪上万,为何很多大学生都不愿意干这行了?就算是大家公认月薪上万的程序员,很多大学生虽然就是学这个的,毕业后却不愿意干这样的...

私有云是什么?
答:杉岩私有云存储解决方案充分发挥了杉岩统一存储平台(USP)的云适配、开放等优势,支持各种复杂的应用负载,可灵活支撑私有云的虚拟化平台,如VMware、Citrix、OpenStack等虚拟化和云平台,以及通过Kubernetes软件一致性认证的所有容器云平台,如:Rancher、Openshift、Kubernetes等。通过杉岩统一存储平台,用户可...