Kubernetes 之GVR与GVK详解

news2024/11/23 18:31:03

本文尝试从GVR与GVK对比、常见的GVR和GVK操作、GVK设计精髓、CRD工作流程等方面对GVK和GVR进行详细分析。希望对您有用!

一、Kubernetes 之GVR与GVK对比

在 Kubernetes 中,GVRGVK 是两个重要的概念,用于唯一标识和操作不同的资源类型和实例。以下是它们的特点简介以及各自的应用场景。

GroupVersionResource (GVR)

特点简介
  • Group:API 组的名称。例如,apps 组包含 Deployment 资源,batch 组包含 Job 资源。核心组的资源(如 Pod、Service 等)没有组名,默认使用空字符串。
  • Version:资源的版本,例如 v1v1beta1 等。
  • Resource:资源的名称,通常是复数形式。例如,Pods 的资源名称是 pods,Deployments 的资源名称是 deployments

GVR 用于唯一标识 Kubernetes 中的某种资源类型,特别是在动态客户端和操作工具中,以便精确指定和访问资源。

应用场景
  1. 动态客户端操作

    • 使用 GVR 在动态客户端中进行 CRUD(创建、读取、更新、删除)操作。

    • 例如,通过动态客户端获取一个特定命名空间中的所有 Deployments:

      gvr := schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "deployments"}
      deployments, err := dynamicClient.Resource(gvr).Namespace("default").List(context.TODO(), metav1.ListOptions{})
      
  2. 资源操作工具

    • 使用 GVR 开发操作 Kubernetes 资源的工具,例如 kubectl 插件。

    • 例如,开发一个工具,列出所有命名空间中的 Pods:

      kubectl get pods.v1.
      

GroupVersionKind (GVK)

特点简介
  • Group:API 组的名称。例如,apps 组包含 Deployment 资源,batch 组包含 Job 资源。核心组的资源(如 Pod、Service 等)没有组名,默认使用空字符串。
  • Version:资源的版本,例如 v1v1beta1 等。
  • Kind:资源的种类,通常是单数形式。例如,Pod、Deployment、Service 等。

GVK 用于唯一标识 Kubernetes 中的某种资源类型,特别是在描述资源的元数据和处理特定类型的资源时使用。

应用场景
  1. 资源定义和描述

    • 使用 GVK 在代码中定义和描述特定类型的资源。例如,定义一个 Unstructured 对象并设置其 GVK:

      gvk := schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "Deployment"}
      unstructuredObj := &unstructured.Unstructured{}
      unstructuredObj.SetGroupVersionKind(gvk)
      
  2. 资源转换和处理

    • 使用 GVK 在不同版本的 API 之间进行资源转换和处理。

    • 例如,在控制器或操作器中,根据资源的 GVK 进行特定处理:

      switch gvk.Kind {
      case "Deployment":
          // 处理 Deployment 资源
      case "Pod":
          // 处理 Pod 资源
      }
      
  3. 元数据操作

    • 使用 GVK 操作资源的元数据,例如通过 GVK 获取资源的 schema 或进行元数据验证。
    • 例如,在 API 服务器中根据 GVK 获取资源的 OpenAPI schema 进行验证。

总结

  • GVR 更侧重于资源的实际操作,特别是动态客户端和工具中使用,用于指定和操作特定类型的资源实例。
  • GVK 更侧重于资源的定义和描述,特别是在控制器、操作器以及元数据操作中使用,用于唯一标识和处理特定类型的资源。

理解 GVR 和 GVK 的区别和应用场景,有助于在开发 Kubernetes 应用和工具时更有效地操作和处理不同类型的资源。

二、常见GVR操作

在 Kubernetes 中,GroupVersionResource(GVR)操作涉及对特定资源实例的创建、读取、更新和删除(CRUD)操作。以下是一些常见的 GVR 操作示例,以及如何使用这些操作管理 Kubernetes 资源。

常见的 GVR 操作

  1. 创建资源(Create)
  2. 读取资源(Read)
  3. 更新资源(Update)
  4. 删除资源(Delete)
  5. 列出资源(List)

使用 Kubernetes 动态客户端进行 GVR 操作

