搜索

第 3 章 分布式追踪平台(Tempo)

download PDF

3.1. 安装

安装分布式追踪平台 (Tempo) 需要 Tempo Operator,并选择最适合您的用例的部署类型:

  • 对于微服务模式,在专用的 OpenShift 项目中部署 TempoStack 实例。
  • 对于单体模式,在专用的 OpenShift 项目中部署 TempoMonolithic 实例。
重要

使用对象存储需要在部署 TempoStack 或 TempoMonolithic 实例前设置受支持的对象存储并为对象存储凭据创建一个 secret。

3.1.1. 安装 Tempo Operator

您可以使用 Web 控制台或命令行安装 Tempo Operator。

3.1.1.1. 使用 Web 控制台安装 Tempo Operator

您可以通过 Web 控制台的 Administrator 视图安装 Tempo Operator。

先决条件

  • 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform Web 控制台。
  • 对于 Red Hat OpenShift Dedicated,您必须使用具有 dedicated-admin 角色的帐户登录。
  • 您已配置了支持的供应商所需的对象存储:{odf-full}, MinIO, Amazon S3, Azure Blob Storage, Google Cloud Storage。如需更多信息,请参阅"对象存储设置"。

    警告

    对象存储是必需的,它没有包含在分布式追踪平台(Tempo) 中。在安装分布式追踪平台 (Tempo) 前,您必须通过受支持的供应商选择和设置对象存储。

流程

  1. 进入 Operators OperatorHub 并搜索 Tempo Operator
  2. 选择 由红帽提供的 Tempo Operator

    重要

    以下选择是此 Operator 的默认预设置:

    • Update channel stable
    • Installation mode All namespaces on the cluster
    • Installed Namespace openshift-tempo-operator
    • Update approval Automatic
  3. 选择 Enable Operator recommended cluster monitoring on this Namespace 复选框。
  4. 选择 Install Install View Operator

验证

  • 在已安装 Operator 页面的 Details 选项卡中,在 ClusterServiceVersion details 下验证安装 Status 是否为 Succeeded

3.1.1.2. 使用 CLI 安装 Tempo Operator

您可以从命令行安装 Tempo Operator。

先决条件

  • 集群管理员具有 cluster-admin 角色的活跃 OpenShift CLI (oc) 会话。

    提示
    • 确保您的 OpenShift CLI (oc) 版本为最新版本,并与您的 OpenShift Container Platform 版本匹配。
    • 运行 oc login:

      $ oc login --username=<your_username>
  • 您已配置了支持的供应商所需的对象存储:{odf-full}, MinIO, Amazon S3, Azure Blob Storage, Google Cloud Storage。如需更多信息,请参阅"对象存储设置"。

    警告

    对象存储是必需的,它没有包含在分布式追踪平台(Tempo) 中。在安装分布式追踪平台 (Tempo) 前,您必须通过受支持的供应商选择和设置对象存储。

流程

  1. 运行以下命令,为 Tempo Operator 创建项目:

    $ oc apply -f - << EOF
    apiVersion: project.openshift.io/v1
    kind: Project
    metadata:
      labels:
        kubernetes.io/metadata.name: openshift-tempo-operator
        openshift.io/cluster-monitoring: "true"
      name: openshift-tempo-operator
    EOF
  2. 运行以下命令来创建 Operator 组:

    $ oc apply -f - << EOF
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: openshift-tempo-operator
      namespace: openshift-tempo-operator
    spec:
      upgradeStrategy: Default
    EOF
  3. 运行以下命令来创建订阅:

    $ oc apply -f - << EOF
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: tempo-product
      namespace: openshift-tempo-operator
    spec:
      channel: stable
      installPlanApproval: Automatic
      name: tempo-product
      source: redhat-operators
      sourceNamespace: openshift-marketplace
    EOF

验证

  • 运行以下命令检查 Operator 状态:

    $ oc get csv -n openshift-tempo-operator

