k8s入门到实战(十四)—— Helm详细介绍及使用

news2024/12/23 10:01:10

Helm 使用

Helm 是一个 k8s 应用的包管理工具,类似于 Ubuntu 的 APT 和 CentOS 中的 YUM。

Helm 使用 chart 来封装 k8s 应用的 yaml 文件,我们只需要设置自己的参数,就可以实现自动化的快速部署应用。

Helm 通过打包的方式,支持发布的版本管理和控制,很大程度上简化了 k8s 应用的部署和管理。

Helm 有一个跟 docker Hub 类似的应用中心(https://artifacthub.io/),我们可以在里面找到我们需要部署的应用。

helm 概述

Helm 是一个流行的 k8s 包管理工具,它用于简化在 k8s 上部署、管理和扩展应用程序的过程。Helm 允许用户定义可重复使用的 k8s 部署模板,称为 “charts”,并使用这些 charts 来创建、配置和管理 k8s 中的应用程序。

Helm 由两个核心组件组成:

  1. Helm Client(helm):这是与用户交互的命令行工具。用户可以使用 Helm Client 来搜索、安装、升级和删除 charts,并管理 Helm Repositories(存储 charts 的位置)。

  2. Tiller(已弃用):在 Helm 2.x 版本中,Tiller 是 Helm 的服务端组件,负责将 charts 渲染为 k8s 资源对象,并将它们部署到 k8s 集群中。然而,在 Helm 3.x 版本中,Tiller 已被移除,取而代之的是直接通过 Helm Client 与 k8s API 交互。

Helm 的主要优势在于它提供了模板化的部署方式,使得应用程序的部署过程更加可重复和可管理。通过使用 Helm,您可以轻松地创建自定义的 charts,并轻松地在不同的环境中部署和管理应用程序,从而提高了开发人员和运维人员的效率。

helm 优点

Helm 在 k8s 中具有许多优点,以下是其中一些主要优点:

  • 简化部署和管理:Helm 允许用户将应用程序打包为可重复使用的 charts,简化了应用程序的部署和管理过程。通过使用 Helm,用户可以轻松地创建、安装、升级和删除应用程序,而无需手动处理底层的 k8s 资源对象。
  • 可重用的部署模板:Helm Charts 是可重用的部署模板,可以定义应用程序的整个部署配置,包括容器、服务、配置文件、存储卷等。这样,用户可以通过 Charts 快速创建和部署应用程序,减少了编写和维护大量 YAML 文件的工作量。
  • 版本控制和回滚:Helm 具备版本控制功能,可以管理不同版本的 Charts 和应用程序。这使得用户可以轻松地进行升级、回滚和管理应用程序的不同版本,提高了应用程序的可控性和可靠性。
  • 社区支持和生态系统:Helm 是一个开源项目,有一个活跃的社区支持和贡献。Helm 社区维护了一个官方的 Charts 仓库,其中包含了大量常用的应用程序 Charts,用户可以直接使用这些 Charts 来部署和管理应用程序。此外,还有许多第三方 Charts 仓库可供选择,扩展了 Helm 的功能和应用场景。
  • 可扩展性和灵活性:Helm 具有良好的扩展性和灵活性,用户可以根据自己的需求定制 Charts 和插件,以满足特定的部署和管理需求。用户可以根据需要配置应用程序的各种参数和选项,以适应不同的环境和场景。

总的来说,Helm 提供了简化和标准化 k8s 应用程序部署和管理的解决方案,使得用户能够更高效地进行应用程序的开发、部署和运维工作。

安装 helm

安装地址:https://helm.sh/zh/docs/intro/install/

# 国内下载不了
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

我们手动下载安装包

wget https://get.helm.sh/helm-v3.10.0-linux-amd64.tar.gz
[root@k8s-master home]# ll
total 14196
-rw-r--r-- 1 root root 14530566 Mar 27 04:05 helm-v3.10.0-linux-amd64.tar.gz
drwxr-xr-x 2 root root     4096 Mar 27 02:31 k8s

下载完成后,解压

# 解压压缩包
[root@k8s-master home]# tar -zxvf helm-v3.10.0-linux-amd64.tar.gz
linux-amd64/
linux-amd64/helm
linux-amd64/LICENSE
linux-amd64/README.md
[root@k8s-master home]# cd linux-amd64/
[root@k8s-master linux-amd64]# ll
total 43992
-rwxr-xr-x 1 3434 3434 45031424 Sep 22  2022 helm
-rw-r--r-- 1 3434 3434    11373 Sep 22  2022 LICENSE
-rw-r--r-- 1 3434 3434     3367 Sep 22  2022 README.md
# 在解压目中找到helm程序,移动到需要的目录中
[root@k8s-master linux-amd64]# mv helm /usr/local/bin
# 出现以下版本信息代表安装成功
[root@k8s-master linux-amd64]# helm version
version.BuildInfo{Version:"v3.10.0", GitCommit:"ce66412a723e4d89555dc67217607c6579ffcb21", GitTreeState:"clean", GoVersion:"go1.18.6"}

添加一个稳定仓库

# 添加稳定仓库
[root@k8s-master linux-amd64]# helm repo add bitnami https://charts.bitnami.com/bitnami
"bitnami" has been added to your repositories
# 验证仓库是否添加完成
[root@k8s-master linux-amd64]# helm repo list
NAME   	URL                               
bitnami	https://charts.bitnami.com/bitnami

三大概念

Chart 代表着 Helm 包。

  • 它包含运行应用程序需要的所有资源定义和依赖,相当于模版。
  • 类似于 maven 中的 pom.xml、Apt中的 dpkb 或 Yum 中的 RPM

Repository(仓库)用来存放和共享 charts。

  • 不用的应用放在不同的仓库中。

Release 是运行 chart 的实例。

一个 chart 通常可以在同一个集群中安装多次。

每一次安装都会创建一个新的 release,release name 不能重复。

下载一个 mysql 来启动

helm 的仓库中心:https://artifacthub.io/,相当于 docker hub

进入这个页面搜索 mysql,里面有下载的命令以及配置参数的详细信息

下载命令:容器名为my-mysql

helm install my-mysql bitnami/mysql

参数:

  • --set:后面跟 key=value 的格式,用于配置使用容器的一些参数,key 在页面中有详细介绍
  • --version:指定容器的 charts 的版本,默认是最新版

接下来我们下载一个 mysql 玩玩:

helm install my-mysql --set-string auth.rootPassword="123456" bitnami/mysql
[root@k8s-master linux-amd64]# helm install my-mysql --set-string auth.rootPassword="123456" bitnami/mysql
NAME: my-mysql
LAST DEPLOYED: Wed Mar 27 04:24:17 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: mysql
CHART VERSION: 10.1.0
APP VERSION: 8.0.36

# helm安装项目之后,它会帮我们生成一个详细的使用文档
** Please be patient while the chart is being deployed **

Tip:

  Watch the deployment status using the command: kubectl get pods -w --namespace default

# 在k8s网络中如何访问该服务
Services:

  echo Primary: my-mysql.default.svc.cluster.local:3306

Execute the following to get the administrator credentials:

  echo Username: root
  MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default my-mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d)

