11.7. 为 GCP 创建安装文件


要使用用户置备的基础架构在 Google Cloud Platform(GCP)上安装 OpenShift Container Platform,您必须生成安装程序部署集群所需的文件,并进行修改,以便集群只创建要使用的机器。您可以生成并自定义 install-config.yaml 文件、Kubernetes 清单和 Ignition 配置文件。您还可以选择在安装准备阶段首先设置独立 var 分区。

11.7.1. 手动创建安装配置文件

安装集群要求您手动创建安装配置文件。

先决条件

  • 您在本地机器上有一个 SSH 公钥来提供给安装程序。该密钥将用于在集群节点上进行 SSH 身份验证,以进行调试和灾难恢复。
  • 已获取 OpenShift Container Platform 安装程序和集群的 pull secret。

流程

  1. 创建一个安装目录来存储所需的安装资产:

    $ mkdir <installation_directory>
    重要

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

  2. 自定义提供的 install-config.yaml 文件模板示例,并将其保存在 <installation_directory> 中。

    注意

    此配置文件必须命名为 install-config.yaml

  3. 备份 install-config.yaml 文件,以便您可以使用它安装多个集群。

    重要

    install-config.yaml 文件会在安装过程的下一步中使用。现在必须备份它。

11.7.2. 启用屏蔽虚拟机

您可在安装集群时使用 Shielded 虚拟机。Shielded 虚拟机具有额外的安全功能,包括安全引导、固件和完整性监控和 rootkit 检测。如需更多信息,请参阅 Google 文档中有关 Shielded 虚拟机 的文档。

注意

目前,在具有 64 位 ARM 基础架构的集群中不支持 Shielded 虚拟机。

流程

  • 在部署集群前,使用文本编辑器编辑 install-config.yaml 文件并添加以下部分之一:

    1. 仅将屏蔽的虚拟机用于 control plane 机器:

      controlPlane:
        platform:
          gcp:
             secureBoot: Enabled
    2. 仅将屏蔽的虚拟机用于计算机器:

      compute:
      - platform:
          gcp:
             secureBoot: Enabled
    3. 将屏蔽的虚拟机用于所有机器:

      platform:
        gcp:
          defaultMachinePlatform:
             secureBoot: Enabled

11.7.3. 启用机密虚拟机

您可在安装集群时使用机密虚拟机。机密虚拟机在处理数据时加密数据。如需更多信息,请参阅 Google 文档中有关 机密计算的内容。您可以同时启用机密虚拟机和 Shielded 虚拟机,虽然它们不相互依赖。

注意

64 位 ARM 架构目前不支持机密虚拟机。

流程

  • 在部署集群前,使用文本编辑器编辑 install-config.yaml 文件并添加以下部分之一:

    1. 仅将机密虚拟机用于 control plane 机器:

      controlPlane:
        platform:
          gcp:
             confidentialCompute: Enabled 1
             type: n2d-standard-8 2
             onHostMaintenance: Terminate 3
      1
      启用机密虚拟机。
      2
      指定支持机密虚拟机的机器类型。机密虚拟机需要 N2D 或 C2D 系列机器类型。有关支持的机器类型的更多信息,请参阅支持的操作系统和机器类型
      3
      指定主机维护事件期间虚拟机的行为,如硬件或软件更新。对于使用机密虚拟机的机器,此值必须设置为 Terminate,这会停止虚拟机。机密虚拟机不支持实时迁移。
    2. 仅将机密虚拟机用于计算机器:

      compute:
      - platform:
          gcp:
             confidentialCompute: Enabled
             type: n2d-standard-8
             onHostMaintenance: Terminate
    3. 将机密虚拟机用于所有机器:

      platform:
        gcp:
          defaultMachinePlatform:
             confidentialCompute: Enabled
             type: n2d-standard-8
             onHostMaintenance: Terminate

11.7.4. GCP 的自定义 install-config.yaml 文件示例

您可以自定义 install-config.yaml 文件,以指定有关 OpenShift Container Platform 集群平台的更多详情,或修改所需参数的值。

重要

此示例 YAML 文件仅供参考。您必须使用安装程序来获取 install-config.yaml 文件,并进行修改。

