您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

在 Azure Kubernetes 服务 (AKS) 中手动创建和使用 NFS(网络文件系统)Linux 服务器卷

4/25/2019

本文内容

基于容器的服务和应用程序往往需要在容器之间共享数据。 通常,会有各种 Pod 需要访问外部持久性卷上的相同信息。

Azure 文件是一个选项,而在 Azure VM 上创建的 NFS 服务器是持久性共享存储的另一种形式。

本文将介绍如何在 Ubuntu 虚拟机上创建 NFS 服务器。 另外,将介绍 AKS 容器如何访问此共享文件系统。

准备阶段

本文假设你已有一个 AKS 群集。 如果需要 AKS 群集,请参阅 AKS 快速入门使用 Azure CLI 或使用 Azure 门户。

AKS 群集需要驻留在 NFS 服务器所在的相同或对等互连的虚拟网络中。 该群集必须在现有的 VNET 中创建,该 VNET 可以是 VM 所在的同一 VNET。

本文还假设你已创建一个 Ubuntu Linux 虚拟机(例如 18.04 LTS)。 可以使用任意设置和大小,并可以通过 Azure 部署该虚拟机。 有关 Linux 快速入门,请参阅 Linux VM 管理。

如果你是首次部署 AKS 群集,在部署 Ubuntu 计算机时,Azure 会自动填充虚拟网络字段,使该计算机驻留在同一 VNET 中。 但是,如果你想要改用对等互连网络,请参阅上述文档。

将 NFS 服务器部署到虚拟机

下面是用于在 Ubuntu 虚拟机中设置 NFS 服务器的脚本:

#!/bin/bash

# This script should be executed on Linux Ubuntu Virtual Machine

EXPORT_DIRECTORY=${1:-/export/data}

DATA_DIRECTORY=${2:-/data}

AKS_SUBNET=${3:-*}

echo "Updating packages"

apt-get -y update

echo "Installing NFS kernel server"

apt-get -y install nfs-kernel-server

echo "Making data directory ${DATA_DIRECTORY}"

mkdir -p ${DATA_DIRECTORY}

echo "Making new directory to be exported and linked to data directory: ${EXPORT_DIRECTORY}"

mkdir -p ${EXPORT_DIRECTORY}

echo "Mount binding ${DATA_DIRECTORY} to ${EXPORT_DIRECTORY}"

mount --bind ${DATA_DIRECTORY} ${EXPORT_DIRECTORY}

echo "Giving 777 permissions to ${EXPORT_DIRECTORY} directory"

chmod 777 ${EXPORT_DIRECTORY}

parentdir="$(dirname "$EXPORT_DIRECTORY")"

echo "Giving 777 permissions to parent: ${parentdir} directory"

chmod 777 $parentdir

echo "Appending bound directories into fstab"

echo "${DATA_DIRECTORY} ${EXPORT_DIRECTORY} none bind 0 0" >> /etc/fstab

echo "Appending localhost and Kubernetes subnet address ${AKS_SUBNET} to exports configuration file"

echo "/export ${AKS_SUBNET}(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports

echo "/export localhost(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports

nohup service nfs-kernel-server restart

服务器将会重启(由于使用了该脚本),你可以将 NFS 服务器装载到 AKS。

重要

请务必将 AKS_SUBNET 替换为群集中的适当子网;如果使用“*”,则会在 NFS 服务器中打开所有端口和连接。

创建 VM 后,将上述脚本复制到某个文件中。 然后可以使用以下命令,将该脚本从本地计算机或其所在的任意位置移到 VM 中:

scp /path/to/script_file username@vm-ip-address:/home/{username}

将脚本移到 VM 后,可以通过 SSH 连接到 VM,并通过以下命令执行该脚本:

sudo ./nfs-server-setup.sh

如果脚本由于权限被拒绝错误而执行失败,请通过以下命令设置执行权限:

chmod +x ~/nfs-server-setup.sh

将 AKS 群集连接到 NFS 服务器

可以通过预配一个持久性卷,以及一个指定如何访问该卷的持久性卷声明,将 NFS 服务器连接到群集。

必须连接相同或对等互连的虚拟网络中的两个服务。 下面提供了有关在同一 VNET 中设置群集的说明:在现有 VNET 中创建 AKS 群集

将这些服务放入同一虚拟网络(或对等互连的虚拟网络)后,需要在 AKS 群集中预配持久性卷和持久性卷声明。 然后,容器可将 NFS 驱动器装载到其本地目录。

下面是持久性卷的示例 Kubernetes 定义(此定义假设群集和 VM 位于同一 VNET 中):

apiVersion: v1

kind: PersistentVolume

metadata:

name:

labels:

type: nfs

spec:

capacity:

storage: 1Gi

accessModes:

- ReadWriteMany

nfs:

server:

path:

请将 NFS_INTERNAL_IP、NFS_NAME 和 NFS_EXPORT_FILE_PATH 替换为 NFS 服务器信息。

还需要一个持久性卷声明文件。 下面是该文件的内容示例:

重要

"storageClassName" 需保留为空字符串,否则声明不起作用。

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name:

spec:

accessModes:

- ReadWriteMany

storageClassName: ""

resources:

requests:

storage: 1Gi

selector:

matchLabels:

type: nfs

故障排除

