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服務器的目錄;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM