您现在访问的是微软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. Deno 正式发布,彻底弄明白和 node 的区别
  2. java之servlet
  3. qtreeview 点击二级节点弹出dialog_Flutter Toast、弹出提示、轻提示
  4. JVM实战与原理--前言及索引
  5. 安装.net5.0后怎么在vs里选择_Visual Stdio 2019(或其它版本)怎样全部安装到非系统盘的实现方法(小白版)...
  6. nginx无法访问index.html,ThinkPHP5 + nginx配置(index.php无法访问404)
  7. 浏览器跨域访问解决方案
  8. jdbc事物提交,回滚不起作用的解决方案
  9. C#GDI绘制渐变线条,可用于添加阴…
  10. 利用Python制作一个“电子记事本”
  11. 秒懂---LDA算法
  12. 使用python制作字符视频(蔡徐坤唱跳rap字符视频)
  13. RichText widgets require a Directionality widget ancestor.
  14. 【电赛练习】手写绘图板 2013电赛G题
  15. 一个采集Android手机传感器数据的程序
  16. Luminar 4:AI 人像照片增强器
  17. xcode6.3设备无法运行Ineligible Devices的解决方法
  18. 《Web全栈工程师的自我修养》浓缩笔记(上)
  19. 有所精,有所知,有所思
  20. vue实现微信公众号微信登录

热门文章

  1. 【2018开年知识盛会】15位大咖直播分享,全方位解析NoSQL数据库
  2. 万物互联、应用现代化、云原生新范式,华为云为数字化转型提供最优解
  3. 蚂蚁链发布新一代网络平台「FAIR」 区块链进入隐私计算原生时代
  4. CPU 可以跑多快?地球到火星的距离告诉你!
  5. 计算机专业学术论文精选,计算机科学与技术专业本科生毕业论文精选.doc
  6. 高度为5的3阶b树含有的关键字个数_第15期:索引设计(索引组织方式 B+ 树)
  7. Mongo 安装、配置、启动 Windows
  8. bash: jps: command not found
  9. java 集成kafka单机版 适配jdk1.8
  10. VS Code 常用快捷键