首页 体育 教育 财经 社会 娱乐 军事 国内 科技 互联网 房产 国际 女人 汽车 游戏

给技术经理的Kubernetes采用指南

2020-05-22

---

1. 从宠物到羊群

曩昔服务就像宠物相同,需求办理员一个个办理保护,现在服务器更像是羊群,办理员经过简略的指令或许装备就能够办理许多的服务器

曾几何时,体系办理员用主机名和便签来办理服务器,现在,咱们并不知道咱们的作业负载运转在哪种类型的服务器上,因为这些原本应该躺在机房以及数据中心的机器现已让位给像是 亚马逊,微软以及谷歌这些公有云供给商了。体系办理员确实像曾经相同为运转在公共云上的虚拟机命名,就像他们养宠物相同。但在曩昔假如出售人员需求服务器时,体系办理员或许需求花费数周的时刻,然后经过电话或电子邮件与出售人员攀谈以进行装备。可是跟着高性能虚拟化和公有云API的呈现,一个简略的API调用能够在几秒钟内发动机器。聪明的技能人员意识到公有云不只供给了对核算的快速拜访,而且还能经过供给易用的RESTful API来供给了主动化的才能。这真是太美好了。

2. 代码即根底设施以及Devops 跟着 Chef , Puppet , Ansible 以及 SaltStack 技能的呈现,开发和运维之简的鸿沟越来越含糊。曾经体系办理员很少冒险运用除了Shell脚本之外的言语,而 Chef , Puppet 以及 Ansible 都是开展老练的体系编列结构。 Puppet 运用了特定于域的言语来让体系办理员界说其根底架构设置的终究状况,而 Chef 运用的是依据 Ruby 言语的DSL,能够充分发挥 Ruby 言语的表达才能来界说根底架构的终究状况。这些技能使咱们直接进入声明式以及指令式架构的年代,咱们能够经过文件中的代码来界说服务器根底架构的终究状况,因而能够像办理源代码相同对架构进行版别操控。这和手动设置服务器并登入装置各种软件,设置硬件资源十分不同,尽管办理员或许会运转一些脚本使这个进程愈加高效,可是现在,运用 Chef 以及 Puppet 能够集中化办理体系装备,而且经过他们功用强壮的API,能够轻松的办理许多服务器。

---

曩昔服务就像宠物相同,需求办理员一个个办理保护,现在服务器更像是羊群,办理员经过简略的指令或许装备就能够办理许多的服务器

曾几何时,体系办理员用主机名和便签来办理服务器,现在,咱们并不知道咱们的作业负载运转在哪种类型的服务器上,因为这些原本应该躺在机房以及数据中心的机器现已让位给像是 亚马逊,微软以及谷歌这些公有云供给商了。体系办理员确实像曾经相同为运转在公共云上的虚拟机命名,就像他们养宠物相同。但在曩昔假如出售人员需求服务器时,体系办理员或许需求花费数周的时刻,然后经过电话或电子邮件与出售人员攀谈以进行装备。可是跟着高性能虚拟化和公有云API的呈现,一个简略的API调用能够在几秒钟内发动机器。聪明的技能人员意识到公有云不只供给了对核算的快速拜访,而且还能经过供给易用的RESTful API来供给了主动化的才能。这真是太美好了。

Docker并不是一项容器技能,它是一个强壮的运用linux原始特性来轻松办理和组合容器的东西,Linux容器是运用Linux的操作体系的原始特性来构建的。Docker只是使构建和办理容器变得简略。运用Docker,能够轻松的打包运用程序及其全部依靠联络。就像一个真实的容器相同,“运送”变得十分简略。之后这个容器能够运转在恣意Linux机器之上,而不必预先装置其依靠项。经过容器技能,咱们能够运转来自Debian Linux的Nginx,以及来自Ubuntu的Python Flask结构,与此一起,还能够运转来自 Alpine的MySQL, 这些软件一同构成了用户的运用,全部这些软件包都在同一Linux服务器上运转。总而言之,Docker,供给了声明式构建容器的规范,并供给了在Linux服务器上运转和办理容器的生命周期的东西,成功驾御了Linux的容器技能而且供给了巨大的便当。

