容器跨主機存儲入坑指南
入坑準備
REX-Ray 容器跨主機存儲坑實在是太多,百度搜索出來的各種解決方案很少有實際意義,跟風粘貼復制者眾,大家在學習這些前沿技術時,學會去國外官方論壇上查詢問題。rex-ray作為docker跨主機數據卷存儲解決方案,支持很多存儲模式,例如openstack的cinder,分布式存儲ceph等,但是今天我們用VirtualBox 虛擬機virtualbox來實現容器的跨主機存儲。
步驟一
閱讀官方文檔,了解rex-ray究竟是什么,能夠做什么,為什么選用它,它又支持什么。
官方鏈接 :
https://rexray.readthedocs.io/en/stable/
https://rexray.readthedocs.io/en/stable/user-guide/storage-providers/virtualbox/#virtualbox
步驟二
安裝VirtualBox,并啟動一個虛擬機,例如centos7虛擬機。我是直接搜狗搜索VirtualBox,然后默認安裝。安裝centos7虛擬機也很簡單,如果不會可以百度教程。
需要注意的是,安裝虛擬機時,網絡選擇橋接,確保centos7虛擬機可以正常聯網。同時存儲需要刪除默認的控制器,選用SATA的控制器,安裝完系統后,請清空其他軟盤設備只保留你的虛擬機硬盤。細心的讀者已經發現,我的端口數設置為30,這是REX-Ray官方給的推薦配置,只有擴大端口數你之后創建的卷才能被機器識別使用。
建議直接安裝兩臺虛擬機?。?!以便等會驗證跨主機存儲。
步驟三
為兩臺虛擬機安裝docker和rex-ray。如果你不能保證你的網絡可以與互聯網正常通信,就不用繼續下面的教程了。
我的習慣是禁selinux,sed -i "s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config
然后安裝docker,yum -y install docker
接下來安裝rexray,curl -sSL https://rexray.io/install | sh -s -- stable
***編寫/etc/rexray/config.yml文件
- libstorage:
- service: virtualbox
- virtualbox:
- endpoint: http://172.16.2.214:18083
- userName: root
- password: 123qwe
- tls: false
- volumePath: /Users/cgls/VirtualBox VMs/cjm
- controllerName: SATA
- localMachineNameOrId: cjm
解讀config文件:
service選擇VirtualBox的virtualbox;
endpoint設置為你啟動VirtualBox的宿主機加18083端口,這是因為你在宿主機上啟動了VirtualBox而虛擬機都是使用橋接網絡,所以ip是宿主機的ip;
volumePath是你的***臺虛擬機的存放位置,我的***臺虛擬機是cjm所以位置是這個;
controllerName:設置SATA類型;
localMachineNameOrId是指定的vm的名字。
這個時候先不要執行 systemctl restart rexray.service
我們需要去cmd中rexray的安裝目錄下執行關閉登錄認證 和 啟動vboxwebsrv 服務
- VBoxManage setproperty websrvauthlibrary null
- vboxwebsrv -H 0.0.0.0
執行完畢之后,我們就可以啟動相關服務了。
- systemctl restart rexray
- systemctl restart docker
步驟四
跨主機數據卷測試
現在兩臺虛擬機都啟動了docker和rexray服務。我們創建數據卷設備驗證一下:
- docker volume create --driver rexray --name=mysqldata --opt=size=2
- docker volume create --driver rexray --name=mysqldata1 --opt=size=2
- docker volume ls
- rexray volume ls
現在我們在***臺虛擬機上創建一個t1的容器,掛載mysqldata設備,并在mysqldata設備上寫一個測試文件1.txt。
然后我們刪除t1容器在另外一臺虛擬機上創建t2的容器,也掛載mysqldata設備,并查看之前寫的文件是否還存在。
跨主機存儲已經實現,如果你在實現rexray遇到了很多坑,可以一起交流交流。