# 连接到数据库的方式
To connect to your database:

  1. Run a pod that you can use as a client:

      kubectl run my-mysql-client --rm --tty -i --restart='Never' --image  docker.io/bitnami/mysql:8.0.36-debian-12-r8 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash

  2. To connect to primary service (read/write):

      mysql -h my-mysql.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"

WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:
  - primary.resources
  - secondary.resources
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/

它的本质是在我们的 k8s 集群上启动了一个 pod

[root@k8s-master ~]# kubectl get pod
NAME         READY   STATUS    RESTARTS            AGE
my-mysql-1   1/1     Running   0                   3m14s # stafulset类型的,可以部署有状态应用。
# **Release** 是运行 chart 的实例。
[root@k8s-master ~]# helm ls
NAME    	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART       	APP
my-mysql	default  	1       	2024-3-27 13:38:53.228239944 +0800 CST	deployed	mysql-10.1.0	8.0.36     

探究 helm

[root@k8s-master k8s]# helm create hello-world
Creating hello-world
[root@k8s-master k8s]# cd hello-world/
[root@k8s-master hello-world]# ll
total 16
drwxr-xr-x 2 root root 4096 Mar 27 04:44 charts			# 当前我们创建的这个charts是否依赖与其他的charts,如果有就在这里面
-rw-r--r-- 1 root root 1147 Mar 27 04:44 Chart.yaml		# charts信息
drwxr-xr-x 3 root root 4096 Mar 27 04:44 templates		# k8s 资源文件, 模版 {{ 插值 }}
-rw-r--r-- 1 root root 1878 Mar 27 04:44 values.yaml	# 具体的值
[root@k8s-master hello-world]# cd templates/
[root@k8s-master templates]# ll
total 32
-rw-r--r-- 1 root root 1856 Mar 27 04:44 deployment.yaml
-rw-r--r-- 1 root root 1822 Mar 27 04:44 _helpers.tpl
-rw-r--r-- 1 root root  928 Mar 27 04:44 hpa.yaml
-rw-r--r-- 1 root root 2087 Mar 27 04:44 ingress.yaml
-rw-r--r-- 1 root root 1763 Mar 27 04:44 NOTES.txt
-rw-r--r-- 1 root root  328 Mar 27 04:44 serviceaccount.yaml
-rw-r--r-- 1 root root  373 Mar 27 04:44 service.yaml
drwxr-xr-x 2 root root 4096 Mar 27 04:44 tests