与此一起,另一种快速开展的办法使得运维人员越来越深化到开发者的范畴之中,Devops,工程师发现,运维人员期望体系安稳,而开发人员期望随时发布新的功用,这给安稳性的带来了巨大的应战。这两个方针彼此对立,致使团队彼此争论,直接影响了产品的交给速度。而且开发团队的人员在没有意识到他们的代码会在出产环境中引起何种问题之前,他们是不会花费力气去修正它的。因为出产环境一般是由运维团队来处理的。为了处理这些问题。团队开端测验一种新的办法:Devops,这个办法很简略,谁写代码,谁担任发布到出产环境。一起也将担任之后的值勤。假如开发人员想要愈加频频的发布新功用,那么他们需求了解作为运维人员需求做哪些作业来支撑发布。云和容器技能以及其强壮的API和东西链,使得这种办法能够被并入云操作中。快速开展的DevOps团队会构建由微服务组成的大型运用程序,每个微服务都能够独立开发和发布,而无需测验和发布整个大型运用程序。测验DevOps的团队会运用微服务架构,他们喜爱云和容器的可塑性和灵活性,程序员能够经过可编写脚本的东西和API轻松操控。

4. 进入Kubernetes

当Devops和微服务遇到了容器,一个新的,原生的编列结构应运而生,

受Google Borg体系的启示,Kubernetes是一个开源容器编列体系,开端由Google的工程师构建,现在由CNCF保护。作为容器编列渠道,Kubernetes能够完成主动化运用程序布置,扩展和办理。尽管像Docker这样的体系也能够办理服务器中的容器,但Kubernetes的功用更强壮,其首要功用之一是能够办理运转容器的服务器或节点的集群。与此相似的结构有Apache Mesos和Docker Swarm。但到现在为止,明显,Kubernetes现已成为赢家。现在,挑选Kubernetes作为容器编列结构是一个十分安全的挑选。

4.1不只仅是Docker

与此一起,另一种快速开展的办法使得运维人员越来越深化到开发者的范畴之中,Devops,工程师发现,运维人员期望体系安稳,而开发人员期望随时发布新的功用,这给安稳性的带来了巨大的应战。这两个方针彼此对立,致使团队彼此争论,直接影响了产品的交给速度。而且开发团队的人员在没有意识到他们的代码会在出产环境中引起何种问题之前,他们是不会花费力气去修正它的。因为出产环境一般是由运维团队来处理的。为了处理这些问题。团队开端测验一种新的办法:Devops,这个办法很简略,谁写代码,谁担任发布到出产环境。一起也将担任之后的值勤。假如开发人员想要愈加频频的发布新功用,那么他们需求了解作为运维人员需求做哪些作业来支撑发布。云和容器技能以及其强壮的API和东西链,使得这种办法能够被并入云操作中。快速开展的DevOps团队会构建由微服务组成的大型运用程序,每个微服务都能够独立开发和发布,而无需测验和发布整个大型运用程序。测验DevOps的团队会运用微服务架构,他们喜爱云和容器的可塑性和灵活性,程序员能够经过可编写脚本的东西和API轻松操控。

当Devops和微服务遇到了容器,一个新的,原生的编列结构应运而生,

受Google Borg体系的启示,Kubernetes是一个开源容器编列体系,开端由Google的工程师构建,现在由CNCF保护。作为容器编列渠道,Kubernetes能够完成主动化运用程序布置,扩展和办理。尽管像Docker这样的体系也能够办理服务器中的容器,但Kubernetes的功用更强壮,其首要功用之一是能够办理运转容器的服务器或节点的集群。与此相似的结构有Apache Mesos和Docker Swarm。但到现在为止,明显,Kubernetes现已成为赢家。现在,挑选Kubernetes作为容器编列结构是一个十分安全的挑选。

值得留意的是,Kubernetes能够编列不只由Docker办理的容器。它还能够编列由相似于Docker的体系办理的容器,例如ContainerD,Cri-O和RktLet。尽管您能够创立和办理这些体系的容器,但在本文中,咱们将用“ Docker”来指代“容器办理”。现在,让咱们看一下Kubernetes的一些最重要的功用。

