您现在访问的是微软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. java培训:什么是抽象类?怎么定义?
  2. 自定义注解与validation结合使用案例
  3. [Leedcode][JAVA][第124题][二叉树中的最大路径和][递归][二叉树]
  4. python深拷贝_python 深拷贝与浅拷贝的区别
  5. make make install出现recipe for target 'install-binPROGRAMS' failed解决办法
  6. [VNC] 云服务器 Ubuntu 配置 VNC 遇到的问题
  7. jstl之c:forEach的使用
  8. 使用PostSharp在.NET平台上实现AOP(转)
  9. Qt5.9.1安装包下载
  10. 汽车维修企业管理【1】
  11. antd 设置表头属性_React表格固定表头/锁定列
  12. saas平台产品使用合同(模板)
  13. 数字图像处理期末复习总结
  14. 哪种处理器能跑vs还有oracle,AMD处理器哪个最强 2020AMD处理器性能排行榜
  15. Windows修改文件报错:“文件或文件夹正在使用”解决办法
  16. 云空间为您提供10G免费全能空间
  17. 回退到首页,返回浏览器窗口历史第一页 js
  18. 常用时序数据地址 MTGNN
  19. 《淘宝店铺设计装修一册通》一1.4 获得图片的存储空间
  20. 博雅数智|3.23直播笔记

热门文章

  1. 软件研发效能度量团体标准获得立项
  2. 云重磅 | 阿里云开源Blink;华为发布5G Cloud VR;AWS 将举行AI 大会 re;英伟达下调5亿美元业绩预期...
  3. Cloud一分钟 | 云厂商Zoho域名被禁两小时;京东云公布医疗健康战略
  4. stm32 adc 连续和扫描_技术分享 | STM32多个ADC模块同时采样转换的应用示例
  5. 学计算机的如何学英语,怎么在电脑上学习英语
  6. “Host ‘xxx’ is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’”
  7. Flowable 数据库表结构 ACT_ID_USER
  8. springboot项目后台启动jar 和开机启动
  9. idea报错Module Project1 must not contain source root ...\Project1\src. The root already belongs to m
  10. Gblfy 专栏设立服务大家,共享资源