4.13. 创建安装配置文件


您可以自定义在 Red Hat OpenStack Platform(RHOSP)上安装的 OpenShift Container Platform 集群。

先决条件

  • 您有 OpenShift Container Platform 安装程序和集群的 pull secret。

流程

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

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

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

      在指定目录时:

      • 验证该目录是否具有执行权限。在安装目录中运行 Terraform 二进制文件需要这个权限。
      • 使用空目录。有些安装资产,如 bootstrap X.509 证书的过期间隔较短,因此不得重复使用安装目录。如果要重复使用另一个集群安装中的单个文件,您可以将它们复制到您的目录中。但是,安装资产的文件名可能会在发行版本间有所变化。从以前的 OpenShift Container Platform 版本中复制安装文件时请小心。
    2. 在提示符处,提供云的配置详情:

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

        注意

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

      2. 选择 openstack 作为目标平台。
      3. 指定用于安装集群的 Red Hat OpenStack Platform(RHOSP)外部网络名称。
      4. 指定用于从外部访问 OpenShift API 的浮动 IP 地址。
      5. 指定至少有 16 GB RAM 用于 control plane 节点,以及计算节点的 8 GB RAM。
      6. 选择集群要部署到的基域。所有 DNS 记录都将是这个基域的子域,并且还包括集群名称。
      7. 为集群输入一个名称。名称长度必须为 14 个或更少字符。
  2. 修改 install-config.yaml 文件。您可以在"安装配置参数"部分找到有关可用参数的更多信息。
  3. 备份 install-config.yaml 文件,以便您可以使用它安装多个集群。

    重要

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

现在,文件 install-config.yaml 位于您指定的目录中。

4.13.1. RHOSP 部署中的自定义子网

另外,您还可以在您选择的 Red Hat OpenStack Platform(RHOSP)子网中部署集群。子网的 GUID 作为 install-config.yaml 文件中的 platform.openstack.machinesSubnet 的值传递。

此子网被用作集群的主子网。默认情况下,其上会创建节点和端口。您可以通过将 platform.openstack.machinesSubnet 属性的值设置为子网的 UUID,在不同的 RHOSP 子网中创建节点和端口。

在使用自定义子网运行 OpenShift Container Platform 安装程序前,请验证您的配置是否满足以下要求:

  • platform.openstack.machinesSubnet 使用的子网启用了 DHCP。
  • platform.openstack.machinesSubnet 的 CIDR 与 networking.machineNetwork 的 CIDR 匹配。
  • 安装程序用户有在此网络上创建端口的权限,包括带有固定 IP 地址的端口。

使用自定义子网的集群有以下限制:

  • 如果您计划安装使用浮动 IP 地址的集群,则必须将 platform.openstack.machinesSubnet 子网附加到连接到 externalNetwork 网络的路由器。
  • 如果在 install-config.yaml 文件中设置了 platform.openstack.machinesSubnet 值,安装程序不会为您的 RHOSP 机器创建专用网络或子网。
  • 您不能与自定义子网同时使用 platform.openstack.externalDNS 属性。要将 DNS 添加到使用自定义子网的集群,请在 RHOSP 网络上配置 DNS。
注意

默认情况下,API VIP 使用 x.x.x.5,Ingress VIP 从网络 CIDR 块获取 x.x.x.7。要覆盖这些默认值,请为 DHCP 分配池之外的 platform.openstack.apiVIPsplatform.openstack.ingressVIPs 设置值。

重要

集群安装后无法调整网络的 CIDR 范围。红帽不提供有关在集群安装过程中确定范围的直接指导,因为它需要仔细考虑每个命名空间创建的 pod 数量。

4.13.2. RHOSP 的自定义 install-config.yaml 文件示例

以下示例 install-config.yaml 文件演示了所有可能的 Red Hat OpenStack Platform (RHOSP) 自定义选项。

重要

此示例文件仅供参考。您必须使用安装程序来获取 install-config.yaml 文件。

例 4.1. 单个堆栈 install-config.yaml 文件示例

apiVersion: v1
baseDomain: example.com
controlPlane:
  name: master
  platform: {}
  replicas: 3
compute:
- name: worker
  platform:
    openstack:
      type: ml.large
  replicas: 3
metadata:
  name: example
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  serviceNetwork:
  - 172.30.0.0/16
  networkType: OVNKubernetes
platform:
  openstack:
    cloud: mycloud
    externalNetwork: external
    computeFlavor: m1.xlarge
    apiFloatingIP: 128.0.0.1
fips: false
pullSecret: '{"auths": ...}'
sshKey: ssh-ed25519 AAAA...

例 4.2. 双堆栈 install-config.yaml 文件示例

apiVersion: v1
baseDomain: example.com
controlPlane:
  name: master
  platform: {}
  replicas: 3
compute:
- name: worker
  platform:
    openstack:
      type: ml.large
  replicas: 3
