何时使用Kubernetes部署,Pod和服务

作者 : IT 大叔 本文共2974个字,预计阅读时间需要8分钟 发布时间: 2020-09-28

当您第一次开始Kubernetes之旅时,您需要学习的第一件事是如何部署应用程序。您可以使用多种资源类型,包括容器,部署服务

今天,我们将首先解释每种资源类型的作用,然后讨论何时以及为什么在您的应用程序中使用它们。

我们会讨论:

  • Kubernetes上的快速复习
  • 什么是豆荚?
  • 什么是服务?
  • 什么是部署?
  • 接下来要学什么

Kubernetes上的快速复习

Kubernetes是一个开源容器管理平台,用于部署和管理容器化工作负载。在生产中运行容器时,您将拥有数十个甚至数千个容器。这些容器需要部署,管理和连接,这很难手动完成。这就是Kubernetes进来的地方。可以将其视为容器调度程序

Kubernetes旨在与Docker协同工作,Docker是将您的应用程序和所有依赖项打包为一个容器的容器化平台。

简化: Docker用于将应用程序隔离,打包和运送为容器。Kubernetes是用于部署和扩展应用程序的容器调度程序。

使用Kubernetes,我们可以:

  • 部署服务并推出新版本,而无需停机,
  • 在私有或公共云上运行
  • 在最合适的服务器上放置和扩展服务的副本
  • 验证我们服务的健康
  • 挂载有状态应用程序的卷

现在我们对Kubernetes进行了复习,现在让我们进入其一些资源并讨论何时使用它们。我们将从豆荚开始

什么是豆荚?

吊舱是Kubernetes中应用程序的最低或更多原子单元。重要的是要注意,pod不等于Docker世界中的容器。一个容器可以由多个容器组成。如果您来自纯粹的Docker背景,这可能很难使您头脑清醒。

可以将其视为一个Kubernetes抽象,代表一组容器和它们的共享资源。例如,一个Pod可能包含一个包含Node.js应用程序的容器和另一个将数据馈送到Web服务器的容器。

吊舱是一种表示集群中正在运行的进程的方法。

如果一个容器可以有多个容器,它是如何工作的?我们需要注意一些限制。吊舱具有以下功能:

  • 一个IP地址
  • 共享本地主机
  • 共享的IPC空间
  • 共享的网络端口范围
  • 共享卷

容器中的容器通过本地主机相互交谈,而容器间的通信是通过服务进行的。从图中可以看到,吊舱中的容器共享一个IP地址。

何时使用Kubernetes部署,Pod和服务插图

Pod是您部署应用程序的好方法,但是Pod资源类型有一些限制。吊舱是单个实体,如果发生故障,它将无法重新启动。这不适合大多数用例,因为我们希望应用程序具有高可用性。但是Kubernetes已经解决了这个问题,我们将在后期进一步探讨如何解决高可用性。

节点与容器

在Kubernetes中,Pod将始终在节点上运行。可以将节点想像成由主节点管理的工作机。一个节点可以有多个吊舱,而主节点可以自动在一个节点上调度吊舱。

豆荚的解剖

Pod设计为运行多个过程,这些过程应作为一个凝聚单元。这些过程包装在容器中。构成Pod的所有容器都在同一台计算机上运行,​​并且不能拆分为多个节点。

Pod中的所有进程(或容器)共享相同的资源(例如存储),并且它们可以通过彼此通信localhost。甲体积,如同与共享数据的目录。所有容器都可以访问它们并共享相同的数据。

复制控制器

我们刚刚得知豆荚是凡人。如果他们死了,那就是他们的结局。但是,如果要运行同一吊舱的三个版本以提高可用性怎么办?

输入复制控制器

复制控制器的主要职责是防止发生故障。它位于pod资源类型上方并对其进行控制。让我们来看一个例子。

