14.3. 使用基于代理的安装程序安装 OpenShift Container Platform 集群

14.3.1. 先决条件

14.3.2. 使用基于代理的安装程序安装 OpenShift Container Platform

以下流程在断开连接的环境中部署单节点 OpenShift Container Platform。您可以使用此流程作为基础,并根据您的要求进行修改。

流程

  1. 使用您的登录凭证登录到 OpenShift Container Platform web 控制台。
  2. 进入到 Datacenter

    代理安装
  3. 在本地点 Run Agent-based Installer。您会进入 Install OpenShift Container Platform on Bare Metal locally with Agent 页。
  4. 可选: 另外,您还可以在 Select an OpenShift Container Platform cluster type to create 页中点 Bare Metal (x86_64)。您会被定向到 Create a OpenShift Container Platform Cluster: Bare Metal 页面。然后,选择 Local Agent-based 进入 Install OpenShift Container Platform on Bare Metal locally with Agent 页。

    代理安装裸机
  5. 选择操作系统和架构。
  6. Download Installer 下载并提取安装程序。
  7. 您可以通过点 Download pull secretCopy pull secret 下载或复制 pull secret。
  8. Download command-line tools,将 openshift-install 二进制文件放在 PATH 中的目录中。
  9. 运行以下命令来安装 nmstate 依赖项:

    $ sudo dnf install /usr/bin/nmstatectl -y
  10. openshift-install 二进制文件放到 PATH 中的目录中。
  11. 运行以下命令,创建一个目录来存储安装配置:

    $ mkdir ~/<directory_name>
    注意

    这是基于代理的安装的首选方法。使用 ZTP 清单是可选的。

  12. 创建 install-config.yaml 文件:

    $ cat << EOF > ./my-cluster/install-config.yaml
    apiVersion: v1
    baseDomain: test.example.com
    compute:
    - architecture: amd64
      hyperthreading: Enabled
      name: worker
      replicas: 0
    controlPlane:
      architecture: amd64
      hyperthreading: Enabled
      name: master
      replicas: 1
    metadata:
      name: sno-cluster 1
    networking:
      clusterNetwork:
      - cidr: 10.128.0.0/14
        hostPrefix: 23
      machineNetwork:
      - cidr: 192.168.111.0/16
      networkType: OVNKubernetes 2
      serviceNetwork:
      - 172.30.0.0/16
    platform:
      none: {}
    pullSecret: '<pull_secret>' 3
    sshKey: |
      <ssh_pub_key> 4
      EOF
    1
    必需。
    2
    要安装的集群网络插件。支持的值有 OVNKubernetesOpenShiftSDN。默认值为 OVNKubernetes
    3
    输入您的 pull secret。
    4
    输入您的 ssh 公钥。
    注意

    如果将平台设置为 vSpherebaremetal,您可以使用三种方式为集群节点配置 IP 地址端点:

    • IPv4
    • IPv6
    • IPv4 和 IPv6 并行 (dual-stack)

    双栈网络示例

    networking:
      clusterNetwork:
        - cidr: 172.21.0.0/16
          hostPrefix: 23
        - cidr: fd02::/48
          hostPrefix: 64
      machineNetwork:
        - cidr: 192.168.11.0/16
        - cidr: 2001:DB8::/32
      serviceNetwork:
        - 172.22.0.0/16
        - fd03::/112
      networkType: OVNKubernetes
    platform:
      baremetal:
        apiVIPs:
        - 192.168.11.3
        - 2001:DB8::4
        ingressVIPs:
        - 192.168.11.4
        - 2001:DB8::5

    IPv6 仅在裸机平台上被支持。

  13. 创建 agent-config.yaml 文件:

    $ cat > agent-config.yaml << EOF
    apiVersion: v1alpha1
    kind: AgentConfig
    metadata:
      name: sno-cluster
    rendezvousIP: 192.168.111.80 1
    hosts: 2
      - hostname: master-0 3
        interfaces:
          - name: eno1
            macAddress: 00:ef:44:21:e6:a5
        rootDeviceHints: 4
          deviceName: /dev/sdb
        networkConfig: 5
          interfaces:
            - name: eno1
              type: ethernet
              state: up
              mac-address: 00:ef:44:21:e6:a5
              ipv4:
                enabled: true
                address:
                  - ip: 192.168.111.80
                    prefix-length: 23
                dhcp: false
          dns-resolver:
            config:
              server:
                - 192.168.111.1
          routes:
            config:
              - destination: 0.0.0.0/0
                next-hop-address: 192.168.111.2
                next-hop-interface: eno1
                table-id: 254
      EOF
    1
    此 IP 地址用于确定哪些节点执行 bootstrap 过程,以及运行 assisted-service 组件。当您没有在 networkConfig 参数中指定至少一个主机的 IP 地址时,您必须提供 rendezvous IP 地址。如果没有提供此地址,则会从提供的主机的 networkConfig 中选择一个 IP 地址。
    2
    主机配置是可选的。定义的主机数量不能超过 install-config.yaml 文件中定义的主机总数,这是 compute.replicascontrolPlane.replicas 参数的值的总和。
    3
    可选 hostname 参数覆盖从动态主机配置协议 (DHCP) 或反向 DNS 查找中获取的主机名。每个主机必须具有由这些方法提供的唯一主机名。
    4
    rootDeviceHints 参数启用将 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像置备到特定设备。它会按照发现设备的顺序检查设备,并将发现的值与 hint 值进行比较。它使用第一个与 hint 值匹配的发现设备。
    5
    设置此可选参数,以 NMState 格式配置主机的网络接口。
  14. 运行以下命令来创建代理镜像:

    $ openshift-install --dir <install_directory> agent create image
    注意

    Red Hat Enterprise Linux CoreOS (RHCOS) 支持主磁盘上的多路径,允许对硬件故障进行更强大的弹性,以实现更高的主机可用性。在代理 ISO 镜像中默认启用多路径,默认 /etc/multipath.conf 配置。

  15. 在裸机上引导 agent.x86_64.iso 镜像。
  16. 可选: 要了解 bootstrap 主机(这是 rendezvous 主机)重启时,请运行以下命令:

    $ ./openshift-install --dir <install_directory> agent wait-for bootstrap-complete \ 1
        --log-level=info 2
    1
    对于 <install_directory>,请指定到生成代理 ISO 的目录的路径。
    2
    要查看不同的安装详情,请指定 warndebugerror,而不是 info

    输出示例

    ...................................................................
    ...................................................................
    INFO Bootstrap configMap status is complete
    INFO cluster bootstrap is complete

    当 Kubernetes API 服务器提示已在 control plane 机器上引导它时,该命令会成功。

  17. 要跟踪进度并验证安装正常,请运行以下命令:

    $ openshift-install --dir <install_directory> agent wait-for install-complete 1
    1
    对于 <install_directory> 目录,请指定到生成代理 ISO 的目录的路径。

    输出示例

    ...................................................................
    ...................................................................
    INFO Cluster is installed
    INFO Install complete!
    INFO To access the cluster as the system:admin user when using 'oc', run
    INFO     export KUBECONFIG=/home/core/installer/auth/kubeconfig
    INFO Access the OpenShift web-console here: https://console-openshift-console.apps.sno-cluster.test.example.com

注意

如果使用可选的 ZTP 清单方法,您可以以三种方式通过 AgentClusterInstall.yaml 文件为集群节点配置 IP 地址端点:

  • IPv4
  • IPv6
  • IPv4 和 IPv6 并行 (dual-stack)

双栈网络示例

apiVIP: 192.168.11.3
ingressVIP: 192.168.11.4
clusterDeploymentRef:
  name: mycluster
imageSetRef:
  name: openshift-4.12
networking:
  clusterNetwork:
  - cidr: 172.21.0.0/16
    hostPrefix: 23
  - cidr: fd02::/48
    hostPrefix: 64
  machineNetwork:
  - cidr: 192.168.11.0/16
  - cidr: 2001:DB8::/32
  serviceNetwork:
  - 172.22.0.0/16
  - fd03::/112
  networkType: OVNKubernetes

IPv6 仅在裸机平台上被支持。

其他资源

14.3.3. 从基于代理的安装收集日志数据

使用以下步骤收集有关基于代理的安装失败的日志数据,以便为支持问题单提供。

流程

  1. 运行以下命令并收集输出:

    $ ./openshift-install --dir <install_directory> agent wait-for bootstrap-complete --log-level=debug

    错误信息示例

    ...
    ERROR Bootstrap failed to complete: : bootstrap process timed out: context deadline exceeded

  2. 如果上一命令的输出显示失败,或者 bootstrap 没有进行,请在节点 0 上运行以下命令并收集输出:

    $ ssh core@<node-ip> sudo /usr/local/bin/agent-gather -O > <local_tmp_path>/agent-gather.tar.xz
    注意

    您只需要从节点 0 收集数据,但从每个节点收集数据会很有用。

  3. 如果 bootstrap 完成且集群节点重启,请运行以下命令并收集输出:

    $ ./openshift-install --dir <install_directory> agent wait-for install-complete --log-level=debug
  4. 如果上一命令的输出显示失败,请执行以下步骤:

    1. 运行以下命令,将 kubeconfig 文件导出到您的环境:

      $ export KUBECONFIG=<install_directory>/auth/kubeconfig
    2. 要收集用于调试的信息,请运行以下命令:

      $ oc adm must-gather
    3. 运行以下命令,从工作目录中刚刚创建的 must-gather 目录创建一个压缩文件:

      $ tar cvaf must-gather.tar.gz <must_gather_directory>
  5. 排除 /auth 子目录,将部署期间使用的安装目录附加到 红帽客户门户网站上的 支持问题单中。
  6. 将从此流程收集的所有其他数据添加到您的支持问题单中。