以下示例使用 Kubernetes 动态客户端(dynamic.Interface)进行 GVR 操作。

导入必要的包
import (
    "context"
    "fmt"
    "k8s.io/client-go/dynamic"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/rest"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/apimachinery/pkg/runtime/schema"
    "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)
创建 Kubernetes 客户端
// 创建动态客户端
config, err := rest.InClusterConfig()
if err != nil {
    panic(err.Error())
}
dynamicClient, err := dynamic.NewForConfig(config)
if err != nil {
    panic(err.Error())
}
定义 GVR
gvr := schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "deployments"}
namespace := "default"

1. 创建资源

deployment := &unstructured.Unstructured{
    Object: map[string]interface{}{
        "apiVersion": "apps/v1",
        "kind":       "Deployment",
        "metadata": map[string]interface{}{
            "name": "my-deployment",
        },
        "spec": map[string]interface{}{
            "replicas": 1,
            "selector": map[string]interface{}{
                "matchLabels": map[string]interface{}{
                    "app": "nginx",
                },
            },
            "template": map[string]interface{}{
                "metadata": map[string]interface{}{
                    "labels": map[string]interface{}{
                        "app": "nginx",
                    },
                },
                "spec": map[string]interface{}{
                    "containers": []interface{}{
                        map[string]interface{}{
                            "name":  "nginx",
                            "image": "nginx:1.14.2",
                        },
                    },
                },
            },
        },
    },
}

result, err := dynamicClient.Resource(gvr).Namespace(namespace).Create(context.TODO(), deployment, metav1.CreateOptions{})
if err != nil {
    panic(err.Error())
}
fmt.Printf("Created deployment %q.\n", result.GetName())

2. 读取资源

result, err := dynamicClient.Resource(gvr).Namespace(namespace).Get(context.TODO(), "my-deployment", metav1.GetOptions{})
if err != nil {
    panic(err.Error())
}
fmt.Printf("Found deployment %q.\n", result.GetName())

3. 更新资源

// 获取现有 Deployment
deployment, err := dynamicClient.Resource(gvr).Namespace(namespace).Get(context.TODO(), "my-deployment", metav1.GetOptions{})
if err != nil {
    panic(err.Error())
}

// 修改 Deployment 的副本数量
unstructured.SetNestedField(deployment.Object, int64(2), "spec", "replicas")

updatedDeployment, err := dynamicClient.Resource(gvr).Namespace(namespace).Update(context.TODO(), deployment, metav1.UpdateOptions{})
if err != nil {
    panic(err.Error())
}
fmt.Printf("Updated deployment %q.\n", updatedDeployment.GetName())

4. 删除资源

err = dynamicClient.Resource(gvr).Namespace(namespace).Delete(context.TODO(), "my-deployment", metav1.DeleteOptions{})
if err != nil {
    panic(err.Error())
}
fmt.Println("Deleted deployment.")

5. 列出资源

list, err := dynamicClient.Resource(gvr).Namespace(namespace).List(context.TODO(), metav1.ListOptions{})
if err != nil {
    panic(err.Error())
}
for _, d := range list.Items {
    fmt.Printf(" * %s\n", d.GetName())
}

这些示例展示了如何使用 Kubernetes 动态客户端执行常见的 GVR 操作。这些操作允许开发人员以编程方式管理 Kubernetes 集群中的资源,提供了高度的灵活性和自动化能力。

三、常见GVK操作

在 Kubernetes 中,GroupVersionKind(GVK)操作主要涉及对资源类型的定义、描述和处理。以下是一些常见的 GVK 操作示例,以及如何使用这些操作管理和操作 Kubernetes 资源类型。

常见的 GVK 操作

  1. 定义和描述资源类型
  2. 处理特定资源类型
  3. 资源类型的转换
  4. 控制器和操作器中处理资源
  5. 验证和元数据操作

使用 Kubernetes 动态客户端和 Unstructured 对象进行 GVK 操作

以下示例使用 Kubernetes 动态客户端(dynamic.Interface)和 Unstructured 对象进行 GVK 操作。

