设为首页 收藏本站
查看: 1124|回复: 0

[经验分享] Kubernetes使用NFS作为共享存储

[复制链接]

尚未签到

发表于 2018-9-15 11:26:15 | 显示全部楼层 |阅读模式
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
  

  

  
[root@qa-k8s-master-01 ]# 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
  

  
[root@qa-k8s-master-01 ~]# 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
  

  

  
[root@qa-k8s-master-01 ~]# kubectl get service -n test
  

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

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

  

  可以看到,nginx应用已经部署成功。
  nginx应用的数据目录是使用的nfs共享存储,我们在nfs共享的目录里加入index.html文件,然后再访问nginx-service 暴露的端口
  来到nfs服务器上
  [root@harbor ~]# echo "Test NFS Share discovery"> /data/nginx/index.html
  在浏览器上访问kubernetes主节点的ip:20080 就能看到上面的内容
  end 结束。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-583347-1-1.html 上篇帖子: Kubernetes集群中flannel因网卡名启动失败问题 下篇帖子: centos7 使用二进制包搭建kubernetes 1.11 集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表