Ubuntu 22.04.5 LTS 基于 kubesphere 安装 cube studio

Ubuntu 22.04.5 LTS 基于 kubesphere 安装 cube studio

前置条件 已经成功安装 kubesphere v4.3.1

参考教程: https://github.com/data-infra/cube-studio/wiki/%E5%9C%A8-kubesphere-%E4%B8%8A%E6%90%AD%E5%BB%BA-cube-studio

1. 安装基础依赖

# ubuntu安装基础依赖
apt install -y socat conntrack ebtables ipset ipvsadm

2. 服务nodeport可用端口范围要放大到10~60000

vi /etc/kubernetes/manifests/kube-apiserver.yaml修改添加apiserver配置spec:containers:- command:- kube-apiserver- --service-node-port-range=1-65535      # 添加这一行- --advertise-address=172.16.0.17修改后,通过reboot命令重启机器

3. 如果使用containerd运行时,替换脚本中的docker命令

如果知道是否为containerd运行时, 通过命令 kubectl get nodes 看到节点 kubectl describe node node1 | grep "Container Runtime" , 输出: Container Runtime Version:     containerd://1.7.27

# 替换拉取文件中的拉取命令
cd install/kubernetes/
sed -i 's/^docker/crictl/g' pull_images.sh

4.  对于kubekey部署的ipvs模式的k8s

通过如下命令可以检查是否为ipvs模式的k8s

kubectl get configmap -n kube-system kube-proxy -o yaml | grep mode

输出:  mode: ipvs

(1)要将install/kubernetes/start.sh 以及 start-with-kubesphere.sh 脚本最后面的kubectl patch svc istio-ingressgateway -n istio-system -p '{"spec":{"externalIPs":["'"$1"'"]}}'注释掉。取消注释代码kubectl patch svc istio-ingressgateway -n istio-system -p '{"spec":{"type":"NodePort"}}'

(2)将配置文件install/kubernetes/cube/overlays/config/config.py中的 CONTAINER_CLI的值 改为 nerdctl,K8S_NETWORK_MODE的值 改为ipvs

其中安装 nerdctl  nerdctl-2.0.4-linux-amd64.tar.gz

下载地址: https://github.com/containerd/nerdctl/releases

解压到 /usr/local/bin 目录

tar zxvf nerdctl-2.0.4-linux-amd64.tar.gz -C /usr/local/bin nerdctl

5. 将k8s集群的kubeconfig文件(默认位置:~/.kube/config)复制到install/kubernetes/config文件中,然后执行下面的部署命令,其中xx.xx.xx.xx为机器内网的ip(不是外网ip)

解释  (单机版本)

# 在k8s worker机器上执行如果只部署了k8s,没有部署kubesphere,执行
sh start.sh xx.xx.xx.xx如果部署了k8s 同时部署了kubesphere,执行
sh start-with-kubesphere.sh xx.xx.xx.xx

由于我是单机版本的, 所以注释掉 start.sh 下面的脚本, 不需要重新下载

#mkdir -p ~/.kube && rm -rf ~/.kube/config && cp config ~/.kube/config#ARCH=$(uname -m)#if [ "$ARCH" = "x86_64" ]; then
#  wget https://cube-studio.oss-cn-hangzhou.aliyuncs.com/install/kubectl && chmod +x kubectl  && cp kubectl /usr/bin/ && mv kubectl /usr/local/bin/
#elif [ "$ARCH" = "aarch64" ]; then
#  wget -O kubectl https://cube-studio.oss-cn-hangzhou.aliyuncs.com/install/kubectl-arm64 && chmod +x kubectl  && cp kubectl /usr/bin/ && mv kubectl /usr/local/bin/
#fi

6.  kubectl拿version时, 由于1.28版本高的原因问题会报错

version=`kubectl version --short | awk '/Server Version:/ {print $3}'`修改成version=`kubectl version | awk '/Server Version:/ {print $3}'`

按第5步执行, 由于脚本中没有处理权限问题, 实际上应该使用root运行, 因为创建 /data目录, 根本没有考虑到其它用户的问题, 所以在上述第五步, 把没办法要脚本注释掉, 因为是当机版本, 如果是别的机器部署, 可以保持不动

由于我是安装了kubesphere的, 所以我运行如下脚本执行安装