导入必要的包
import (
    "context"
    "fmt"
    "k8s.io/client-go/dynamic"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/rest"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/apimachinery/pkg/runtime/schema"
    "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)
创建 Kubernetes 客户端
// 创建动态客户端
config, err := rest.InClusterConfig()
if err != nil {
    panic(err.Error())
}
dynamicClient, err := dynamic.NewForConfig(config)
if err != nil {
    panic(err.Error())
}
定义 GVK
gvk := schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "Deployment"}
namespace := "default"

1. 定义和描述资源类型

使用 GVK 定义一个 Unstructured 对象,并设置其 GVK。

deployment := &unstructured.Unstructured{
    Object: map[string]interface{}{
        "apiVersion": "apps/v1",
        "kind":       "Deployment",
        "metadata": map[string]interface{}{
            "name": "my-deployment",
        },
        "spec": map[string]interface{}{
            "replicas": 1,
            "selector": map[string]interface{}{
                "matchLabels": map[string]interface{}{
                    "app": "nginx",
                },
            },
            "template": map[string]interface{}{
                "metadata": map[string]interface{}{
                    "labels": map[string]interface{}{
                        "app": "nginx",
                    },
                },
                "spec": map[string]interface{}{
                    "containers": []interface{}{
                        map[string]interface{}{
                            "name":  "nginx",
                            "image": "nginx:1.14.2",
                        },
                    },
                },
            },
        },
    },
}
deployment.SetGroupVersionKind(gvk)

2. 处理特定资源类型

在控制器或操作器中,根据 GVK 进行特定处理。

switch gvk.Kind {
case "Deployment":
    fmt.Println("Handling Deployment resource")
    // 处理 Deployment 资源
case "Pod":
    fmt.Println("Handling Pod resource")
    // 处理 Pod 资源
}

3. 资源类型的转换

在不同版本的 API 之间进行资源转换。

oldGVK := schema.GroupVersionKind{Group: "apps", Version: "v1beta1", Kind: "Deployment"}
newGVK := schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "Deployment"}

deployment.SetGroupVersionKind(oldGVK)
// 转换逻辑
deployment.SetGroupVersionKind(newGVK)

4. 控制器和操作器中处理资源

在控制器中,使用 GVK 来处理特定类型的资源。

func handleResource(obj *unstructured.Unstructured) {
    gvk := obj.GroupVersionKind()
    switch gvk.Kind {
    case "Deployment":
        // 处理 Deployment 资源
    case "Pod":
        // 处理 Pod 资源
    }
}

5. 验证和元数据操作

使用 GVK 操作资源的元数据,例如通过 GVK 获取资源的 schema 或进行元数据验证。

func validateResource(gvk schema.GroupVersionKind, obj *unstructured.Unstructured) error {
    // 验证逻辑
    return nil
}

if err := validateResource(gvk, deployment); err != nil {
    fmt.Printf("Validation failed: %v\n", err)
} else {
    fmt.Println("Validation succeeded")
}

这些示例展示了如何使用 Kubernetes 动态客户端和 Unstructured 对象执行常见的 GVK 操作。这些操作允许开发人员以编程方式管理和操作 Kubernetes 中的资源类型,提供了高度的灵活性和自动化能力。

四、GVK设计精髓

设计精髓的 GVK(GroupVersionKind)在 Kubernetes 中主要体现在以下几个方面:

  1. 唯一标识性

    • Group:定义了资源所属的 API 组,例如 appsbatch 等。
    • Version:指定了资源的 API 版本,例如 v1v1beta1 等。
    • Kind:描述了资源的种类,例如 DeploymentPodService 等。

    GVK 的组合唯一确定了 Kubernetes 中的每一种资源类型,确保了资源在 API 中的唯一性和可识别性。

  2. 代码和配置的一致性

    • GVK 在 Kubernetes 中被广泛用于描述资源类型和处理资源对象。它在 Kubernetes API 对象的定义、客户端代码中的操作、控制器和操作器中的处理,以及 YAML 或 JSON 配置文件中的规范化表示中都有重要作用。
    • 这种一致性确保了在不同的开发和运维场景中,能够准确地理解和操作各种 Kubernetes 资源类型。
  3. 版本控制和演进

    • GVK 允许 Kubernetes API 对象进行版本控制和演进。通过定义不同的版本和 API 组,可以逐步引入新的特性和改进,同时保持对旧版本的兼容性和支持。
    • 这种设计允许 Kubernetes 在不同的发行版之间进行 API 的逐步演进,同时保持对现有用户和工具的兼容性。
  4. 动态性和扩展性

    • GVK 的设计使得 Kubernetes 能够支持动态扩展和自定义资源的添加。通过定义新的 API 组和版本,并指定新的 Kind,可以向 Kubernetes 集群中引入自定义的资源类型和控制器。
    • 这种灵活性允许 Kubernetes 在不断发展的应用场景中保持其可扩展性和适应性。

