导入 OpenShift 集群

使用此特定于提供商的操作步骤,将现有 OpenShift 集群作为第三方集群导入。除非文档中说明了提供商特定的能力可以负责相应生命周期,否则外部分发版所有者仍需负责 Kubernetes 分发版、节点生命周期以及提供商基础设施生命周期。

前提条件

  • 集群的 Kubernetes 版本和参数必须满足 标准 Kubernetes 集群要求

  • 在集成过程中,需要执行 kubectl 命令。请在可以访问集群的堡垒机上安装 CLI 工具。

  • 若要启用对节点、工作负载(Deployment、StatefulSet、DaemonSet)、Pods 和容器等指标的实时监控,请确保目标集群中已部署 Prometheus

获取 Registry 地址

  • 若要使用平台在 global 集群安装期间部署的 Registry,请在 global 控制节点上运行以下命令:

    if [ "$(kubectl get productbase -o jsonpath='{.items[].spec.registry.preferPlatformURL}')" = 'false' ]; then
        REGISTRY=$(kubectl get cm -n kube-public global-info -o jsonpath='{.data.registryAddress}')
    else
        REGISTRY=$(kubectl get cm -n kube-public global-info -o jsonpath='{.data.platformURL}' | awk -F // '{print $NF}')
    fi
    echo "Registry address is: $REGISTRY"
  • 若要使用 外部 Registry,请手动设置 REGISTRY 变量:

    REGISTRY=<external-registry-address>  # e.g., registry.example.cn:60080 or 192.168.134.43
    echo "Registry address is: $REGISTRY"

检查是否需要额外的 Registry 配置

  1. 运行以下命令,检查 Registry 是否支持 HTTPS 且使用受信任的 CA 证书:

    REGISTRY=<registry-address-from-previous-step>
    
    if curl -s -o /dev/null --retry 3 --retry-delay 5 -- "https://${REGISTRY}/v2/"; then
        echo 'Pass: Registry uses a trusted CA certificate. No extra config needed.'
    else
        echo 'Fail: Registry does not support HTTPS or uses an untrusted certificate. Follow "Trust Insecure Registry".'
    fi
  2. 如果检查失败,请按照以下步骤操作。

信任不安全的 Registry

  1. 登录到所有 OCP 集群节点。

  2. 在每个节点上,配置 Registry 设置:

    sudo -i
    sudo chattr -i /
    
    sudo mkdir -p /etc/systemd/system/crio.service.d/
    cat | sudo tee /etc/systemd/system/crio.service.d/99-registry-cpaas-system.conf << 'EOF'
    [Service]
    ExecStart=
    ExecStart=/usr/bin/crio \
              --insecure-registry='<registry-address>' \  # e.g., registry.example.cn:60080 or 192.168.134.43
              $CRIO_CONFIG_OPTIONS \
              $CRIO_RUNTIME_OPTIONS \
              $CRIO_STORAGE_OPTIONS \
              $CRIO_NETWORK_OPTIONS \
              $CRIO_METRICS_OPTIONS
    EOF
  3. 重启 crio

    sudo systemctl daemon-reload && sudo systemctl restart crio

为集群配置 DNS

修改 global 集群中的 CoreDNS ConfigMap,以配置 DNS。

  1. 在堡垒机上,获取 OCP 集群的基础域名:

    oc get dns cluster -o jsonpath='{.spec.baseDomain}'

    示例输出:

    ocp.example.com
  2. 登录平台管理控制台,切换到 global 集群,然后进入 Cluster Management > Resource Management

  3. 编辑 kube-system 命名空间中的 cpaas-coredns ConfigMap

    使用 OCP 基础域名和 DNS 服务器地址(来自集群节点上的 /etc/resolv.conf)添加一个新块。

    示例:

    Corefile: |
    ocp.example.com:1053 {
        log
        forward . 192.168.31.220
    }
    .:1053 {
        log
        forward . 192.168.31.220
    }

获取集群信息

请从以下方法中选择一种:

方法 1(推荐):获取 KubeConfig 文件

  1. 在堡垒机上搜索 kubeconfig 文件,并确认其中包含 admin 上下文。

  2. 将 kubeconfig 文件从堡垒机复制到本地计算机:

    scp root@<bastion-ip>:</path/to/kubeconfig> <local-path>

方法 2:使用令牌、API Server 地址和 CA 证书

请参见 如何获取集群信息?

导入集群

  1. 在左侧导航中,进入 Cluster Management > Clusters

  2. 单击 Import Cluster

  3. 配置参数:

    参数说明
    Registry存储平台组件镜像的 Registry。Platform Default:global 安装期间配置的 Registry。Private Registry:需要 Registry 地址、端口、用户名和密码。Public Registry:需要 更新云凭据
    Cluster Info可以上传 KubeConfig 文件,也可以手动输入。Cluster Address:API Server 地址。CA Certificate:解码后的 Base64 CA 证书。Authentication:具有 cluster-admin 权限的令牌或客户端证书。
  4. 单击 Check Connectivity

  5. 如果成功,单击 Import。进度可以在执行日志中查看。导入完成后,集群会在列表中显示为健康状态。

网络配置

确保 global 集群与已导入集群之间的网络连通性。请参见 已导入集群的网络配置

部署附加组件

成功集成后,前往 Marketplace 部署所需的附加组件,例如监控、日志采集和日志存储。

在部署日志采集之前,请确保 /var/cpaas/ 具有超过 50GB 的可用空间:

df -h /var/cpaas

更新审计策略

您可以修改集群的审计策略(spec.audit.profile):

  • Default:记录读/写请求的元数据(OAuth access token 创建会记录正文)。
  • WriteRequestBodies:记录所有请求的元数据以及写请求正文。
  • AllRequestBodies:记录所有请求的元数据和正文。

敏感资源(例如 Secrets、Routes、OAuthClient)仅记录元数据。

使用以下命令更新:

oc edit apiserver cluster

常见问题

为什么 “Add Node” 按钮被禁用?

不支持通过平台 UI 添加节点。请使用该发行版提供商的方法。

支持哪些证书?

  1. Kubernetes Certificates:仅可见 API Server 证书,不支持自动轮换。
  2. Platform Component Certificates:可见并可自动轮换。

此特定于提供商的导入路径有哪些限制?

  • 审计数据采集。
  • ETCD、Scheduler、Controller Manager 监控(仅提供 API Server 指标)。
  • 除 API Server 之外的证书。