要想知道为什么Kubernets如此重要,首要要了解Docker的鸿沟在哪,尽管Docker能够轻松办理一个服务器内容器的生命周期,可是Kubernets能够轻松办理多个运转Docker容器的服务器。另一方面,现在,微服务运用常常由几个容器构成,Kubernets供给了“运用程序布置”这个概念,指的是组成运用程序的一组容器,在集群上以分布式办法运转。当您要运转由一组容器组成的运用程序时,只需奥秘Kubernetes,它便能够找出集群中的哪些节点具有满足的核算资源来运转容器,并在其间调度它们。Kubernetes会在容器呈现毛病时重启容器,乃至能够依据某些参数来扩展你的运用,如添加容器的数量以应对激增流量。这便是Kubernetes的实质,这也便是人们所议论的“容器编列”。

在集群上运转多个运用时,Kubernets还供给了其他的功用来简化办理,它使办理运用程序的装备和证书变得愈加简略,

Kubernetes还办理其他根底架构,例如存储和网络,核算,这是构成任何根底架构的最基本三个组成部分。

4.3 是否保管

要想知道为什么Kubernets如此重要,首要要了解Docker的鸿沟在哪,尽管Docker能够轻松办理一个服务器内容器的生命周期,可是Kubernets能够轻松办理多个运转Docker容器的服务器。另一方面,现在,微服务运用常常由几个容器构成,Kubernets供给了“运用程序布置”这个概念,指的是组成运用程序的一组容器,在集群上以分布式办法运转。当您要运转由一组容器组成的运用程序时,只需奥秘Kubernetes,它便能够找出集群中的哪些节点具有满足的核算资源来运转容器,并在其间调度它们。Kubernetes会在容器呈现毛病时重启容器,乃至能够依据某些参数来扩展你的运用,如添加容器的数量以应对激增流量。这便是Kubernetes的实质,这也便是人们所议论的“容器编列”。

在集群上运转多个运用时,Kubernets还供给了其他的功用来简化办理,它使办理运用程序的装备和证书变得愈加简略,

Kubernetes还办理其他根底架构,例如存储和网络,核算,这是构成任何根底架构的最基本三个组成部分。

5. 您的安排预备好运用Kubernetes吗?

这取决一系列要素

5.1 公有云仍是私有云

这取决一系列要素

Kubernetes能够布置在公有云和私有云上。在私有云上,尽办理论上您能够自己装置和保护Kubernetes,但最好是运转比如OpenShift之类供给的Kubernetes发行版,该发行版能够获得供货商技能支撑。 Kubernetes诞生于云中,是一种所谓的“云原生”技能,它是办理核算集群的绝佳挑选。实际上,Kubernetes也是办理私有云的绝佳挑选。

关于像是AWS,Azure以及GCP这类公有云,你能够在一组核算节点上运转Kubernetes,例如,你能够运用Kops在AWS的EC2实例上布置Kubernetes,可是,我激烈主张您挑选运用保管的Kubernetes产品,从而将保护Kubernetes操控平面的作业移交给云服务供给商,以便您能够专心于如安在Kubernetes上运转作业负载。

Kubernets并不是入门级产品,它是一个容器编列渠道。假如您预备运转在Kubernets的运用还没有容器化,您首要有必要保证这些运用程序已在出产中的Docker上经过了杰出的测验。稍后,咱们将提出一个简略的战略,阐明怎么逐渐施行这个过程。 Docker已被广泛选用,东西现已十分老练,能够必定地说,Docker现已远远超出了炒作阶段。不管您的安排有多么“慎重”的IT战略,选用Docker是没有太大危险的。假如将Docker与Kubernetes以适宜的办法结合,能够真实进步服务器运用率。因而,这件事值得考虑。

5.3 安排中的DevOps文明有多老练?

