65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Diamanti 部署和升级 Kubernetes 应用程序:实际示例

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.40/5 (5投票s)

2019 年 5 月 9 日

CPOL
viewsIcon

9048

Diamanti 即插即用、高性能的裸机平台,可无缝地在 Kubernetes 集群上部署和升级您的容器化应用程序。本文将展示如何快速使用 Diamanti 部署由 MariaDB 和 Kubernetes 驱动的 WordPress 应用程序。

Docker、Kubernetes 和容器技术总体的出现为应用程序带来了极大的灵活性和动态性。但它们也带来了一个新挑战:容器化应用程序有更多活动部件 — 并且某些任务,例如将其连接到持久数据存储,可能会很棘手。这些挑战有时会导致 IT 团队回避容器,因为他们害怕设置和维护容器化基础设施所需的时间。

在本文中,我将展示如何借助 Diamanti 的裸机容器平台克服这些挑战。通过提供现成的硬件和软件平台来运行容器,Diamanti 消除了构建容器化应用程序的繁重工作。

在我们的示例中,我们将重点关注设置一个由 MariaDB 数据库驱动、由 Kubernetes 编排的容器化 WordPress 安装。我们还将使用此 WordPress Helm chart 来协助部署。该 Chart 可在原生 Diamanti 集群上按原样使用,也可根据您自己的需求和性能水平进行定制。我们将在本文中介绍一些定制内容。正如我们将看到的,Diamanti 使设置环境变得非常简单,即使该环境需要持久存储和编排。

硬件

首先,让我们回顾一下我们将使用的硬件。

Diamanti 集群设备最初配备最少三个节点。Diamanti 构建了一个超融合基础设施,包括最少三个节点,每个节点都有 10Gb 以太网 Linux 网络接口和 NVMe 块存储卷,可提供低至 100 微秒的延迟。凭借这种基于裸机的基础设施,Diamanti 能够为其运行在容器中的应用程序消耗高达 95% 的底层硬件功能。大规模部署应用程序时,整体性能提升会迅速累积,并提供真实而持久的成本节约。

真正使 Diamanti 集群与众不同的是其部署的简便性以及每个容器的保证服务级别。通过利用自定义硬件接口,Diamanti 可以根据特定的带宽指标在节点之间优先处理实时流量。作为软件开发人员或应用程序所有者,请放心,您的应用程序将按照设计执行,并符合您选择的服务级别。此外,自助式基础设施允许您按照下文所述,自动部署和升级您的基于容器的应用程序。

在过去的几年里,Diamanti 为 Kubernetes 开源项目做出了重大贡献。事实上,他们的工程团队为持久卷的 CSI 框架的开发做出了贡献,并且仍在继续。直到最近,由于存储的短暂性,容器主要用于无状态应用程序。随着持久卷的引入,再加上 Diamanti 的内部数据镜像功能,数据库等有状态应用程序现在可以在这个高性能集群上运行,并且不会丢失数据。

工具集

作为一名长期的 Oracle 专业人士,最近才有使用 Docker 容器和 Kubernetes 集群的总体经验,我非常欢迎 Diamanti 的在线仪表板、命令行界面 (CLI)、文档和自助式应用程序部署。虽然入门只需要几个命令,但能够一目了然地查看所有集群信息(例如节点、Pod、网络接口、持久卷、端点)使我能够快速熟悉整个堆栈。下面是我第一次部署后显示数据库 Pod 的仪表板视图。

要开始设置新集群,只需要一组四个命令。这些命令包括:创建集群、设置网络、配置持久卷和部署应用程序。集群管理员可以使用 Diamanti 的命令行界面 "dctl" 创建集群,并根据需要添加和删除任何节点。一旦形成集群,Diamanti 就会汇集集群中所有节点可用资源,使 Kubernetes 能够根据所选服务级别有效地在集群中调度容器。

Diamanti 的 "dctl" 命令行工具适用于 Linux 和 Mac OS,dctl.exe 适用于 Windows。"kubectl" 命令是 Kubernetes 的命令行工具,也适用于 Linux、MacOS 和 Windows。为了部署由多个微服务组成的应用程序,可以使用 Helm (Kubernetes 的包管理器) 来管理完整的部署流。 "helm" 命令也适用于所有平台。这些工具可以从 Diamanti 仪表板内提供的链接下载到您的本地计算机。这正是我入门所需的。

管理您的集群

首先,让我们使用命令行界面查看 Diamanti 的集群设置和可用节点。您需要使用 "dctl login" 登录集群并提供您的凭据(集群用户管理和安全超出了本文的范围)。登录集群后,您将能够执行所有其他操作。请注意,您的集群会话将在一个小时后过期。

登录后,使用 "dctl --help" 获取所有可用集群选项的列表(或使用仪表板)。使用 "dctl cluster status" 监控当前集群状态并获取所有运行节点的列表。在我们的案例中,集群由三个节点组成,solserv4 是主节点。

