首页 > 其他分享 >边缘计算服务,kubeedge+kserver搭建,【AI模型推理】

边缘计算服务,kubeedge+kserver搭建,【AI模型推理】

时间:2024-11-21 11:31:41浏览次数:1  
标签:kubectl kubeedge img AI istio yaml sh kserver knative

生产运行环境推荐

  • k8s版本1.29、Istio1.21、knative1.13.1
  • 单节点k8s:最少6C6G,30g存储
  • 多节点k8s:每节点最少2c4g,20g存储

注意:部署中所属文件都将分别放置于kubeedge和kserver文件夹之中

1)安装istio
方法1
istioctl install -y
方法2
mkdir -p kserver 
cd !$

#镜像名替换脚本,需要将文档中的rep-docker-img.sh 放入文件夹中
../kserver/rep-docker-img.sh 脚本文件
------------------------------------------------------------------------------------------------------------------------
RED='\E[31;2m'
GREEN='\E[32;1m'
BLUE='\E[34;1m'
END='\E[0m'

#touch img.txt
img_list=(
  gcr.io
  k8s.gcr.io
  registry.k8s.io
  ghcr.io
  docker.io
  quay.io
)
find_args=''
relabel_reg='m.daocloud.io'

#入口,打印帮助、判断给定参数是否存在
main(){
    if [[ $1 = "" ]]; then
        echo -e "${BLUE}[info]${END} 未指定路径,使用默认路径: ./"
        rep_img
    elif [ $1 = '-h' ]; then
        echo -e  "${BLUE} 搜索替换国外容器镜像地址为国内代理名称"
        echo -e " 使用方法: $0 目录/文件 ${END}"
    else
        test -d $1 || test -f $1 && rep_img $1 || { echo -e "${RED}[err]${END} 给定的目录/文件不存在: ${1} " && return 1; }
    fi
}
#记录日志
log(){
    echo -e "${BLUE}[info]${END} $1 镜像替换完成: $2 "
    echo -e "${BLUE}[info `date +'%F %T'`]${END} $1 镜像替换完成: $2 " >> rep_img.log
}
run(){
  filter_files="$*"
  #从源镜像列表循环判断
  for img_name in ${img_list[*]} ;do
    #取出所有要替换的文件名
    files=`egrep -H "[[:space:]]image: +[[:graph:]]+" $filter_files  |grep $img_name |grep -v "$relabel_reg" |awk -F':' '{print $1}' |sort |uniq |tr -d '"' |tr -d "'"`
    #取出所有要替换的镜像名
    old_img_name=`egrep "[[:space:]]image: +[[:graph:]]+" $filter_files |grep $img_name |grep -v "$relabel_reg" |awk  '{print $NF}' |sort |uniq |tr -d '"' |tr -d "'"`
    for img in ${old_img_name[*]} ;do
        for file in ${files[*]} ;do
            grep -sq $img $file
            if [ $? = 0 ] ;then
                sed -ri "s#($img)#$relabel_reg/\1#" $file
                log $img $file
            fi
        done
    done
  done
}
#替换镜像名
rep_img(){
    #传参判断
    if [[ $1 = "" ]]; then
        filter_files=`find -iname '*.yaml' ! -type l ! -type d -o -iname '*.yml' ! -type l ! -type d`
        run $filter_files
    elif [ -f $1 ]; then
        run $1
    elif [ -d $1 ]; then
        filter_files=`find $1 -iname "*.yaml" ! -type l ! -type d -o -iname "*.yml" ! -type l ! -type d`
        run $filter_files
    fi
}

main $1
-----------------------------------------------------------------------------------------------------------------------------

获取istio
wget https://github.com/knative/net-istio/releases/download/knative-v1.13.1/istio.yaml
wget -o istio-2.yaml https://github.com/knative/net-istio/releases/download/knative-v1.13.1/istio.yaml

#替换镜像名
sh rep-docker-img.sh 
 
kubectl apply -l knative.dev/crd-install=true -f  istio.yaml
kubectl apply -f istio-2.yaml
2)安装Knative-serving
#镜像名替换脚本,由于kantive需要从谷歌下载镜像,需要将文档中的rep-docker-img.sh 放入文件夹中
../kserver/rep-docker-img.sh 
 
wget https://github.com/knative/serving/releases/download/knative-v1.13.1/serving-crds.yaml
wget https://github.com/knative/serving/releases/download/knative-v1.13.1/serving-core.yaml

 
#替换镜像名
sh rep-docker-img.sh 
 
#可选操作。注入sidecar envoy,注入后可以删除istio-system命名空间下的svc:knative-local-gateway
kubectl create ns knative-serving 
kubectl label ns knative-serving istio-injection=enabled
 
kubectl apply -f serving-crds.yaml 
kubectl apply -f serving-core.yaml
3)安装Knative Istio 控制器

