在 S3 兼容对象存储中使用数据


Red Hat OpenShift AI Cloud Service 1

使用存储在工作台中的 S3 兼容对象存储中的数据

摘要

了解如何使用存储在工作台中的 S3 兼容对象存储中的数据。

前言

如果您的数据存储在 S3 兼容对象存储中,如 Ceph、MinIO 或 IBM Cloud Object Storage,您可以从工作台访问数据。

第 1 章 先决条件

  • 您已在 OpenShift AI 中创建了一个工作台。如需更多信息,请参阅创建工作台并选择 IDE
  • 您可以访问 S3 兼容对象存储。
  • 您有 S3 兼容对象存储帐户的凭据。
  • 您有要在对象存储中使用的文件。
  • 您已根据 S3 兼容存储帐户的凭证为工作台配置了连接。如需更多信息,请参阅使用连接

第 2 章 创建 S3 客户端

要与来自工作台的 S3 兼容对象存储中的数据交互,您必须创建一个本地客户端来处理对 AWS S3 服务的请求,如 Boto3。

Boto3 是 Python 的 AWS SDK,它为创建和管理 AWS 服务(如 AWS S3 或 S3 兼容对象存储)提供 API。

从工作台为 S3 服务配置了 Boto3 客户端后,您可以连接并使用 S3 兼容对象存储中的数据。

先决条件

  • 您可以访问 S3 兼容对象存储。
  • 您已在对象存储的存储桶中保存了文件。
  • 您已登陆到 Red Hat OpenShift AI。
  • 您已创建了数据科学项目。
  • 您已使用工作台镜像向项目添加了一个工作台。
  • 您已根据 S3 兼容存储帐户的凭证为工作台配置了连接。

流程

  1. 在 OpenShift AI 仪表板中点 Data Science projects
  2. 点包含工作台的项目的名称。
  3. 单击 Workbenches 选项卡。
  4. 如果工作台的状态为 Running,请跳至下一步。

    如果工作台的状态为 Stopped,在工作台的 Status 列中点 Start

    当工作台服务器启动时,Status 列从 Stopped 改为 Starting,然后在工作台成功启动时变为 Running

  5. 点工作台旁边的打开图标( The open icon )。

    您的 Jupyter 环境窗口将打开。

  6. 在工具栏中,单击 Git Clone 图标,然后选择 Clone a Repository
  7. Clone a repo 对话框中,输入以下 URL https://github.com/opendatahub-io/odh-doc-examples.git,然后点 Clone
  8. 在文件浏览器中,选择新创建的 odh-doc-examples 文件夹。
  9. 双击新创建的 存储 文件夹。

    您会看到一个名为 s3client_examples.ipynb 的 Jupyter 笔记本。

  10. 双击 s3client_examples.ipynb 文件,以启动 Jupyter 笔记本。

    Jupyter 笔记本将打开。您会看到以下任务的代码示例:

    • 安装 Boto3 和所需的 Boto3 库
    • 创建 S3 客户端会话
    • 创建 S3 客户端连接
    • 列出文件
    • 创建存储桶
    • 上传文件到存储桶
    • 从存储桶下载文件
    • 在存储桶间复制文件
    • 从存储桶中删除对象
    • 删除存储桶
  11. 在 Jupyter 笔记本中,找到以下说明来安装 Boto3 及其所需库,并运行代码单元:

    #Upgrade pip to the latest version
    !pip3 install --upgrade pip
    
    #Install Boto3
    !pip3 install boto3
    
    #Install Boto3 libraries
    import os
    import boto3
    from botocore.client import Config
    from boto3 import session
    
    #Check Boto3 version
    !pip3 show boto3
    Copy to Clipboard Toggle word wrap

    代码单元中的说明将 Python Package Manager (pip)更新至最新版本,安装 Boto3 及其所需的库,并显示安装的 Boto3 版本。

  12. 找到以下说明以创建 S3 客户端和服务器。运行代码单元。

    #Creating an S3 client
    #Define credentials
    key_id = os.environ.get('AWS_ACCESS_KEY_ID')
    secret_key = os.environ.get('AWS_SECRET_ACCESS_KEY')
    endpoint = os.environ.get('AWS_S3_ENDPOINT')
    region = os.environ.get('AWS_DEFAULT_REGION')
    
    #Define client session
    session = Boto3.session.Session(aws_access_key_id=key_id,
    aws_secret_access_key=secret_key)
    
    #Define client connection
    s3_client = Boto3.client('s3', aws_access_key_id=key_id,
    aws_secret_access_key=secret_key,aws_session_token=None,
        config=Boto3.session.Config(signature_version='s3v4'),
                            endpoint_url=endpoint,
                            region_name=region)
    Copy to Clipboard Toggle word wrap

    代码单元中的说明配置 S3 客户端,并建立与 S3 兼容对象存储的会话。