metadata:
  name: example
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  - cidr: fd01::/48
    hostPrefix: 64
  machineNetwork:
  - cidr: 192.168.25.0/24
  - cidr: fd2e:6f44:5dd8:c956::/64
  serviceNetwork:
  - 172.30.0.0/16
  - fd02::/112
  networkType: OVNKubernetes
platform:
  openstack:
    cloud: mycloud
    externalNetwork: external
    computeFlavor: m1.xlarge
    apiVIPs:
    - 192.168.25.10
    - fd2e:6f44:5dd8:c956:f816:3eff:fec3:5955
    ingressVIPs:
    - 192.168.25.132
    - fd2e:6f44:5dd8:c956:f816:3eff:fe40:aecb
    controlPlanePort:
      fixedIPs:
      - subnet:
          name: openshift-dual4
      - subnet:
          name: openshift-dual6
      network:
        name: openshift-dual
fips: false
pullSecret: '{"auths": ...}'
sshKey: ssh-ed25519 AAAA...

4.13.3. 为机器设置自定义子网

安装程序默认使用的 IP 范围可能与您在安装 OpenShift Container Platform 时创建的 Neutron 子网不匹配。如有必要,通过编辑安装配置文件来更新新机器的 CIDR 值。

先决条件

  • 有 OpenShift Container Platform 安装程序生成的 install-config.yaml 文件。
  • 已安装 Python 3。

流程

  1. 在命令行中,浏览包含 install-config.yamlinventory.yaml 文件的目录。
  2. 在该目录中,运行脚本来编辑 install-config.yaml 文件或手动更新该文件:

    • 要使用脚本设置值,请运行以下命令:

      $ python -c 'import os
      import sys
      import yaml
      import re
      re_os_net_id = re.compile(r"{{\s*os_net_id\s*}}")
      os_net_id = os.getenv("OS_NET_ID")
      path = "common.yaml"
      facts = None
      for _dict in yaml.safe_load(open(path))[0]["tasks"]:
          if "os_network" in _dict.get("set_fact", {}):
              facts = _dict["set_fact"]
              break
      if not facts:
          print("Cannot find `os_network` in common.yaml file. Make sure OpenStack resource names are defined in one of the tasks.")
          sys.exit(1)
      os_network = re_os_net_id.sub(os_net_id, facts["os_network"])
      os_subnet = re_os_net_id.sub(os_net_id, facts["os_subnet"])
      path = "install-config.yaml"
      data = yaml.safe_load(open(path))
      inventory = yaml.safe_load(open("inventory.yaml"))["all"]["hosts"]["localhost"]
      machine_net = [{"cidr": inventory["os_subnet_range"]}]
      api_vips = [inventory["os_apiVIP"]]
      ingress_vips = [inventory["os_ingressVIP"]]
      ctrl_plane_port = {"network": {"name": os_network}, "fixedIPs": [{"subnet": {"name": os_subnet}}]}
      if inventory.get("os_subnet6_range"): 1
          os_subnet6 = re_os_net_id.sub(os_net_id, facts["os_subnet6"])
          machine_net.append({"cidr": inventory["os_subnet6_range"]})
          api_vips.append(inventory["os_apiVIP6"])
          ingress_vips.append(inventory["os_ingressVIP6"])
          data["networking"]["networkType"] = "OVNKubernetes"
          data["networking"]["clusterNetwork"].append({"cidr": inventory["cluster_network6_cidr"], "hostPrefix": inventory["cluster_network6_prefix"]})
          data["networking"]["serviceNetwork"].append(inventory["service_subnet6_range"])
          ctrl_plane_port["fixedIPs"].append({"subnet": {"name": os_subnet6}})
      data["networking"]["machineNetwork"] = machine_net
      data["platform"]["openstack"]["apiVIPs"] = api_vips
      data["platform"]["openstack"]["ingressVIPs"] = ingress_vips
      data["platform"]["openstack"]["controlPlanePort"] = ctrl_plane_port
      del data["platform"]["openstack"]["externalDNS"]
      open(path, "w").write(yaml.dump(data, default_flow_style=False))'
      1
      适用于双栈 (IPv4/IPv6) 环境。

4.13.4. 清空计算机器池

要继续使用您自己的基础架构的安装,请将安装配置文件中的计算机器数量设置为零。之后,您可以手动创建这些机器。

先决条件

  • 有 OpenShift Container Platform 安装程序生成的 install-config.yaml 文件。

流程

  1. 在命令行中,浏览包含 install-config.yaml 的目录。
  2. 在该目录中,运行脚本来编辑 install-config.yaml 文件或手动更新该文件:

    • 要使用脚本设置值,请运行:

      $ python -c '
      import yaml;
      path = "install-config.yaml";
      data = yaml.safe_load(open(path));
      data["compute"][0]["replicas"] = 0;
      open(path, "w").write(yaml.dump(data, default_flow_style=False))'
    • 要手动设置值,打开该文件并将 compute.<first entry>.replicas 的 值设置为 0

4.13.5. RHOSP 提供商网络上的集群部署

