• 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    [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.  
    4. service nfs start  
    5. 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.  
    6. [root@node5 test_418]# kubectl get rc 
    7. NAME      DESIRED   CURRENT   READY     AGE 
    8. 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服务器的目录;

  • 相关阅读:
    Integer中计算int位数的方法
    Spark学习---常见的RDD转和行动操作
    Spark学习---RDD编程
    《教父》中的经典台词以及英文原版
    关于MATSIM中,如何关闭自动加载dtd的问题
    源发行版8需要目标发行版1.8
    关于Mysql中GROUP_CONCAT函数返回值长度的坑
    【转】通过xml处理sql语句时对小于号与大于号的处理转换
    XmlDocument根据节点的属性值获取节点
    【转】使用SevenZipSharp压缩、解压文件
  • 原文地址:https://www.cnblogs.com/wangmo/p/8855460.html
Copyright © 2020-2023  润新知