3.1.2. 安装 TempoStack 实例

您可以使用 Web 控制台或命令行安装 TempoStack 实例。

3.1.2.1. 使用 Web 控制台安装 TempoStack 实例

您可以从 Web 控制台的 Administrator 视图安装 TempoStack 实例。

先决条件

  • 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform Web 控制台。
  • 对于 Red Hat OpenShift Dedicated,您必须使用具有 dedicated-admin 角色的帐户登录。
  • 您已配置了支持的供应商所需的对象存储:{odf-full}, MinIO, Amazon S3, Azure Blob Storage, Google Cloud Storage。如需更多信息,请参阅"对象存储设置"。

    警告

    对象存储是必需的,它没有包含在分布式追踪平台(Tempo) 中。在安装分布式追踪平台 (Tempo) 前,您必须通过受支持的供应商选择和设置对象存储。

流程

  1. 进入 Home Projects Create Project,为在后续步骤中创建的 TempoStack 实例创建一个项目。
  2. 进入 Workloads Secrets Create From YAML,在您为 TempoStack 实例创建的项目中为您的对象存储桶创建一个 secret。如需更多信息,请参阅"对象存储设置"。

    Amazon S3 和 MinIO 存储的 secret 示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: minio-test
    stringData:
      endpoint: http://minio.minio.svc:9000
      bucket: tempo
      access_key_id: tempo
      access_key_secret: <secret>
    type: Opaque

  3. 创建 TempoStack 实例。

    注意

    您可以在同一集群中的独立项目中创建多个 TempoStack 实例。

    1. 进入 Operators Installed Operators
    2. 选择 TempoStack Create TempoStack YAML view
    3. YAML 视图中,自定义 TempoStack 自定义资源(CR):

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoStack
      metadata:
        name: sample
        namespace: <project_of_tempostack_instance>
      spec:
        storageSize: 1Gi
        storage:
          secret: 1
            name: <secret_name> 2
            type: <secret_provider> 3
        template:
          queryFrontend:
            jaegerQuery:
              enabled: true
              ingress:
                route:
                  termination: edge
                type: route
      1
      您在第 2 步中创建的 secret,用于作为其中一个先决条件设置的对象存储。
      2
      secret metadataname 的值。
      3
      可接受的值是 azure(Azure Blob Storage),gcs(Google Cloud Storage)和 s3(Amazon S3, MinIO, 或 {odf-full}。

      AWS S3 和 MinIO 存储的 TempoStack CR 示例

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoStack
      metadata:
        name: simplest
        namespace: <project_of_tempostack_instance>
      spec:
        storageSize: 1Gi
        storage: 1
          secret:
            name: minio-test
            type: s3
        resources:
          total:
            limits:
              memory: 2Gi
              cpu: 2000m
        template:
          queryFrontend:
            jaegerQuery: 2
              enabled: true
              ingress:
                route:
                  termination: edge
                type: route

      1
      在本例中,对象存储被设置为先决条件之一,并在第 2 步中创建对象存储 secret。
      2
      本例中部署的堆栈被配置为接收通过 HTTP 和 OpenTelemetry 协议(OTLP)的 Jaeger Thrift,它允许使用 Jaeger UI 可视化数据。
    4. 选择 Create

验证

  1. 使用 Project: 下拉列表选择 TempoStack 实例的项目。
  2. 进入 Operators Installed Operators,以验证 TempoStack 实例的 Status 是否为 Condition: Ready
  3. 进入 Workloads Pods,以验证 TempoStack 实例的所有组件 pod 都在运行。
  4. 访问 Tempo 控制台:

    1. 进入 Networking RoutesCtrl+F,以搜索 tempo
    2. Location 列中,打开 URL 以访问 Tempo 控制台。

      注意

      Tempo 控制台最初不会在 Tempo 控制台安装后显示 trace 数据。

3.1.2.2. 使用 CLI 安装 TempoStack 实例

您可以从命令行安装 TempoStack 实例。

先决条件

  • 集群管理员具有 cluster-admin 角色的活跃 OpenShift CLI (oc) 会话。

    提示
    • 确保您的 OpenShift CLI (oc) 版本为最新版本,并与您的 OpenShift Container Platform 版本匹配。
    • 运行 oc login 命令:

      $ oc login --username=<your_username>
  • 您已配置了支持的供应商所需的对象存储:{odf-full}, MinIO, Amazon S3, Azure Blob Storage, Google Cloud Storage。如需更多信息,请参阅"对象存储设置"。

    警告

    对象存储是必需的,它没有包含在分布式追踪平台(Tempo) 中。在安装分布式追踪平台 (Tempo) 前,您必须通过受支持的供应商选择和设置对象存储。

流程

  1. 运行以下命令,为您将在后续步骤中创建的 TempoStack 实例创建您选择的项目:

    $ oc apply -f - << EOF
    apiVersion: project.openshift.io/v1
    kind: Project
    metadata:
      name: <project_of_tempostack_instance>
    EOF
  2. 在您为 TempoStack 实例创建的项目中,运行以下命令来为您的对象存储桶创建一个 secret:

    $ oc apply -f - << EOF
    <object_storage_secret>
    EOF

    如需更多信息,请参阅"对象存储设置"。

    Amazon S3 和 MinIO 存储的 secret 示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: minio-test
    stringData:
      endpoint: http://minio.minio.svc:9000
      bucket: tempo
      access_key_id: tempo
      access_key_secret: <secret>
    type: Opaque

  3. 在为您创建的项目中创建一个 TempoStack 实例:

    注意

    您可以在同一集群中的独立项目中创建多个 TempoStack 实例。

    1. 自定义 TempoStack 自定义资源(CR):

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoStack
      metadata:
        name: sample
        namespace: <project_of_tempostack_instance>
      spec:
        storageSize: 1Gi
        storage:
            secret: 1
                name: <secret_name> 2
                type: <secret_provider> 3
        template:
          queryFrontend:
            jaegerQuery:
              enabled: true
              ingress:
                route:
                  termination: edge
                type: route
      1
      您在第 2 步中创建的 secret,用于作为其中一个先决条件设置的对象存储。
      2
      secret metadataname 的值。
      3
      可接受的值是 azure(Azure Blob Storage),gcs(Google Cloud Storage)和 s3(Amazon S3, MinIO, 或 {odf-full}。

      AWS S3 和 MinIO 存储的 TempoStack CR 示例

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoStack
      metadata:
        name: simplest
        namespace: <project_of_tempostack_instance>
      spec:
        storageSize: 1Gi
        storage: 1
          secret:
            name: minio-test
            type: s3
        resources:
          total:
            limits:
              memory: 2Gi
              cpu: 2000m
        template:
          queryFrontend:
            jaegerQuery: 2
              enabled: true
              ingress:
                route:
                  termination: edge
                type: route

      1
      在本例中,对象存储被设置为先决条件之一,并在第 2 步中创建对象存储 secret。
      2
      本例中部署的堆栈被配置为接收通过 HTTP 和 OpenTelemetry 协议(OTLP)的 Jaeger Thrift,它允许使用 Jaeger UI 可视化数据。
    2. 运行以下命令来应用自定义 CR:

      $ oc apply -f - << EOF
      <tempostack_cr>
      EOF

验证

  1. 运行以下命令,验证所有 TempoStack 组件状态是否为 Running,并且条件type: Ready

    $ oc get tempostacks.tempo.grafana.com simplest -o yaml
  2. 运行以下命令,验证所有 TempoStack 组件 pod 是否正在运行:

    $ oc get pods
  3. 访问 Tempo 控制台:

    1. 运行以下命令来查询路由详情:

      $ oc get route
    2. 在网页浏览器中打开 https://<route_from_previous_step>

      注意

      Tempo 控制台最初不会在 Tempo 控制台安装后显示 trace 数据。

3.1.3. 安装 TempoMonolithic 实例

重要

TempoMonolithic 实例只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

您可以使用 Web 控制台或命令行安装 TempoMonolithic 实例。

TempoMonolithic 自定义资源(CR) 以单体模式创建 Tempo 部署。Tempo 部署的所有组件(如紧凑器、经销商、ingester、querier 和查询前端)都包含在一个容器中。

TempoMonolithic 实例支持将 trace 存储在内存中存储、持久性卷或对象存储。

在单体模式下部署临时是小型部署、演示、测试和作为 Red Hat OpenShift distributed tracing 平台 (Jaeger) 全体部署的迁移路径的首选。

注意

Tempo 的单体部署无法水平扩展。如果您需要水平扩展,请在微服务模式中将 TempoStack CR 用于 Tempo 部署。

3.1.3.1. 使用 Web 控制台安装 TempoMonolithic 实例

重要

TempoMonolithic 实例只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

您可以从 web 控制台的 Administrator 视图安装 TempoMonolithic 实例。

先决条件

  • 以具有 cluster-admin 角色的用户身份登录到 OpenShift Container Platform Web 控制台。
  • 对于 Red Hat OpenShift Dedicated,您必须使用具有 dedicated-admin 角色的帐户登录。

流程

  1. 进入 Home Projects Create Project,为在后续步骤中创建的 TempoMonolithic 实例创建一个项目。
  2. 决定用于存储 trace 的存储类型:内存中存储、持久性卷或对象存储。

    重要

    对象存储不包括在分布式追踪平台(Tempo)中,需要由受支持的供应商设置对象存储: {odf-full}MinIOAmazon S3Azure Blob StorageGoogle Cloud Storage

    另外,选择对象存储需要在您为 TempoMonolithic 实例创建的项目中为您的对象存储桶创建一个 secret。您可以在 Workloads Secrets Create From YAML 中执行此操作。

    如需更多信息,请参阅"对象存储设置"。

    Amazon S3 和 MinIO 存储的 secret 示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: minio-test
    stringData:
      endpoint: http://minio.minio.svc:9000
      bucket: tempo
      access_key_id: tempo
      access_key_secret: <secret>
    type: Opaque

  3. 创建 TempoMonolithic 实例:

    注意

    您可以在同一集群的单独项目中创建多个 TempoMonolithic 实例。

    1. 进入 Operators Installed Operators
    2. 选择 TempoMonolithic Create TempoMonolithic YAML view
    3. YAML 视图中,自定义 TempoMonolithic 自定义资源 (CR)。

      以下 TempoMonolithic CR 创建一个 TempoMonolithic 部署,它通过 OTLP/gRPC 和 OTLP/HTTP 将 trace 存储在支持的存储中,并通过路由公开 Jaeger UI:

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoMonolithic
      metadata:
        name: <metadata_name>
        namespace: <project_of_tempomonolithic_instance>
      spec:
        storage:
          traces:
            backend: <supported_storage_type> 1
            size: <value>Gi 2
            s3: 3
              secret: <secret_name> 4
        jaegerui:
          enabled: true 5
          route:
            enabled: true 6
      1
      用于存储 trace 的存储类型:内存存储、持久性卷或对象存储。tmpfs 内存中存储的值是 memory。持久性卷的值是 pv。对象存储接受的值是 s3gcsazure,具体取决于使用的对象存储类型。
      2
      内存大小:对于内存存储,这意味着 tmpfs 卷的大小,默认值为 2Gi。对于持久性卷,这意味着持久性卷声明的大小,默认值为 10Gi。对于对象存储,这意味着 Tempo WAL 的持久性卷声明的大小,默认值为 10Gi
      3
      可选: 对于对象存储,对象存储的类型。接受的值包括 s3gcsazure,具体取决于使用的对象存储类型。
      4
      可选: 对于对象存储,存储 secret 的 metadata 中的 name 值。存储 secret 必须与 TempoMonolithic 实例位于同一个命名空间中,并包含 "Table 1 中指定的字段。"Object storage setup" 部分中所需的 secret 参数"。
      5
      启用 Jaeger UI。
      6
      启用为 Jaeger UI 创建路由。
    4. 选择 Create

验证

  1. 使用 Project: 下拉列表,选择 TempoMonolithic 实例的项目。
  2. 进入 Operators Installed Operators,以验证 TempoMonolithic 实例的 Status 是否为 Condition: Ready
  3. 进入 Workloads Pods,以验证 TempoMonolithic 实例的 pod 是否正在运行。
  4. 访问 Jaeger UI:

    1. 进入 Networking RoutesCtrl+F,以搜索 jaegerui

      注意

      Jaeger UI 使用 tempo-<metadata_name_of_TempoMonolithic_CR>-jaegerui 路由。

    2. Location 列中,打开 URL 以访问 Jaeger UI。
  5. TempoMonolithic 实例的 pod 就绪时,您可以将 trace 发送到集群中的 tempo-<metadata_name_of_TempoMonolithic_CR>:4317 (OTLP/gRPC) 和 tempo-<metadata_name_of_TempoMonolithic_CR>:4318 (OTLP/HTTP) 端点。

    Tempo API 位于集群中的 tempo-<metadata_name_of_TempoMonolithic_CR>:3200 端点。

3.1.3.2. 使用 CLI 安装 TempoMonolithic 实例

重要

TempoMonolithic 实例只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

您可以从命令行安装 TempoMonolithic 实例。

先决条件

  • 集群管理员具有 cluster-admin 角色的活跃 OpenShift CLI (oc) 会话。

    提示
    • 确保您的 OpenShift CLI (oc) 版本为最新版本,并与您的 OpenShift Container Platform 版本匹配。
    • 运行 oc login 命令:

      $ oc login --username=<your_username>

流程

  1. 运行以下命令,为您将在后续步骤中创建的 TempoMonolithic 实例创建您选择的项目:

    $ oc apply -f - << EOF
    apiVersion: project.openshift.io/v1
    kind: Project
    metadata:
      name: <project_of_tempomonolithic_instance>
    EOF
  2. 决定用于存储 trace 的存储类型:内存中存储、持久性卷或对象存储。

    重要

    对象存储不包括在分布式追踪平台(Tempo)中,需要由受支持的供应商设置对象存储: {odf-full}MinIOAmazon S3Azure Blob StorageGoogle Cloud Storage

    另外,选择对象存储需要在您为 TempoMonolithic 实例创建的项目中为您的对象存储桶创建一个 secret。您可以运行以下命令来完成此操作:

    $ oc apply -f - << EOF
    <object_storage_secret>
    EOF

    如需更多信息,请参阅"对象存储设置"。

    Amazon S3 和 MinIO 存储的 secret 示例

    apiVersion: v1
    kind: Secret
    metadata:
      name: minio-test
    stringData:
      endpoint: http://minio.minio.svc:9000
      bucket: tempo
      access_key_id: tempo
      access_key_secret: <secret>
    type: Opaque

  3. 在您为其创建的项目中创建一个 TempoMonolithic 实例。

    提示

    您可以在同一集群的单独项目中创建多个 TempoMonolithic 实例。

    1. 自定义 TempoMonolithic 自定义资源 (CR)。

      以下 TempoMonolithic CR 创建一个 TempoMonolithic 部署,它通过 OTLP/gRPC 和 OTLP/HTTP 将 trace 存储在支持的存储中,并通过路由公开 Jaeger UI:

      apiVersion: tempo.grafana.com/v1alpha1
      kind: TempoMonolithic
      metadata:
        name: <metadata_name>
        namespace: <project_of_tempomonolithic_instance>
      spec:
        storage:
          traces:
            backend: <supported_storage_type> 1
            size: <value>Gi 2
            s3: 3
              secret: <secret_name> 4
        jaegerui:
          enabled: true 5
          route:
            enabled: true 6
      1
      用于存储 trace 的存储类型:内存存储、持久性卷或对象存储。tmpfs 内存中存储的值是 memory。持久性卷的值是 pv。对象存储接受的值是 s3gcsazure,具体取决于使用的对象存储类型。
      2
      内存大小:对于内存存储,这意味着 tmpfs 卷的大小,默认值为 2Gi。对于持久性卷,这意味着持久性卷声明的大小,默认值为 10Gi。对于对象存储,这意味着 Tempo WAL 的持久性卷声明的大小,默认值为 10Gi
      3
      可选: 对于对象存储,对象存储的类型。接受的值包括 s3gcsazure,具体取决于使用的对象存储类型。
      4
      可选: 对于对象存储,存储 secret 的 metadata 中的 name 值。存储 secret 必须与 TempoMonolithic 实例位于同一个命名空间中,并包含 "Table 1 中指定的字段。"Object storage setup" 部分中所需的 secret 参数"。
      5
      启用 Jaeger UI。
      6
      启用为 Jaeger UI 创建路由。
    2. 运行以下命令来应用自定义 CR:

      $ oc apply -f - << EOF
      <tempomonolithic_cr>
      EOF

验证

  1. 运行以下命令,验证所有 TempoMonolithic components状态是否为 Running,且 conditionstype: Ready

    $ oc get tempomonolithic.tempo.grafana.com <metadata_name_of_tempomonolithic_cr> -o yaml
  2. 运行以下命令,以验证 TempoMonolithic 实例的 pod 是否正在运行:

    $ oc get pods
  3. 访问 Jaeger UI:

    1. 运行以下命令,查询 tempo-<metadata_name_of_tempomonolithic_cr>-jaegerui 路由的路由详情:

      $ oc get route
    2. 在网页浏览器中打开 https://<route_from_previous_step>
  4. 当 TempoMonolithic 实例的 pod 就绪时,您可以将 trace 发送到集群中的 tempo-<metadata_name_of_tempomonolithic_cr>:4317 (OTLP/gRPC) 和 tempo-<metadata_name_of_tempomonolithic_cr>:4318 (OTLP/HTTP) 端点。

    Tempo API 位于集群中的 tempo-<metadata_name_of_tempomonolithic_cr>:3200 端点。

3.1.4. 对象存储设置

在设置受支持的对象存储时,您可以使用以下配置参数。

表 3.1. 所需的 secret 参数
存储供应商

Secret 参数

{odf-full}

name: tempostack-dev-odf # example

bucket: <bucket_name> # requires an ObjectBucketClaim

endpoint: https://s3.openshift-storage.svc

access_key_id: <data_foundation_access_key_id>

access_key_secret: <data_foundation_access_key_secret>

MinIO

请参阅 MinIO Operator

name: tempostack-dev-minio # example

bucket: <minio_bucket_name> # MinIO documentation

endpoint: <minio_bucket_endpoint>

access_key_id: <minio_access_key_id>

access_key_secret: <minio_access_key_secret>

Amazon S3

name: tempostack-dev-s3 # example

bucket: <s3_bucket_name> # Amazon S3 documentation

endpoint: <s3_bucket_endpoint>

access_key_id: <s3_access_key_id>

access_key_secret: <s3_access_key_secret>

Microsoft Azure Blob Storage

name: tempostack-dev-azure # example

container: <azure_blob_storage_container_name> # Microsoft Azure documentation

account_name: <azure_blob_storage_account_name>

account_key: <azure_blob_storage_account_key>

Google Cloud Storage on Google Cloud Platform (GCP)

name: tempostack-dev-gcs # example

bucketname: <google_cloud_storage_bucket_name> # requires a bucket created in a GCP project

key.json: <path/to/key.json> # requires a service account in the bucket’s GCP project for GCP authentication

3.1.5. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.