虽然 Diamanti 集群的最小配置包含三个节点,但您可以使用以下命令添加更多节点(假设您的集群有额外的物理 D10 节点)

dclt cluster add host-4,host-5.

要从集群中删除节点,只需使用

dctl cluster remove host-5.

添加服务级别

与其他瞬时并发应用程序一起在集群中运行的应用程序可能会在资源不可用时受到影响(称为“吵闹的邻居综合症”)。如前所述,集群设备允许您从不同的服务级别中进行选择,以强制为所有容器提供最低网络吞吐量和存储 IOPS。您的应用程序将与其他应用程序隔离,并保证一定的性能水平。有三种内置的默认服务级别可供选择,如下所示

  • high:提供 20,000 IOPS 和 500 Mbps 的网络带宽
  • medium:提供 5,000 IOPS 和 125 Mbps 的网络带宽
  • best-effort:使用此配置时没有最低要求

作为集群管理员,您可以通过使用命令来创建五个额外的自定义服务级别,以匹配您自己的应用程序需求

dctl perf-tier create <perf-tier-name> -i <storage iops> -b <network-bandwidth>

要为您的网络接口分配服务级别,请在您的 Helm Chart values.yaml 配置文件中包含一个 pod 注解。

podAnnotations

diamanti.com/endpoint0: '{"network":"stef-wp-net","perfTier":"high"}'

为了使用 Diamanti 的默认选项之一为您的持久存储分配服务级别,请在 WordPress values.yaml 文件中设置 storageClass

persistence:
 enabled: true
  storageClass: "high"

使用 dctl perf-tier list 查看您集群上的所有当前服务级别

管理网络

您的应用程序容器可以使用端点连接到内部网络子网(已定义对象)。端点决定了与网络对象关联的服务级别。您可以使用 Diamanti 仪表板创建网络对象,或通过发出以下命令

dctl network create <network_name> --subnet <subnet/class> --start <ip_range_start> --end <ip_range_end> --gateway <gateway> --vlan <vlan_id>

然后,您只需列出集群配置的所有网络:

dctl network list

您可以在 Pod 定义文件(Helm Chart)中指定要使用的网络

  annotations:
    diamanti.com/endointpoint0: ‘{"name":"0", "network":"stef-wp-net","perf-tier":"high"}’

请注意,在定义 Pod 部署文件时,所有对象(网络和存储)必须引用相同的性能级别(例如,“high”)。如果未明确指定性能级别,则将使用“best-effort”设置。

管理存储

容器中的物理文件本质上是短暂的。当容器停止或崩溃时,它们会丢失。为了解决这个问题,Kubernetes 引入了持久卷和持久卷声明的概念。持久卷 (PV) 是在集群中创建的资源。它由集群管理员配置,用于预留具有独立于任何 Pod 的生命周期的物理存储。持久卷声明 (PVC) 是用户或容器在运行时对预定义存储的请求。

可以使用用户界面(仪表板)或命令行创建持久卷。使用以下命令创建一个新的存储卷。使用 -m 选项创建卷镜像。Diamanti 会自动将卷镜像分布在集群中的不同节点上。您可以配置最多三向镜像。

dctl create volume <volume-name> -s <size> -m <mirror count>

例如

dctl create volume stef-vol -s 10G -m 1

卷创建完成后(带有一个同步副本),您可以修改 Pod 定义文件以包含新卷。Diamanti 使用其已安装在集群上的自定义驱动程序。使用 flexVolume 插件配置项来启用这些自定义卷

volumes:
- flexVolume:
   name: stef-vol
     driver: diamanti.com/volume
      fsType: xfs
      options:
       name: stef-vol
        perfTier: high
        detachPolicy: auto

使用 dctl volume describe <volume> 获取关于在集群中创建的或可用的卷的详细信息。

最后一步:部署应用程序

在我的测试中,我使用了 Helm Chart 部署在 MariaDB 上运行的 WordPress 应用程序,只做了很少的更改。Helm Chart 指示 Kubernetes 一步部署所有预配置的组件;然而,每个容器和相关资源(网络和存储)也可以使用上面介绍的 Diamanti 的 dctl 工具单独配置。

短短几分钟内,我们的整个应用程序就已部署并运行在集群上。使用 Diamanti 的仪表板,您可以监控您的应用程序及其所有相关元素。

结论

使用 Diamanti,您可以快速部署容器化应用程序。Diamanti 提供托管容器所需的硬件和软件,因此您可以专注于应用程序本身,而不是其运行位置。正如我们在本文中所见,即使是需要持久存储的复杂 Kubernetes 应用程序,使用 Diamanti 部署起来也十分简单。

了解更多关于 Diamanti 的信息,请访问 http://www.diamanti.com

© . All rights reserved.