本质里面就是一堆 k8s 的资源文件,helm 启动这个 charts,相当于帮我们执行了 apply -f

我们可以检测这个 chart 是否有问题

helm lint charts目录
# 检测 charts 包是否有问题
[root@k8s-master ~]# helm lint ./hello-world/
==> Linting ./hello-world/
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, 0 chart(s) failed

这样就是没有问题

将 Helm Charts 渲染为 k8s 资源对象的 yaml 文件,而不进行实际的部署操作

helm template charts包名

这个命令非常有用,可以方便地查看 Charts 的最终生成结果

[root@k8s-master k8s]# helm template hello-world/
---
# Source: hello-world/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: release-name-hello-world
  labels:
    helm.sh/chart: hello-world-0.1.0
    app.kubernetes.io/name: hello-world
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.16.0"
    app.kubernetes.io/managed-by: Helm
---
# Source: hello-world/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: release-name-hello-world
  labels:
    helm.sh/chart: hello-world-0.1.0
    app.kubernetes.io/name: hello-world
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.16.0"
    app.kubernetes.io/managed-by: Helm
spec:
  type: ClusterIP
  ports:
    - port: 80
      targetPort: http
      protocol: TCP
      name: http
  selector:
    app.kubernetes.io/name: hello-world
    app.kubernetes.io/instance: release-name
---
# Source: hello-world/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: release-name-hello-world
  labels:
    helm.sh/chart: hello-world-0.1.0
    app.kubernetes.io/name: hello-world
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.16.0"
    app.kubernetes.io/managed-by: Helm
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: hello-world
      app.kubernetes.io/instance: release-name
  template:
    metadata:
      labels:
        app.kubernetes.io/name: hello-world
        app.kubernetes.io/instance: release-name
    spec:
      serviceAccountName: release-name-hello-world
      securityContext:
        {}
      containers:
        - name: hello-world
          securityContext:
            {}
          image: "nginx:1.16.0"
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /
              port: http
          readinessProbe:
            httpGet:
              path: /
              port: http
          resources:
            {}
---
# Source: hello-world/templates/tests/test-connection.yaml
apiVersion: v1
kind: Pod
metadata:
  name: "release-name-hello-world-test-connection"
  labels:
    helm.sh/chart: hello-world-0.1.0
    app.kubernetes.io/name: hello-world
    app.kubernetes.io/instance: release-name
    app.kubernetes.io/version: "1.16.0"
    app.kubernetes.io/managed-by: Helm
  annotations:
    "helm.sh/hook": test
spec:
  containers:
    - name: wget
      image: busybox
      command: ['wget']
      args: ['release-name-hello-world:80']
  restartPolicy: Never

