导入 OpenShift 集群

使用此 provider-specific 操作步骤将现有 OpenShift 集群作为第三方集群导入。除非有文档说明的 provider-specific 功能提供相应的生命周期管理,否则外部发行版所有者仍负责 Kubernetes 发行版、节点生命周期和 provider 基础设施生命周期。

前提条件

  • 集群的 Kubernetes 版本和参数必须满足 Standard Kubernetes Cluster Requirements。

  • 集成期间需要使用 kubectl 命令。在能够访问集群的 bastion 主机上安装 CLI 工具。

  • 若要启用对节点、工作负载(Deployment、StatefulSet、DaemonSet)、Pod 和容器等指标的实时监控,请确保目标集群中已部署 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. 在 bastion 主机上获取 OCP 集群基础域:

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

    示例输出:

    ocp.example.com
  2. 登录平台管理控制台,切换到 global 集群,然后转到 集群管理 > 资源管理。

  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. 在 bastion 主机上搜索 kubeconfig 文件,并确认其中包含 admin 上下文。

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

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

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

请参阅如何获取集群信息?。

导入集群

  1. 在左侧导航栏中,转到集群管理 > 集群。

  2. 单击导入集群。

  3. 配置参数:

    参数描述
    Registry存储平台组件镜像的 Registry。平台默认:全局设置期间配置的 Registry。私有 Registry:需要提供 Registry 地址、端口、用户名和密码。公有 Registry:需要更新云凭据。
    集群信息上传 KubeConfig 文件或手动输入。集群地址:API Server 地址。CA 证书:经过 Base64 解码的 CA 证书。身份验证:具有 cluster-admin 权限的令牌或客户端证书。
  4. 单击检查连接。

  5. 如果检查成功,单击导入。可以在执行日志中查看进度。导入后,集群会在列表中显示为运行正常。

网络配置

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

部署附加组件

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

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

df -h /var/cpaas

更新审计策略

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

  • Default:记录读写请求的元数据(OAuth 访问令牌创建日志会记录请求正文)。
  • WriteRequestBodies:记录所有请求的元数据,以及写入请求的正文。
  • AllRequestBodies:记录所有请求的元数据和正文。

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

使用以下命令更新:

oc edit apiserver cluster

常见问题

为什么“添加节点”按钮处于禁用状态?

平台 UI 不支持添加节点。请使用发行版提供程序的方法。

支持哪些证书?

  1. Kubernetes 证书:仅显示 API Server 证书,不会自动轮换。
  2. 平台组件证书:可见且会自动轮换。

此提供程序专用导入路径的限制

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