MongoDB能夠支持裸機運行、容器運行和Kubernetes集羣運行等多種方式,其中Kubernetes上能夠採用yaml部署容器、Helm Chart部署和Operator等方式,運行的動態伸縮能力有所不一樣。我在Kubernetes上部署MongoDB採用helm chart,仍是有一些問題(非受權模式部分功能沒法使用),Operator還在開發之中。部署完成後,可使用mongo shell或者mongodb compass(以下圖)來進行管理。node
安裝 MongoDB 服務,參考:git
首先,添加apt源的key:github
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
添加 apt source,以下:mongodb
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
安裝mongdb軟件,執行:docker
sudo apt-get update sudo apt-get install -y mongodb-org sudo apt install mongodb-org-tools mongodb-org-shell mongodb-server-core
設置版本保持(爲固定的版本),執行:shell
echo "mongodb-org hold" | sudo dpkg --set-selections echo "mongodb-org-server hold" | sudo dpkg --set-selections echo "mongodb-org-shell hold" | sudo dpkg --set-selections echo "mongodb-org-mongos hold" | sudo dpkg --set-selections echo "mongodb-org-tools hold" | sudo dpkg --set-selections
安裝完畢。數據庫
直接啓動爲命令行任務,執行:express
mongod --port 27017 --dbpath /home/supermap/gvzr00/mongodb/mongodbx --bind_ip 10.1.1.203
做爲服務,啓動 mongod
,執行:ubuntu
sudo service mongod start
檢查 mongod
集成成功啓動,檢查log 文件,位於 /var/log/mongodb/mongod.log
,是否出現:api
中止 mongod
服務,使用命令:
sudo service mongod stop
執行下面的命令:
sudo service mongod restart
mongo
使用mongo
shell的更多鏈接參數, 如使用不一樣的主機和端口,參閱 The mongo Shell。
MongoDB 提供了 Getting Started Guides,參閱 Getting Started 獲取不一樣的版本信息。
只須要一個命令便可啓動MongoDB服務,具體操做和使用方法與裸機方式基本相同。以下:
$ docker run -d --name mongo --restart=always -p 27017:27017 mongo:4.1
經過compose來運行,示例 stack.yml
部署 mongo
以下:
# Use root/example as user/password credentials version: '3.1' services: mongo: image: mongo restart: always environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example mongo-express: image: mongo-express restart: always ports: - 8081:8081 environment: ME_CONFIG_MONGODB_ADMINUSERNAME: root ME_CONFIG_MONGODB_ADMINPASSWORD: example
使用Helm Chart能夠快速部署MongoDB到Kubernetes集羣中。可是,因爲Helm Chart開發和MongoDB版本變化的緣由,一些部署參數須要根據實際狀況調整才能正常運行起來。
helm install --namespace mongodb --name mongodb ./mongo-helm
做爲服務,須要固定的IP主地址或者經過Ingress做爲訪問入口進行服務的重定向。做爲最爲簡單的入門,我將其部署到固定節點,經過修改helm chart的values.yaml文件,而後更新helm部署便可。添加以下的信息:
nodeSelector: kubernetes.io/hostname: podc02
可使用本地存儲(須要固定運行的節點)或者網絡存儲(我這裏用GlusterFS)。固然,也可使用NSF/Ceph/iSCSI等存儲系統(我沒有測試過)。
建立本地存儲卷,以下:
PV-物理卷建立yaml:
apiVersion: v1 kind: PersistentVolume metadata: name: mongodb namespace: mongodb spec: capacity: storage: 80Gi accessModes: - ReadWriteMany hostPath: path: /home/supermap/mongodb/mongodb
PVC-卷聲明建立yaml::
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mongodb namespace: mongodb spec: accessModes: - ReadWriteMany resources: requests: storage: 80Gi
GlusterFS
建立相應的卷便可,以下:
endpoint建立yaml:
apiVersion: v1 kind: Endpoints metadata: name: glusterfs-gvzr00 namespace: mongodb subsets: - addresses: - ip: 10.1.1.193 - ip: 10.1.1.234 - ip: 10.1.1.205 - ip: 10.1.1.112 ports: - port: 10000 protocol: TCP
pv-物理卷建立yaml:
apiVersion: v1 kind: PersistentVolume metadata: name: mongodb namespace: mongodb spec: capacity: storage: 800Gi accessModes: - ReadWriteMany glusterfs: endpoints: "glusterfs-gvzr00" path: "gvzr00/mongodb/mongodb" readOnly: false
pvc-卷請求建立yaml:
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mongodb namespace: mongodb spec: accessModes: - ReadWriteMany resources: requests: storage: 800Gi
在裸機部署下,能夠按照官方文檔的方式使用。
但在Kubernetes部署中,缺省部署未使用受權模式。出現的一些問題包括:
Operator是Kubernetes的一種應用管理自定義資源。
經過Kubernetes的操做器(Operator),能夠管理mongdb集羣多個實例的動態運行狀況。獲取關於mongodb operator的信息,參考:
或者,訪問最新的 https://www.operatorhub.io/ 獲取版本,使用參考:
目前,該Operator還在開發之中,僅用於評估。