如果无法从群集连接到服务器,问题的原因可能是导出的目录或其父级没有足够的权限,因此无法访问服务器。

请检查导出的目录及其父目录是否具有 777 权限。

可运行以下命令来检查权限,目录应有 'drwxrwxrwx' 权限:

ls -l

详细信息

如需完整的演练,或者在调试 NFS 服务器设置时需要帮助,请查看以下深度教程:

后续步骤

linux nfs spec,创建 NFS Ubuntu Linux 服务器卷 - Azure Kubernetes Service | Microsoft Docs相关推荐

  1. azure linux 配置端口,快速入门 - 在 Azure 门户中创建 Linux VM - Azure Virtual Machines | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 快速入门:在 Azur ...

  2. 教你怎么安装linux电脑系统,包括Ubuntu Linux和centOS

    Linux系统是类Unix操作系统,具有稳定的系统性能,是开源软件. 有很多Linux发行版,其中一些是完全免费的. 许多公司网络将Linux用作网络服务器和防火墙,以实现网络安全和节省成本.现在向大 ...

  3. Ubuntu Linux 3D桌面完全教程 Ubuntu Linux 3D桌面完全教程

    注意:本文中envy等安装步骤已经不再使用 [5月20日更新] Ubuntu Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答. 本教程的前身是一善鱼 编写并发布在U ...

  4. linux 目录下创建子目录,在 Linux 下用 mkdir 命令来创建目录和子目录

    了解了用 ls 命令在目录中列出条目后,现在我们要学习在 Linux 系统下创建目录.在 Linux 下,我们可以使用 mkdir 命令.Mkdir 是"make directory&quo ...

  5. 怎么在linux上装java,如何在Ubuntu Linux上安装Java

    介绍 如何在Ubuntu Linux上安装Java?尽管对于一个经验丰富的Linux系统管理员来说,这个主题是一个很容易理解的话题,但是对于初学者而言,在我需要什么版本的Java,如何安装它或如何在多 ...

  6. linux下添加apt-get命令,Ubuntu Linux系统下apt-get命令整理

    Ubuntu Linux系统下apt-get命令整理 首次接触ubuntu,很多命令都需要sudo.尤其是安装命令都需要apt . 这里做个apt命令的简单汇总,方便一来了解下加深印象,二来以便以后使 ...

  7. linux系统atom安装教程,Ubuntu/Linux Mint上安装Atom文本编辑器

    Atom是一款由Github开发的开源文本编辑器,虽然目前该软件依然在Beta阶段,但我们依然可以在你的Ubuntu/Linux Mint上使用它. 据Atom官方博客介绍,与Atom类似的编辑器Su ...

  8. mint linux更新内核,如何在Ubuntu/Linux Mint中安装最新Linux 5.2.5内核

    原标题:如何在Ubuntu/Linux Mint中安装最新Linux 5.2.5内核 Linux 5.2的Ubuntu主线内核包最终可以在32位和64位操作系统中下载和安装. 由于构建失败,Linux ...

  9. 在linux系统中创建文件夹,Linux系统中创建文件夹命令详解

    Linux系统中创建一个新的文件夹我们可以使用命令来执行,下面由学习啦小编为大家整理了Linux系统中创建文件夹命令详解,希望对大家有帮助! Linux系统中创建文件夹命令详解 一.mkdir命令使用 ...

最新文章

  1. 定期存款单的mysql编写程序_MySQL 调优和使用必读
  2. VTK:模型之Delaunay3D
  3. 在线聊天javascript代码
  4. 量子计算是否会终结区块链?
  5. 一文弄懂LogSumExp技巧
  6. centos下编译安装Openssl
  7. 【UVALive - 7344】Numbered Cards【数位DP+状压DP】
  8. java编程语言基础
  9. vs2013下载地址以及安装方法
  10. 阿里云香港地域云服务器、轻量和虚拟活动报价
  11. Flutter 功能最全的JsonToDart工具
  12. Python学习笔记-字符串相关
  13. Python必学基础
  14. 为什么我的 JavaScript 代码会收到“请求的资源上不存在 ‘Access-Control-Allow-Origin‘ 标头”错误,而 Postman 却没有?
  15. 利用C++创建一个游戏(9)愤怒的小鸟(代码+注释)
  16. freeglut_光照设置_材质设置_笔记与心得
  17. Java三层结构,附源码
  18. 高清正射影像如何装入手机使用?
  19. 中南大学网络教育学院计算机考试,中南大学网络教育学院计算机基础复习题.doc...
  20. 犯罪嫌疑人--逻辑推理

热门文章

  1. 确认! Python夺冠,Java“被迫”退出竞争舞台,网友:崩溃!
  2. “Java跌落向下,Python奋斗向前”,程序员:看哭了...
  3. centos标准分区调整大小_CentOS下调整home和根分区大小的方法
  4. matlab 向前欧拉公式,向前欧拉公式在Matlab解微分方程初值解的问题
  5. 使用 VSCode 开发 uniapp
  6. SpringBoot集成Flowable_Jsite待办任务菜单报500
  7. 企业实战_10_Mycat集成ZK实现配置同步
  8. idea gblfy常用快捷键
  9. 分布式应用,response导出error on submit request on future invoke、java.lang.OutOfMemoryError: Java heap space
  10. 超详细前端开发案例:品优购商场项目(三)