14.10. 创建用于 AWS 的安装文件


要在 Amazon Web Services (AWS) 上安装 OpenShift Container Platform 并使用 AWS Local Zones,您必须生成安装程序部署集群所需的文件,并进行修改,以便集群只创建要使用的机器。您可以生成并自定义 install-config.yaml 文件和 Kubernetes 清单。

14.10.1. 集群安装的最低资源要求

每台集群机器都必须满足以下最低要求:

Expand
表 14.1. 最低资源要求
机器操作系统vCPU [1]虚拟内存Storage每秒输入/输出 (IOPS) [2]

bootstrap

RHCOS

4

16 GB

100 GB

300

Control plane(控制平面)

RHCOS

4

16 GB

100 GB

300

Compute

RHCOS、RHEL 8.6 及更新版本 [3]

2

8 GB

100 GB

300

  1. 当未启用并发多线程(SMT)或超线程时,一个 vCPU 相当于一个物理内核。启用后,使用以下公式来计算对应的比例:(每个内核数的线程)× sockets = vCPU。
  2. OpenShift Container Platform 和 Kubernetes 对磁盘性能非常敏感,建议使用更快的存储速度,特别是 control plane 节点上需要 10 ms p99 fsync 持续时间的 etcd。请注意,在许多云平台上,存储大小和 IOPS 可一起扩展,因此您可能需要过度分配存储卷来获取足够的性能。
  3. 与所有用户置备的安装一样,如果您选择在集群中使用 RHEL 计算机器,则负责所有操作系统生命周期管理和维护,包括执行系统更新、应用补丁和完成所有其他必要的任务。RHEL 7 计算机器的使用已弃用,并已在 OpenShift Container Platform 4.10 及更新的版本中删除。

如果平台的实例类型满足集群机器的最低要求,则 OpenShift Container Platform 支持使用它。

14.10.2. 为 AWS 测试的实例类型

以下 Amazon Web Services (AWS) 实例类型已使用 OpenShift Container Platform 测试,以用于 AWS Local Zones。

注意

将以下图中包含的机器类型用于 AWS 实例。如果您使用没有在图中列出的实例类型,请确保使用的实例大小与集群安装"最小资源要求"中列出的最少资源要求匹配。

例 14.3. 基于 AWS 本地区的 64 位 x86 架构的机器类型

  • c5.*
  • c5d.*
  • m6i.*
  • m5.*
  • r5.*
  • t3.*

14.10.3. 创建安装配置文件

生成并自定义安装程序部署集群所需的安装配置文件。

先决条件

  • 已获取 OpenShift Container Platform 安装程序和集群的 pull secret。
  • 使用红帽发布的附带 Red Hat Enterprise Linux CoreOS(RHCOS)AMI 检查您是否将集群部署到一个区域。如果您要部署到需要自定义 AMI 的区域,如 AWS GovCloud 区域,您必须手动创建 install-config.yaml 文件。