您可以使用供应商网络上的主网络接口在 Red Hat OpenStack Platform(RHOSP)上部署 OpenShift Container Platform 集群。提供商网络通常用于为项目提供可用于访问互联网的公共网络的直接访问权限。您还可以在项目间共享提供商网络,作为网络创建流程的一部分。

RHOSP 提供商网络直接映射到数据中心内的现有物理网络。RHOSP 管理员必须创建它们。

在以下示例中,OpenShift Container Platform 工作负载使用提供商网络连接到数据中心:

描述 OpenStack 上四个 OpenShift 工作负载的示意图。每个工作负载都通过 NIC 并使用提供商网络连接到外部数据中心。

在提供商网络上安装的 OpenShift Container Platform 集群不需要租户网络或浮动 IP 地址。安装程序不会在安装过程中创建这些资源。

提供商网络类型示例包括 flat(未标记)和 VLAN(802.1Q 标记)。

注意

集群可以在网络类型允许的情况下支持任意数量的提供商网络连接。例如,VLAN 网络通常支持多达 4096 个连接。

您可以在 RHOSP 文档中的 了解更多有关供应商和租户网络的信息。

4.13.5.1. 集群安装的 RHOSP 提供商网络要求

在安装 OpenShift Container Platform 集群前,您的 Red Hat OpenStack Platform(RHOSP)部署和提供商网络必须满足以下多个条件:

  • RHOSP 网络服务(Neutron)通过 RHOSP 网络 API 启用 并访问。
  • RHOSP 网络服务 启用了端口安全性并允许地址对扩展
  • 提供商网络可以与其他租户共享。

    提示

    使用 openstack network create 命令和 --share 标志来创建可共享的网络。

  • 用于安装集群的 RHOSP 项目必须拥有提供商网络以及适当的子网。

    提示
    要为名为"openshift"的项目创建网络,请输入以下命令
    $ openstack network create --project openshift
    要为名为"openshift"的项目创建子网,请输入以下命令
    $ openstack subnet create --project openshift

    要了解更多有关在 RHOSP 上创建网络的信息,请阅读 提供商网络文档

    如果集群归 admin 用户所有,则必须以该用户身份运行安装程序,以便在网络上创建端口。

    重要

    提供商网络必须由用于创建集群的 RHOSP 项目所有。如果没有,则 RHOSP Compute 服务(Nova)无法从该网络请求端口。

  • 验证提供商网络可以访问 RHOSP 元数据服务 IP 地址,默认为 169.254.169.254

    根据 RHOSP SDN 和网络服务配置,您可能需要在创建子网时提供路由。例如:

    $ openstack subnet create --dhcp --host-route destination=169.254.169.254/32,gateway=192.0.2.2 ...
  • 可选: 要保护网络,请创建 基于角色的访问控制(RBAC) 规则,以限制对单个项目的网络访问。

4.13.5.2. 在提供商网络上部署具有主接口的集群

您可以在 Red Hat OpenStack Platform(RHOSP) 提供商网络上部署具有主网络接口的 OpenShift Container Platform 集群。

先决条件

  • 您的 Red Hat OpenStack Platform(RHOSP)部署被配置为"RHOSP 供应商网络要求用于集群安装"。

流程

  1. 在文本编辑器中,打开 install-config.yaml 文件。
  2. platform.openstack.apiVIPs 属性的值设置为 API VIP 的 IP 地址。
  3. platform.openstack.ingressVIPs 属性的值设置为 Ingress VIP 的 IP 地址。
  4. platform.openstack.machinesSubnet 属性的值设置为提供商网络子网的 UUID。
  5. networking.machineNetwork.cidr 属性的值设置为提供商网络子网的 CIDR 块。
重要

platform.openstack.apiVIPsplatform.openstack.ingressVIPs 属性必须从 networking.machineNetwork.cidr 块中取消分配 IP 地址。

依赖于 RHOSP 提供商网络的集群的安装配置文件部分

        ...
        platform:
          openstack:
            apiVIPs: 1
              - 192.0.2.13
            ingressVIPs: 2
              - 192.0.2.23
            machinesSubnet: fa806b2f-ac49-4bce-b9db-124bc64209bf
            # ...
        networking:
          machineNetwork:
          - cidr: 192.0.2.0/24

1 2
在 OpenShift Container Platform 4.12 及更新的版本中,apiVIPingressVIP 配置设置已弃用。反之,使用列表格式在 apiVIPsingressVIPs 配置设置中输入值。
警告

您不能在将提供商网络用于主网络接口时设置 platform.openstack.externalNetworkplatform.openstack.externalDNS 参数。

在部署集群时,安装程序使用 install-config.yaml 文件在提供商网络上部署集群。

提示

您可以将额外的网络(包括提供商网络)添加到 platform.openstack.additionalNetworkIDs 列表中。

部署集群后,您可以将 pod 附加到额外网络。如需更多信息,请参阅 了解多个网络

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.