让knative serving可以调用istio的功能

ip link a vip0 type dummy
ip add a 2.2.2.17/32 dev vip0
kubectl patch svc -n istio-system istio-ingressgateway -p '{"spec":{"externalIPs":["2.2.2.17"]}}'
 

wget https://github.com/knative/net-istio/releases/download/knative-v1.13.1/net-istio.yaml

 
#替换镜像名
sh rep-docker-img.sh 
 
kubectl apply -f net-istio.yaml
4)安装证书管理器
wget https://github.com/cert-manager/cert-manager/releases/download/v1.16.1/cert-manager.yaml
 
sh rep-docker-img.sh 
kubectl apply -f cert-manager.yaml
5)安装kserver
wget https://github.com/kserve/kserve/releases/download/v0.13.0/kserve.yaml
 
sh rep-docker-img.sh 
kubectl apply -f kserve.yaml

*** KServe 内置 ClusterServingRuntimes***
wget https://github.com/kserve/kserve/releases/download/v0.13.0/kserve-cluster-resources.yaml
sh rep-docker-img.sh 
kubectl apply -f kserve-cluster-resources.yaml
6)部署第一个推理服务

注意:使用 KServe 无服务器模式,它使用 Knative。

Knative 始终尝试将图像标签解析为摘要,这是一项需要访问注册表的操作,需要通过:

kubectl edit configmap -n knative-serving config-deployment ————> index.docker.io添加进去

***执行命令,发布推理服务***
kubectl creste ns kserver-test
kubectl apply -n kserve-test -f - <<EOF
apiVersion: "serving.kserve.io/v1beta1"
kind: "InferenceService"
metadata:
  name: "sklearn-iris"
spec:
  predictor:
    model:
      modelFormat:
        name: sklearn
      storageUri: "gs://kfserving-examples/models/sklearn/1.0/model"
EOF

成功发布

7)安装kubeedge(在master端和edge端进行)
mkdir kubeedge
cd kubeedge

wget https://github.com/kubeedge/kubeedge/releases/download/v1.19.0/keadm-v1.19.0-linux-amd64.tar.gz
tar -zxvf keadm-v1.19.0-linux-amd64.tar.gz
cp keadm-1.19.0-linux-amd64/keadm/keadm /usr/local/bin/keadm

安装验证

8)初始化CloudeCore
***在主节点执行,若是有多个CloudCore需要在初始化的时候,继续追加IP如:192.168.3.17,192.168.3.18***
keadm  init --advertise-address=192.168.3.17 --kubeedge-version=v1.19.0 --kube-config=/root/.kube/config

输出:
Kubernetes version verification passed, KubeEdge installation will start...
CLOUDCORE started
=========CHART DETAILS=======
NAME: cloudcore
LAST DEPLOYED: Wed Oct 26 11:10:04 2022
NAMESPACE: kubeedge
STATUS: deployed
REVISION: 1

获取token:
keadm gettoken
输出:
ahbfoildhanfnddokjkhdkf15461adfaoindfolmadjkoinjfco;pajdiop;fjiao;dm;aldmfvoanhgvoiaofvpa
9)加入CloudCore

注意:容器运行时,需要提前配置好,可参照官网 https://kubeedge.io/zh/docs/welcome/getting-started

***加入CloudCore节点,这里我们使用的容器运行时为docker,方便后期提供登录操作KubeEdge默认使用cgroupfs cgroup驱动,如果你使用systemd cgroup驱动,
   你需要保证docker配置了systemd cgroup,在执行keadm join时
   加入--cgroupdriver=systemd。***
   
   加入命令:
keadm  join --cloudcore-ipport=192.168.3.17:10000  --kubeedge-version=v1.19.0  
--remote-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cgroupdriver=systemd --token=

  输出:
  ...
KubeEdge edgecore is running, For logs visit: journalctl -u edgecore.service -xe

使用 systemctl status edgecore 来检查edgecore是否正确运行。
# systemctl status edgecore
● edgecore.service
   Loaded: loaded (/etc/systemd/system/edgecore.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2022-10-26 11:26:59 CST; 6s ago
 Main PID: 2745865 (edgecore)
    Tasks: 13 (limit: 4915)
   CGroup: /system.slice/edgecore.service
           └─2745865 /usr/local/bin/edgecore
10)边缘节点部署演示

在您成功启动CloudCore和EdgeCore以后,使用 kubectl get node 来确保EdgeCore成功注册到CloudCore。

# kubectl get node
NAME                 STATUS   ROLES                  AGE     VERSION
ecs-8f95             Ready    agent,edge             5m45s   v1.22.6-kubeedge-v1.12.0
kind-control-plane   Ready    control-plane,master   13m     v1.23.4