GVK 的设计精髓在于其清晰而灵活的资源标识和描述机制,通过组、版本和种类的结合,确保了 Kubernetes 在管理和操作资源时的一致性、可扩展性和版本控制能力。这种设计使得 Kubernetes 能够成为一个强大且灵活的容器编排平台,并支持广泛的应用场景和工作负载。

五、Kubernetes API组织结构

Kubernetes API 的组织结构可以通过 Mermaid 图表来表示其层次和关系。以下是一个简单的 Mermaid 图表示例,展示了 Kubernetes 中常见的 API 组、版本和资源类型的层次结构。

组织结构

Core API
Apps API
Batch API
Networking API
Storage API
Authentication API
RBAC API
Extensions API
Custom Resources
v1
v1, v1beta1
v1, v1beta1
v1
v1
v1
v1
v1, v1beta1, ...
v1
Pod, Node, Service, Namespace, ConfigMap, Secret, Endpoint, Event, ...
Deployment, StatefulSet, DaemonSet, ReplicaSet, DeploymentConfig, ...
Job, CronJob, ...
NetworkPolicy, Ingress, ServiceAccount, ...
PersistentVolume, PersistentVolumeClaim, StorageClass, ...
TokenReview, BoundRole, BoundClusterRole, BoundServiceAccount, ...
Role, ClusterRole, RoleBinding, ClusterRoleBinding, ...
Ingress, PodSecurityPolicy, HorizontalPodAutoscaler, ...
...

解释说明

  • API 组(API Groups):每个 API 组都有相应的版本和资源类型。

    • Core API:包含核心的基础资源,如 Pod、Node、Service 等。
    • Apps API:包含应用管理相关的资源,如 Deployment、StatefulSet 等。
    • Batch API:包含批处理作业相关的资源,如 Job、CronJob 等。
    • Networking API:包含网络策略相关的资源,如 NetworkPolicy 等。
    • Storage API:包含存储管理相关的资源,如 StorageClass、PersistentVolumeClaim 等。
    • Authentication API:包含身份验证相关的资源,如 TokenReview 等。
    • Other API Groups:包含其他不同功能和扩展的 API 组,如 RBAC、Metrics 等。
  • API 版本(API Versions):每个 API 组可以有多个版本,每个版本定义了一组资源类型。

  • 资源类型(Resources):每个 API 版本定义了一组具体的资源类型,例如 Pod、Deployment 等,这些资源类型是 Kubernetes 中的基本构建块。

这种 Mermaid 图表可以帮助你更直观地理解 Kubernetes API 的组织结构,包括各 API 组、版本和资源类型之间的层次关系和依赖关系。

六、Kubernetes GVK历史演进

Kubernetes中的GVK代表Group-Version-Kind,是API对象的关键标识。它的历史演进可以简要总结如下:

  1. 初始阶段:

    • Kubernetes最初版本中并没有GVK的概念。
    • 所有的API对象都是以单一的版本标识,例如 v1.Pod
  2. 引入Group和Version:

    • 随着Kubernetes的发展,引入了Group的概念,使得API对象可以根据其用途和领域进行组织。
    • 例如,apps/v1.Deployment中的 apps 是Group,v1 是Version,Deployment 是Kind。
  3. 扩展机制的引入:

    • Kubernetes引入了自定义资源定义(Custom Resource Definitions,CRD),允许用户创建自己的自定义资源和控制器。
    • 这进一步推动了GVK的概念的扩展和普及,使得不同组织和项目可以定义和管理自己的API对象。
  4. 演进和管理:

    • 随着Kubernetes的不断发展,GVK的管理和演进变得越来越重要。
    • 版本管理、兼容性和扩展性成为Kubernetes API设计的重要考虑因素,以支持各种工作负载和生态系统。