Kubernets并不是入门级产品,它是一个容器编列渠道。假如您预备运转在Kubernets的运用还没有容器化,您首要有必要保证这些运用程序已在出产中的Docker上经过了杰出的测验。稍后,咱们将提出一个简略的战略,阐明怎么逐渐施行这个过程。 Docker已被广泛选用,东西现已十分老练,能够必定地说,Docker现已远远超出了炒作阶段。不管您的安排有多么“慎重”的IT战略,选用Docker是没有太大危险的。假如将Docker与Kubernetes以适宜的办法结合,能够真实进步服务器运用率。因而,这件事值得考虑。

一个强壮的Devops文明意味着开发者需求担任在出产环境中运转他们开发的服务,他们会一向寻觅一些主动化操作来进步他们的出产力。特别是当运用或许服务是以微服务的架构为根底,意味着不同的团队需求独立运转不同的微服务,Kubernetes十分合适这种状况,而且能很快被内部选用。不过另一方面,Kubernetes也能够很好的运转单体的作业负载。这儿的要害点在于,假如有两个独立的团队,开发和运维,假如运维团队以一种全新的布置办法作业,然后让开发团队尽力习惯一种用于容器化和运用程序装备的构建体系,那么两个团队或许都不会支付太大的尽力来促进这件事。

Kubernetes需求花费必定的时刻去学习,而且只要当你学习了容器化之后再去学Kubernetes才有含义。假如您坚信Kubernetes合适您的安排而且现已考虑了以上列出的几个要害,那么您或许需求几个有才能和决心在出产中运用Kubernetes的拥护者,假如您的安排中只要刚触摸Kubernetes的人员,咱们会供给一条途径协助你们堆集经历,与此一起,下降再出产中运用Kubernetes的危险。稍后我将介绍怎么完成。

6. Kubernetes圈套

假如有人将Kubernetes称为灵丹妙药,那么他们或许还停留在初级阶段。这是您需求留意的一些作业。

6.1 保管的Kubernetes不是全能药

Kubernetes需求花费必定的时刻去学习,而且只要当你学习了容器化之后再去学Kubernetes才有含义。假如您坚信Kubernetes合适您的安排而且现已考虑了以上列出的几个要害,那么您或许需求几个有才能和决心在出产中运用Kubernetes的拥护者,假如您的安排中只要刚触摸Kubernetes的人员,咱们会供给一条途径协助你们堆集经历,与此一起,下降再出产中运用Kubernetes的危险。稍后我将介绍怎么完成。

假如有人将Kubernetes称为灵丹妙药,那么他们或许还停留在初级阶段。这是您需求留意的一些作业。

Kubernetes是一个由许多协同作业的软件组成的体系。不管您是直接办理它仍是挑选保管Kubernetes,都或许遇到问题。就算是保管的Kubernetes,它的各个组成部分也或许呈现问题。不要只是因为Kubernetes操控平面是由您的云服务供给商办理的,就觉得它不会犯错。您能够在Github上找到几个特定于云供给商的Kubernetes问题。当呈现问题时,您或许仍需求联络支撑人员并进行处理。这或许触及停机时刻。因为操控平面中的Kubernetes组件仅创立和监督容器,所以假如它们呈现毛病,它们一般不会影响现已在运转的容器。可是,操控平面出问题或许会影响您创立新容器以及主动调整容器数量等操作。

Kubernetes适用于创立和毁掉容器的运用。为了应对流量激增,能够暂时创立许多容器,一旦状况康复正常,这些容器将被停止。跟后台作业运转器相同。这意味着它将是一个十分动态的环境,服务器被作为一个全体而不是个别。这意味着,像数据库这样有状况的运用好像没有被考虑到。实际上,数据库这块范畴的开发一向十分活泼,现在这个功用也比较安稳了。不过Kubernetes的有状况的运用的功用仍在快速改变中。

Kuberntes自身就支撑在有状况的运用中运用耐久卷,当然你能够以云供给商的办法来分配耐久卷给有状况的运用。

假如您想运用由根底云供给商办理的有状况服务,您需求运用Kubernetes的服务目录,那么kubernetes就能够消费云供给商保管的服务。

6.3 Kubernetes晋级

Kubernetes适用于创立和毁掉容器的运用。为了应对流量激增,能够暂时创立许多容器,一旦状况康复正常,这些容器将被停止。跟后台作业运转器相同。这意味着它将是一个十分动态的环境,服务器被作为一个全体而不是个别。这意味着,像数据库这样有状况的运用好像没有被考虑到。实际上,数据库这块范畴的开发一向十分活泼,现在这个功用也比较安稳了。不过Kubernetes的有状况的运用的功用仍在快速改变中。

Kuberntes自身就支撑在有状况的运用中运用耐久卷,当然你能够以云供给商的办法来分配耐久卷给有状况的运用。

假如您想运用由根底云供给商办理的有状况服务,您需求运用Kubernetes的服务目录,那么kubernetes就能够消费云供给商保管的服务。

您或许会惧怕Kubernetes集群晋级会带来严峻的结果,导致您更期望坚持现有的集群设置。那么最好的办法或许是运用和出产集群相同版别的Kubernetes和装备来创立一个新集群,装置全部要害运用程序并晋级该集群,检查全部是否正常,假如正常,再晋级出产中的集群。假如您对Kubernetes及其带来的优点持细心情绪,那么集群晋级是您无法防止的的。因而,方案并履行是最好的处理办法。

提到虚拟化技能,这现已是咱们习认为常的笼统化技能了。实际上,当或人引证“核算机”或“服务器”时,他们很或许指的是虚拟机。关于运用来说,Kubernetes很有或许成为新的规范底层。一个新的笼统等级,成为新的常态。关于虚拟机而言,因为大多数大型体系都选用Linux的KVM技能进行规范化,因而它是操作体系层的组成部分,尽管还触及其他组件,可是它们是适当底层的。它与Kubernetes天壤之别,Kubernetes上有十几个服务在不同机器之间彼此通讯,在核算,存储,网络和主动扩展方面进行适当杂乱的操作。

当问题呈现时,您或许不得不冷眼旁观。咱们只能在某种程度上假定Kubernetes运用的这些组件的全部不同版别在某种程度上是彼此和谐的。至少云服务供给商期望咱们信任这一点。

6.5 保存Kubernetes人才

提到虚拟化技能,这现已是咱们习认为常的笼统化技能了。实际上,当或人引证“核算机”或“服务器”时,他们很或许指的是虚拟机。关于运用来说,Kubernetes很有或许成为新的规范底层。一个新的笼统等级,成为新的常态。关于虚拟机而言,因为大多数大型体系都选用Linux的KVM技能进行规范化,因而它是操作体系层的组成部分,尽管还触及其他组件,可是它们是适当底层的。它与Kubernetes天壤之别,Kubernetes上有十几个服务在不同机器之间彼此通讯,在核算,存储,网络和主动扩展方面进行适当杂乱的操作。

当问题呈现时,您或许不得不冷眼旁观。咱们只能在某种程度上假定Kubernetes运用的这些组件的全部不同版别在某种程度上是彼此和谐的。至少云服务供给商期望咱们信任这一点。

假如您期望选用Kubernetes,可是只要一个人在后面支撑你,您将单独承当危险。尽管Kubernetes在您的项目中证明了自己的价值,但正如咱们即将看到的,让整个DevOps团队承受Kubernetes的训练或许自学。究竟,谁都想承受一次训练的时机,来研讨一项炙手可热的技能?另一方面,您需求一群了解Kubernetes的DevOps团队而不是一两个人,以便在未来也能坚持Kubernetes履行的连续性。信任我,跟着Kubernetes在LinkedIn页面上被列为一项技能,人们很简略换岗,不能只依靠一两个人来履行这项使命。

至此,假如您坚信能够从在安排中布置Kubernetes获益,您能够依照以下过程,让您的团队逐渐了解Kubernetes以及选用它来办理出产作业负载。

您需求DevOps团队里具有Kubernetes常识和实操才能的人员来履行您的方案。鉴于官网供给了高质量的训练资料,他们能够自学,也能够经过更正式的训练方案。您应该咨询您的云供给商,看他们是否能够为您的安排专门训练,或许他们有什么训练能够让您的团队参与。在您地点的区域或许还有其他付费挑选。

招聘Kubernetes人才是另一种挑选。寻觅运用过Kubernetes来运转出产作业负载的人员。招聘他们时,您或许需求跟他们评论之前投入出产的办法以及在Kubernetes上运转出产作业负载时面对的应战。问询他们是否运转任何有状况的作业负载。经过这些评论,您应该能够确认他们是否合适您的项目。

7.2将作业负载搬迁到Docker

您需求DevOps团队里具有Kubernetes常识和实操才能的人员来履行您的方案。鉴于官网供给了高质量的训练资料,他们能够自学,也能够经过更正式的训练方案。您应该咨询您的云供给商,看他们是否能够为您的安排专门训练,或许他们有什么训练能够让您的团队参与。在您地点的区域或许还有其他付费挑选。

招聘Kubernetes人才是另一种挑选。寻觅运用过Kubernetes来运转出产作业负载的人员。招聘他们时,您或许需求跟他们评论之前投入出产的办法以及在Kubernetes上运转出产作业负载时面对的应战。问询他们是否运转任何有状况的作业负载。经过这些评论,您应该能够确认他们是否合适您的项目。

首要您需求将您的作业负载搬迁至Docker,然后再从Dodcker搬迁至kubernetes,假如您的运用程序没有运转在docker上,而您想要直接搬迁到Kubernetes,那么遇到问题时,您将无法精确指出是由构建时,运转时或装备问题引起的。另一方面,假如您的团队花时刻在容器化作业负载,并在出产环境中运用Docker运转它们,你遇到的问题,需求考虑的问题就会变少了。

现在您的作业负载已被容器化,您能够将一些非出产型作业负载搬迁到Kubernetes。这样,您的大型团队能够先习惯新环境,将Kubernetes集成到您的继续布置管道中,等等。

7.4 把无状况作业负载的搬迁放在前面

现在您的作业负载已被容器化,您能够将一些非出产型作业负载搬迁到Kubernetes。这样,您的大型团队能够先习惯新环境,将Kubernetes集成到您的继续布置管道中,等等。

在将出产作业负载转移到Kubernetes时,能够从无状况作业负载开端:无状况的作业负载指的是只供给恳求服务但不直接保存任何数据的容器。在Kubernetes上运转有状况作业负载需求更深的Kubernetes专业常识。关于有状况的作业负载,您需求做一些更细心的方案,以了解在节点发作毛病时怎么办理。例如,关于像Elasticsearch这样的分布式有状况运用程序,这将特别杂乱。

一开端只将非要害作业负载转移到Kubernetes上,并让您的团队在上运转出产作业负载以堆集相关经历。例如,在出产中运转作业负载需求的监控,警报和运用程序晋级等。

7.6 大飞跃

一开端只将非要害作业负载转移到Kubernetes上,并让您的团队在上运转出产作业负载以堆集相关经历。例如,在出产中运转作业负载需求的监控,警报和运用程序晋级等。

从以上过程咱们看到了怎么以一种既能够树立专业常识又能够下降危险的办法在安排中选用Kubernetes。咱们还从工程视点评论了怎么做好预备以进行容器化并将出产作业负载缓慢引进Kubernetes。您只需求判别何时是最佳时机。每个安排的选用率与危险率都不相同,因而您应该做出最佳判别。我的主张是您运用Terraform之类的东西来主动化Kubernetes集群自身的布置。

最好的方案总是会考虑最差的状况,这便是本文的首要思维:奥秘您潜在的问题以及怎么减轻选用Kubernetes危险。 Kubernetes是巨大的技能。在许多方面,它必定会为您供给协助。可是,与计划运用出产作业负载的任何技能相同,您将需求权衡危险,看看收益是否大于危险。检查Kubernetes的失利事例关于找出最常见的问题以及怎么处理这些问题很有用。

就个人而言,我对Kubernetes以及在上面运转出产作业负载感到十分振奋, Kubernetes供给的编列,主动扩展,进步服务器运用率和自我修正功用,这些都带来了真实的优点,而且都不需求花费您自己的时刻去完成。

==============================================================================

译者介绍:Grace,程序员,研讨生结业于SUNY at Stony Brook,现在供职于Linktime Cloud Company,对容器化技能以及数据可视化技能感兴趣。

热门文章

随机推荐

推荐文章