安装

[root@k8s-master k8s]# helm install helloworld hello-world/
NAME: helloworld
LAST DEPLOYED: Wed Mar 27 04:56:06 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=hello-world,app.kubernetes.io/instance=helloworld" -o jsonpath="{.items[0].metadata.name}")
  export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  echo "Visit http://127.0.0.1:8080 to use your application"
  kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT

可以直接通过仓库找到 charts 来安装!

也可以自己编写 charts 包来安装!git 下载 charts

helm 部署 mysql 主从复制集群

https://artifacthub.io/packages/helm/bitnami/mysql

安装过程中有两种方式传递配置数据:

  • -f (或--values):使用 yaml 文件覆盖默认配置。可以指定多次,优先使用最右边的文件。
  • --set:通过命令行的方式对指定项进行覆盖。
auth:
  rootPassword: "123456"

primary:
  persistence:
    size: 2Gi
    enabled: true

secondary:
  replicaCount: 2
  persistence:
    size: 2Gi
    enabled: true

architecture: replication

如果同时使用两种方式,则 --set中的值会被合并到 -f中,但是 --set中的值优先级更高。

主从复制原理:

通过部署无头服务(Headless Service)将写操作指向固定的数据库。

部署一个 Service 用来做读操作的负载均衡。

数据库之间通过同步程序保持数据一致。

在这里插入图片描述

初始化容器(Init Containers)

初始化容器(Init Containers)是一种特殊容器,它在 Pod 内的应用容器启动之前运行。

初始化容器未执行完毕或以错误状态退出,Pod 内的应用容器不会启动。

初始化容器需要在 initContainers 中定义,与 containers 同级。

基于上面的特性,初始化容器通常用于

  • 生成配置文件
  • 执行初始化命令或脚本
  • 执行健康检查(检查依赖的服务是否处于 Ready 或健康 Health 的状态)

这里有两个初始化容器。

  • init-mysql为 MySQL 实例分配server-id,并将mysql-0的配置文件设置为primary.cnf,其他副本设置为replica.cnf
  • clone-mysql从前一个Pod中获取备份的数据文件放到自己的数据目录下

在这里插入图片描述

边车 Sidecar

Pod 中运行了2个容器,MySQL 容器和一个充当辅助工具的 xtrabackup 容器,我们称之为边车(sidecar)。

Xtrabackup 是一个开源的 MySQL 备份工具,支持在线热备份(备份时不影响数据读写),是目前各个云厂商普遍使用的 MySQL 备份工具。

在这里插入图片描述

sidecar容器负责将备份的数据文件发送给下一个Pod,并在副本服务器初次启动时,使用数据文件完成数据的导入。

MySQL 使用bin-log同步数据,但是,当数据库运行一段时间后,产生了一些数据,这时候如果我们进行扩容,创建了一个新的副本,有可能追溯不到bin-log的源头(可能被手动清理或者过期自动删除),因此需要将现有的数据导入到副本之后,再开启数据同步,sidecar只负责数据库初次启动时完成历史数据导入,后续的数据 MySQL 会自动同步。

补充:端口转发,临时暴露服务

[root@k8s-master ~]# kubectl get all
NAME                          READY   STATUS    RESTARTS            AGE
pod/my-db-mysql-primary-0     1/1     Running   0                   15m
pod/my-db-mysql-secondary-0   1/1     Running   0                   15m
pod/my-db-mysql-secondary-1   1/1     Running   0                   13m
pod/nginx                     1/1     Running   1 (<invalid> ago)   91m

NAME                                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/kubernetes                       ClusterIP   10.96.0.1       <none>        443/TCP    4d17h
service/my-db-mysql-primary              ClusterIP   10.96.140.100   <none>        3306/TCP   15m
service/my-db-mysql-primary-headless     ClusterIP   None            <none>        3306/TCP   15m
service/my-db-mysql-secondary            ClusterIP   10.96.64.24     <none>        3306/TCP   15m
service/my-db-mysql-secondary-headless   ClusterIP   None            <none>        3306/TCP   15m