总体来说,GVK的演进反映了Kubernetes本身的发展,从最初的简单对象标识到支持复杂、多样化API对象和自定义资源的标准化和管理。

七、一种特殊的GVK–CRD

CRD(Custom Resource Definition)可以被看作是一种特殊的 Group-Version-Kind(GVK)的实现。在 Kubernetes 中,所有的 API 对象都由 GVK 组成,它们用于唯一标识和管理不同类型的资源。

具体来说:

  • Kind(类型): 在 CRD 的上下文中,Kind 指的是自定义资源的类型,例如 MyCustomResource

  • Group(组): CRD 定义的时候指定了 Group,这样可以把自定义资源与 Kubernetes 原生资源区分开来,例如 example.com

  • Version(版本): CRD 可以支持多个版本,每个版本都有自己的 API 结构定义(Spec),例如 v1v2 等。

因此,CRD 可以被视为一种特殊的 GVK,它定义了一种新的 API 对象类型,使得用户可以像操作 Kubernetes 内置资源一样,操作和管理自定义资源。

CRD(Custom Resource Definition)在Kubernetes中的应用场景非常广泛,并且提供了许多优势。以下是一些典型的应用场景和优势:

应用场景

  1. 自定义业务逻辑:

    • 用户可以根据业务需求定义特定的资源类型,例如电商平台的订单(Order)、库存(Inventory)等。
  2. 扩展 Kubernetes 功能:

    • 第三方提供的控制器(如运营商、服务网格)可以使用CRD来扩展Kubernetes的功能,例如定义自定义的负载均衡策略、服务发现等。
  3. 简化配置管理:

    • 用户可以使用CRD来封装复杂的配置和管理操作,例如数据库的备份和恢复、CI/CD流水线的定义等。
  4. 应用编排:

    • 使用CRD来定义和管理复杂的应用程序,例如微服务架构中的服务依赖关系、滚动更新策略等。
  5. 事件驱动架构:

    • 定义自定义事件和触发器,基于CRD实现事件驱动的自动化工作流和操作。

优势

  1. 增强的可扩展性:

    • CRD允许用户定义和管理任意类型的资源,极大地增强了Kubernetes的可扩展性,能够满足多样化的业务需求。
  2. 一致性和标准化:

    • 自定义资源的定义和管理遵循Kubernetes的API标准,保证了一致性和标准化,易于学习和使用。
  3. 自动化和自愈能力:

    • 通过自定义控制器(operator)和CRD,可以实现自动化的管理和自愈能力,例如自动扩展、重启失败的实例等。
  4. 与Kubernetes原生功能无缝集成:

    • CRD完全融入Kubernetes生态系统,可以与其他Kubernetes原生资源(如Pod、Service、ConfigMap)无缝集成,利用现有的功能和工具。
  5. 丰富的生态系统支持:

    • Kubernetes社区和第三方提供了丰富的CRD和operator,实现了各种功能和应用场景,例如数据库操作、监控和告警、服务网格等。
  6. 灵活的版本管理:

    • CRD支持多版本管理,使得用户可以在不同的版本之间进行平滑升级和迁移,确保应用的稳定性和兼容性。

示例

例如,一个常见的应用场景是使用CRD和operator来管理数据库的生命周期:

  • 定义CRD: 创建一个自定义资源类型 Database,包含数据库配置、备份策略等。
  • 编写控制器: 编写一个operator,监听 Database 资源的变化,并根据定义的配置自动创建、更新和删除数据库实例。
  • 应用和管理: 用户可以通过 kubectl 命令创建和管理 Database 资源,operator 会自动执行相应的操作。

这个场景展示了CRD和operator如何简化和自动化复杂的管理任务,同时保持与Kubernetes原生功能的良好集成。

