我刪除了一個可攜式子網,現在我的 Classic 叢集中的負載平衡器出現故障。 如何回復?

經典

在叢集網路中恢復子網時,請排除相關問題。

您的群集出現網路錯誤。

已刪除可攜式子網路。

完成下列步驟。

  1. 對於遇到問題的叢集,請執行下列指令並記下叢集 ID。

    ibmcloud oc cluster ls
    
  2. 列出叢集正在使用的子網路。 在輸出中,記下叢集正在使用的子網路。

    ibmcloud oc subnets --provider PROVIDER | grep CLUSTER-ID
    
  3. 列出您帳戶中的子網。 檢查帳戶中的子網路清單是否遺漏您在步驟 1 中找到的任何子網路。 這表示您的叢集正在使用已刪除的子網路,這會導致「負載平衡器」失敗。

    ibmcloud sl subnet list
    
    ibmcloud sl subnet detail SUBNET-ID
    
  4. 針對已刪除的每一個子網路,重建它。 如果您的 ALB 或LoadBalancers,請指定工作節點的公用 VLAN ID;對於私有 IP,指定工作節點的私有 VLAN ID。

    ibmcloud oc cluster subnet create -c CLUSTER --size 8 --vlan VLAN-ID
    
  5. 在已刪除的可攜式子網路中尋找任何使用 IP 位址的 LoadBalancers,儲存它們,然後刪除它們。 請勿刪除 openshift-ingress 名稱空間中的 LoadBalancers,因為稍後在這些步驟中會刪除那些。

    1. 尋找 LoadBalancer 詳細資料,並記下它們使用的 IP 位址。
        kubectl get svc -A -o wide | grep LoadBalancer
        ```
    1. 對於每一個不在使用可攜式 IP 位址之 `openshift-ingress` 名稱空間中的 LoadBalancer,請將設定儲存至 YAML 檔案。
      ```sh {: pre}
      kubectl get svc -o yaml -n LB-NAMESPACE LB-NAME > LB-NAMESPACE.LB-NAME.yaml
    
    1. 刪除 LoadBalancer。
     ```sh {: pre}
     kubectl delete svc -n LB-NAMESPACE LB-NAME
     ```
    
  6. 快速完成下列步驟,因為必須在 openshift-ingress-operator Pod 重新啟動並重建 LoadBalancers之前分離可攜式子網路。

    1. 縮減 Ingress 運算子。
        kubectl scale deploy -n openshift-ingress-operator ingress-operator --replicas 0
        ```
    1. 刪除 `openshift-ingress` 名稱空間中的 LoadBalancers。
    ```sh {: pre}
        kubectl delete svc -n openshift-ingress LB-NAME
        ```
    1. 從叢集分離可攜式子網路。
    ```sh {: pre}
        ibmcloud oc cluster subnet detach -c CLUSTER-ID --subnet-id SUBNET-ID
        ```
    
    
  7. 等待幾分鐘,讓 detach 指令完成,然後檢閱儲存子網路及 IP 位址的 ibm-cloud-provider-vlan-ip-config ConfigMap,以檢查它們是否已分離。

    kubectl get cm -n kube-system ibm-cloud-provider-vlan-ip-config -o yaml
    

    分離過程可能需要 5 至 10 分鐘才能完成。 在等待期間,您可以確保為此叢集建立的新可攜式子網路也出現在 ConfigMap 中。

  8. 檢查是否已重建 openshift-ingress 名稱空間中的 LoadBalancers,如果是,請檢查使用的 IP 位址是否來自新的子網路。 如果它們來自舊子網路,請使用 kubectl delete svc -n openshift-ingress LOADBALANCER_NAME 指令再次刪除它們。

  9. 在使用來自新子網路的 IP 位址重建 openshift-ingress LoadBalancers 之後,請將新的 IP 位址新增至 DNS 記錄。

    1. 列出 DNS 項目。
        ibmcloud oc nlb-dns ls -c CLUSTER-ID
        ```
    1. 在輸出中,尋找 `openshift-ingress` 項目,並使用下列指令將新的 IP 位址新增至這些項目。
    ```sh {: pre}
        ibmcloud ks nlb-dns add -c CLUSTER-ID --ip NEW-LOADBALANCE-IP --nlb-host INGRESS-DOMAIN-NAME
        ```
    1. 移除舊 IP。
    ```sh {: pre}
        ibmcloud oc nlb-dns rm classic -c CLUSTER-ID --ip OLD-LOADBALANCER-IP --nlb-host INGRESS-DOMAIN-NAME
        ```
    
  10. 請使用您先前儲存的 YAML 檔案,重新建立任何不在 openshift-ingress 命名空間中、且您已在步驟 3 中刪除的 LoadBalancers

    kubectl apply -f LB-NAMESPACE.LB-NAME.yaml