如果部署了k8s 同时部署了kubesphere,执行cd /data1/cube-studio/install/kubernetes  这是我下载 cube-studio的对应目录sh start.sh 10.33.34.166不要尝试使用 start-with-kubesphere.sh , 容易出现istio启不来的情况, 因为缺少了一些服务的安装, 不过使用start.sh启动也一样遇到istio无法使用的问题

部署成功后会显示如下消息

通过kubesphere查看也是没有错的

但是发现

2025-04-30T16:55:35.867847176+08:00 This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (pymysql.err.IntegrityError) (1452, 'Cannot add or update a child row: a foreign key constraint fails (`kubeflow`.`etl_pipeline`, CONSTRAINT `etl_pipeline_ibfk_1` FOREIGN KEY (`changed_by_fk`) REFERENCES `ab_user` (`id`))')
2025-04-30T16:55:35.867852596+08:00 [SQL: INSERT INTO etl_pipeline (created_on, changed_on, name, `describe`, project_id, workflow, dag_json, config, expand, created_by_fk, changed_by_fk) VALUES (%(created_on)s, %(changed_on)s, %(name)s, %(describe)s, %(project_id)s, %(workflow)s, %(dag_json)s, %(config)s, %(expand)s, %(created_by_fk)s, %(changed_by_fk)s)]
2025-04-30T16:55:35.867858045+08:00 [parameters: {'created_on': datetime.datetime(2025, 4, 30, 16, 55, 33, 497374), 'changed_on': datetime.datetime(2025, 4, 30, 16, 55, 33, 497402), 'name': 'dau', 'describe': 'dau计算', 'project_id': 1, 'workflow': 'airflow', 'dag_json': '{\n    "cos导入hdfs-1686184253953": {\n        "label": "数据导入",\n        "location": [\n            304,\n            96\n        ],\n        "color":  ... (7480 characters truncated) ... \n            "label": "数据导出"\n        },\n        "upstream": [\n            "hive出库至hdfs-1686184293917"\n        ],\n        "task_id": 7\n    }\n}', 'config': '{\n    "alert_user": "admin"\n}', 'expand': '[]', 'created_by_fk': 1, 'changed_by_fk': 1}]
2025-04-30T16:55:35.867863640+08:00 (Background on this error at: https://sqlalche.me/e/14/gkpj) (Background on this error at: https://sqlalche.me/e/14/7s2a)
2025-04-30T16:55:35.867869011+08:00 begin add notebook
2025-04-30T16:55:35.867874369+08:00 This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (pymysql.err.IntegrityError) (1452, 'Cannot add or update a child row: a foreign key constraint fails (`kubeflow`.`etl_pipeline`, CONSTRAINT `etl_pipeline_ibfk_1` FOREIGN KEY (`changed_by_fk`) REFERENCES `ab_user` (`id`))')
2025-04-30T16:55:35.867879533+08:00 [SQL: INSERT INTO etl_pipeline (created_on, changed_on, name, `describe`, project_id, workflow, dag_json, config, expand, created_by_fk, changed_by_fk) VALUES (%(created_on)s, %(changed_on)s, %(name)s, %(describe)s, %(project_id)s, %(workflow)s, %(dag_json)s, %(config)s, %(expand)s, %(created_by_fk)s, %(changed_by_fk)s)]
2025-04-30T16:55:35.867903881+08:00 [parameters: {'created_on': datetime.datetime(2025, 4, 30, 16, 55, 33, 497374), 'changed_on': datetime.datetime(2025, 4, 30, 16, 55, 33, 497402), 'name': 'dau', 'describe': 'dau计算', 'project_id': 1, 'workflow': 'airflow', 'dag_json': '{\n    "cos导入hdfs-1686184253953": {\n        "label": "数据导入",\n        "location": [\n            304,\n            96\n        ],\n        "color":  ... (7480 characters truncated) ... \n            "label": "数据导出"\n        },\n        "upstream": [\n            "hive出库至hdfs-1686184293917"\n        ],\n        "task_id": 7\n    }\n}', 'config': '{\n    "alert_user": "admin"\n}', 'expand': '[]', 'created_by_fk': 1, 'changed_by_fk': 1}]
2025-04-30T16:55:35.867916345+08:00 (Background on this error at: https://sqlalche.me/e/14/gkpj) (Background on this error at: https://sqlalche.me/e/14/7s2a)解决办法: 如果可以删除/data/k8s/infra/mysql的话。就把这个删了,然后重启mysql和kubeflow-dashboard

另外遇到 prometheus没启成功 的问题, 报错

openebs.io/local_openebs-localpv-provisioner-7bf6f464c-c6j58_77b994b8-de73-4b58-8d29-e0fc8d194a38  failed to provision volume with StorageClass "local": claim.Spec.Selector is not supported

解决办法: kubectl edit prometheus k8s -n monitoring 将  selector 那一段删掉 , 然后由于使用 openebs.io/local 记得将 ReadWriteMany 改成 ReadWriteOnce 否则报错 openebs.io/local_openebs-localpv-provisioner-7bf6f464c-c6j58_77b994b8-de73-4b58-8d29-e0fc8d194a38  failed to provision volume with StorageClass "local": Only support ReadWriteOnce access mode

就算是这样, 重启也会失败,需要到存储那边把 待绑定的pvc删除掉, 系统会自动创建.

总结一下: 最终还是没有用起来istio, 看着是启动了, 但是访问不了. 解决办法是手工放开 kubeflow-dashboard-frontend 的服务进行访问 , 但这样的方式还是不行的, 里面的应用无法跳转, 还是要解决istio的问题

最终发现 gateway没有创建成功报错了 

Error from server: error when creating "gateway.yaml": admission webhook "validation.istio.io" denied the request: configuration is invalid: port name must be set: number:80  protocol:"HTTP"
Error from server: error when creating "gateway.yaml": admission webhook "validation.istio.io" denied the request: configuration is invalid: port name must be set: number:8080  protocol:"HTTP"

解决办法:  修改gateway.yaml 文件 然后重新部署 kubectl apply -f gateway.yaml

port:
number: 80
name: http # 👈 必须加这一行
protocol: HTTP

port:
number: 8080
name: http-8080 # 👈 必须加 name
protocol: HTTP

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/79641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos 7 安装 java 运行环境

centos 7 安装 java 运行环境 java -version java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)java -version java version "1.8.0_144" Java(TM) …

Linux系统管理与编程20:Apache

兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 做好网络和yum配置,用前面dns规划的www的IP进行。 #!/bin/bash #----------------------------------------------------------- # File Name: myWeb.sh # Version: 1.0 # …

.NET 在鸿蒙系统上的适配现状

目录 .NET 在鸿蒙系统上的适配现状 鸿蒙系统对虚拟机的限制与.NET的适配挑战 NativeAOT 在鸿蒙系统中的适配原理与实现方式 已知问题与解决方案:鸿蒙系统中的 syscall 限制 鸿蒙系统适配中的技术难点与解决方案 跨平台编译的挑战与应对策略 依赖库管理与兼容…

kotlin JvmName注解的作用和用途

1. JvmName 注解的作用 JvmName 是 Kotlin 提供的一个注解,用于在编译为 Java 字节码时自定义生成的类名或方法名。 作用对象: 文件级别(整个 .kt 文件)函数、属性、类等成员 主要用途: 控制 Kotlin 编译后生成的 JV…

树莓派4 yolo 11l.pt性能优化后的版本

树莓派4 使用 Picamera2 拍摄图像,然后通过 YOLO11l.pt 进行目标检测,并在实时视频流中显示结果。但当前的代码在运行时可能会比较卡顿,主要原因包括: picam2.capture_array() 是一个较慢的操作;YOLO 推理可能耗时较长…

Docker私有仓库实战:官方registry镜像实战应用

抱歉抱歉,离职后反而更忙了,拖了好久,从4月拖到现在,在学习企业级方案Harbor之前,我们先学习下官方方案registry,话不多说,详情见下文。 注意:下文省略了基本认证 TLS加密&#xff…

MySQL 安全架构:从渗透测试到合规审计

MySQL 安全架构:从渗透测试到合规审计 一、数据库安全的时代挑战与核心需求 在数据成为企业核心资产的今天,MySQL 面临的安全威胁日益复杂。据统计,2024 年全球数据库泄露事件中,关系型数据库占比高达 68%,其中 MySQ…

【基础复习笔记】计算机视觉

目录 一、计算机视觉基础 1. 卷积神经网络原理 2. 目标检测系列 二、算法与模型实现 1. 在PyTorch/TensorFlow中实现自定义损失函数或网络层的步骤是什么? 2. 如何设计一个轻量级模型用于移动端的人脸识别? 3. 描述使用过的一种注意力机制&#…

Django 项目的 models 目录中,__init__.py 文件的作用

在 Django 项目的models/init.py文件中,这些导入语句的主要作用是将各个模型类从不同的模块中导入到models包的命名空间中。这样做有以下几个目的: 简化导入路径 当你需要在项目的其他地方使用这些模型时,可以直接从models包导入&#xff0c…

实现一个简单的 TCP 客户端/服务器

注意: TCP 三次握手建立连接建立连接后,TCP 提供全双工的通信服务,也就是在同一个连接中,通信双方 可以在同一时刻同时写数据,相对的概念叫做半双工,同一个连接的同一时刻,只能由一方来写数据T…

专业课复习笔记 9

前言 学爽了。 为什么哈希函数的空间复杂度是 O(N) 我们实际使用的电话号码的数目是 N &#xff0c;理论上至多有 R 个电话号码&#xff0c;桶数组 bucket array 的容量是 M &#xff0c;满足条件 N < M < < R N<M<<R N<M<<R&#xff0c;因为动…

【论文阅读27】-TCN–BiLSTM -滑坡预测

《A Landslide Displacement Prediction Model Based on the ICEEMDAN Method and the TCN–BiLSTM Combined Neural Network》 发表于 Water 期刊&#xff0c;2023年。 &#x1f4cc; 主要内容概述 这篇论文提出了一种滑坡位移预测模型&#xff0c;结合了&#xff1a; ICEEM…

8b10b编解码仿真

一、基本概念 8B/10B编码&#xff08;8-bit to 10-bit encoding&#xff09;是一种将8位数据&#xff08;包括数据字符和控制字符&#xff09;转换为10位符号&#xff08;Symbol&#xff09;的编码技术&#xff0c;由IBM工程师Al Widmer和Peter Franaszek于1983年提出。其核心思…

23龙信服务器wp

中规中矩的一套服务器&#xff0c;比较简单 1.服务器系统的版本号是___。&#xff08;格式&#xff1a;1.1.1111&#xff09; 2.网站数据库的版本号是___。&#xff08;格式&#xff1a;1.1.1111&#xff09; 3.宝塔面板的“超时”时间是___分钟。&#xff08;格式&#xff1a;…

Redis 存储原理与数据模型(三)

目录 存储结构 存储转换 数据组织 hash 冲突 负载因子 扩容 缩容 渐进式rehash Redis 线程模型 单线程命令处理机制 为什么Redis 命令的单线程快 机制 优化 柔性数组 Redis reactor_io 多线程网络模型 存储结构 key-value键值对通过 hash 的方式存储到数组中value 主要…

langchain4j中使用milvus向量数据库做RAG增加索引

安装milvus向量数据库 官方网址 https://milvus.io/zh 使用docker安装milvus mkdir -p /data/docker/milvus cd /data/docker/milvus wget https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh#在docker中启动milvus sh standalone_emb…

UE5.3 C++ 房屋管理系统(一)

一.框架思路 1.如何加载。房屋管理&#xff0c;既然管理。就存在动态加载&#xff0c;和静态加载的考虑。如果是静态加载&#xff0c;就是在编辑器情况下放置&#xff0c;但这样方便了摆放&#xff0c;但管理就需要在开始是将所有的房屋找到加到管理者里。你无法决定拖入场景的…

4.1【LLaMA-Factory 实战】医疗领域大模型:从数据到部署的全流程实践

【LLaMA-Factory实战】医疗领域大模型&#xff1a;从数据到部署的全流程实践 一、引言 在医疗AI领域&#xff0c;构建专业的疾病诊断助手需要解决数据稀缺、知识专业性强、安全合规等多重挑战。本文基于LLaMA-Factory框架&#xff0c;详细介绍如何从0到1打造一个垂直领域的医…

解决LangChain4j报错HTTP/1.1 header parser received no bytes

问题描述 当使用langchain4j-open-ai调用自己部署的大模型服务时报错&#xff1a; public static void main(String[] args) {OpenAiChatModel model OpenAiChatModel.builder().apiKey("none").modelName("qwen2.5-instruct").baseUrl("http://19…

阿里云codeup以及本地gitclone+http

cmd命令行乱码问题、解决 chcp 65001 git代码提交 git add . git commit -m init git push origin master