流程

  1. 创建 install-config.yaml 文件。

    1. 进入包含安装程序的目录并运行以下命令:

      $ ./openshift-install create install-config --dir <installation_directory> 
      1
      Copy to Clipboard Toggle word wrap
      1
      对于 <installation_directory>,请指定要存储安装程序创建的文件的目录名称。
      重要

      指定一个空目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。

    2. 在提示符处,提供云的配置详情:

      1. 可选: 选择用于访问集群机器的 SSH 密钥。

        注意

        对于您要在其上执行安装调试或灾难恢复的生产环境 OpenShift Container Platform 集群,请指定 ssh-agent 进程使用的 SSH 密钥。

      2. 选择 aws 作为目标平台。
      3. 如果计算机上没有保存 AWS 配置集,请为您配置用于运行安装程序的用户输入 AWS 访问密钥 ID 和 secret 访问密钥。

        注意

        AWS 访问密钥 ID 和 secret 访问密钥存储在安装主机上当前用户主目录中的 ~/.aws/credentials 中。如果文件中不存在导出的配置集凭证,安装程序会提示您输入凭证。您向安装程序提供的所有凭证都存储在文件中。

      4. 选择要将集群部署到的 AWS 区域。您指定的区域必须是包含您为 AWS 帐户选择的区域相同的区域。
      5. 选择您为集群配置的 Route 53 服务的基域。
      6. 为集群输入描述性名称。
      7. 粘贴 Red Hat OpenShift Cluster Manager 中的 pull secret
  2. 编辑 install-config.yaml 文件,为 VPC 使用的可用区提供子网:

    platform:
      aws:
        subnets: 
    1
    
        - publicSubnetId-1
        - publicSubnetId-2
        - publicSubnetId-3
        - privateSubnetId-1
        - privateSubnetId-2
        - privateSubnetId-3
    Copy to Clipboard Toggle word wrap
    1
    添加 subnets 部分,并指定 VPC 的 CloudFormation 模板输出的 PrivateSubnetIdsPublicSubnetIds 值。不要在此处包含 Local Zone 子网。
  3. 可选:备份 install-config.yaml 文件。

    重要

    install-config.yaml 文件会在安装过程中消耗掉。如果要重复使用此文件,必须现在备份。

14.10.4. 创建 Kubernetes 清单文件

由于您必须修改一些集群定义文件并手动启动集群机器,因此您必须生成 Kubernetes 清单文件来配置机器。

先决条件

  • 已获得 OpenShift Container Platform 安装程序。
  • 已创建 install-config.yaml 安装配置文件。
  • 安装了 jq 软件包。