14.3.4. ZTP 自定义资源示例

可选: 您可以使用 Zero touch provisioning (ZTP) 自定义资源 (CR) 对象来使用基于代理的安装程序安装 OpenShift Container Platform 集群。

您可以自定义以下 ZTP 自定义资源,以指定有关 OpenShift Container Platform 集群的更多详情。以下 ZTP 自定义资源示例是单节点集群。

agent-cluster-install.yaml

  apiVersion: extensions.hive.openshift.io/v1beta1
  kind: AgentClusterInstall
  metadata:
    name: test-agent-cluster-install
    namespace: cluster0
  spec:
    clusterDeploymentRef:
      name: ostest
    imageSetRef:
      name: openshift-4.12
    networking:
      clusterNetwork:
      - cidr: 10.128.0.0/14
        hostPrefix: 23
      serviceNetwork:
      - 172.30.0.0/16
    provisionRequirements:
      controlPlaneAgents: 1
      workerAgents: 0
    sshPublicKey: <YOUR_SSH_PUBLIC_KEY>

cluster-deployment.yaml

apiVersion: hive.openshift.io/v1
kind: ClusterDeployment
metadata:
  name: ostest
  namespace: cluster0
spec:
  baseDomain: test.metalkube.org
  clusterInstallRef:
    group: extensions.hive.openshift.io
    kind: AgentClusterInstall
    name: test-agent-cluster-install
    version: v1beta1
  clusterName: ostest
  controlPlaneConfig:
    servingCertificates: {}
  platform:
    agentBareMetal:
      agentSelector:
        matchLabels:
          bla: aaa
  pullSecretRef:
    name: pull-secret

cluster-image-set.yaml

apiVersion: hive.openshift.io/v1
kind: ClusterImageSet
metadata:
  name: openshift-4.12
spec:
  releaseImage: registry.ci.openshift.org/ocp/release:4.12.0-0.nightly-2022-06-06-025509

infra-env.yaml

apiVersion: agent-install.openshift.io/v1beta1
kind: InfraEnv
metadata:
  name: myinfraenv
  namespace: cluster0
spec:
  clusterRef:
    name: ostest
    namespace: cluster0
  pullSecretRef:
    name: pull-secret
  sshAuthorizedKey: <YOUR_SSH_PUBLIC_KEY>
  nmStateConfigLabelSelector:
    matchLabels:
      cluster0-nmstate-label-name: cluster0-nmstate-label-value

nmstateconfig.yaml

apiVersion: agent-install.openshift.io/v1beta1
kind: NMStateConfig
metadata:
  name: master-0
  namespace: openshift-machine-api
  labels:
    cluster0-nmstate-label-name: cluster0-nmstate-label-value
spec:
  config:
    interfaces:
      - name: eth0
        type: ethernet
        state: up
        mac-address: 52:54:01:aa:aa:a1
        ipv4:
          enabled: true
          address:
            - ip: 192.168.122.2
              prefix-length: 23
          dhcp: false
    dns-resolver:
      config:
        server:
          - 192.168.122.1
    routes:
      config:
        - destination: 0.0.0.0/0
          next-hop-address: 192.168.122.1
          next-hop-interface: eth0
          table-id: 254
  interfaces:
    - name: "eth0"
      macAddress: 52:54:01:aa:aa:a1

pull-secret.yaml

apiVersion: v1
kind: Secret
type: kubernetes.io/dockerconfigjson
metadata:
  name: pull-secret
  namespace: cluster0
stringData:
  .dockerconfigjson: 'YOUR_PULL_SECRET'

其他资源