假设我要部署4个Pod x。我将创建一个副本集。副本集具有定义数量的需要运行的Pod(在本例中为4个)。如果其中一个Pod发生故障或死亡,则复制控制器将为我启动一个新Pod,然后,我仍将运行4个Pod x版本。

此功能可处理此问题的豆荚。但是,必须注意,复制控制器不能处理与Pod有关的所有事情,即生命周期。假设我们要在不停机的情况下升级吊舱。复制控制器将不会执行此操作。

现在,我们已经了解了Pod,接下来进入Kubernetes的下一个资源:服务。

什么是服务?

如果我们要与Pod保持连接,则需要创建服务。在Kubernetes中,服务是一组Pod上的网络抽象。可以将其视为在集群上运行的Pod组。Kubernetes服务通常用于支持微服务架构

Kubernetes为Pod提供了自己的IP地址和一组Pod的单个DNS名称,并且可以在它们之间进行负载平衡。它们提供了用于标准化集群的功能,例如:

  • 负载均衡
  • 零停机时间部署
  • 应用程序之间的服务发现

这使得流量可以针对故障进行负载平衡。服务允许Kubernetes为Pod设置单个DNS记录。如前所述,每个Pod都有一个单独的IP地址。对于服务资源类型,通常将定义一个选择器,如下例所示:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp

除此之外,kube-proxy还在群集中创建一个虚拟IP来访问服务。然后,该虚拟IP路由到Pod IP。如果Pod IP更改或部署了新Pod,则服务资源类型将跟踪更改并代表您更新内部路由。

什么是部署?

现在,拼图的最后一部分:部署。部署资源类型位于副本集上方,并且可以对其进行操作。换句话说,部署为Pod副本集提供更新。

为此,您需要在Deployment中描述所需的状态,然后Deployment Controller将以受控的速率更改为所需的状态。这使您可以运行无状态应用程序。如果需要升级,则需要替换副本集。此操作将导致应用程序停机。

何时使用Kubernetes部署,Pod和服务插图(2)

Kubernetes的主要好处之一就是高可用性。部署为我们提供了无需停机即可进行升级的功能就像在副本集中所做的那样,您可以指定要运行的Pod数。

触发更新后,部署将在Pod上进行滚动升级,同时确保在移至下一个Pod之前成功完成每个Pod的升级。

让我们看一下部署示例,以了解如何创建它们。

kubectl create \
    -f deploy/go-demo-2-db.yml \
    --record
kubectl get -f deploy/go-demo-2-db.yml

后一个命令的输出如下。

NAME           READY   UP-TO-DATE   AVAILABLE   AGE
go-demo-2-db   0/1     1            0           4s

因此,如果我们推出新版本的应用程序而出现问题怎么办?我们也可以轻松地回滚部署,因此部署也涵盖了其中。

有一个警告:如果您使用的是pvc(持久卷声明),并且已经为声明编写了一些内容。那将不会回滚。部署控制副本集,副本集控制吊舱。因此,当使用部署资源类型时,您仍然需要服务来访问它。

专家提示:在生产环境中,最佳实践是在Kubernetes中为我们的应用程序使用部署,但是了解部署如何工作仍然很重要。

接下来要学什么

恭喜!您现在已经了解了Pod,服务和部署的基础知识。您已经熟悉了它们的用途,优点和缺点。掌握Kubernetes并了解它为您的应用程序所提供的一切还有很多东西要学习。

下一步是学习以下内容:

  • 如何定义豆荚
  • 广告连播安排的组成部分
  • 创建拆分API窗格
  • 回滚失败的部署
  • 更新多个对象
  • 和更多

要开始使用这些概念以及更多内容,我建议您参考Educative的课程A Kubernetes实用指南。您将从Kubernetes的基础知识开始,并学习如何构建,测试,部署和升级应用程序。您还将学习如何保护您的部署和管理资源。最后,您将可以放心使用Kubernetes。

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 何时使用Kubernetes部署,Pod和服务

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论