验证

  • 要使用 S3 客户端连接到对象存储并列出可用的存储桶,请找到以下说明来列出存储桶并运行代码单元:

    s3_client.list_buckets()
    Copy to Clipboard Toggle word wrap

    成功响应包括 HTTPStatusCode200,以及类似以下输出的存储桶列表:

    'HTTPStatusCode': 200,
    'Buckets': [{'Name': 'aqs086-image-registry',
    'CreationDate': datetime.datetime(2024, 1, 16, 20, 21, 36, 244000, tzinfo=tzlocal  ())}]
    Copy to Clipboard Toggle word wrap

第 3 章 列出对象存储中的可用存储桶

要列出对象存储中可用的存储桶,请使用 list_bucket () 方法。

先决条件

  • 您已将 odh-doc-examples 存储库克隆到工作台中。
  • 您已在工作台中打开 s3client_examples.ipynb 文件。
  • 已安装 Boto3 并配置了 S3 客户端。

流程

  1. 在 Jupyter 笔记本中,找到以下列出可用存储桶的指令,然后运行代码单元。

    #List available buckets
    s3_client.list_buckets()
    Copy to Clipboard Toggle word wrap

    成功的响应包括 HTTP 请求状态代码 200 和存储桶列表,类似于以下输出:

    'HTTPStatusCode': 200,
    'Buckets': [{'Name': 'aqs086-image-registry',
    'CreationDate': datetime.datetime(2024, 1, 16, 20, 21, 36, 244000, tzinfo=tzlocal( ))},
    Copy to Clipboard Toggle word wrap
  2. 找到只输出可用存储桶的名称并执行代码单元的指令。

    #Print only names of available buckets
    for bucket in s3_client.list_buckets()[‘Buckets’]:
        print(bucket[‘Name’])
    Copy to Clipboard Toggle word wrap

    输出显示存储桶的名称,类似以下示例。

    aqs086-image-registry
    aqs087-image-registry
    aqs135-image-registry
    aqs246-image-registry
    Copy to Clipboard Toggle word wrap

第 4 章 在对象存储中创建存储桶

要从工作台的对象存储中创建存储桶,请使用 create_bucket () 方法。

先决条件

  • 您已将 odh-doc-examples 存储库克隆到工作台中。
  • 您已在工作台中打开 s3client_examples.ipynb 文件。
  • 已安装 Boto3 并配置了 S3 客户端。

流程

  1. 在笔记本文件中,找到以下创建存储桶的说明:

    #Create bucket                                                `
    s3_client.create_bucket(Bucket='<bucket_name>')
    Copy to Clipboard Toggle word wrap
  2. 将 < name_of_the _bucket> 替换为您要创建的存储桶的名称,如示例中所示,然后运行代码单元。

    #Create bucket
    s3_client.create_bucket(Bucket='aqs43-image-registry')
    Copy to Clipboard Toggle word wrap

    输出显示 HTTP 响应状态代码 200,表示请求成功。

验证

  • 找到列出存储桶并执行代码单元的指令。

    for bucket in s3_client.list_bucket()[‘Buckets’]:
        print(bucket[‘Name’])
    Copy to Clipboard Toggle word wrap

    您创建的存储桶将显示在输出中显示。

第 5 章 列出存储桶中的文件

要列出特定存储桶中的文件,请使用 list_bucket_v2 () 方法。

先决条件

  • 您已将 odh-doc-examples 存储库克隆到工作台中。
  • 您已在工作台中打开 s3client_examples.ipynb 文件。
  • 已安装 Boto3 并配置了 S3 客户端。

流程

  1. 在 Jupyter 笔记本中,找到以下列出文件的代码。

    #List files
    #Replace <bucket_name> with the name of the bucket.
    bucket_name = ‘<bucket_name>’
    s3_client.list_objects_v2(Bucket=bucket_name)
    Copy to Clipboard Toggle word wrap
  2. 将 &lt ;bucket_name > 替换为您自己的存储桶的名称,如示例所示,然后运行代码单元。

    #List files
    #Replace <bucket_name> with the name of the bucket.
    bucket_name = ‘aqs27-registry’
    s3_client.list_objects_v2(Bucket=bucket_name)
    Copy to Clipboard Toggle word wrap

    输出中显示了指定存储桶中可用文件的信息。

  3. 找到仅列出文件的名称的代码单元。

    #Print only names of files
    bucket_name = ‘<bucket_name>’
    for key in s3_client.list_objects_v2(Bucket=bucket_name)[‘Contents’]:
    	print(key[‘Key’])
    Copy to Clipboard Toggle word wrap
  4. 将 < bucket_name > 替换为存储桶的名称,如示例所示,并运行代码单元:

    #Print only names of files
    bucket_name = ‘aqs27-registry’
    for key in s3_client.list_objects_v2(Bucket=bucket_name)[‘Contents’]:
    print(key[‘Key’])
    Copy to Clipboard Toggle word wrap

    输出显示指定存储桶中可用的文件名列表。

  5. 通过找到以下代码单元,优化前面的查询来指定文件路径:

    bucket_name = ‘<bucket_name>’
    for key in s3_client.list_objects_v2(Bucket=bucket_name,Prefix=’<start_of_file_path’)[‘Contents’]:
    print(key[‘Key’])
    Copy to Clipboard Toggle word wrap
  6. <bucket_name & gt; 和 <start_of_file_path > 替换为您自己的值并运行代码单元。

第 6 章 从存储桶下载文件

要从存储桶下载文件到工作台,请使用 download_file () 方法。

先决条件

  • 您已将 odh-doc-examples 存储库克隆到工作台中。
  • 您已在工作台中打开 s3client_examples.ipynb 文件。
  • 已安装 Boto3 并配置了 S3 客户端。

流程

  1. 在 Jupyter 笔记本中,找到以下从存储桶下载文件的说明:

    #Download file from bucket
    #Replace the following values with your own:
    #<bucket_name>: The name of the bucket.
    #<object_name>: The name of the file to download. Must include full path to the file on the bucket.
    #<file_name>: The name of the file when downloaded.
    
    s3_client.download_file('<bucket_name>','<object_name>','<file_name>')
    Copy to Clipboard Toggle word wrap
  2. 修改代码示例:

    1. <bucket_name > 替换为文件位于…​ 中的存储桶名称,将 &lt ;object_name > 替换为您要下载的文件的名称。
    2. 将 < file_name > 替换为您要下载该文件的名称和路径,如示例所示。

      s3_client.download_file('aqs086-image-registry',
                              'series35-image36-086.csv',
                              '\tmp\series35-image36-086.csv_old')
      Copy to Clipboard Toggle word wrap
  3. 运行代码单元。

验证

  • 您下载的文件会显示在您在工作台中指定的路径中。

第 7 章 将文件上传到存储桶

要从工作台上传文件到存储桶,请使用 upload_file () 方法。

先决条件

  • 您已将 odh-doc-examples 存储库克隆到工作台中。
  • 您已在工作台中打开 s3client_examples.ipynb 文件。
  • 已安装 Boto3 并配置了 S3 客户端。
  • 您已导入要上传到对象存储的文件到工作台中。

流程

  1. 在 Jupyter 笔记本中,找到上传文件到存储桶的说明。

    #Upload file to bucket
    #Replace <file_name>, <bucket_name>, and <object_name> with your values.
    #<file_name>: Name of the file to upload. This value must include the full local path to the file on your workbench.
    #<bucket_name>: The name of the bucket to upload the file to.
    #<object_name>: The full key to use to save the file to the bucket.
    
    s3_client.upload_file('<file_name>', '<bucket_name>', '<object_name>')
    Copy to Clipboard Toggle word wrap
  2. <file_name & gt; , <bucket _name> 和 <object_name > 替换为您自己的值,如示例中所示,然后运行代码单元。

    s3_client.upload_file('image-973-series123.csv', 'aqs973-image-registry', '/tmp/image-973-series124.csv')
    Copy to Clipboard Toggle word wrap

验证

  • 找到以下说明以列出存储桶中的文件:

    #Upload Verification
    for key in s3_client.list_objects_v2(Bucket='<bucket_name>')['Contents']:
    print(key['Key'])
    Copy to Clipboard Toggle word wrap
  • 将 < bucket_name > 替换为存储桶的名称,如示例所示,然后运行代码单元。

    #Upload Verification
    for key in s3_client.list_objects_v2(Bucket='aqs973-image-registry')['Contents']:  print(key['Key'])
    Copy to Clipboard Toggle word wrap

    您上传的文件将显示在输出中。

第 8 章 在存储桶间复制文件

要从工作台的对象存储中复制存储桶之间的文件,请使用 copy () 方法。

先决条件

  • 您已将 odh-doc-examples 存储库克隆到工作台中。
  • 您已在工作台中打开 s3client_examples.ipynb 文件。
  • 已安装 Boto3 并配置了 S3 客户端。
  • 您知道要复制的源文件的密钥,以及该文件存储在的存储桶。

流程

  1. 在笔记本中,找到以下说明以在存储桶间复制文件:

    #Copying files between buckets
    #Replace the placeholder values with your own.
    copy_source = {
        	'Bucket': '<bucket_name>',
        	'Key': '<key>'
    }
    s3_client.copy(copy_source, '<destination bucket>', '<destination_key>')
    Copy to Clipboard Toggle word wrap
  2. copy_source 块中,将 & lt;bucket_name > 替换为源存储桶的名称,& lt;key> 替换为源文件的密钥,如示例所示。

    copy_source = {
        	'Bucket': 'aqs086-image-registry',
        	'Key': 'series43-image12-086.csv'
    }
    Copy to Clipboard Toggle word wrap
  3. <destination_bucket > 替换为要复制到的存储桶的名称,将 &lt ;destination_key > 替换为要复制到的密钥的名称,如示例所示。执行代码单元。

    s3_client.copy(copy_source, 'aqs971-image-registry', '/tmp/series43-image12-086.csv')
    Copy to Clipboard Toggle word wrap

验证

  • 找到以下说明,以列出存储桶中的对象。

    #Copy Verification
    bucket_name = '<bucket_name>'
    for key in s3_client.list_objects_v2(Bucket=bucket_name)['Contents']:
        					print(key['Key'])
    Copy to Clipboard Toggle word wrap
  • 将 < bucket_name > 替换为目标存储桶的名称,如示例所示,并运行代码单元。

    #Copy Verification
    bucket_name = 'aqs971-image-registry'
    for key in s3_client.list_objects_v2(Bucket=bucket_name)['Contents']:
    print(key['Key']).
    Copy to Clipboard Toggle word wrap

    您复制的文件显示在输出中。

第 9 章 从存储桶中删除文件

要从工作台中删除存储桶中的文件,请使用 delete_file () 方法。

先决条件

  • 您已将 odh-doc-examples 存储库克隆到工作台中。
  • 您已在工作台中打开 s3client_examples.ipynb 文件。
  • 已安装 Boto3 并配置了 S3 客户端。
  • 您知道要删除的文件的密钥以及该文件所在的存储桶。

流程

  1. 在 Jupyter 笔记本中,找到以下说明从存储桶中删除文件:

    #Delete files from bucket
    s3_client.delete_object(Bucket='<bucket_name>', Key='<object_key>')
    Copy to Clipboard Toggle word wrap
  2. 将 < bucket_name > 替换为 存储桶的名称,<key> 替换为您要删除的文件的密钥,如示例所示。运行代码单元。

    #Delete object from bucket
    s3_client.delete_object(Bucket='aqs971-image-registry', Key='/tmp/series43-image12-086.csv')
    Copy to Clipboard Toggle word wrap

    输出显示 HTTP 响应状态代码 204,这表示请求成功。

验证

  • 找到以下说明以列出存储桶中的文件:

    #Delete Object Verification
    bucket_name = '<bucket_name>'
    for key in s3_client.list_objects_v2(Bucket=bucket_name)['Contents']:
    print(key['Key'])
    Copy to Clipboard Toggle word wrap
  • 将 < bucket_name > 替换为存储桶的名称,如示例所示,并运行代码单元。

    #Delete Object Verification
    bucket_name = 'aqs971-image-registry'
    for key in s3_client.list_objects_v2(Bucket=bucket_name)['Contents']:
    print(key['Key'])
    Copy to Clipboard Toggle word wrap

    删除的文件不会出现在输出中。

第 10 章 从对象存储中删除存储桶

要从工作台中删除对象存储中的存储桶,请使用 delete_bucket () 方法。

先决条件

  • 您已将 odh-doc-examples 存储库克隆到工作台中。
  • 您已在工作台中打开 s3client_examples.ipynb 文件。
  • 已安装 Boto3 并配置了 S3 客户端。
  • 您已确保要删除的存储桶为空。

流程

  1. 在 Jupyter 笔记本中,找到以下删除存储桶的说明:

    #Delete bucket
    s3_client.delete_bucket(Bucket='<bucket_name>')
    Copy to Clipboard Toggle word wrap
  2. 将 < bucket_name > 替换为您要删除的存储桶的名称,并运行代码单元。

    #Delete bucket
    s3_client.delete_bucket(Bucket='aqs971-image-registry')
    Copy to Clipboard Toggle word wrap

    输出显示 HTTP 响应状态代码 200,这表示请求成功。

验证

  • 找到列出存储桶的指令,并执行代码单元。

    for bucket in s3_client.list_bucket()[‘Buckets’]:
        print(bucket[‘Name’])
    Copy to Clipboard Toggle word wrap

    您删除的存储桶不会出现在输出中。

第 11 章 对象存储端点概述

要确保在 OpenShift AI 中正确配置对象存储,您必须为不同类型的对象存储正确格式化端点。这些说明是用于为 Amazon S3、MinIO 或其他兼容 S3 的存储解决方案格式化端点,最大程度减少配置错误并确保兼容性。

重要

正确格式化的端点可以连接并降低错误配置的风险。为您的对象存储类型使用适当的端点格式。不当格式化可能会导致连接错误或限制对存储资源的访问。

11.1. minio (On-Cluster)

对于 on-cluster MinIO 实例,请使用本地端点 URL 格式。在配置 MinIO 端点时,请确保以下内容:

  • 根据您的 MinIO 安全设置,使用 http://https:// 为端点添加前缀。
  • 包含集群 IP 或主机名,并在指定时加上端口号。
  • 如果您的 MinIO 实例需要有一个(通常为 9000),请使用端口号。

Example:

http://minio-cluster.local:9000
Copy to Clipboard Toggle word wrap
注意

通过检查集群 DNS 设置和网络配置来验证 MinIO 实例是否可以访问集群中的。

11.2. Amazon S3

在为 Amazon S3 配置端点时,请使用特定于区域的 URL。Amazon S3 端点通常采用以下格式:

  • 使用 https:// 为端点加上前缀。
  • 格式为 & lt;bucket-name>.s3.<region>.amazonaws.com,其中 <bucket-name > 是 S3 存储桶的名称,& lt;region > 是 AWS 区域代码(如 us-west-1,eu-central-1)。

Example:

https://my-bucket.s3.us-west-2.amazonaws.com
Copy to Clipboard Toggle word wrap
注意

为了提高安全性和合规性,请确保您的 Amazon S3 存储桶位于正确的区域中。

11.3. 其他 S3-Compatible 对象存储

对于 Amazon S3 以外的 S3 兼容存储解决方案,请遵循您的供应商所需的特定端点格式。通常,这些端点包括以下项目:

  • 供应商基本 URL,前缀为 https://
  • bucket 名称和区域参数(由供应商指定)。
  • 查看 S3 兼容供应商的文档,以确认所需的端点格式。
  • 将 < bucket-name > 和 &lt ;region&gt; 等占位符值替换为您的特定配置详情。
警告

S3 兼容供应商错误格式化的端点可能会导致访问拒绝。始终在存储供应商文档中验证格式以确保兼容性。

11.4. 验证和故障排除

配置端点后,通过 OpenShift AI 仪表板执行测试上传或直接访问对象存储来验证连接性。要进行故障排除,请检查以下项目:

  • Network Accessibility: 确认端点可以从 OpenShift AI 集群访问。
  • Authentication: 确保正确访问每种存储类型的凭证。
  • 端点加速 :检查任何拼写错误或缺少组件的端点 URL 格式。

要安全地将 OpenShift AI 组件连接到使用自签名证书的 OpenShift 集群中部署的对象存储解决方案或数据库,您必须提供证书颁发机构(CA)证书。每个命名空间都包括一个名为 kube-root-ca.crt 的 ConfigMap,其中包含内部 API 服务器的 CA 证书。

先决条件

  • 具有集群管理员特权。
  • 已安装 OpenShift 命令行界面(CLI)。请参阅安装 OpenShift CLI
  • 您已在 OpenShift 集群中部署了对象存储解决方案或数据库。

流程

  1. 在一个终端窗口中,登录到 OpenShift CLI,如下例所示:

    oc login api.<cluster_name>.<cluster_domain>:6443 --web
    Copy to Clipboard Toggle word wrap
  2. 检索当前的 OpenShift AI 可信 CA 配置,并将其存储在新文件中:

    oc get dscinitializations.dscinitialization.opendatahub.io default-dsci -o json | jq -r '.spec.trustedCABundle.customCABundle' > /tmp/my-custom-ca-bundles.crt
    Copy to Clipboard Toggle word wrap
  3. 将集群的 kube-root-ca.crt ConfigMap 添加到 OpenShift AI 可信 CA 配置中:

    oc get configmap kube-root-ca.crt -o jsonpath="{['data']['ca\.crt']}" >> /tmp/my-custom-ca-bundles.crt
    Copy to Clipboard Toggle word wrap
  4. 更新 OpenShift AI 可信 CA 配置,以信任 kube-root-ca.crt 中证书颁发机构发布的证书:

    oc patch dscinitialization default-dsci --type='json' -p='[{"op":"replace","path":"/spec/trustedCABundle/customCABundle","value":"'"$(awk '{printf "%s\\n", $0}' /tmp/my-custom-ca-bundles.crt)"'"}]'
    Copy to Clipboard Toggle word wrap

验证

  • 您可以成功部署配置为使用 OpenShift 集群中部署的对象存储解决方案或数据库的组件。例如,配置为使用集群中部署的数据库的管道服务器可以成功启动。
注意

您可以按照 OpenShift AI 教程 - Fraud Detection example 中的步骤来验证您的新证书配置。运行脚本来安装本地对象存储存储桶并创建连接,然后启用数据科学管道。

有关运行脚本以安装本地对象存储存储桶的更多信息,请参阅 运行脚本来安装本地对象存储存储桶并创建连接

有关启用数据科学管道的更多信息,请参阅启用数据科学管道

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部