流程

  1. 运行以下命令,切换到包含 OpenShift Container Platform 安装程序的目录,并为集群生成 Kubernetes 清单:

    $ ./openshift-install create manifests --dir <installation_directory> 
    1
    Copy to Clipboard Toggle word wrap
    1
    对于 <installation_directory>,请指定包含您创建的 install-config.yaml 文件的安装目录。
  2. 根据网络插件设置默认最大传输单元 (MTU):

    重要

    通常,本地区中的 Amazon EC2 实例和 Region 中的 Amazon EC2 实例之间的最大传输单元 (MTU) 为 1300。请参阅 AWS 文档中的 Local Zones 的工作原理。对于开销,集群网络 MTU 必须总是小于 EC2 MTU。具体开销由您的网络插件决定,例如:

    • OVN-Kubernetes: 100 字节
    • OpenShift SDN: 50 字节

    网络插件可以提供额外的功能,如 IPsec,它们还必须减少 MTU。查看文档以了解更多信息。

    1. 如果使用 OVN-Kubernetes 网络插件,请输入以下命令:

      $ cat <<EOF > <installation_directory>/manifests/cluster-network-03-config.yml
      apiVersion: operator.openshift.io/v1
      kind: Network
      metadata:
        name: cluster
      spec:
        defaultNetwork:
          ovnKubernetesConfig:
            mtu: 1200
      EOF
      Copy to Clipboard Toggle word wrap
    2. 如果使用 OpenShift SDN 网络插件,请输入以下命令:

      $ cat <<EOF > <installation_directory>/manifests/cluster-network-03-config.yml
      apiVersion: operator.openshift.io/v1
      kind: Network
      metadata:
        name: cluster
      spec:
        defaultNetwork:
          openshiftSDNConfig:
            mtu: 1250
      EOF
      Copy to Clipboard Toggle word wrap
  3. 在 Local Zone 中为 worker 节点创建机器集清单。

    1. 运行以下命令,将包含您选择的 AWS 帐户的 Local Zone 名称的本地变量导出到:

      $ export LZ_ZONE_NAME="<local_zone_name>" 
      1
      Copy to Clipboard Toggle word wrap
      1
      对于 <local_zone_name>,请指定您选择的 AWS 帐户的 Local Zone,如 us-east-1-nyc-1a
    2. 运行以下命令,查看您要部署到的位置的实例类型:

      $ aws ec2 describe-instance-type-offerings \
          --location-type availability-zone \
          --filters Name=location,Values=${LZ_ZONE_NAME}
          --region <region> 
      1
      Copy to Clipboard Toggle word wrap
      1
      对于 <region>,请指定您要部署到的区域的名称,如 us-east-1
    3. 运行以下命令,导出一个变量,以定义要在 Local Zone 子网上部署的 worker 机器的实例类型:

      $ export INSTANCE_TYPE="<instance_type>" 
      1
      Copy to Clipboard Toggle word wrap
      1
      <instance_type> 设置为经过测试的实例类型,如 c5d.2xlarge
    4. 运行以下命令,将 AMI ID 存储为本地变量:

      $ export AMI_ID=$(grep ami
        <installation_directory>/openshift/99_openshift-cluster-api_worker-machineset-0.yaml \
        | tail -n1 | awk '{print$2}')
      Copy to Clipboard Toggle word wrap
    5. 运行以下命令,将子网 ID 存储为本地变量:

      $ export SUBNET_ID=$(aws cloudformation describe-stacks --stack-name "<subnet_stack_name>" \ 
      1
      
        | jq -r '.Stacks[0].Outputs[0].OutputValue')
      Copy to Clipboard Toggle word wrap
      1
      对于 <subnet_stack_name>,请指定您创建的子网堆栈的名称。
    6. 运行以下命令,将集群 ID 存储为本地变量:

      $ export CLUSTER_ID="$(awk '/infrastructureName: / {print $2}' 	<installation_directory>/manifests/cluster-infrastructure-02-config.yml)"
      Copy to Clipboard Toggle word wrap
    7. 运行以下命令,为 VPC 使用的 Local Zone 创建 worker 清单文件:

      $ cat <<EOF > <installation_directory>/openshift/99_openshift-cluster-api_worker-machineset-nyc1.yaml
      apiVersion: machine.openshift.io/v1beta1
      kind: MachineSet
      metadata:
        labels:
          machine.openshift.io/cluster-api-cluster: ${CLUSTER_ID}
        name: ${CLUSTER_ID}-edge-${LZ_ZONE_NAME}
        namespace: openshift-machine-api
      spec:
        replicas: 1
        selector:
          matchLabels:
            machine.openshift.io/cluster-api-cluster: ${CLUSTER_ID}
            machine.openshift.io/cluster-api-machineset: ${CLUSTER_ID}-edge-${LZ_ZONE_NAME}
        template:
          metadata:
            labels:
              machine.openshift.io/cluster-api-cluster: ${CLUSTER_ID}
              machine.openshift.io/cluster-api-machine-role: edge
              machine.openshift.io/cluster-api-machine-type: edge
              machine.openshift.io/cluster-api-machineset: ${CLUSTER_ID}-edge-${LZ_ZONE_NAME}
          spec:
            metadata:
              labels:
                machine.openshift.com/zone-type: local-zone
                machine.openshift.com/zone-group: ${ZONE_GROUP_NAME}
                node-role.kubernetes.io/edge: ""
            taints:
              - key: node-role.kubernetes.io/edge
                effect: NoSchedule
            providerSpec:
              value:
                ami:
                  id: ${AMI_ID}
                apiVersion: machine.openshift.io/v1beta1
                blockDevices:
                - ebs:
                    volumeSize: 120
                    volumeType: gp2
                credentialsSecret:
                  name: aws-cloud-credentials
                deviceIndex: 0
                iamInstanceProfile:
                  id: ${CLUSTER_ID}-worker-profile
                instanceType: ${INSTANCE_TYPE}
                kind: AWSMachineProviderConfig
                placement:
                  availabilityZone: ${LZ_ZONE_NAME}
                  region: ${CLUSTER_REGION}
                securityGroups:
                - filters:
                  - name: tag:Name
                    values:
                    - ${CLUSTER_ID}-worker-sg
                subnet:
                  id: ${SUBNET_ID}
                publicIp: true
                tags:
                - name: kubernetes.io/cluster/${CLUSTER_ID}
                  value: owned
                userDataSecret:
                  name: worker-user-data
      EOF
      Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat