初学者的kubernetes圣经
原文大家好,欢迎来到关于Kubernetes的Level Up系列文章。 在开始撰写本文之前,我想问你几个问题。 您或您的团队是否需要使用Kubernetes进行容器编排? 你想学习Kubernetes是否很困惑从哪里开始? 你愿意改变你的组织吗? 您想简化容器软件编排吗? 然后我想告诉你,这篇文章是所有这些问题的答案。
Kubernetes旨在简化事情,本文旨在为您简化Kubernetes! Kubernetes是一个由Google开发的强大的开源系统。 它是为在集群环境中管理容器化应用程序而开发的。 Kubernetes已经获得了普及,并且正在成为在云上部署软件的新标准。
学习Kubernetes并不困难(如果导师很好),它提供了强大的能力。 学习曲线有点陡峭。 因此,让我们以简化的方式学习Kubernetes。 本文介绍了Kubernetes的基本概念,架构,它是如何解决问题的等。
Kubernetes是什么?
实际上Kubernetes本身就是一个用于在多台机器上运行和协调应用程序的系统。 该系统管理容器化应用程序和服务的生命周期。 为了管理生命周期,它使用不同的方法来提高可预测性,可伸缩性和高可用性。
Kubernetes用户可以自由决定应用程序的运行和通信方式。 还允许用户扩展/缩减服务,执行滚动更新,在不同应用程序版本之间切换流量等。 Kubernetes还提供用于定义/管理应用程序的不同接口和平台原语。
Kubernetes硬件
Kubernetes需要不同类型的硬件。 我们需要了解的是Kubernetes本身是不需要硬件的,但功能系统需要硬件。Nodes
Kubernetes中的节点是什么? Kubernetes中最小的计算单位之一被称为节点。 它是一台机器,位于一个集群中。 节点不一定需要是物理机器或硬件的一部分。 它可以是物理机器或虚拟机。 对于数据中心,节点是物理机器。对于Google Cloud Platform,节点是虚拟机。 目前,我们正在讨论Kubernetes的硬件, 所以让我们相应地考虑一下。 但是不要将节点限制为“硬件”。任何机器中总是有一个抽象层。 但在这里,没有必要担心机器的特性。 实际上,我们可以简单地将每台机器视为一组CPU和RAM资源。 这些计算机位于群集中,可以根据需要使用其资源。 当我们谈到Kubernetes,你自然地这样想! 在您自由地利用任何机器资源的那一刻,系统变得无比灵活。 现在任何机器都可以成为Kubernetes集群中的一个节点。
Cluster
我们已经讨论了节点,对吗? 他们似乎是小而可爱的处理单位。 他们在自己的小房子里工作。 所有这些听起来都很完美,但它还不是Kubernetes的方式! 所以集群来了。 您无需担心单个节点的状态,因为它们是集群的一部分。 例如,如果单个节点表现不佳,则应该有人来管理所有这些。 此外,集群是多个节点的集合。 将所有节点的资源集中在一起,共同构成一个强大的机器。集群是很智能的。 你知道为什么吗? 当程序部署到集群上时,它会动态处理分发。 简而言之,它将任务分配给各个节点。 在该过程之间,如果添加或删除任何节点,则集群会根据需要移动任务。 程序员不需要专注于诸如单个机器运行的代码之类的东西等等。哦,我还记得一些非常有趣的东西。 你还记得星际迷航中的“博格Borg”吗? 这个名字来自哪里? Google内部的Kubernetes项目的名字就是这个。
Persistent Volumes
如上所述,程序在集群上运行并由节点提供支持。 但它们不在特定节点上运行。 程序动态地运行。 因此,需要存储信息,并且不能将其随机存储在任何文件系统中。 为什么? 例如,程序将数据保存到文件中。 但是后来,该程序被重新定位到另一个节点。 下次程序需要该文件时,它不会在预期的位置。 位置地址已经改变。 为了解决这个问题,与每个节点相关的传统本地存储被认为是用于保存程序的临时缓存。 但是,任何本地保存的数据都不会持续存在。那么谁来永久存储数据呢? 是的,持久性卷来永久存储它。 集群管理所有节点的CPU和RAM资源。 但是,集群不负责将数据永久存储在持久卷中。 本地驱动器和云驱动器可以像持久卷一样附加到集群。 这很类似于将外部驱动器插入集群。 持久卷提供文件系统。 它可以挂载到集群,而不与任何特定节点进行关联。
这是Kubernetes的硬件部分。 现在让我们转到软件部分。
Kubernetes软件
Kubernetes的整体概念基于软件。 所以这是Kubernetes的主要部分。Containers
在Kubernetes中,程序运行在Linux容器。 这些容器基于预编译的镜像。 镜像可以部署在Kubernetes上。 你知道什么是容器化吗? 它允许您创建Linux执行环境。程序及其依赖项打包在单个镜像中,并在网上共享。 因此,任何人都可以按照需求下载镜像并将其部署在基础设施上。 只需一点设置即可轻松部署。 可以在程序的帮助下创建容器。 这使得能够形成有效的CI/CD管道。
容器能够处理多个程序。 但建议每个容器限制一个进程,因为这有助于排除故障。 更新容器很容易,如果它很小,部署也很容易。 最好有许多小容器,而不是大容器。
Pod
Kubernetes有一些独特的特性,其中之一是它不直接运行容器。 它将一个或多个容器包装成一个pod。 pod的概念是同一pod中的任何容器使用相同的资源和相同的本地网络。好处是容器可以容易地相互通信。 它们是孤立的,但随时可以通信。
Pod可以在Kubernetes中复制。 例如,应用程序变得流行并且单个pod无法承受负载。 此时,可以根据需要配置Kubernetes以部署pod的新副本。
但是,只有在重负载期间才需要进行复制。 Pod也可以在正常条件下复制。 这有助于统一负载平衡和抵抗故障。
Pod能够容纳多个容器,但如果可能的话,应该限制为一个或两个容器。 原因是Pod作为一个单元向上和向下扩展。 Pod内的容器也必须与Pod一起缩放。 在这个阶段,单个容器的需求并不重要。 另一方面,这会导致资源浪费和昂贵的账单。
为避免这些,请将pod限制为少数几个容器。 如果您遇到过“sidecar”这个词,那就意味着辅助容器。 所以有主进程容器,可能有一些辅助容器。
Depoloyment
你已经注意到,Pod是Kubernetes的基本单位。 但它们不是直接在群集上启动的。 它们由多个抽象层进行管理,这就是Deployment存在的原因。 主要目的是声明一次运行的副本数。
添加Deployment之后,它会监控pod的数量。 同样,如果pod不存在,则Deployment会重新创建它。
有趣的是,通过Deployment,可以无需处理pod。 同时,通过声明系统状态,可以自动管理所有内容。
通过Ingress向成功进军
我们已经讨论了Kubernetes的所有基本概念。 使用它们,您可以创建节点、集群。 创建集群后,就可以在集群上启动pod的部署。 但是,您如何允许外部流量到您的应用程序? 我们还没有讨论过这个问题。根据Kubernetes的概念,它提供了Pod和外部世界之间的隔离。 要与在pod中运行的服务进行通信,需要打开一个通道。 通道是沟通的媒介。 它被称为“Ingress”。
有许多方法可以向集群添加Ingress。 最常见的是通过Ingress Controller或负载均衡器。 我们可以讨论这两种方法之间的区别,但目前不需要,因为它太具技术性。
现在,您应该了解Ingress对于尝试Kubernetes非常重要。 虽然你其他都做得很对,但是如果你不考虑Ingress,你将无法到达任何地方!
Kubernetes如何解决问题?
在讨论了Kubernetes的部署部分之后,有必要了解Kubernetes的重要性。容器编排和Kubernetes
容器是虚拟机。 它们轻巧,可扩展且独立。 容器放在一起需要设置安全策略,限制资源利用率等。如果您的应用程序基础结构类似于下面共享的镜像,则容器编排是必要的。它可能是在几个容器上运行的Nginx/Apache + PHP/Python/Ruby/Node.js应用程序,通过数据库副本通讯。 容器编排(Container orchestration)将帮助您自己管理所有内容。
请考虑您的应用程序不断增长。 例如,您继续添加更多特性/功能,并且在某个时间点,您意识到它突然变成了巨大的单体应用。
现在,管理庞大的应用程序是不可能的,因为它会占用太多CPU和RAM。 所以你最终决定将应用程序分成更小的块。 他们每个人都有一个特定的任务。 现在,您的基础架构如下所示:
因此,您需要一个带有队列系统的缓存层,以获得更好的异步性能。 现在你会发现,存在服务发现,负载平衡,运行状况检查,存储管理,自动扩展等挑战。
在所有这些情况下,谁会来帮助你? 是的,容器编排将成为你的救星! 原因是容器编排功能非常强大,可以解决大部分挑战。
那有什么选择呢?
主要候选者是Kubernetes,AWS ECS和Docker Swarm。 在所有这些中,Kubernetes是最受欢迎的! Kubernetes提供最大的社区。 Kubernetes解决了所描述的所有主要问题。 它是可移植的,可运行在大多数云提供商,裸机,混合环境以及所有这些的组合上。 此外,它也是可配置和模块化的。 它提供自动放置,自动重启,自动复制和容器自动修复等功能。要点
最重要的是,Kubernetes拥有一个活跃的在线社区。 这个社区的成员在网上以及在世界主要城市线下聚会。 国际会议“KubeCon”已经证明是一个巨大的成功。 Kubernetes还有一个官方的Slack小组。 Google云平台,AWS,Azure,DigitalOcean等主要云提供商也提供其支持渠道。 你还在等什么?学习Kubernetes并不像你想象的那么困难。 我推荐Kubernetes视频教程系列YouTube。 它提供逐步,详细的Kubernetes学习。 Level Up还提供来自Kubernetes的DevOps大师视频课程的Learn KubernetesLearn Kubernetes from a DevOps guru (Kubernetes + Docker) \| Level Up。 那么让我们开始吧!