八、CRD工作流程图

以下是一个描述CRD工作流程的Mermaid图表,展示了CRD从定义到应用的各个步骤:

控制器操作
用户操作
控制器监听资源变化
控制器执行相应操作
定义CRD
应用CRD
创建自定义资源实例
编写控制器
部署控制器
开始
结束

在这个图表中:

  • 用户首先定义CRD,然后将其应用到Kubernetes集群中。
  • 接着,用户创建自定义资源实例,并编写相应的控制器逻辑。
  • 用户部署控制器,控制器开始监听自定义资源的变化。
  • 当检测到资源变化时,控制器执行相应的操作,完成自动化管理。

这个流程展示了CRD在Kubernetes中的工作机制,从定义到应用,以及控制器如何实现自动化管理。

完。
希望对您有用!关注锅总,及时获得更多花里胡哨的运维实用操作!

九、一个秘密

在这里插入图片描述
锅总个人博客

https://gentlewok.blog.csdn.net/

锅总微信公众号
在这里插入图片描述

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

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

相关文章

添加用户页面(Flask+前端+MySQL整合)

首先导入Flask库和pymysql库。Flask用于创建Web应用程序,pymysql用于连接和操作MySQL数据库。 from flask import Flask, render_template, request import pymysql创建一个Flask应用实例。__name__参数告诉Flask使用当前模块作为应用的名称。 app Flask(__name_…

Java代码基础算法练习-判断学生成绩等级-2024.06.28

任务描述: 输入一个学生的成绩(成绩大于等于 0 并小于等于 100),根据成绩判断学生成绩的等级。 60 分以下不及格;60-70 分为及格;70-80 分为中等;80-90 分为良好;90 分以上为优秀。 …

洞察用户喜好:使用TikTok API获取用户喜欢视频列表

一、引言 TikTok,作为全球最受欢迎的短视频社交平台之一,不仅让用户能够展示自我、分享生活,也为品牌和企业提供了深入了解用户喜好的机会。了解用户喜欢哪些类型的视频,不仅有助于品牌更好地把握目标用户群体,还能为…

《Redis设计与实现》阅读总结-4

第 17 章 集群 Redis集群是Redis提供的分布式数据库方案,集群通过分片(sharding)来进行数据共享,并提供复制和故障转移的功能 一、命令 CLUSTER MEET命令:用来连接不同的开启集群支持的 Redis 节点,以进入…

使用鸿蒙HarmonyOs NEXT 开发 快速开发 简单的购物车页面

目录 资源准备:需要准备三张照片:商品图、向下图标、金钱图标 1.显示效果: 2.源码: 资源准备:需要准备三张照片:商品图、向下图标、金钱图标 1.显示效果: 定义了一个购物车页面的布局&#x…

SHELL脚本学习(十二)sed进阶

一、多行命令 概述 sed 编辑器的基础命令都是对一行文本进行操作。如果要处理的数据分布在多行中,sed基础命令是没办法处理的。 幸运的是,sed编辑器的设计人员已经考虑了这个问题的解决方案。sed编辑器提供了3个处理多行文本的特殊命令。 命令描述N加…

提高LabVIEW程序可靠性

​提高LabVIEW程序的可靠性是确保系统稳定运行、减少故障和维护成本的重要措施。以下从多个方面详细分析如何提高LabVIEW程序的可靠性 1. 选择合适的架构 1.1 状态机架构 适用情况: 多状态、多步骤操作。 具体例子:在一个自动测试系统中,…

我在高职教STM32——时钟系统与延时控制(1)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就…

44.商城系统(二十五):k8s基本操作,ingress域名访问,kubeSphere可视化安装

上一章我们已经配置好了k8s集群,如果没有配置好先去照着上面的配。 一、k8s入门操作 1.部署一个tomcat,测试容灾恢复 #在主机器上执行 kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8#查看k8s中的所有资源 kubectl get all kubectl get all -o wide#查看po…

VsCode:配置TypeScript开发环境

一、前提 电脑已经安装了npm 何如安装npm,请点击查看Node.js、npm常用命令、安装多个node版本 提醒:下文讲解操作是在mac 系统进行的,TypeScript简称:ts 二、安装TypeScript 在终端里执行命令:npm install -g typescr…

LLM大模型实战 —— DB-GPT阿里云部署指南

简介: DB-GPT 是一个实验性的开源应用,它基于FastChat,并使用vicuna-13b作为基础模型, 模型与数据全部本地化部署, 绝对保障数据的隐私安全。 同时此GPT项目可以直接本地部署连接到私有数据库, 进行私有数据处理, 目前已支持SQL生…

Swift 6:导入语句上的访问级别

文章目录 前言示例启用 AccessLevelOnImport破坏性变更采用这些更改总结前言 SE-0409 提案引入了一项新功能,即允许使用 Swift 的任何可用访问级别标记导入声明,以限制导入的符号可以在哪些类型或接口中使用。由于这些变化,现在可以将依赖项标记为对当前源文件(private 或…

数据分析三剑客-Matplotlib

数据分析三剑客 数据分析三剑客通常指的是在Python数据分析领域中,三个非常重要的工具和库:Pandas、NumPy和Matplotlib。Pandas主要负责数据处理和分析,NumPy专注于数值计算和数学运算,而Matplotlib则负责数据可视化。这三个库相…

友力科技广州数据中心搬迁

搬迁工作内容 1.搬迁技术工作 1)确定机房搬迁的负责人以及负责人的联系方式,保证在搬迁的过程中统一指挥管理。 2)确定服务器的数量,服务器的型号,服务器的配置等,如有需要,联系相关服务器的供货商或者厂家提供技术支持…

