第一次开始您的Kubernetes之旅,您需要学习的第一件事是如何部署您的应用程序。在这里,我们可以使用各种资源类型,包括pod、部署和服务。在本文中,我们将首先解释每种资源类型的作用,然后讨论何时以及为何在应用程序中使用它们。学习内容Kubernetes快速复习Kubernetes是一个开源容器管理平台,用于部署和管理容器化工作负载。在生产环境中运行容器时,您将拥有数十个(如果不是数千个)容器。这些容器需要部署、管理和连接,人工很难做到。这就是Kubernetes所做的。把它想象成一个容器调度程序。Kubernetes旨在与Docker一起使用,Docker是一个容器化平台,可将应用程序和所有依赖项打包到一个容器中。示例:Docker用于以容器的形式隔离、打包和运送应用程序。Kubernetes是用于部署和扩展应用程序的容器调度程序。使用Kubernetes,我们可以:在不停机的情况下部署服务并推出新版本在私有云或公共云上运行在最合适的服务器上放置和扩展服务副本验证服务的健康状况为有状态应用程序安装卷现在我们已经回顾了Kubernetes,让我们进入它的一些资源并讨论何时使用它们。从豆荚开始。什么是豆荚?Pod是Kubernetes中应用程序的最低或更原子的单元。需要注意的是,在Docker世界中,pod不等于容器。一个pod可以包含多个容器。如果你有纯粹的Docker背景,这可能很难理解。将其视为代表一组容器及其共享资源的Kubernetes抽象。例如,一个Pod可以由一个带有Node.js应用程序的容器和另一个向Web服务器提供数据的容器组成。Pod是一种表示集群中正在运行的进程的方式。如果一个pod可以有多个容器,它是如何工作的?我们需要注意一些限制。一个Pod有:单一IP地址共享主机共享IPC空间共享网络端口范围共享卷Pod中的容器通过本地主机相互通信,而Pod与Pod之间的通信是通过服务完成的。从图中可以看出,pod中的容器共享一个IP地址。Pod是部署应用程序的好方法,但Pod资源类型有一些限制。Pod是一个单一的实体,如果它发生故障,它不能自行重启。这不适合大多数用例,因为我们希望应用程序具有高可用性。但是Kubernetes已经解决了这个问题,我们将在文章中进一步研究如何处理高可用性。在Kubernetes中,pod始终在节点上运行。节点可以被认为是由主服务器管理的工作机器。一个节点可以有多个pod,master节点会自动将这些pod调度到一个节点上。Pods原理Pod被设计为运行多个进程的内聚单元。这些进程被包装在容器中。组成一个pod的所有容器都在同一台机器上运行,并且不能跨多个节点拆分。一个Pod中的所有进程(或容器)共享相同的资源(如存储),它们可以通过本地主机相互通信。卷就像具有可共享数据的目录。所有容器都可以访问它们并共享相同的数据。Replicationcontroller我们刚刚了解到pod是会死的。如果他们死了,那就是他们的结局。但是如果你想运行三个相同版本的pod以实现高可用性怎么办?这就是复制控制器的用武之地。复制控制器的主要职责是防止故障。它位于pod资源类型之上并控制它们。此功能为pod处理此问题。但是,需要注意的是,replicationcontroller并不处理与pod相关的所有事情,即生命周期。假设我们想要在不停机的情况下升级Pod。复制控制器将不负责此操作。现在我们了解了Pod,让我们继续下一个Kubernetes资源:服务。什么是服务?如果我们想连接到pod,我们需要创建一个服务。在Kubernetes中,服务是一组pod的网络抽象。将其视为集群上运行的一组pod。Kubernetes服务通常用于支持微服务架构。Kubernetes为一组pod提供了自己的IP地址和单个DNS名称,并且可以在它们之间进行负载平衡。它们提供标准化的集群功能,例如:负载平衡零停机部署应用程序之间的服务发现,允许在发生故障时实现流量负载平衡。允许Kubernetes为pod设置单个DNS记录的服务。如前所述,每个pod都有一个单独的IP地址。对于服务资源类型,通常会像下面的例子定义一个选择器:此外,kube-proxy还会在集群中创建一个虚拟IP来访问该服务。然后将此虚拟IP路由到podIP。如果podip发生变化或部署了新的pod,服务资源类型将跟踪变化并代表您更新内部路由。什么是部署?现在是拼图的最后一块:部署。部署资源类型驻留在副本集(ReplicaSet)上并且可以被操作。换句话说,部署为pod的副本集提供更新。为此,您在部署中描述所需状态,然后部署控制器将以受控速率更改为所需状态。这允许您运行无状态应用程序。如果需要升级,则需要更换副本集。此操作将导致应用程序停机。Kubernetes的主要优势之一是高可用性。部署使我们能够在不停机的情况下执行升级。正如您在副本集中所做的那样,指定要运行的pod的数量。一旦更新被触发,部署将执行pod的滚动升级,同时确保每个pod的升级成功,然后再继续下一个。让我们看一个示例部署,看看它们是如何创建的。后一个命令的输出如下所示。那么,如果我们推出新版本的应用程序并出现错误,会发生什么情况?部署也有变通办法,我们可以轻松回滚部署。这里有一个警告:如果您使用的是pvc(持久卷声明)并在声明中写一些东西。这是不可逆的。Deployments控制ReplicaSets,而ReplicaSets控制Pod。因此,在使用Deployment资源类型时,仍然需要一个Service来访问它。接下来要学什么恭喜!您现在了解pod、服务和部署的基础知识。您已经熟悉它们的用途、优点和缺点。要掌握Kubernetes并了解它可以为您的应用程序做的一切,需要学习很多东西……