apiVersion: v1
baseDomain: example.com 1
controlPlane: 2
  hyperthreading: Enabled 3 4
  name: master
  platform:
    gcp:
      type: n2-standard-4
      zones:
      - us-central1-a
      - us-central1-c
      tags: 5
      - control-plane-tag1
      - control-plane-tag2
  replicas: 3
compute: 6
- hyperthreading: Enabled 7
  name: worker
  platform:
    gcp:
      type: n2-standard-4
      zones:
      - us-central1-a
      - us-central1-c
      tags: 8
      - compute-tag1
      - compute-tag2
  replicas: 0
metadata:
  name: test-cluster
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  machineNetwork:
  - cidr: 10.0.0.0/16
  networkType: OVNKubernetes 9
  serviceNetwork:
  - 172.30.0.0/16
platform:
  gcp:
    defaultMachinePlatform:
      tags: 10
      - global-tag1
      - global-tag2
    projectID: openshift-production 11
    region: us-central1 12
pullSecret: '{"auths": ...}'
fips: false 13
sshKey: ssh-ed25519 AAAA... 14
publish: Internal 15
1
指定主机项目上的公共 DNS。
2 6
如果没有提供这些参数和值,安装程序会提供默认值。
3 7
controlPlane 部分是一个单个映射,但 compute 部分是一系列映射。为满足不同数据结构的要求,compute 部分的第一行必须以连字符 - 开头,controlPlane 部分 的第一行则不以连字符开头。虽然这两个部分目前都定义了单一机器池,但未来的 OpenShift Container Platform 版本可能在安装过程中支持定义多个计算池。仅使用一个 control plane 池。
4
是否要启用或禁用并发多线程或 超线程。默认情况下,启用并发多线程以提高机器内核的性能。您可以通过将 参数值设置为 Disabled 来禁用它。如果在某些集群机器中禁用并发多线程,则必须在所有集群机器中禁用它。
重要

如果您禁用并发多线程,请确保您的容量规划考虑机器性能显著降低的情况。如果您禁用并发多线程,请为您的机器使用较大的类型,如 n1-standard-8

5 8 10
可选:要应用到 control plane 或计算机器集的一组网络标签。platform.gcp.defaultMachinePlatform.tags 参数将应用到 control plane 和计算机器。如果设置了 compute.platform.gcp.tagscontrolPlane.platform.gcp.tags 参数,它们会覆盖 platform.gcp.defaultMachinePlatform.tags 参数。
9
要安装的集群网络插件。默认值 OVNKubernetes 是唯一支持的值。
11
指定虚拟机实例所在的主项目。
12
指定 VPC 网络所在区域。
13
是否启用或禁用 FIPS 模式。默认情况下不启用 FIPS 模式。如果启用了 FIPS 模式,运行 OpenShift Container Platform 的 Red Hat Enterprise Linux CoreOS(RHCOS)机器会绕过默认的 Kubernetes 加密套件,并使用由 RHCOS 提供的加密模块。
重要

要为集群启用 FIPS 模式,您必须从配置为以 FIPS 模式操作的 Red Hat Enterprise Linux (RHEL) 计算机运行安装程序。有关在 RHEL 中配置 FIPS 模式的更多信息,请参阅在 FIPS 模式中安装该系统。当以 FIPS 模式运行 Red Hat Enterprise Linux (RHEL) 或 Red Hat Enterprise Linux CoreOS (RHCOS)时,OpenShift Container Platform 核心组件使用 RHEL 加密库,在 x86_64、ppc64le 和 s390x 架构上提交到 NIST FIPS 140-2/140-3 Validation。

14
您可以选择提供您用来访问集群中机器的 sshKey 值。
注意

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

15
如何发布集群的面向用户的端点。将 publish 设置为 Internal 以部署一个私有集群,它不能被互联网访问。默认值为 External。要在使用您置备的基础架构的集群中使用共享 VPC,必须将 publish 设置为 Internal。安装程序将不再能够访问主机项目中的基域的公共 DNS 区域。

11.7.5. 在安装过程中配置集群范围的代理

生产环境可能会拒绝直接访问互联网,而是提供 HTTP 或 HTTPS 代理。您可以通过在 install-config.yaml 文件中配置代理设置,将新的 OpenShift Container Platform 集群配置为使用代理。

