网站搜索

如何使用 Kubernetes 跨服务器扩展 Docker 容器


Docker 是面向开发人员的容器化平台,可让您将应用程序打包为独立容器。它们将在任何可用的兼容容器运行时运行。

Docker 的流行使其几乎成为容器的代名词,但它并不是适用于所有用例的完美技术。按原样使用 Docker 在生产中提出了挑战,因为它的 CLI 只能管理单个容器。

Kubernetes 是一个编排平台,可管理容器堆栈并跨多个服务器扩展它们。您可以跨一组物理机进行部署,从而提高服务的冗余性和弹性。下面介绍如何启动自己的集群来扩展“Docker”容器。

Kubernetes 基础知识

认识一些关键的 Kubernetes 术语将帮助您理解与 Docker 相比的差异。 Kubernetes 字典描述了您可以添加到集群中的数十种资源。本文只涉及控制容器调度的组件。

在高层次上,Kubernetes 安装是一个“节点”集群。节点是托管您的工作负载的独立物理机器。单个“主”节点负责通过将新容器“调度”到最合适的工作节点来协调(“编排”)集群的操作。

以下是一些关键术语:

  • Master – 主节点操作集群。这是您安装 Kubernetes 的机器。它运行控制平面并将容器化应用程序的托管委托给工作节点。
  • 控制平面 – 控制平面是主节点的软件组件。它整合了多项服务,包括 API 服务器、配置存储和容器调度程序。
  • 节点 – 节点是托管容器的机器。每个工作人员都运行一个名为 Kubelet 的 Kubernetes 组件。这与控制平面保持联系,接收调度指令,并根据这些指令提供新容器。
  • Pod – Pod 是 Kubernetes 集群中最小的计算单元,代表一组容器实例。 Pod 抽象让您可以与多个正在运行的容器进行聚合交互。
  • 副本集 – 副本集负责扩展 Pod 以确保指定数量的副本可用。如果你要求 Pod 的三个副本,副本集将保证满足可用性约束。如果 Pod 出现故障,系统会自动替换它们,让您可以跨服务器自动执行容器复制。

创建可扩展的集群需要一个主节点、至少两个工作节点和一个提供多个副本的部署。 Kubernetes 将能够在所有可用节点上安排您的 Pod,从而在发生中断时为您提供弹性。

创建集群

Kubernetes 可作为大多数主要云提供商的托管产品提供。这些提供了一种一键式方法来创建您的控制平面并添加可变数量的工作节点。

您可以使用自包含的 Kubernetes 发行版(如 MicroK8s)在自己的硬件上运行集群。如果你想要冗余调度支持,你至少需要两个独立的物理机或虚拟机。

在两台机器上安装 MicroK8s。指定一个节点为主节点,使用add-node命令开始节点注册过程:

microk8s add-node

这将发出一个 microk8s join 命令。切换到您的辅助节点并运行命令。它将作为新工人加入第一个集群。现在两台机器都已准备好托管您的容器化工作负载。

定义水平扩展部署

跨多个服务器运行的应用程序被描述为“水平缩放”。它正在分散在几个不同的环境中。垂直扩展系统涉及向现有环境添加资源。

定义 Kubernetes 工作负载的最简单方法是使用 Deployment。这种资源类型从容器镜像创建 Pod,并通过服务设置公共网络路由。部署默认为单个 Pod 实例,但可以配置多个副本。

这是一个简单的部署清单:

class="co3">apiVersionclass="sy2">: apps/v1class="co3">
kindclass="sy2">: Deploymentclass="co4">
metadata:class="co3">
  nameclass="sy2">: nginxclass="co4">
spec:class="co3">
  replicasclass="sy2">: 3class="co4">
  selector:class="co4">
    matchLabels:class="co3">
      appclass="sy2">: nginxclass="co4">
  template:class="co4">
    metadata:class="co4">
      labels:class="co3">
        appclass="sy2">: nginxclass="co4">
    spec:class="co4">
      containers:class="co3">
      - nameclass="sy2">: nginxclass="co3">
        imageclass="sy2">: nginx:latestclass="co4">
        ports:class="co3">
        - containerPortclass="sy2">: 80

使用 Kubectl 将清单应用到您的集群:

microk8s kubectl apply -f ./manifest.yaml

Kubernetes 将创建三个 Pod,每个 Pod 托管一个从 nginx:latest 图像创建的 NGINX Web 服务器。端口 80 作为容器端口公开以启用入站流量。

Pod 将自动分布在集群的节点上。如果一个节点能够提供足够的资源,它就有资格托管一个 Pod。

您可以随时更新副本数。更改清单中的 replicas 字段并将其重新应用到您的集群。 Kubernetes 调度程序将根据需要采取措施供应新 Pod 或终止旧 Pod。如果将 replicas 缩减为 0,则可以使应用程序脱机,而无需实际删除部署或其关联资源。

动态添加节点

更新副本计数可让您利用集群中的现有资源。最终,您可能会完全耗尽联合节点容量,从而阻止安排新的 Pod。 Kubernetes 提供了一个集群自动缩放工具,可以创建和销毁节点,有效地改变可以调度的 Pod 的数量。

设置自动缩放相对复杂。确切的过程取决于集群的托管环境。它需要与能够连接到您的主机以检测需求变化的集群自动缩放器集成。 Google Cloud 有官方文档; Amazon EKS 和 Microsoft AKS 也提供解决方案。

自动缩放通过持续检查由于集群容量不足而无法调度的 Pod 来工作。它还评估成功调度的 Pod 是否实际上可以与减少的节点数共置。然后,自动缩放器利用您的云提供商的 API 添加和删除计算实例,动态调整集群的资源。这可能会影响您的账单,因为创建新实例通常是一项收费操作。

概括

Kubernetes 使跨多个服务器分发容器实例变得容易。将您的机器注册为节点,或使用托管云集群,然后创建具有 replicas 字段集的部署。您可以通过更新请求的副本数来扩展您的工作负载。

当预计需求会发生剧烈变化时,使用自动缩放来动态扩展容量。此功能可让您即时创建新节点,添加额外资源,以便您可以不断增加副本数。

当您扩展 Pod 时,您确实需要记住还需要某种形式的入站流量分配。如果您公开端口 80,Kubernetes 需要能够将请求映射到任何节点上的端口 80。这会自动与部署和服务一起工作。 Kubernetes 创建了一个负载均衡器,它持续监控 Pod 以确定可以将流量定向到哪里。

相关文章:


版权所有。 © Linux-Console.net • 2019-2026