现在,我们可以执行下面的命令在边缘节点发布一个Pod

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80
  nodeSelector:
    "node-role.kubernetes.io/edge": ""
EOF

如下所示,我们的边缘节点部署Pod就成功完成了:

# kubectl get pod -owide
NAME    READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          11s   172.17.0.2   ecs-8f95   <none>           <none>

标签:kubectl,kubeedge,img,AI,istio,yaml,sh,kserver,knative
From: https://www.cnblogs.com/zxlyy/p/18560260

相关文章

  • 【RAG 项目实战 02】 Chainlit 持久化对话历史
    【RAG项目实战02】Chainlit持久化对话历史NLPGithub项目:NLP项目实践:fasterai/nlp-project-practice介绍:该仓库围绕着NLP任务模型的设计、训练、优化、部署和应用,分享大模型算法工程师的日常工作和实战经验AI藏经阁:https://gitee.com/fasterai/ai-e-book介绍:该......
  • 构建企业级金融数据分析助手:基于 LangChain 的多源数据 RAG 系统实践
    前言随着金融市场的数字化转型不断深入,每天都有海量的金融数据在全球市场中产生。从财报数据到市场新闻,从实时行情到研究报告,这些数据承载着巨大的价值,但同时也给金融从业者带来了前所未有的挑战。如何在这个信息爆炸的时代,快速而准确地从繁杂的数据中获取有价值的洞察?这个......
  • 最小二乘法 和 卡尔曼滤波 BY AI
    递推最小二乘法(RecursiveLeastSquares,RLS)是一种自适应滤波算法,用于在线估计动态系统的参数。它通过最小化误差平方和来更新参数估计值,而不需要存储历史数据。带遗忘因子的递推最小二乘法(RecursiveLeastSquareswithForgettingFactor)是递推最小二乘法的一种改进,通过引入遗......
  • Win10 部署 Langchain-Chatchat 0.3
    项目地址:https://github.com/chatchat-space/Langchain-Chatchat前面装好了Xinference现在开始安装Langchain-Chatchat我们还是要先conda创建个环境condacreate --prefixD:\AI\Chatchat03python=3.11下面激活环境:condaactivateD:\AI\Chatchat03然后安装Langchain-Cha......
  • 解决 Error: Failure in validating virtualization capabilitiesQEMU: Checking for
    首先是在BIOS中下面几个选项能完成几个是几个:1.IntelVirtualizationTechnology或VT-x:应启用。2.VT-d(IntelDirectedI/O):启用(有助于虚拟化性能)。3.Hyper-Threading:启用(有助于虚拟化性能)。4.SecureBoot:建议关闭(某些场景下可能干扰虚拟化)。其次,管理员身份打开Powe......
  • 1.Job for chronyd.service failed because the control process exited with error c
    1.遇到报错Jobforchronyd.servicefailedbecausethecontrolprocessexitedwitherrorcode.See"systemctlstatuschronyd.service"and"journalctl-xe"fordetails..2.解决方法删除service开头多余的“#”号[root@compute~]#vi/etc/chrony.conf#Usep......
  • 一键生成美观的彩页演示+AI的训练过程科普
    一键生成美观彩页+AI训练揭秘:让你的内容瞬间高大上!阅读时间:8分钟|字数:1300+你是否曾为制作精美的演示文稿而烦恼?是否对AI的训练过程充满好奇?今天,让我们一起探索如何用AI一键生成美观彩页,同时揭秘ChatGPT的训练过程!......
  • Nginx与Upstream之间产生大量TIME_WAIT连接的解决办法
    1.现象Nginx反向代理了一个Java服务,QPS大概是200,问题发生时的Nginx配置:location/{proxy_passhttp://192.168.3.4:18600;}在上游Java服务器上可以观察到大量(约2000个)的TIME_WAIT状态的网络连接  从Nginx的error日志中还发现与Java服务器建立连接偶发失败的情况......
  • 解锁AI文本生成奥秘:Greedy、Beam、Top-k、Top-p与温度控制策略全揭秘
    InferenceStrategy(推理策略)推理策略(InferenceStrategy)是指在生成模型(如Transformer、GPT等)进行文本生成或预测时,决定每一步选择的输出(Token)的方法。不同的推理策略对生成的结果有着显著影响,主要体现在输出的质量、多样性、生成速度等方面。以下将深入探讨常见的推理策......
  • linux命令head,tail查询日志头部和尾部 & 查询日志的关键字的上下文日志方法
    linux命令head,tail查询日志头部和尾部&查询日志的关键字的上下文日志方法tail-n10test.log查询日志尾部最后10行的日志;tail-n-10test.log查询日志尾部最后10行的日志;同上tail-n+10test.log查询10行之后的所有日志;tail尾部,倒着数是负数。配置的是正数的话,则......