原文链接: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    [Centos6.5的机器]

由于kubernetes还是之前的实验机器,所以就直接弄好NFS服务器先;

nfs服务器操作:


  1. yum install rpcbind nfs-utils -y
  2. mkdir -p /data/www-data

添加共享目录配置:


  1. cat >/etc/exports<<-EOF
  2. /data/www-data  10.0.10.0/24(rw,sync)
  3. EOF

添加到开机启动:


  1. chkconfig rpcbind on
  2. chkconfig nfs on
  3. service nfs start
  4. service rpcbind start

检查一下配置:


  1. [root@nfs ~]# exportfs
  2. /data/www-data  10.0.10.0/24

再回到kubernetess机器上要安装一个包:


  1. yum install nfs-utils -y
 完成后就可以用命令检查nfs目享的目录了;
 

  1. [root@node5 ~]# showmount -e 10.0.10.31
  2. Export list for 10.0.10.31:
  3. /data/www-data    10.0.10.0/24
 尝试挂载一下;
 

  1. [root@node5 ~]# mount 10.0.10.31:/data/www-data /mnt
  2. [root@node5 ~]# ls /mnt
  3. css  fonts  img  index.html  js

因为事先准备了一些文件,所以就可以看到效果,已经成功挂载过来了说明主机可以挂载;

创建一个rc,并定义两个容器数量,配置文件如下:

 

  1. cat >nginx_pod_volume_nfs.yaml<<-EOF
  2. apiVersion: v1
  3. kind: ReplicationController
  4. metadata:
  5. name: nginx
  6. spec:
  7. replicas: 2
  8. selector:
  9. app: web01
  10. template:
  11. metadata:
  12. name: nginx
  13. labels:
  14. app: web01
  15. spec:
  16. containers:
  17. - name: nginx
  18. image: reg.docker.tb/harbor/nginx
  19. ports:
  20. - containerPort: 80
  21. volumeMounts:
  22. - mountPath: /usr/share/nginx/html
  23. readOnly: false
  24. name: nginx-data
  25. volumes:
  26. - name: nginx-data
  27. nfs:
  28. server: 10.0.10.31
  29. path: "/data/www-data"
  30. EOF
 创建容器:
 

  1. [root@node5 test_418]# kubectl create -f nginx_pod_volume_nfs.yaml
  2. replicationcontroller "nginx" created

检查一下服务是否正在运行:

 

  1. [root@node5 test_418]# kubectl get pods
  2. NAME          READY     STATUS    RESTARTS   AGE
  3. nginx-64zrd   1/1       Running   0          15s
  4. nginx-f0z39   1/1       Running   0          15s
  5. [root@node5 test_418]# kubectl get rc
  6. NAME      DESIRED   CURRENT   READY     AGE
  7. nginx     2         2         1         8s
 此时已经成功运行了两个容器了,但是无法外部访问,这里还要再添加一个service; 

创建一个Service,负责对外提供负载;

 

  1. cat >nginx_service.yaml<<-EOF
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. name: nginx-service
  6. spec:
  7. externalIPs:
  8. - 10.0.10.135
  9. ports:
  10. - port: 8000
  11. targetPort: 80
  12. protocol: TCP
  13. selector:
  14. app: web01
  15. EOF

检查一下service是否成功运行:

 
 

  1. [root@node5 test_418]# kubectl get svc
  2. NAME            CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
  3. kubernetes      10.254.0.1       <none>        443/TCP    17d
  4. my-mysql        10.254.93.211    10.0.10.135   3306/TCP   7d
  5. nginx-service   10.254.155.182   10.0.10.135   8000/TCP   4s
 

打开浏览器,访问一下:

http://10.0.10.135:8000/

 
 

此处是一个集群哦!由两个容器提供,哪怕删除其中一个都可以访问;只是因为配置文件中配置了复制份数为2,所以删除任意一个又会很快创建出一个来,最重要的是不用你管理它自动就加入到些集群中;

 

注:其实这个方式跟本地挂载的方式差不多,只是把远程的目录挂载到Kubernetes主机上再挂载到容器里,这个在实验环境中发现:

 

  1. [root@node5 test_418]# mount|grep "10.0.10.31"
  2. 10.0.10.31:/data/www-data on /var/lib/kubelet/pods/65f7cd9e-23ec-11e7-b0e2-000c29d4cebd/volumes/kubernetes.io~nfs/nginx-data type nfs4 (rw,relatime,vers=4.0,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.0.10.135,local_lock=none,addr=10.0.10.31)
  3. 10.0.10.31:/data/www-data on /var/lib/kubelet/pods/65f7db49-23ec-11e7-b0e2-000c29d4cebd/volumes/kubernetes.io~nfs/nginx-data type nfs4 (rw,relatime,vers=4.0,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.0.10.135,local_lock=none,addr=10.0.10.31)

很明显看到两个Pod容器都挂载了一相同的目录,而此目录就是挂载远程NFS服务器的目录;

