Kubernetes使用NFS作为共享存储

Kubernetes使用NFS作为共享存储

kubernetes管理的容器是封装的,有时候我们需要将容器运行的日志,放到本地来或是共享存储来,以防止容器宕掉,日志还在还可以分析问题。kubernetes的共享存储方案目前比较流行的一般是三个,分别是:nfs,Glusterfs和ceph。

前面写过一篇kubernetes使用GlusterFS的文章,如果有兴趣也可以去实践下:http://blog.51cto.com/passed/2139299

今天要讲的是kubernetes使用nfs作为共享存储

一. 创建 NFS 服务器

NFS 允许系统将其目录和文件共享给网络上的其他系统。通过 NFS,用户和应用程序可以访问远程系统上的文件,就象它们是本地文件一样。

1、安装

CentOS 7.x键放以下命令安装NFS服务器:

yum -y install nfs*

2、配置

编辑/etc/exports文件添加需要共享目录,每个目录的设置独占一行,编写格式如下:

NFS共享目录路径 客户机IP或者名称(参数1,参数2,...,参数n)

例如:


/home *(ro,sync,insecure,no_root_squash)
/data/nginx 192.168.1.*(rw,sync,insecure,no_subtree_check,no_root_squash)
参数  说明
ro  只读访问
rw  读写访问
sync    所有数据在请求时写入共享
async   nfs在写入数据前可以响应请求
secure  nfs通过1024以下的安全TCP/IP端口发送
insecure    nfs通过1024以上的端口发送
wdelay  如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay   如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置
hide    在nfs共享目录中不共享其子目录
no_hide 共享nfs目录的子目录
subtree_check   如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check    不检查父目录权限
all_squash  共享文件的UID和GID映射匿名用户anonymous,适合公用目录
no_all_squash   保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squash  root用户具有根目录的完全管理访问权限
anonuid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的GID

注1:尽量指定主机名或IP或IP段最小化授权可以访问NFS 挂载的资源的客户端
注2:经测试参数insecure必须要加,否则客户端挂载出错mount.nfs: access denied by server while mounting

3、启动

配置完成后,您可以在终端提示符后运行以下命令来启动 NFS 服务器:

systemctl start nfs.service

4、客户端挂载

CentOS 7, 需要安装 nfs-utils 包

yum install nfs-utils
使用 mount 命令来挂载其他机器共享的 NFS 目录。可以在终端提示符后输入以下类似的命令:

mount nfs_server_ip:/data/nginx /mnt
挂载点/mnt 目录必须已经存在。而且在 /mnt目录中没有文件或子目录。

另一个挂载NFS 共享的方式就是在 /etc/fstab 文件中添加一行。该行必须指明 NFS 服务器的主机名、服务器输出的目录名以及挂载 NFS 共享的本机目录。

以下是在 /etc/fstab 中的常用语法:
nfs_server_ip:/data/nginx /mnt nfs rsize=8192,wsize=8192,timeo=14,intr

二、Kubernetes上部署一个应用nginx使用nfs共享存储
来到kubernetes主节点上,创建kubernetes部署的yaml文件:nfs-nginx.yaml


##创建namespaces

apiVersion: v1

kind: Namespace

metadata:

   name: test

   labels:

     name: test

##创建nfs-PV

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: nfs-pv

  namespace: test

  labels:

    pv: nfs-pv

spec:

  capacity:

    storage: 10Gi

  accessModes:

    - ReadWriteMany

  persistentVolumeReclaimPolicy: Retain

  nfs:

    path: /data/nginx

    server: 192.168.22.8

##创建 NFS-pvc

---

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

  name: nfs-pvc

  namespace: test

spec:

  accessModes:

    - ReadWriteMany

  resources:

    requests:

      storage: 10Gi

  selector:

    matchLabels:

      pv: nfs-pv

## 部署应用Nginx

---

apiVersion: v1

kind: ReplicationController

metadata:

  name: nginx-test

  labels:

    name: nginx-test

  namespace: test

spec:

  replicas: 2

  selector:

    name: nginx-test

  template:

    metadata:

      labels: 

       name: nginx-test

    spec:

      containers:

      - name: nginx-test

        image: docker.io/nginx

        volumeMounts:

        - mountPath: /usr/share/nginx/html

          name: nginx-data

        ports:

        - containerPort: 80

      volumes:

      - name: nginx-data

        persistentVolumeClaim:

          claimName: nfs-pvc

##创建Service

---

apiVersion: v1

kind: Service

metadata:

  name: nginx-test

  labels: 

   name: nginx-test

  namespace: test

spec:

  type: NodePort

  ports:

  - port: 80

    protocol: TCP

    targetPort: 80

    name: http

    nodePort: 20080

  selector:

    name: nginx-test

[[email protected] ]# kubectl create -f nfs-nginx.yaml 

namespace/test created

persistentvolume/nfs-pv created

persistentvolumeclaim/nfs-pvc created

replicationcontroller/nginx-test created

service/nginx-test created

[[email protected] ~]# kubectl get pod -n test

NAME               READY     STATUS    RESTARTS   AGE

nginx-test-ssbnr   1/1       Running   0          4m

nginx-test-zl7vk   1/1       Running   0          4m

[[email protected] ~]# kubectl get service -n test

NAME         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE

nginx-test   NodePort   10.68.145.112   <none>        80:20080/TCP   5m

可以看到,nginx应用已经部署成功。

