Milvus 旨在幫助用戶實現海量非結構化數據的近似檢索和分析。單個 Milvus 實例可處理十億級數據規模,而對於百億或者千億級數據,則須要一個 Milvus 集羣實例。Kubernetes 是一個可移植的,可擴展的開源平臺,用於管理容器化的工做負載和服務,方便了聲明式配置和自動化。mysql
若是咱們但願在 Kubernetes 集羣中一個存儲卷能夠被多個 Pod 同時掛載,多個 Pod 同時修改相同數據,這時便須要共享存儲。目前常見的共享資源協議有 NFS 和 CIFS 等。下面,咱們將演示如何搭建 NFS 存儲資源並在 Kubernetes 中部署 NFS Server。git
加載nfs模塊到主機內核而且利用 docker 搭建 NFS 存儲資源github
docker run -d --privileged --restart=always \ -v /tmp:/nfs \ -e NFS_EXPORT_DIR_1=/nfs \ -e NFS_EXPORT_DOMAIN_1=\* \ -e NFS_EXPORT_OPTIONS_1=rw,insecure,no_subtree_check,no_root_squash,fsid=1 \ -p 111:111 -p 111:111/udp \ -p 2049:2049 -p 2049:2049/udp \ -p 32765:32765 -p 32765:32765/udp \ -p 32766:32766 -p 32766:32766/udp \ -p 32767:32767 -p 32767:32767/udp \ fuzzle/docker-nfs-server:latest
賦權:chown -R nfsnobody:nfsnobody /nfsweb
在全部節點都安裝客戶端sql
yum -y install nfs-utils rpcbind systemctl start nfs systemctl start rpcbind systemctl enable nfs systemctl enable rpcbind
在client端看一下server端的nfsdocker
[root@adm-master ~]# showmount -e 192.168.0.53 Export list for 192.168.0.53: /nfs * [root@adm-master ~]# mkdir -pv /data/nfs mkdir: created directory ‘/data’ mkdir: created directory ‘/data/nfs’
掛載vim
mount -t nfs -o rw,nfsvers=3 192.168.1.31:/nfs /data/nfs
查看掛載信息centos
[root@adm-master ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 898M 0 898M 0% /dev tmpfs 910M 0 910M 0% /dev/shm tmpfs 910M 9.9M 900M 2% /run tmpfs 910M 0 910M 0% /sys/fs/cgroup /dev/mapper/centos-root 47G 4.1G 43G 9% / /dev/sda1 1014M 150M 865M 15% /boot 192.168.0.53:/nfs 47G 4.4G 43G 10% /data/nfs
利用helm配置stroageclassapp
拉取源代碼ide
git clone https://github.com/helm/charts.git cd charts/stable/nfs-client-provisioner
image: repository: willdockerhub/nfs-client-provisioner tag: latest pullPolicy: IfNotPresent nfs: server: 192.168.0.107 path: /nfs mountOptions: - rw - nfsvers=3
chart 爲預先配置好的安裝包資源,相似於 Ubuntu 的 APT 和 CentOS 中的 YUM。當 chart 安裝到 Kubernetes 中後就會建立一個 release。
NFS Client Provisioner 是用於自動建立 Kubernetes PV 的自動化插件。它能夠根據已配置好的 NFS Server,自動建立 Kubernetes PV。
[root@adm-master nfs-client-provisioner]# helm install nfs-client . NAME: nfs-client LAST DEPLOYED: Fri Sep 18 00:10:25 2020 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
檢查部署狀態
[root@adm-master ~]# helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION nfs-client default 1 2020-09-19 21:44:42.329849841 +0800 CST deployed nfs-client-provisioner-1.2.9 3.1.0
查看pod
[root@adm-master nfs-client-provisioner]# kubectl get pods NAME READY STATUS RESTARTS AGE nfs-client-nfs-client-provisioner-f4d4786f5-8knw5 1/1 Running 0 3m46s
利用kubectl部署milvus
下載源代碼
git clone -b 0.10.0 https://github.com/milvus-io/milvus-helm.git cd milvus-helm
部署milvus
helm install --set cluster.enabled=true --set persistence.enabled=true --set mysql.enabled=true my-release .
查看 Milvus release 是否安裝成功:
[root@adm-master milvus-helm]# helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION my-release default 1 2020-09-20 22:56:07.656378683 +0800 CST deployed milvus-0.10.0 0.10.0 nfs-client default 1 2020-09-20 22:49:26.461326654 +0800 CST deployed nfs-client-provisioner-1.2.9 3.1.0
這裏有個坑,官網沒有把配置寫全。後面是空的,要加上storageClass的名字,兩個valus.yaml都要加。
storageClass: "nfs-client"
還有就是配置裏面的CPU和內存都要根據本身機器的實際狀況設置,不要直接照抄,會致使啓動失敗。
查看pod是否啓動成功
[root@adm-master milvus-helm]# kubectl get pods NAME READY STATUS RESTARTS AGE my-release-milvus-mishards-659496c4f4-nnj9s 1/1 Running 0 9m40s my-release-milvus-readonly-85c94bbbf5-z7jg7 1/1 Running 0 9m40s my-release-milvus-writable-549676655-mw649 1/1 Running 0 9m40s my-release-mysql-8688668cd-xsqd4 1/1 Running 0 9m40s nfs-client-nfs-client-provisioner-f4d4786f5-ztd5h 1/1 Running 0 96m
此時,Milvus 服務已成功部署到 Kubernetes 上。可是,Kubernetes 的默認服務爲 ClusterIP,集羣內的其它應用能夠訪問該服務,而集羣外部沒法進行訪問。因此,若是咱們想在 Internet 或者生產環境中使用集羣,咱們須要更換 Service 以暴露應用。Kubernetes 的兩種能夠暴露服務的 Service 類型爲:NodePort 和 LoadBalancer。下面咱們將介紹如何使用 NodePort 服務在外部訪問集羣。
暴露服務
vim vales.yaml service: type: NodePort port: 19530 annotations: {} labels: {}
更新milvus release
helm upgrade --set cluster.enabled=true --set persistence.enabled=true --set mysql.enabled=true my-release --set web.enabled=true .
能夠看到,服務端口已經暴露出來。這樣就算安裝完成了。
[root@adm-master milvus-helm]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 60d my-release-milvus NodePort 10.1.222.188 <none> 19530:30631/TCP 19m my-release-milvus-readonly ClusterIP 10.1.231.35 <none> 19530/TCP,19121/TCP 19m my-release-milvus-writable ClusterIP 10.1.95.189 <none> 19530/TCP,19121/TCP 19m my-release-mysql ClusterIP 10.1.204.65 <none> 3306/TCP 19m