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

在 Azure 上使用 Kubernetes 部署持久化存储

starIconstarIconstarIconstarIconstarIcon

5.00/5 (3投票s)

2017 年 12 月 7 日

CPOL

4分钟阅读

viewsIcon

18233

downloadIcon

109

如何使一些数据存储资源可供集群使用。

引言

在本Devops系列的上一篇文章中,我们研究了使用“KubeSpray”项目在 Azure 上部署一个生产就绪的 Kubernetes 集群。设置完成后,下一步是为集群提供一些数据存储资源。我们通过创建一个 Azure 文件存储资源,然后使用“Secrets”将其链接到 Kubernetes 集群来实现这一点。本文将逐步介绍此过程。

背景

我几乎想不出任何我参与过的合理项目不需要使用某种数据存储设施。当您进入云和容器的世界时,随时可以使用C:\D:z\驱动器变得难以捉摸。您开始需要考虑持久卷和基于云的 Blob 存储等内容。使用 Kubernetes,我们可以设置一个数据卷,对于我们的容器资源来说,它就像另一个大型远程驱动器一样。当像我们在这个系列文章中所做的那样以编排的方式将不同的技术整合在一起时,这是难题的关键部分。

在 Azure 上设置 Kubernetes 数据卷

  1. 在您的控制面板中,从“新建”操作中选择常规存储资源。

  2. 为资源指定一个新的唯一名称(小写),并使用与主 Kubernetes 集群相同的资源组。

  3. 新资源将在资源组中可用 - 选择它进行编辑。

  4. 在详细信息页面中,选择“文件”共享部分。

  5. 在文件共享页面中,单击添加新,为共享指定一个唯一名称,并指定所需的存储文件大小(以 GB 为单位)。

    保存后,您应该会看到新创建的共享可供使用。

  6. 接下来,我们需要从存储帐户获取一些安全密钥。

    返回到帐户所在的资源组主列表并选择它。

  7. 进入存储帐户后,我们需要导航到“访问密钥”部分并复制出第一个密钥和资源名称。

  8. 我们不能直接在 Kubernetes 中使用这些密钥,需要使用Base64进行转换。我们可以通过获取我们复制的每个项目并进行编码来做到这一点。在这个例子中,我们使用在线资源www.base64encode.org

  9. 现在我们需要获取这些信息并将其在 Yaml 文件中提供给 Kubernetes。

    SSH 登录到主 Kubernetes 主机,并发出以下命令

    sudo su -
    apt-get update 
    apt-get install -y cifs-utils

    现在使用nano创建一个新的 yaml 文件

    nano azure-secret.yaml

    在此文件中,添加以下内容,用每个项目的base64编码值替换accountnameaccountkey的值(注意 yaml 文件中的缩进/间距)。

    apiVersion: v1
    kind: Secret
    metadata:
      name: azure-secret
    type: Opaque
    data:
      azurestorageaccountname: <your encoded account name>
      azurestorageaccountkey: <your encoded key>

    进行更改后,使用CTRL + O <Enter>写入文件,然后使用CTRL + X退出。

    这设置了“密钥秘密”文件,现在我们需要设置主指令文件。在这种情况下,它被称为“azure.yaml”,但它可以被赋予任何名称。

    此文件的内容如下:

    apiVersion: v1
    kind: Pod
    metadata:
     name: shareddatastore
    spec:
     containers:
      - image: kubernetes/pause
        name: azure
        volumeMounts:
          - name: azure
            mountPath: /mnt/azure
     volumes:
          - name: azure
            azureFile:
              secretName: azure-secret
              shareName: kubedatashare
              readOnly: false
    • 您需要更改的重要部分是:
      • volumeMounts - 给定名称“azure”和内部虚拟挂载路径。名称应与卷的名称匹配(下一步/文件条目)。
      • volumes → name → 此处设置为默认名称“azure”。下一项是“azureFile”(将存储卷类型定义为 Kubernetes)。secretName引用我们之前创建的“azure-secret.yaml”文件中的数据,shareName是我们步骤 (5) 中为文件共享指定的名称。将readOnly设置为false使卷可读写。
  10. 现在我们需要将密钥传递给 Kubernetes,然后运行卷。

    在命令行中,发送以下命令:

    kubectl​ ​create​ ​-f​ ​azure-secret.yaml

    完成后,密钥已设置,因此我们可以发送命令来设置卷本身。

    kubectl​ ​create​ ​-f​ ​azure.yaml 

    完成后,我们可以通过检查可用的 Pod 来测试是否一切设置正确。

    kubectl get po

    这将显示如下输出:

    最后,我们可以检查卷的实现方式以确认它符合规范。

    kubectl describe po azure

    查看“describe”的输出,您可以看到重要的信息,例如容器所在的节点(VM)、它是一个“基于密钥的”卷,以及它连接到Azure 文件服务

  11. 现在任何容器都可以直接访问该卷……我们将在以后的文章中详细介绍如何操作。

    如果您需要,我已经将简短的说明放在附加到本文顶部的压缩文件中。最后,像往常一样,如果您觉得这篇文章有用,请投票!

相关链接

历史

  • 2017 年 12 月 7 日 - 版本 1
© . All rights reserved.