NAME                                     READY   AGE
statefulset.apps/my-db-mysql-primary     1/1     15m
statefulset.apps/my-db-mysql-secondary   2/2     15m
[root@k8s-master ~]# kubectl port-forward pods/my-db-mysql-primary-0 --address=192.168.0.111 33060:3306
Forwarding from 192.168.0.111:33060 -> 3306
Handling connection for 33060
Handling connection for 33060

这个命令是前台命令,退出后,端口转发就失效了。常用来做测试。

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

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

相关文章

谭浩强第五版C语言课后习题(编程题)+答案

谭浩强第五版作为初学C语言必读的一本教材&#xff0c;课后习题具有非常大的参考价值&#xff0c;也是很多高校期末考试或者考研的重要参考。在这里我整理了一部分个人认为比较重要的编程题&#xff0c;供大家作参考 1.输入两个数&#xff0c;求他们的最大公约数和最小公倍数&…

Cesium.js综合实验

Cesium.js综合实验 1 概述 Cesium是一个跨平台、跨浏览器的展示三维地球和地图的开源 JavaScript 库&#xff0c;是AGI公司计算机图形开发小组与2011年研发的三维地球和地图可视化开源JavaScript库&#xff0c;Cesium一词来源于化学元素铯&#xff0c;铯是制造原子钟的关键元…

VUE+ elementUI 表头动态渲染的两种方法

效果&#xff1a; <template><div><el-alert title"比较麻烦的写法" type"error"></el-alert><el-table border style"width:300px;" :data"tabelData"><el-table-columnv-for"column in colum…

如何在群晖NAS搭建bitwarden密码管理软件并实现无公网IP远程访问

前言 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊如何在群晖NAS搭建bitwarden密码管理软件并实现无公网IP远程访问&#xff0c;希望大家能觉得实用&#xff01; 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&am…

访问学者如何申请国外信用卡?

作为一名访问学者&#xff0c;如果你计划在国外长期居住或短期停留&#xff0c;并希望申请国外信用卡&#xff0c;这可能是一个相当实用的工具。国外信用卡不仅可以帮助你在海外购物和旅行时更加便利&#xff0c;还能建立起你在国际金融体系中的信用记录&#xff0c;为未来的金…

鼠标不动了怎么办?鼠标不能移动解决方法

鼠标不能移动有可能是鼠标坏了&#xff0c;或者是电脑的软件和硬件有冲突等原因造成。最近有小伙伴就咨询了有关鼠标的问题&#xff0c;昨天鼠标还能使用&#xff0c;不知道为什么今天就突然不能用了。那么我们在排除鼠标坏掉了的情况下&#xff0c;试试对鼠标进行修复吧。下面…

请你记住这3款国产软件,免费又实用,它们值得收藏

闲话不多说&#xff0c;直上干货。 1、坚果云 坚果云是一款极具良心的网盘软件&#xff0c;其免费版本同样无广告干扰&#xff0c;界面设计简约大气&#xff0c;在文件上传与下载速度上&#xff0c;坚果云完全不限速&#xff0c;这一点远超其他同类产品。 用户可以在手机、电…

粗略总结AI大模型学习需要了解的要点

目录 一、概念简介 二、兴起原因 三、相关要点 四、不足之处 五、总结 一、概念简介 AI大模型学习是指利用大规模数据集和强大计算能力进行深度学习模型的训练。随着数据的爆炸式增长和计算资源的提升&#xff0c;AI大模型学习成为了现代人工智能研究的重要方向。 二、兴起…

徽宇阀门现已加入2024第13届生物发酵展会

参展企业介绍 温州徽宇阀门有限公司是专业生产高精度不锈钢过滤器设备及卫生级阀门、管道、管件及泵等系列产品。秉承严谨、实用的作风,所有产品均选用高品质的原材料。公司对产品品质的要求没有止境,生产全部采用CNC等国际一流的数控加工中心设备&#xff0c;所有产品均按照IS…

Linux系统使用Docker部署Portainer结合内网穿透实现远程管理容器和镜像

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

VR全景赋能智慧农业,打造沉浸式种植体验平台

随着人口的增长&#xff0c;传统农业也正在面临着不一样的挑战&#xff0c;加上很多人对农业的固有印象&#xff0c;很少有年轻人愿意下到农田里&#xff0c;那么该如何提高产量、降低成本以及引导年轻人深刻感受现代农业成为了急需解决的问题。 随着城市化脚步的推进&#xff…

代码随想录笔记|C++数据结构与算法学习笔记-栈和队列(〇)|stack、queue、单调队列和优先队列(priority_queue)、大顶堆和小顶堆

文章目录 stack容器stack 基本概念常用接口构造函数赋值操作数据存取大小操作 queue容器queue常用接口构造函数&#xff1a;赋值操作数据存取大小操作 单调队列优先队列大顶堆小顶堆 stack容器 stack 基本概念 栈中只有顶端的元素才可以被外界使用&#xff0c;因此栈不允许有遍…

ubuntu22.04安装dnsmasq最详细易懂

安装 准确的来说&#xff0c;不是安装&#xff0c;因为默认ubuntu22版本自带的有dnsmasq&#xff0c;所以我们不用下载了&#xff0c;直接使用即可&#xff0c;否则就会产生冲突&#xff0c;这块吃了大亏。 最好在root账户下操作&#xff0c;没有设置root密码的&#xff0c;可…

AWS SES发送邮件时常见的错误及解决方法?

AWS SES发送邮件如何做配置&#xff1f;使用AWS SES发信的限制&#xff1f; 在使用AWS SES发送邮件时&#xff0c;可能会遇到一些常见的错误。AokSend将介绍一些常见的AWS SES发送邮件错误及其相应的解决方法&#xff0c;帮助用户更好地利用AWS SES进行邮件发送。 AWS SES发送…

海外盲盒APP:加速开拓海外盲盒市场

盲盒是年轻群体消费中增速较快的模式&#xff0c;从前几年起&#xff0c;盲盒就在我国掀起了一股热潮&#xff0c;市场得到了迅速发展。 如今&#xff0c;盲盒经济已经遍布到了全球&#xff0c;尤其是在亚洲地区&#xff0c;盲盒消费呈现出了高速发展态势&#xff0c;在海外市…

利用RWKV-Runner初步感受一下ai的世界

最近又听到群里的高手在讨论RWKV-Runner&#xff0c;于是没忍住&#xff0c;就想试试&#xff0c;没想到第一关就卡住了。 从群里大咖上传的RWKV-Runner_windows_x64.exe文件开始吧&#xff0c;又找了个虚拟机&#xff0c;直接放在桌面上运行一下&#xff0c;结果就跳出一堆文…

百度谷歌301强引蜘蛛池效果怎么样

301强引蜘蛛池效果怎么样 本文 虚良SEO 原创&#xff0c;转载保留链接&#xff01;网址&#xff1a;百度谷歌301强引蜘蛛池效果怎么样 - 虚良SEO 随着搜索引擎优化&#xff08;SEO&#xff09;技术的发展&#xff0c;越来越多的网站开始采用蜘蛛池技术来提高网站的排名和流量。…

解决方案:如何安装neo4j软件

文章目录 一、安装JDK二、安装neo4j 一、安装JDK 第一步先安装JDK&#xff0c;因为neo4j环境需要JDK&#xff0c;过程比较多&#xff0c;截图如下&#xff1a; 安装JDK网址 https://www.oracle.com/java/technologies/downloads winR&#xff0c;输入cmd&#xff0c;再输入j…

MySQL安装和配置(超详细)

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;&#x1f468;&#x1f3fb;‍&#x1f393;告别&#xff0c;今天 &#x1f4d4;高质量专栏 &#xff1a;☕java趣味之旅 欢迎&#x1f64f;点赞&#x1f5e3;️评论&#x1f4e5;收藏&#x1f493;关注 &#x1f496;衷心的希…

Wagtail-基于Python Django的内容管理系统CMS实现公网访问

目录 ⛳️推荐 前言 1. 安装并运行Wagtail 1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具 3. 实现Wagtail公网访问 4. 固定Wagtail公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给…