12.4.16. 准备 bootstrap Ignition 文件

OpenShift Container Platform 安装过程依赖于从 bootstrap Ignition 配置文件创建的 bootstrap 机器。

编辑该文件并上传该文件。然后,创建 Red Hat OpenStack Platform(RHOSP)用来下载主文件的辅助 bootstrap Ignition 配置文件。

先决条件

  • 您有安装程序生成的 bootstrap Ignition 文件,即 bootstrap.ign
  • 安装程序元数据文件中的基础架构 ID 被设置为环境变量($INFRA_ID)。

    • 如果未设置变量,请参阅 创建 Kubernetes 清单和 Ignition 配置文件
  • 可以使用 HTTP(S) 来存储 bootstrap ignition 文件。

    • 所记录的步骤使用 RHOSP 镜像服务(Glance),但也可以使用 RHOSP Storage 服务(Swift)、Amazon S3、内部 HTTP 服务器或临时 Nova 服务器。

流程

  1. 运行以下 Python 脚本。该脚本修改 bootstrap Ignition 文件,以设置主机名,并在运行时设置 CA 证书文件:

    import base64
    import json
    import os
    
    with open('bootstrap.ign', 'r') as f:
        ignition = json.load(f)
    
    files = ignition['storage'].get('files', [])
    
    infra_id = os.environ.get('INFRA_ID', 'openshift').encode()
    hostname_b64 = base64.standard_b64encode(infra_id + b'-bootstrap\n').decode().strip()
    files.append(
    {
        'path': '/etc/hostname',
        'mode': 420,
        'contents': {
            'source': 'data:text/plain;charset=utf-8;base64,' + hostname_b64
        }
    })
    
    ca_cert_path = os.environ.get('OS_CACERT', '')
    if ca_cert_path:
        with open(ca_cert_path, 'r') as f:
            ca_cert = f.read().encode()
            ca_cert_b64 = base64.standard_b64encode(ca_cert).decode().strip()
    
        files.append(
        {
            'path': '/opt/openshift/tls/cloud-ca-cert.pem',
            'mode': 420,
            'contents': {
                'source': 'data:text/plain;charset=utf-8;base64,' + ca_cert_b64
            }
        })
    
    ignition['storage']['files'] = files;
    
    with open('bootstrap.ign', 'w') as f:
        json.dump(ignition, f)
  2. 使用 RHOSP CLI,创建使用 bootstrap Ignition 文件的镜像:

    $ openstack image create --disk-format=raw --container-format=bare --file bootstrap.ign <image_name>
  3. 获取镜像的详情:

    $ openstack image show <image_name>

    请记录 file 值 ; 它需要遵循 v2/images/<image_ID>/file 格式。

    注意

    验证您创建的镜像是否活跃。

  4. 检索镜像服务的公共地址:

    $ openstack catalog show image
  5. 将公共地址与镜像的 file 值合并,并在存储位置保存结果。位置遵循 <image_service_public_URL>/v2/images/<image_ID>/file 格式。
  6. 生成身份验证令牌并保存令牌 ID:

    $ openstack token issue -c id -f value
  7. 将以下内容插入到名为 $INFRA_ID-bootstrap-ignition.json 的文件中,并编辑位置拥有者以匹配您自己的值:

    {
      "ignition": {
        "config": {
          "merge": [{
            "source": "<storage_url>", 1
            "httpHeaders": [{
              "name": "X-Auth-Token", 2
              "value": "<token_ID>" 3
            }]
          }]
        },
        "security": {
          "tls": {
            "certificateAuthorities": [{
              "source": "data:text/plain;charset=utf-8;base64,<base64_encoded_certificate>" 4
            }]
          }
        },
        "version": "3.2.0"
      }
    }
    1
    ignition.config.merge.source 的值替换为 bootstrap Ignition 文件存储 URL。
    2
    httpHeaders 中将 name 设置为 "X-Auth-Token"
    3
    httpHeaders 中将 value 设为您的令牌 ID。
    4
    如果 bootstrap Ignition 文件服务器使用自签名证书,请包括以 base64 编码的证书。
  8. 保存二级 Ignition 配置文件。

bootstrap Ignition 数据将在安装过程中传递给 RHOSP。

警告

bootstrap Ignition 文件包含敏感信息,如 clouds.yaml 凭证。确定您将其保存在安全的地方,并在完成安装后将其删除。