HBuilder X 小白日记01

1.创建项目 2.右击项目&#xff0c;可创建html文件 3.保存CtrlS&#xff0c;运行一下 我们写的内容&#xff0c;一般是写在body里面 注释的快捷键&#xff1a;Ctrl/ h标签 <h1> 定义重要等级最高的(最大)的标题。<h6> 定义最小的标题。 H标签起侧重、强调的作用…

Pinia详解

文章目录 简介特点用法1. 安装Pinia2. 注册Pinia Store3. 创建Pinia Store4. 使用Pinia Store 区别 Vuex详解 Pinia是一个基于Vue 3的状态管理库&#xff0c;专为Vue 3设计。它提供了一种简单、直观且可扩展的方式来组织和访问应用程序的状态。Pinia的设计灵感来源于Vuex&#…

数据资产管理的艺术:构建智能化、精细化的数据资产管理体系,从数据整合、分析到决策支持,为企业提供一站式的数据资产解决方案,助力企业把握数字时代的新机遇

一、引言 在数字化浪潮席卷全球的今天&#xff0c;数据已经成为企业最重要的资产之一。如何高效、安全地管理这些海量数据&#xff0c;从中提取有价值的信息&#xff0c;并将其转化为决策支持&#xff0c;是每个企业都必须面对的挑战。本文将探讨数据资产管理的艺术&#xff0…

中国高分辨率土壤质地数据(1KM)

土壤中各粒级占土壤重量的百分比组合&#xff0c;叫做土壤质地。土壤质地是土壤的最基本物理性质之一&#xff0c;对土壤的各种性状&#xff0c;如土壤的通透性、保蓄性、耕性以及养分含量等都有很大的影响是评价土壤肥力和作物适宜性的重要依据。 中国土壤质地空间分布数据是根…

ChatTTS超真实自然的语音合成模型

项目介绍 ChatTTS是一款专为优化对话场景而生的语音生成模型&#xff0c;尤其匹配大型语言模型&#xff08;LLM&#xff09;的交互需求&#xff0c;以及生成对话式音频、视频旁白等应用场景&#xff0c;无缝覆盖中英文双语。 通过汲取约100,000小时的高质量中英语音数据进行深…

全球首个真人级数字人,开源了!

全球首个2D真人级AIGC**实时渲染数字人模型开源了&#xff01; 这是数字人技术界的一次大爆炸&#xff0c;我们即将迈入一个全新的交互时代&#xff0c;一个由数字人代理引领的时代。 DUIX&#xff08;Dialogue User Interface System&#xff09;&#xff0c;这个由硅基智能…