基於 Kubernetes 部署千億級數據搜索引擎 Milvus

做者:李毓

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
相關文章
相關標籤/搜索