Kubernetes创建挂载共享存储的容器的更多相关文章

  1. Linux下搭建iSCSI共享存储

    转至:https://www.linuxidc.com/Linux/2016-09/135655.htm Linux下搭建iSCSI共享存储 拓扑: 实验步骤: ------------------- ...

  2. 负载均衡LVS之DR(附:NFS共享存储) 五分钟搭建手册

    一:DR-模式 调度器Ip:192.168.1.254 服务器ip:192.168.1.1/192.168.1.2 VIP:192.168.1.10 ——配置负载均衡调度器: 关闭重定向响应配置: V ...

  3. 基于NFS共享存储实现KVM虚拟机动态迁移

    基于NFS共享存储实现KVM虚拟机动态迁移 一:配置环境 二:安装相关的依赖包 三:实现NFS共享存储 四:KVM机配置相同的步骤 五:安装KVM01安装虚拟机 六:实现迁移  实验初始配置:所有主机 ...

  4. k8s入坑之路(15)kubernetes共享存储与StatefulSet有状态

    共享存储 docker默认是无状态,当有状态服务时需要用到共享存储 为什么需要共享存储: 1.最常见有状态服务,本地存储有些程序会把文件保存在服务器目录中,如果容器重新启停则会丢失. 2.如果使用vo ...

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

    本次实验是以前面的实验为基础,使用的是模拟使用kubernetes集群部署一个企业版的wordpress为实例进行研究学习,主要的过程如下: 1.mysql deployment部署, wordpre ...

  6. 在vmware下为oracle RAC 创建共享存储的总结

    首先,介绍下用命令行vm-diskmanager形式创建磁盘文件的方法(其实,图形界面添加新磁盘就是调用此命令).       很多网上文章提及plainmaker.exe去创建共享磁盘,是以前的版本 ...

  7. k8s之共享存储概述以及演示

    共享存储机制 k8s对有状态的容器应用或者需要对数据进行持久化的应用,在之前的篇章说过,可以将容器内的目录挂载到宿主机的容器目录或者emptyDir临时存储卷. 另外,k8s还开放了两个资源,分别是P ...

  8. 014.Docker Harbor+Keepalived+LVS+共享存储高可用架构

    一 多Harbor高可用介绍 共享后端存储是一种比较标准的方案,将多个Harbor实例共享同一个后端存储,任何一个实例持久化到存储的镜像,都可被其他实例中读取.通过前置LB组件,如Keepalived ...

  9. [k8s]k8s配置nfs做后端存储&配置多nginx共享存储&&statefulset配置

    所有节点安装nfs yum install nfs-utils rpcbind -y mkdir -p /ifs/kubernetes echo "/ifs/kubernetes 192.1 ...

随机推荐

  1. Linux串口编程(中断方式和select方式)

    Linux下的串口编程,在嵌入式开发中占据着重要的地位,因为很多的嵌入式设备都是通过串口交换数据的.在没有操作系统的我们可以使用UART的中断来出来数据的接受和发送,而在Linux操作系统下,我们也可 ...

  2. MACHINE_START-内核板级初始化实现机制(linux3.1.0)

    转:https://blog.csdn.net/charliewangg12/article/details/41518549 在驱动开发时,我们都是以一块开发板为基础移植驱动程序.每一块开发板对应一 ...

  3. spring boot未配置数据源报错

    我拷贝了一个springboot 项目,然后去掉了数据源配置启动报错 : Cannot determine embedded database driver class for database ty ...

  4. OpenStack虚拟机创建过程中镜像格式的的变化过程

    Glance用来作为独立的大规模镜像查找服务,当它与Nova和Swift配合使用时,就为OpenStack提供了虚拟机镜像的查找服务,像所有的OpenStack项目一样,遵循以下设计思想: 基于组件的 ...

  5. POJ 2431 贪心+优先队列

    题意:一辆卡车距离重点L,现有油量P,卡车每前行1米耗费油量1,途中有一些加油站,问最少在几个加油站加油可使卡车到达终点或到达不了终点.   思路:运用优先队列,将能走到的加油站的油量加入优先队列中, ...

  6. python基础语法学习常见小问题

    说明:我是最近觉得python在完成很多工作中方便使用而且功能强大,想突击学习一下.用的是廖雪峰老师的教程,学习python3.X.这里是廖雪峰老师的网站链接: http://www.liaoxuef ...

  7. 泛型学习第一天:List与IList的区别 (二)

    原文: 探讨Ilist<>与List<> 首先要了解一点的是关于接口的基础知识: 接口不能直接实例化但是接口派生出来的抽象类可以实例化所有派生出来的抽象类都可以强制转换成接口的 ...

  8. 利用闭包特性改写addEventListener的回调函数

    var numClicks = 0; document.addEventListener("click",function(){ alert( ++numClicks); },fa ...

  9. Excel 导入到处问题处理!

    1.未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0" 因为没有安装64位的Jet40驱动.可以到 http://www.microsoft.com/downl ...

  10. 我总结的js变量、数组、对象等基础知识

    我的第一篇博客 ——JS的那些基础概念 第一次写,也不知道有没有什么套路,需不需要注意文采之类的.不管了,我就直接写主要内容吧!下面是我总结的一些关于JS的基础概念: [变量]从字面上面,变量是可变的 ...