先决条件

  • 您检查了集群需要访问的站点,并确定它们中的任何站点是否需要绕过代理。默认情况下,所有集群出口流量都经过代理,包括对托管云供应商 API 的调用。如果需要,您将在 Proxy 对象的 spec.noProxy 字段中添加站点来绕过代理。

    注意

    Proxy 对象 status.noProxy 字段使用安装配置中的 networking.machineNetwork[].cidrnetworking.clusterNetwork[].cidrnetworking.serviceNetwork[] 字段的值填充。

    对于在 Amazon Web Services(AWS)、Google Cloud Platform(GCP)、Microsoft Azure 和 Red Hat OpenStack Platform(RHOSP)上安装,Proxy 对象 status.noProxy 字段也会使用实例元数据端点填充(169.254.169.254)。

流程

  1. 编辑 install-config.yaml 文件并添加代理设置。例如:

    apiVersion: v1
    baseDomain: my.domain.com
    proxy:
      httpProxy: http://<username>:<pswd>@<ip>:<port> 1
      httpsProxy: https://<username>:<pswd>@<ip>:<port> 2
      noProxy: example.com 3
    additionalTrustBundle: | 4
        -----BEGIN CERTIFICATE-----
        <MY_TRUSTED_CA_CERT>
        -----END CERTIFICATE-----
    additionalTrustBundlePolicy: <policy_to_add_additionalTrustBundle> 5
    1
    用于创建集群外 HTTP 连接的代理 URL。URL 方案必须是 http
    2
    用于创建集群外 HTTPS 连接的代理 URL。
    3
    要从代理中排除的目标域名、IP 地址或其他网络 CIDR 的逗号分隔列表。在域前面加上 . 以仅匹配子域。例如,.y.com 匹配 x.y.com,但不匹配 y.com。使用 * 绕过所有目的地的代理。
    4
    如果提供,安装程序会在 openshift-config 命名空间中生成名为 user-ca-bundle 的配置映射,其包含代理 HTTPS 连接所需的一个或多个额外 CA 证书。然后,Cluster Network Operator 会创建 trusted-ca-bundle 配置映射,将这些内容与 Red Hat Enterprise Linux CoreOS(RHCOS)信任捆绑包合并, Proxy 对象的 trustedCA 字段中也会引用此配置映射。additionalTrustBundle 字段是必需的,除非代理的身份证书由来自 RHCOS 信任捆绑包的颁发机构签名。
    5
    可选:决定 Proxy 对象的配置以引用 trustedCA 字段中 user-ca-bundle 配置映射的策略。允许的值是 ProxyonlyAlways。仅在配置了 http/https 代理时,使用 Proxyonly 引用 user-ca-bundle 配置映射。使用 Always 始终引用 user-ca-bundle 配置映射。默认值为 Proxyonly
    注意

    安装程序不支持代理的 readinessEndpoints 字段。

    注意

    如果安装程序超时,重启并使用安装程序的 wait-for 命令完成部署。例如:

    $ ./openshift-install wait-for install-complete --log-level debug
  2. 保存该文件并在安装 OpenShift Container Platform 时引用。

安装程序会创建一个名为 cluster 的集群范围代理,该代理 使用 提供的 install-config.yaml 文件中的代理设置。如果没有提供代理设置,仍然会创建一个 cluster Proxy 对象,但它会有一个空 spec

注意

只支持名为 clusterProxy 对象,且无法创建额外的代理。

11.7.6. 创建 Kubernetes 清单和 Ignition 配置文件

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

安装配置文件转换为 Kubernetes 清单。清单嵌套到 Ignition 配置文件中,稍后用于配置集群机器。

重要
  • OpenShift Container Platform 安装程序生成的 Ignition 配置文件包含 24 小时后过期的证书,然后在该时进行续订。如果在更新证书前关闭集群,且集群在 24 小时后重启,集群会自动恢复过期的证书。一个例外是,您必须手动批准待处理的 node-bootstrapper 证书签名请求(CSR)来恢复 kubelet 证书。如需更多信息,请参阅从过期的 control plane 证书 中恢复的文档。
  • 建议您在 Ignition 配置文件生成后的 12 小时内使用它们,因为 24 小时的证书会在集群安装后的 16 小时到 22 小时间进行轮转。通过在 12 小时内使用 Ignition 配置文件,您可以避免在安装过程中因为执行了证书更新而导致安装失败的问题。

流程

  1. 进入包含 OpenShift Container Platform 安装程序的目录,并为集群生成 Kubernetes 清单:

    $ ./openshift-install create manifests --dir <installation_directory> 1
    1
    对于 <installation_directory>,请指定包含您创建的 install-config.yaml 文件的安装目录。
  2. 删除定义 control plane 机器的 Kubernetes 清单文件:

    $ rm -f <installation_directory>/openshift/99_openshift-cluster-api_master-machines-*.yaml

    通过删除这些文件,您可以防止集群自动生成 control plane 机器。

  3. 删除定义 control plane 机器集的 Kubernetes 清单文件:

    $ rm -f <installation_directory>/openshift/99_openshift-machine-api_master-control-plane-machine-set.yaml
  4. 删除定义 worker 机器的 Kubernetes 清单文件:

    $ rm -f <installation_directory>/openshift/99_openshift-cluster-api_worker-machineset-*.yaml

    由于您要自行创建和管理 worker 机器,因此不需要初始化这些机器。

  5. 检查 <installation_directory>/manifests/cluster-scheduler-02-config.yml Kubernetes 清单文件中的 mastersSchedulable 参数是否已设置为 false。此设置可防止在 control plane 机器上调度 pod:

    1. 打开 <installation_directory>/manifests/cluster-scheduler-02-config.yml 文件。
    2. 找到 mastersSchedulable 参数,并确保它被设置为 false
    3. 保存并退出 文件。
  6. 删除 <installation_directory>/manifests/cluster-dns-02-config.yml DNS 配置文件中的 privateZone 部分:

    apiVersion: config.openshift.io/v1
    kind: DNS
    metadata:
      creationTimestamp: null
      name: cluster
    spec:
      baseDomain: example.openshift.com
      privateZone: 1
        id: mycluster-100419-private-zone
    status: {}
    1
    完全删除此部分。
  7. 配置 VPC 的云供应商。

    1. 打开 <installation_directory>/manifests/cloud-provider-config.yaml 文件。
    2. 添加 network-project-id 参数,并将其值设置为托管共享 VPC 网络的项目 ID。
    3. 添加 network-name 参数,并将其值设置为托管 OpenShift Container Platform 集群的共享 VPC 网络的名称。
    4. subnetwork-name 参数的值替换为托管计算机器的共享 VPC 子网的值。

    <installation_directory>/manifests/cloud-provider-config.yaml 的内容类似以下示例:

    config: |+
      [global]
      project-id      = example-project
      regional        = true
      multizone       = true
      node-tags       = opensh-ptzzx-master
      node-tags       = opensh-ptzzx-worker
      node-instance-prefix = opensh-ptzzx
      external-instance-groups-prefix = opensh-ptzzx
      network-project-id = example-shared-vpc
      network-name    = example-network
      subnetwork-name = example-worker-subnet
  8. 如果您部署了一个不属于私有网络的集群,打开 <installation_directory>/manifests/cluster-ingress-default-ingresscontroller.yaml 文件,并将 scope 参数的值替换为 External。该文件类似于以下示例:

    apiVersion: operator.openshift.io/v1
    kind: IngressController
    metadata:
      creationTimestamp: null
      name: default
      namespace: openshift-ingress-operator
    spec:
      endpointPublishingStrategy:
        loadBalancer:
          scope: External
        type: LoadBalancerService
    status:
      availableReplicas: 0
      domain: ''
      selector: ''
  9. 要创建 Ignition 配置文件,请从包含安装程序的目录运行以下命令:

    $ ./openshift-install create ignition-configs --dir <installation_directory> 1
    1
    对于 <installation_directory>,请指定相同的安装目录。

    为安装目录中的 bootstrap、control plane 和计算节点创建 Ignition 配置文件。kubeadmin-passwordkubeconfig 文件在 ./<installation_directory>/auth 目录中创建:

    .
    ├── auth
    │   ├── kubeadmin-password
    │   └── kubeconfig
    ├── bootstrap.ign
    ├── master.ign
    ├── metadata.json
    └── worker.ign
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.