nginx应用的数据目录是使用的nfs共享存储,我们在nfs共享的目录里加入index.html文件,然后再访问nginx-service 暴露的端口

来到nfs服务器上

[[email protected] ~]# echo "Test NFS Share discovery"&gt; /data/nginx/index.html

在浏览器上访问kubernetes主节点的ip:20080 就能看到上面的内容

end 结束。

原文地址:http://blog.51cto.com/passed/2160149

时间: 2024-10-11 23:02:23

Kubernetes使用NFS作为共享存储的相关文章

Kubernetes 1.11.2使用NFS作为共享存储

环境:NFS服务器: 192.168.0.252 /data/nfs Kubernetes Master: 192.168.0.210Kubernetes Node: 192.168.0.211Kubernetes Node: 192.168.0.212 本地我们使用NFS作为Nginx的网站目录,使所有的pod共享一套代码 1.NFS服务器搭建 yum -y install nfs-utils 创建共享目录mkdir -p /data/nfs 修改配置文件vim /etc/exports/da

Kubernetes 基于NFS的动态存储申请

部署nfs-provisioner external-storage-nfs 创建工作目录 $ mkdir -p /opt/k8s/nfs/data 下载nfs-provisioner对应的镜像,上传到自己的私有镜像中 $ docker pull fishchen/nfs-provisioner:v2.2.2 $ docker tag fishchen/nfs-provisioner:v2.2.2 192.168.0.107/k8s/nfs-provisioner:v2.2.2 $ docker

如何利用NFS进行共享存储服务?带大家来实操

NFS共享存储服务开两台centos系统:7-1(服务端)和7-2(客户端)在7-1服务端中添加一块磁盘,40G,重启完成后对其进行配置.Xshell远程连接7-1与7-2系统.将7-1与7-2的主机名分别设置为server与client.查看新添加的磁盘对其分一个区,40G,保存:接着格式化sdb1(centos7中文件系统为xfs,centos6中为ext4).给其设置自动挂载,进入/etc/fstab中编辑,将其挂载到mnt目录下重新读取fstab中配置数据,查看挂载状态服务端得安装相关软

011.Kubernetes使用共享存储持久化数据

本次实验是以前面的实验为基础,使用的是模拟使用kubernetes集群部署一个企业版的wordpress为实例进行研究学习,主要的过程如下: 1.mysql deployment部署, wordpress deployment部署, wordpress连接mysql时,mysql的 pod ip易变 2.为mysql创建 service,申请固定 service lp 3. wordpress外部可访问,使用 node port类型的 service 4. nodeport类型的 service

漫漫运维路——使用NFS构建出共享存储的LAMP平台,实现Wordpress论坛的数据同步

假设现在需要构建一个Wordpress论坛站点,为了减轻站点压力,使用两台主机用于Apache服务器,对外提供WEB服务.且此两台主机都有独立IP地址.要求用MariaDB和NFS实现两个站点之间的数据同步. 拓扑如下 如上图所示.SERVER1有两块网卡,一块负责和外网通信,一块通过S1和内网中的SERVER2和SERVER3交互.以下是各主机的地址规划 主机 地址 用途 SERVER1 Eth0:192.168.252.10 配置两台虚拟主机,都安装上Wordpress Eth1:192.1

Kubernetes创建挂载共享存储的容器

原文链接:https://www.58jb.com/html/135.html 在上一次的Mysql容器中,已经使用过了配置宿主机目录挂载的方式,这样虽然方便但是不够安全:一般都是把数据存储在远程服务器上如:NFS,GlusterFS,ceph等:一般目前主流的还是使用ceph.GlusterFS; 本次实验使用最简单的方式NFS来配置一个通过挂载共享存储的nginx容器: 两台机器: kubernetes:  10.0.10.135  [Centos7.2] nfs: 10.0.10.31  

20.Kubernetes共享存储

Kubermetes对于有状态的容器应用或者对数据需要持久化的应用,不仅需要将容器内的目录挂载到宿主机的目录或者emptyDir临时存储卷,而且需要更加可靠的存储来保存应用产生的重要数据,以便容器应用在重建之后,仍然可以使用之前的数据.不过,存储资源和计算资源(CPU/内存)的管理方式完全不同.为了能够屏蔽底层存储实现的细节,让用户方便使用,同时能让管理员方便管理, Kubernetes从v1.0版本就引入PersistentVolume和PersistentVolumeClaim两个资源对象来

NFS为lamp提供共享存储实践

本文旨在实现NFS为lamp环境web站点提供共享存储. 1.实验需求 (1)nfs server导出/data/application/web,在目录中提供wordpress; (2)nfs client挂载nfs server导出的文件系统,至/var/www/html; (3)客户端1(lamp)部署wordpress,并让其正常访问,要确保正常发文章,上传图片. (4)客户端2(lamp),挂载nfs server导出的文件系统至/var/www/html,验证其wordpress是 否

mysql+heartbeat+nfs共享存储

第一步:完成基础环境的搭建 第二步:nfs服务配置 Yum install nfs-utils rpcbind (centos 6需要注意安装) 由于nfs服务不识别主机名,只识别ID号,所以必须先建立用户,ID号要和mysql服务器上的mysql用户(后面创建)的ID号保持一致,这里设定ID号都为306. [[email protected] ~]# groupadd-g 306 -r mysql [[email protected] ~]# useradd-g mysql -r -u 306