ubuntu+minikube1.23+helm+milvus2.x最新部署踩坑记录

ubuntu使用的是vmware创建的ubuntu18环境
修改虚拟机内存=46G,cpu=8
(因为milvus至少需要cpu=8+32g,最新硬件要求参考:https://milvus.io/docs/prerequisite-helm.md)

第一步:安装docker(因为安装的minikube是小于1.24版本,所以支持docker,否则要安装cri-docker,参考第七步的报错5)
# 更新源信息
sudo apt-get update
# 安装必要软件
sudo apt-get install ca-certificates curl gnupg lsb-release
# 创建key
sudo mkdir -p /etc/apt/keyrings
# 导入key证书
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 写入docker源信息
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 设置为国内源
sed -i s#download.docker.com#mirrors.ustc.edu.cn/docker-ce#g /etc/apt/sources.list.d/docker.list
# 更新源信息并进行安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# docker设置镜像
1、免费阿里镜像:设置方式参考https://blog.csdn.net/L_fly_J/article/details/121913298
2、可以网上找其他国内docker镜像
3.设置到daemon.json中,当docker pull时拉取更快(https://xxx.mirror.aliyuncs.com 根据免费阿里镜像设置)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'

{
    "registry-mirrors": [
        "https://xxx.mirror.aliyuncs.com",
        "https://registry.hub.docker.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn",
    ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
#开机自启动
systemctl list-unit-files | grep docker   #检查是否开机自启动
systemctl enable docker.service           #设置开机自启动

# docker设置proxy(可选)
#前提是本地电脑已经科学上网,配置允许来自局域网的连接,如果你不懂怎么科学上网,可以跳过docker设置proxy
#192.168.0.107为我本地电脑局域网ip,可以通过在cmd窗口输入ipconfig查看
===========================以下为我的电脑显示
以太网适配器 以太网:                                                                                                               。。。                                                       
IPv4 地址 . . . . . . . . . . . . : 192.168.0.123                                                                      
。。。
===========================
sudo systemctl status docker #看loaded哪一行的目录,我的显示/lib/systemd/system/docker.service
vim /lib/systemd/system/docker.service
========================================在[Service]模块下添加下面三行
Environment="HTTP_PROXY=192.168.2.123:7890"
Environment="HTTPS_PROXY=192.168.2.123:7890"
Environment="NO_PROXY=localhost,192.168.2.101,127.0.0.1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24"
========================================
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info  #可以看到HTTP_PROXY有没有生效


第二步:安装minikube(阿里云最高支持1.23,此处我下载的安装包是阿里云的,你如果可以连外网,也可以下载官网最新版本)
curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.23.1/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
minikube version  #验证安装成功,可以显示版本是1.23.1
#设置minikube占用cpu和内存(防止minikube start命令里指定cpu和memory不生效。注:如果是启动minikube后才设置的,需要删除minikube再启动minikube使它生效)
minikube config set cpus 8
minikube config set memory 36864
#创建minikube用户,minikube内置docker不推荐在root模式下启动minikube,因此创建minikube用户并授予docker用户组权限,可以不用加sudo就可以操作docker命令
useradd -m minikube  #先自动创建家目录在删除用户,保留家目录,否则useradd --r -m -s /bin/bash minikube创建用户没有家目录
userdel minikube
useradd --r -m -s /bin/bash minikube
passwd minikube #设置密码,单行执行
adduser minikube sudo #给用户添加管理员权限
sudo groupadd docker
sudo usermod -aG docker minikube
newgrp docker
#进入minikube用户模式
su minikube
#设置proxy,可以下载镜像(可选)
#前提是本地电脑已经科学上网,配置允许来自局域网的连接,如果你不懂怎么科学上网,可以跳过设置proxy
vim ~/.bashrc
=========================================新增三行
export HTTP_PROXY=http://192.168.2.123:7890/
export HTTPS_PROXY=http://192.168.2.123:7890/
export NO_PROXY=localhost,192.168.2.101,127.0.0.0/8,::1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24
=========================================
source ~/.bashrc


第三步:启动minikube,先删除再启动,防止有旧版本没卸载干净的minikube导致未可知问题,设置cpu和memory,--driver=docker设置内置镜像为docker,可以同步docker的镜像,--image-mirror-country='cn'会使用阿里云镜像启动,有科学上网不冲突,设置安装版本是下载的版本号
minikube delete --all && minikube start --cpus 8 --memory 36864 --driver=docker --container-runtime=containerd --image-mirror-country='cn'  --kubernetes-version=1.23.1
#安装kubectl
#用minikube版本的kubectl替代,防止kubectl和minikube版本差异
vim ~/.bashrc
=========================================
alias kubectl="minikube kubectl --"
=========================================
source ~/.bashrc
kubectl get pods -A   #确认pods都处于running状态

# 将外部 docker 环境映射到 minikube 的 docker 环境,没有这一步,即使你docker拉取或构建镜像,minikube内部docker也看不到用不了。
eval $(minikube -p minikube docker-env)
#镜像拉取失败(手动拉取,可选,如果有科学上网可以不用这一步,如果没有,发现milvus里有pod报错镜像拉取失败,可以这里手动拉取后重新安装milvus)
docker pull milvusdb/milvus
minikube image load milvusdb/milvus


第四步:安装helm
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh


第五步:安装并启动milvus
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
helm install my-release milvus/milvus
kubectl get pods  #需要10分钟,看pods都running和两个completed就对了,其他状态都有问题,看文章最后的报错解决
#查看端口
kubectl get pod my-release-milvus-proxy-6bd7f5587-ds2xv --template
='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
#本机转发端口
kubectl port-forward service/my-release-milvus 27017:19530
Forwarding from 127.0.0.1:27017 -> 19530
#所有网络转发端口
kubectl port-forward --address 0.0.0.0 service/my-release-milvus 27017:19530
Forwarding from 0.0.0.0:27017 -> 19530
#查看minikube看板中集群状态
minikube dashboard  #输入该命令后,在浏览器打开显示里的链接
#卸载milvus
helm uninstall my-release
#停止minikube
minikube stop
#重启集群(注:delete操作会删除minikube内所有容器和下载镜像)
minikube delete --all && minikube start --cpus 8 --memory 36864 --driver=docker --container-runtime=containerd --image-mirror-country='cn'  --kubernetes-version=1.23.1
kubectl get pods -A   #确认pods都处于running状态
eval $(minikube -p minikube docker-env)  #同步docker环境
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
helm install my-release milvus/milvus   #安装milvus
kubectl get pods  #pod启动需要10分钟左右,看pods都running和两个completed就对了,其他状态都有问题,看文章最后的报错解决


第六步:重启后minikube没了,如何恢复
su minikube
docker info #确认docker没问题,有问题修复后,设置开机启动
echo $HTTP_PROXY  #确认打开代理,可访问外网
minikube delete --all && minikube start --cpus 8 --memory 36864 --driver=docker --container-runtime=containerd --image-mirror-country='cn'  --kubernetes-version=1.23.1
kubectl get pods -A   #确认pods都处于running状态
eval $(minikube -p minikube docker-env)  #同步docker环境
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
helm install my-release milvus/milvus   #安装milvus
kubectl get pods  #pod启动需要10分钟左右,看pods都running和两个completed就对了,其他状态都有问题,看文章最后的报错解决


第七步:安装过程遇到报错与解决方法:

#报错1:milvus启动部分pods是pending状态,cpu/内存资源不够,milvus要求至少cpu8个,内存32g
kubectl describe pod [pending的NAME]
kubectl describe pod my-release-pulsar-bookie-1   #举例
看最后event报错insufficient cpu,cpu不够,重新创建minikube
helm uninstall my-release
minikube delete --all && minikube start --cpus 8 --memory 36864 --driver=docker --image-mirror-country='cn'  --kubernetes-version=1.23.1
helm repo add milvus https://zilliztech.github.io/milvus-helm/
helm repo update
helm install my-release milvus/milvus
kubectl get pods


#报错2:milvus启动部分pods是image拉取错误状态,没外网,无法拉取镜像,改为手动在docker拉取,推到minikube里
#给docker增加外网proxy:
1.参考"docker设置proxy"(对minikube没用,对docker pull有用)
2.vim ~/.bashrc
=========================================新增三行
export HTTP_PROXY=http://192.168.0.107:10809/
export HTTPS_PROXY=http://192.168.0.107:10809/
export NO_PROXY=localhost,127.0.0.0/8,::1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24
=========================================
source ~/.bashrc
# 将外部 docker 环境映射到 minikube 的 docker 环境
eval $(minikube -p minikube docker-env)
#手动拉取
docker pull milvusdb/milvus
minikube image load milvusdb/milvus


#报错3:docker重启后docker info报错连不上docker server 报错“No route to host”的问题
解决:
教程:https://blog.csdn.net/qq_25112523/article/details/99871013
ip a  #看docker内部网络
sudo apt install firewalld
nmcli connection modify docker0 connection.zone trusted
systemctl stop NetworkManager.service
firewall-cmd --permanent --zone=trusted --change-interface=docker0
systemctl start NetworkManager.service
nmcli connection modify docker0 connection.zone trusted
systemctl restart docker.service

#报错4:防火墙问题导致minikube有问题
防火墙等网络设置参考:https://blog.csdn.net/weixin_44251065/article/details/126313345

#报错5:minikube安装版本>=1.24,不支持docker,需要安装cri-docker
# 由于1.24以及更高版本不支持docker所以安装cri-docker,参考教程:https://www.jianshu.com/p/5938f738feab
# 下载cri-docker 
wget  https://ghproxy.com/https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.5/cri-dockerd-0.2.5.amd64.tgz
# 解压cri-docker
tar xvf cri-dockerd-0.2.5.amd64.tgz 
cp cri-dockerd/cri-dockerd  /usr/bin/
# 写入启动配置文件
cat >  /usr/lib/systemd/system/cri-docker.service <<EOF
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

StartLimitBurst=3

StartLimitInterval=60s

LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

# 写入socket配置文件
cat > /usr/lib/systemd/system/cri-docker.socket <<EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service

[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF

# 进行启动cri-docker
systemctl daemon-reload ; systemctl enable cri-docker --now

#报错6:启动minikube或kubectl命令报错无法打开/tmp/juju-mk开头文件

Error caching kubectl: failed to acquire lock “/root/.minikube/cache/linux/v1.22.1/kubectl.lock”: {Name:mk254d79398b1300f005e756a353b16d0fb24209 Clock:{} Delay:500ms Timeout:1m0s Cancel:}: unable to open /tmp/juju-mk254d79398b1300f005e756a353b16d0fb24209: permission denied

临时解决:

sudo rm -rf /tmp/juju-mk*

sudo rm -rf /tmp/minikube.*

重启minikube

再次输入kubectl命令两次还是一样报错。

#报错7:milvus启动后,一直有几个pod在initing状态,报错:

Warning FailedScheduling 9m27s default-scheduler 0/1 nodes are available: pod has unbound immediate PersistentVolumeClaims. preemption: 0/1 nodes are available: 1 No preemption victims found for incoming pod..

(minikube资源不够,需要重启minikube,更多cpu内存和disk)

国内镜像(成功,但是版本低)

cpu>45.5  give 50

memory>160.5+load38.8  give 200

disk>360+rawfile19.1 give 380

#kvm2启动minikube

sudo minikube delete --all && sudo minikube start --driver=kvm2 --cpus=70 --memory='220gb' --disk-size='380gb' --image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --force --wait-timeout=3m

#报错8:minikube启动一直超时360s,无法create host

报错的启动命令:

minikube delete --all && minikube start --cpus 8 --memory 36864 --driver=docker --container-runtime=containerd --image-mirror-country='cn'  --kubernetes-version=1.23.1

原因:我的 /etc/docker/daemon.json里有"data-root": "/fast_disk/docker"导致

方法1:删掉"data-root": "/fast_disk/docker"

vim /etc/docker/daemon.json 光标移动到data-root行,双击dd删除该行,:wq保存

#重启docker生效,重启后minikube要重启

sudo systemctl daemon-reload

sudo systemctl restart docker

sudo systemctl status docker

方法2:不用docker启动minikube,改为none容器(不支持minikube ssh,不推荐):

需要先备份docker的配置(不然minikube新的启动命令会修改/etc/docker/daemon.json)

sudo cp /etc/docker/daemon.json /etc/docker/daemon_backup.json 

启动命令改为如下(配置--vm-driver=none默认用现有所有cpu和内存构建,需要提前确认够用,所以不用指定cpu和内存,重启docker后不用重启minikube,因为不是用docker启动的。不支持minikube ssh,不推荐)

minikube delete && minikube start --vm-driver=none --image-mirror-country='cn'

sudo cp /etc/docker/daemon_backup.json /etc/docker/daemon.json

sudo systemctl daemon-reload

sudo systemctl restart docker

sudo systemctl status docker

方法3:改用kvm2启动minikube(推荐,实际使用):

#kvm2安装:

在Ubuntu上安装KVM虚拟化工具 - 知乎

sudo apt update

sudo apt upgrade

egrep -c '(vmx|svm)' /proc/cpuinfo    #如果结果大于0,说明你的处理器支持硬件虚拟化。

##安装KVM及相关的管理工具

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

##将当前用户添加到`libvirt`和`kvm`用户组,以便在不使用`sudo`的情况下管理虚拟机

sudo usermod -aG libvirt $USER

sudo usermod -aG kvm $USER

##完成上述操作后,注销并重新登录,以使新的用户组设置生效。

##确认libvirtd服务已启动并运行:

sudo systemctl status libvirtd

##如果服务没有运行,可以使用以下命令启动它:

sudo systemctl start libvirtd

##确保在系统启动时自动启动:

sudo systemctl enable libvirtd

##可以通过`virt-manager`(图形化工具)或`virsh`(命令行工具)来创建和管理虚拟机。前提是xshell配置了X11转发。要启动`virt-manager`,可以在命令行输入:

virt-manager

##报错:如果minikube运行中因为磁盘满了挂了,显示api-server连接不上,minikube status发现控制平面节点都暂停了,用virsh工具看minikube容器暂停,用minikube start命令删除重启报错如下:

* Deleting "minikube" in kvm2 ...
! StartHost failed, but will try again: creating host: create: Error creating machine: Error in driver during machine creation: creating domain: error defining domain xml: 。。。

: virError(Code=9, Domain=20, Message='operation failed: domain 'minikube' already exists with uuid 640fa579-dba6-4390-8ebf-1d20ae729998')

因为kvm中有存在相同uuid的minikube容器,导致无法重启,因此需要kvm里把该容器删除后再重启。

解决:

virsh list --all        #列出所有kvm容器
virsh destroy minikube  #停止容器
virsh undefine minikube   #删除容器

然后重启minikube成功。

国内镜像(成功,但是版本低)

cpu>45.5  give 50

memory>160.5+load38.8  give 200

disk>360+rawfile19.1 give 380

#kvm2启动minikube

sudo minikube delete --all && sudo minikube start --driver=kvm2 --cpus=70 --memory='220gb' --disk-size='380gb' --image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --force --wait-timeout=3m

#安装helm

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3

chmod 700 get_helm.sh

./get_helm.sh

#用helm设置配置安装milvus,手动下载helmConfigYml.yml来自https://milvus.io/tools/sizing/

#helm安装milvus

helm repo add milvus Milvus Helm Charts | milvus-helm

helm repo update

helm install my-release milvus/milvus -f helmConfigYml.yml

#删除milvus

helm uninstall my-release

kubectl delete pod --grace-period=0 --force --all $(kubectl get pod -o=name | grep Terminating | awk -F/ '{print $2}')

国外镜像-minikubev1.31.1-milvus(支持10million向量)

#若需要存储10million的向量的配置文件,需要以下硬件资源的minikube。

Milvus Sizing Tool · Vector Database built for scalable similarity search

cpu>45.5  give 50

memory>160.5+load38.8  give 200

disk>360+rawfile19.1 give 380

#进入root用户,设置代理

sudo su

source /fast_disk/home/minikube/proxy_env.sh

=============================================

export HTTP_PROXY=http://192.168.0.107:10809/

export HTTPS_PROXY=http://192.168.0.107:10809/

export NO_PROXY=localhost,192.168.2.101,127.0.0.0/8,::1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24

==============================================

#下载并安装minikube1.31.1

curl -LO https://storage.googleapis.com/minikube/releases/v1.31.1/minikube-linux-amd64

sudo install minikube-linux-amd64 /usr/local/bin/minikube

minikube version  #验证安装成功

# 下载并安装kubectl

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

kubectl version        # 验证是否安装成功

#删除缓存(如果有),启动minikube,设置cpu和内存和硬盘资源

rm -rf /tmp/juju-mk*

rm -rf /tmp/minikube.*

#用右边参数可看日志调试启动问题: --logtostderr --v=6

minikube delete --all && minikube start --driver=kvm2 --cpus=70 --memory='220gb' --disk-size='380gb' --wait-timeout=3m --force

kubectl get po -A

minikube addons list  #确认插件default-storageclass和storage-provisioner是被允许的,否则手动运行minikube addons enable default-storageclass和minikube addons enable storage-provisioner

#手动拉取缓存-解决镜像拉取慢问题

minikube image load  docker.io/milvusdb/etcd:3.5.5-r2

minikube image load  milvusdb/milvus-config-tool:v0.1.1

minikube image load  minio/minio:RELEASE.2023-03-20T20-16-18Z

minikube image load  apachepulsar/pulsar:2.8.2

minikube image load milvusdb/milvus:v2.2.13

#安装helm

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3

chmod 700 get_helm.sh

./get_helm.sh

#用helm设置配置安装milvus,手动下载helmConfigYml.yml来自https://milvus.io/tools/sizing/

/fast_disk/home/minikube/download/helmConfigYml.yml

helm repo add milvus Milvus Helm Charts | milvus-helm

helm repo update

helm install my-release milvus/milvus -f helmConfigYml.yml

#卸载milvus,并清空pod资源

helm uninstall my-release

kubectl delete pod --grace-period=0 --force --all $(kubectl get pod -o=name | grep Terminating | awk -F/ '{print $2}')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值