kubekey 离线安装高可用 kubernetes 集群
1. 准备环境
版本:
kubernetes: v1.29.2
kubesphere: v3.4.1
kubekey: v3.1.1
说明:
- kubekey 只用于安装 kubernetes,因为 kubesphere 的配置在安装时经常需要变动,用 ks-installer 的 yaml 文件更好管理;
- ks-installer 用于安装 kubesphere,kubekey、ks-installer 分工明确;
- 本文在已有 harbor 仓库环境下,建议把镜像都放在公开仓库
library
中,如没有 harbor 仓库,按官方文档来即可;
1.1 机器准备
4 台机器,操作系统:Ubuntu 24.04/RHEL8/CentOS9
10.0.0.130 k8smaster-lv01
10.0.0.131 k8snode-lv01
10.0.0.132 k8snode-lv02
10.0.0.133 k8snode-lv03
10.0.0.140 lb.kubesphere.local
1.2 离线安装包准备
## kk create manifest --with-kubernetes v1.29.2
# kk create manifest # 最好在已有集群创建
这里提供一个可以直接使用的,因为系统安装包,我们自己处理,所以这里不用管系统的 iso 啥的地址。
manifest-sample.yaml
:
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Manifest
metadata:name: sample
spec:arches:- amd64operatingSystems:- arch: amd64type: linuxid: redversion: "Can't get the os version. Please edit it manually."osImage: Red Hat Enterprise Linux 8.10 (Ootpa)repository:iso:localPath: url:- arch: amd64type: linuxid: redversion: "Can't get the os version. Please edit it manually."osImage: Red Hat Enterprise Linux 8.9 (Ootpa)repository:iso:localPath: url:kubernetesDistributions:- type: kubernetesversion: v1.29.2components:helm: version: v3.14.3cni: version: v1.2.0etcd: version: v3.5.13containerRuntimes:- type: containerdversion: 1.7.13calicoctl:version: v3.27.3crictl: version: v1.29.0images:- docker.io/aledbf/kube-keepalived-vip:0.35- docker.io/bitnami/etcd:3.5.6-debian-11-r10- docker.io/bitnami/kubectl:1.29.2- docker.io/calico/cni:v3.27.3- docker.io/calico/node:v3.27.3- docker.io/coredns/coredns:1.9.3- docker.io/grafana/promtail:2.8.3- docker.io/kubesphere/examples-bookinfo-reviews-v1:1.16.2- docker.io/kubesphere/fluent-bit:v1.9.4- docker.io/kubesphere/k8s-dns-node-cache:1.22.20- docker.io/kubesphere/ks-apiserver:v3.4.1- docker.io/kubesphere/ks-installer:v3.4.1- docker.io/kubesphere/ks-installer:v3.4.1-patch.0- docker.io/kubesphere/ks-jenkins:v3.4.0-2.319.3-1- docker.io/kubesphere/kube-apiserver:v1.29.2- docker.io/kubesphere/kube-controller-manager:v1.29.2- docker.io/kubesphere/kube-proxy:v1.29.2- docker.io/kubesphere/kube-rbac-proxy:v0.11.0- docker.io/kubesphere/kube-scheduler:v1.29.2- docker.io/kubesphere/pause:3.9- docker.io/library/busybox:latest- docker.io/openebs/lvm-driver:1.5.0- docker.io/openebs/mayastor-agent-ha-node:v2.6.1- docker.io/openebs/mayastor-csi-node:v2.6.1- docker.io/openebs/mayastor-io-engine:v2.6.1- docker.io/openebs/zfs-driver:2.5.0- docker.io/opensearchproject/opensearch:2.6.0- docker.io/osixia/openldap:1.3.0- docker.io/prom/node-exporter:v1.3.1- docker.io/weaveworks/scope:1.13.0- quay.io/argoproj/argocd:v2.3.3- registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.10.0- registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.8.0registry:auths: {}
# 生成离线安装包
kk artifact export -m manifest-sample.yaml -o kubesphere.tar.gz
因为最近 docker hub 无法在大陆拉 image,可以使用我这个 Jenkinsfile 配合海外节点将 image 拉下来,传到私有 harbor 仓库。
mirror-images-to-harbor,当前直接在它上面提 issue 同步也可,只是一个 issue 只能同步一个 image。
当然,官方的这个 image 同步脚本 offline-installation-tool.sh 也可以,它是直接拉的 image,可能拉不动,你下面列表里的 image 得转成你拉得动的 image 地址:
以下为image列表,生成的 image 列表,并不完全,所以后面发现有漏的 image,随时使用 jenkins 把缺少的image同步下。
docker.io/aledbf/kube-keepalived-vip:0.35
docker.io/bitnami/etcd:3.5.6-debian-11-r10
docker.io/bitnami/kubectl:1.29.2
docker.io/calico/cni:v3.27.3
docker.io/calico/node:v3.27.3
docker.io/coredns/coredns:1.9.3
docker.io/grafana/promtail:2.8.3
docker.io/kubesphere/examples-bookinfo-reviews-v1:1.16.2
docker.io/kubesphere/fluent-bit:v1.9.4
docker.io/kubesphere/k8s-dns-node-cache:1.22.20
docker.io/kubesphere/ks-apiserver:v3.4.1
docker.io/kubesphere/ks-installer:v3.4.1
docker.io/kubesphere/ks-installer:v3.4.1-patch.0
docker.io/kubesphere/ks-jenkins:v3.4.0-2.319.3-1
docker.io/kubesphere/kube-apiserver:v1.29.2
docker.io/kubesphere/kube-controller-manager:v1.29.2
docker.io/kubesphere/kube-proxy:v1.29.2
docker.io/kubesphere/kube-rbac-proxy:v0.11.0
docker.io/kubesphere/kube-scheduler:v1.29.2
docker.io/kubesphere/pause:3.9
docker.io/library/busybox:latest
docker.io/openebs/lvm-driver:1.5.0
docker.io/openebs/mayastor-agent-ha-node:v2.6.1
docker.io/openebs/mayastor-csi-node:v2.6.1
docker.io/openebs/mayastor-io-engine:v2.6.1
docker.io/openebs/zfs-driver:2.5.0
docker.io/opensearchproject/opensearch:2.6.0
docker.io/osixia/openldap:1.3.0
docker.io/prom/node-exporter:v1.3.1
docker.io/weaveworks/scope:1.13.0
quay.io/argoproj/argocd:v2.3.3
registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.10.0
registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.8.0
1.3 安装依赖和配置
系统源即可安装的依赖包,所有节点都需要执行
Ubuntu 系:
apt-get install -y socat conntrack ebtables ipset chrony
RHEL 系:
yum install -y socat conntrack ebtables ipset chrony
因为使用私有 Harbor 仓库,所有节点配置 host:
10.25.23.102 harbor.ops.shenzhen.com
1.4 安装负载均衡 keepalived + haproxy
负载均衡节点安装 keepalived haproxy
apt-get -y install keepalived haproxy
# yum -y install keepalived haproxy
新建用户
useradd -r -u 139 -g 100 -s /sbin/nologin keepalived_script
配置 keepalived
/etc/keepalived/keepalived.conf
(注意配置中注释,不同节点权重不同)内容:
! /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {script_user keepalived_scriptenable_script_security router_id LVS_DEVELmax_auto_priority 99
}
vrrp_script check_apiserver {script "/etc/keepalived/check_apiserver.sh"interval 3weight -2fall 10rise 2
}vrrp_instance VI_1 {# 只配置一个 MASTER,其它的配置为 BACKUPstate MASTER# 注意网卡名interface ens192virtual_router_id 60# MASTER 权重最高,尽量全部设置为不同的权重priority 101authentication {auth_type PASSauth_pass k8s}virtual_ipaddress {10.0.0.140}track_script {check_apiserver}
}
/etc/keepalived/check_apiserver.sh
内容:
#!/bin/bash# if check error then repeat check for 12 times, else exit
err=0
for k in $(seq 1 12)
docheck_code=$(curl -k https://localhost:6443)if [[ $check_code == "" ]]; thenerr=$(expr $err + 1)sleep 5continueelseerr=0breakfi
doneif [[ $err != "0" ]]; then# if apiserver is down send SIG=1echo 'apiserver error!'exit 1
else# if apiserver is up send SIG=0echo 'apiserver normal!'exit 0
fi
chmod a+x /etc/keepalived/check_apiserver.sh
配置 haproxy
/etc/haproxy/haproxy.cfg
内容:
globallog 127.0.0.1 local0 errmaxconn 50000uid 138 gid 138#daemonpidfile haproxy.piddefaultsmode httplog 127.0.0.1 local0 errmaxconn 50000retries 3timeout connect 5stimeout client 30stimeout server 30stimeout check 2slisten admin_statsmode httpbind 0.0.0.0:1080log 127.0.0.1 local0 errstats refresh 30sstats uri /haproxy-statusstats realm Haproxy\ Statisticsstats auth admin:k8sstats hide-versionstats admin if TRUEfrontend k8s-httpsbind 0.0.0.0:8443mode tcp#maxconn 50000default_backend k8s-httpsbackend k8s-httpsmode tcpbalance roundrobinserver master1 10.0.0.130:6443 weight 1 maxconn 1000 check inter 2000 rise 2 fall 3
systemctl start haproxy
systemctl start keepalived
systemctl enable haproxy
systemctl enable keepalived
2. kubernetes 集群安装
2.1 kk 安装
kk 命令是二进制的,从安装好的机器,直接拷贝到安装集群的 master 机器即可。
curl -sfL https://get-kk.kubesphere.io | VERSION=v3.1.1 sh -
mv kk /usr/local/sbin/
kk version --show-supported-k8s# 生成 ssh key
ssh-keygen -t ed25519 -C "master"
# 公钥添加到其它节点
ssh-copy-id -i ~/.ssh/id_ed25519.pub root@其它节点IP
2.2 kk 配置
mkdir k8s
cd k8s
# kk create config --with-kubernetes v1.29.2
直接使用如下配置文件 config-sample.yaml
,然后修改下节点信息,如下:
内容:
apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:name: sample
spec:hosts:- {name: k8smaster-lv01, address: 10.0.0.130, internalAddress: 10.0.0.130, user: root, privateKeyPath: "~/.ssh/id_ed25519"}- {name: k8snode-lv01, address: 10.0.0.131, internalAddress: 10.0.0.131, user: root, privateKeyPath: "~/.ssh/id_ed25519"}- {name: k8snode-lv02, address: 10.0.0.132, internalAddress: 10.0.0.132, user: root, privateKeyPath: "~/.ssh/id_ed25519"}- {name: k8snode-lv03, address: 10.0.0.133, internalAddress: 10.0.0.133 , user: root, privateKeyPath: "~/.ssh/id_ed25519"}roleGroups:etcd:- k8smaster-lv01- k8snode-lv01- k8snode-lv02control-plane: - k8smaster-lv01worker:- k8snode-lv01- k8snode-lv02- k8snode-lv03controlPlaneEndpoint:## Internal loadbalancer for apiservers # internalLoadbalancer: haproxydomain: lb.kubesphere.localaddress: "10.0.0.140"port: 8443kubernetes:version: v1.29.2clusterName: cluster.localautoRenewCerts: truecontainerManager: containerdetcd:type: kubekeynetwork:plugin: calicokubePodsCIDR: 10.233.64.0/18kubeServiceCIDR: 10.233.0.0/18## multus support. https://github.com/k8snetworkplumbingwg/multus-cnimultusCNI:enabled: falseregistry:privateRegistry: "harbor地址"namespaceOverride: ""registryMirrors: [""]# insecureRegistries: ["非httpsimage地址"] # 如果是 http,请取消注释#auths:# "harbor地址":# username: ''# password: ''# skipTLSVerify: true # Allow contacting registries over HTTPS with failed TLS verification.# plainHTTP: true # Allow contacting registries over HTTP.addons: []
2.3 kk 安装集群
检查时间,如果时间未同步,重启 chronyd 服务。
date
systemctl stop chronyd
systemctl start chronyd
chronyc tracking
# chronc -a makestep # 强制同步
集群安装:
kk create cluster -f config-sample.yaml -a kubesphere.tar.gz
如果使用的 harbor 是 http 的,kubekey 内部是使用的 https 的仓库,可能会中断安装。我们再次安装,前面二进制文件已经缓存至 kubekey 安装目录,然后不加 -a
参数,就是在线安装,只是使用内部仓库的在线安装方式。
再次集群安装:
kk create cluster -f config-sample.yaml
有可能需要处理的地方
/etc/containerd/config.toml
,里面改成私有仓库地址
sandbox_image = "harbor地址/library/kubesphere/pause:3.9"
- 如果你需要 coredns 添加 hosts,注意
/etc/resolv.conf
里面要设置 DNS,否则 coredns 可能无法启动。
kubectl edit cm coredns -n kube-system
:
data:Corefile: |.:53 {errorshealth {lameduck 5s}hosts /etc/coredns/hosts {IP 域名fallthrough}
kubectl edit cm nodelocaldns -n kube-system
:
}.:53 {errorscache 30reloadloopbind 169.254.25.10# forward . /etc/resolv.confforward . 10.233.0.3 {force_tcp}prometheus :9253}
2.4 kk 安装集群失败处理
在 master 节点执行,注意确认正确的节点和危险性!!!
kk delete cluster -f config-sample.yaml
3. kubesphere 安装
根据官方文档来即可。
curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/cluster-configuration.yaml
curl -L -O https://github.com/kubesphere/ks-installer/releases/download/v3.4.1/kubesphere-installer.yaml
spec:persistence:storageClass: ""authentication:jwtSecret: ""local_registry: 你的harbor地址/library # 镜像都放在 library 下并保持原来目录结构
sed -i "s#^\s*image: kubesphere.*/ks-installer:.*# image: 你的harbor地址/library/kubesphere/ks-installer:v3.4.1#" kubesphere-installer.yaml
安装:
kubectl apply -f kubesphere-installer.yaml
kubectl apply -f cluster-configuration.yaml
最容易出问题的就是镜像拉取,随时查看并解决镜像问题。
kubectl get pod -A
kubectl describe pod <pod名> -n <namespace>
4. 暴露 kubesphere 控制台
4.1 安装 metallb
推荐 helm 方式安装,这里略,详情参考 metallb官方文档。
安装好后配置一个全局 IP 池。
4.2 打开全局网关
使用 http://某一节点IP:30880
登录 ks 后,在集群设置中,打开全局网关,注意使用 Loadbalancer
类型暴露,因为有全局 IP 池可用,按理说随便选一个负载均衡厂商即可,因为没有 metallb 选项。
4.3 ingress 暴露 ks 控制台
console-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:annotations:nginx.ingress.kubernetes.io/upstream-vhost: ks-console.kubesphere-system.svc.cluster.localname: ks-consolenamespace: kubesphere-system
spec:rules:- host: ks域名http:paths:- backend:service:name: ks-consoleport:number: 80path: /pathType: ImplementationSpecific
kubectl apply -f console-ingress.yaml
参考资料:
[1] https://www.kubesphere.io/zh/docs/v3.4/installing-on-linux/introduction/air-gapped-installation/
[2] https://www.kubesphere.io/zh/docs/v3.4/installing-on-kubernetes/on-prem-kubernetes/install-ks-on-linux-airgapped/
相关文章:
kubekey 离线安装高可用 kubernetes 集群
1. 准备环境 版本: kubernetes: v1.29.2 kubesphere: v3.4.1 kubekey: v3.1.1 说明: kubekey 只用于安装 kubernetes,因为 kubesphere 的配置在安装时经常需要变动,用 ks-installer 的 yaml 文件更好管理;ks-installe…...
大数据面试题之Hive(2)
目录 Hive的join操作原理,leftjoin、right join、inner join、outer join的异同? Hive如何优化join操作 Hive的mapjoin Hive语句的运行机制,例如包含where、having、group by、orderby,整个的执行过程? Hive使用的时候会将数据同步到HD…...
求推荐几款http可视化调试工具?
Postman 非常流行的API调试工具,适用于构建、测试和文档化APIs。它支持各种HTTP方法,有强大的集合和环境管理功能,以及代码生成能力。 BB-API 是一款旨在提升开发效率的工具,它专注于提供简约、完全免费且功能强大的HTTP模拟请…...

Python逻辑控制语句 之 判断语句--if else结构
1.if else 的介绍 if else :如果 ... 否则 .... 2.if else 的语法 if 判断条件: 判断条件成立,执行的代码 else: 判断条件不成立,执行的代码 (1)else 是关键字, 后⾯需要 冒号 (2)存在冒号…...

word2016中新建页面显示出来的页面没有页眉页脚,只显示正文部分。解决办法
问题描述:word2016中新建页面显示出来的页面没有页眉页脚,只显示正文部分。设置了页边距也不管用。 如图1 图1 解决: 点击“视图”——“多页”——“单页”,即可。如图2操作 图2 结果展示:如图3 图3...
8.javaSE基础进阶_泛型generics(无解通配符?+上下界统配符superextends)
文章目录 泛型generics一.泛型简介二.泛型类1.泛型方法 三.泛型接口四.泛型进阶1.*<?>无解通配符*2.上界通配符 < ? extends E>3.下界通配符 < ? super E>4.泛型擦除 泛型generics 一.泛型简介 JDK5引入,一种安全机制,编译时检测不匹配类型 特点: 将数…...

酒店客房管理系统(Java+MySQL)
技术栈 Java: 作为主要编程语言。Swing GUI: 用于开发图形用户界面。MySQL: 作为数据库管理系统。JDBC: 用于连接和操作MySQL数据库。 功能要点 管理登录认证 系统提供管理员登录认证功能。通过用户名和密码验证身份,确保只有授权的用户可以访问和管理酒店客房信…...

S32K3 --- Wdg(内狗) Mcal配置
前言 看门狗的作用是用来检测程序是否跑飞,进入死循环。我们需要不停地喂狗,来确保程序是正常运行的,一旦停止喂狗,意味着程序跑飞,超时后就会reset复位程序。 一、Wdg 1.1 WdgGeneral Wdg Disable Allowed : 启用此参数后,允许在运行的时候禁用看门狗 Wdg Enable User…...

LeetCode 算法:二叉树的层序遍历 c++
原题链接🔗:二叉树的层序遍历 难度:中等⭐️⭐️ 题目 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:roo…...

博途TIA Portal「集成自动化软件」下载安装,TIA Portal 灵活多变的编程环境
在编程领域,博途TIA Portal以其卓越的编程工具和灵活多变的编程环境,为众多用户提供了前所未有的便利。这款软件不仅支持多种编程语言,如梯形图(Ladder Diagram)、功能块图(Function Block Diagram…...

火了10年的电脑监控软件有哪些?盘点8款热门的电脑监控软件
电脑监控软件领域经历了多年的发展,一些软件因为其稳定的功能、良好的用户体验和不断更新的技术支持,得以在市场上保持长期的热度和用户基础。以下是几款在过去十年里广受好评且持续流行的内网监控软件: 1.安企神:由河北安企神网络…...

入门Java爬虫:认识其基本概念和应用方法
Java爬虫初探:了解它的基本概念与用途,需要具体代码示例 随着互联网的快速发展,获取并处理大量的数据成为企业和个人不可或缺的一项任务。而爬虫(Web Scraping)作为一种自动化的数据获取方法,不仅能够快速…...

Flask新手入门(一)
前言 Flask是一个用Python编写的轻量级Web应用框架。它最初由Armin Ronacher作为Werkzeug的一个子项目在2010年开发出来。Werkzeug是一个综合工具包,提供了各种用于Web应用开发的工具和函数。自发布以来,Flask因其简洁和灵活性而迅速受到开发者的欢迎。…...

Grafana-11.0.0 在线部署教程
Grafana-11.0.0 在线部署教程 环境: 操作系统: ubuntugrafana版本: 11.0.0 (建议不要按照最新版)grafana要求的系统配置不高,建议直接部署在监控服务器上,比如zabbix服务器、prometheus服务器…...

pytorch-01
加载mnist数据集 one-hot编码实现 import numpy as np import torch x_train np.load("../dataset/mnist/x_train.npy") # 从网站提前下载数据集,并解压缩 y_train_label np.load("../dataset/mnist/y_train_label.npy") x torch.tensor(y…...

梦想CAD二次开发
1.mxdraw简介 mxdraw是一个HTML5 Canvas JavaScript框架,它在THREE.js的基础上扩展开发,为用户提供了一套在前端绘图更为方便,快捷,高效率的解决方案,mxdraw的实质为一个前端二维绘图平台。你可以使用mxdraw在画布上绘…...
Eureka的介绍与使用
Eureka 是 Netflix 开源的一款服务注册与发现组件,在微服务架构中扮演着重要的角色。 一、Eureka 的介绍 工作原理 服务注册:各个微服务在启动时,会向 Eureka Server 发送注册请求,将自身的服务名、实例名、IP 地址、端口等信息注…...

ChatGPT之母:AI自动化将取代人类,创意性工作或将消失
目录 01 AI取代创意性工作的担忧 1.1 CTO说了啥 02 AI已开始大范围取代人类 01 AI取代创意性工作的担忧 几天前的采访中,OpenAI的CTO直言,AI可能会扼杀一些本来不应该存在的创意性工作。 近来一篇报道更是印证了这一观点。国外科技媒体的老板Miller用…...
【深度学习驱动流体力学】湍流仿真到深度学习湍流预测
目录 一、湍流项目结构二、三个OpenFOAM湍流算例1. motorBike背景和目的文件结构和关键文件使用和应用湍流仿真深度学习湍流预测深度学习湍流预测的挑战和应用结合湍流仿真与深度学习2. pitzDaily背景和目的文件结构和关键文件使用和应用3. pitzDailyMapped背景和目的文件结构和…...

如何从0构建一款类似pytest的工具
Pytest主要模块 Pytest 是一个强大且灵活的测试框架,它通过一系列步骤来发现和运行测试。其核心工作原理包括以下几个方面:测试发现:Pytest 会遍历指定目录下的所有文件,找到以 test_ 开头或 _test.py 结尾的文件,并且…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...