すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Terwayモードの大規模なACKクラスターのNetworkPolicy機能のパフォーマンスを向上させる

最終更新日:Dec 10, 2024

TerwayネットワークプラグインがインストールされているContainer Service for Kubernetes (ACK) クラスターでは、NetworkPolicy機能を使用してポッド間の通信を制御できます。 TerwayがインストールされているACKクラスターに100を超えるノードが含まれている場合、NetworkPolicyプロキシはクラスターの管理に大きな負荷をかけます。 この問題を解決するには、クラスターのNetworkPolicy機能を最適化する必要があります。 このトピックでは、Terwayモードで大規模なACKクラスターのNetworkPolicy機能のパフォーマンスを最適化する方法について説明します。

背景情報

Terwayは、CalicoのFelixエージェントを使用してNetworkPolicy機能を実装します。 100を超えるノードを含むACKクラスターでは、各ノードのFelixエージェントがAPIサーバーからプロキシルールを取得します。 これにより、APIサーバーの負荷が増加します。 APIサーバーの負荷を軽減するには、NetworkPolicy機能を無効にするか、Typhaコンポーネントをリピータとしてデプロイします。

次の方法で、大規模なACKクラスターのNetworkPolicy機能のパフォーマンスを向上させることができます。

  • リピーターとしてTyphaを展開します。

  • NetworkPolicy機能を無効にします。

    説明

    NetworkPolicy機能を無効にすると、ネットワークポリシーを使用してポッド間の通信を制御できなくなります。

前提条件

リピーターとしてTyphaを展開する

  1. ACKコンソールにログインします。

  2. Terwayを最新バージョンに更新します。 詳細については、「コンポーネントの管理」をご参照ください。

    異なるTerwayモードで使用されるコンポーネントは異なります。 詳細については、「Terwayモードの比較」をご参照ください。

  3. calico-typha.yamlという名前のファイルを作成し、次の内容をファイルにコピーして、Typhaをリピーターとして展開します。

    apiVersion: v1
    種類: サービス
    メタデータ:
      名前: calico-typha
      namespace: kube-system
      ラベル:
        k8s-app: calico-typha
    spec:
      ポート:
        -ポート: 5473
          protocol: TCP
          targetPort: calico-typha
          名前: calico-typha
      セレクタ:
        k8s-app: calico-typha
    
    ---
    
    apiVersion: apps/v1
    kind: 配置
    メタデータ:
      名前: calico-typha
      namespace: kube-system
      ラベル:
        k8s-app: calico-typha
    spec:
      replicas: 3# クラスターサイズに基づいてreplicasパラメーターの値を変更します。 200ノードごとに1つのレプリカを作成します。 少なくとも3つのレプリカを作成する必要があります。 
      revisionHistoryLimit: 2
      セレクタ:
        matchLabels:
          k8s-app: calico-typha
      template:
        metadata:
          labels:
            k8s-app: calico-typha
          アノテーション:
            cluster-autoscaler.kubernetes.io/safe-to-evict: 'true'
        仕様:
          nodeSelector:
            kubernetes.io/os: linux
          hostNetwork: true
          tolerations:
            -演算子: 存在
          serviceAccountName: terway
          priorityClassName: system-cluster-critical
          コンテナ:
          -image: registry-vpc.{REGION-ID}.aliyuncs.com/acs/typha:v3.20.2# {REGION-ID} をクラスターのリージョンIDに置き換えます。 
            名前: calico-typha
            ポート:
            -containerPort: 5473
              名前: calico-typha
              protocol: TCP
            env:
              -name: TYPHA_LOGSEVERITYSCREEN
                値: "info"
              -name: TYPHA_LOGFILEPATH
                値: "none"
              -name: TYPHA_LOGSEVERITYSYS
                値: "none"
              -name: TYPHA_CONNECTIONREBALANCINGMODE
                値: "kubernetes"
              -name: TYPHA_DATASTORETYPE
                値: "kubernetes"
              -名前: TYPHA_HEALTHENABLED
                value: "true"
            livenessProbe:
              httpGet:
                path: /liveness
                ポート: 9098
                host: localhost
              periodSeconds: 30
              initialDelaySeconds: 30
            readinessProbe:
              httpGet:
                パス: /ready
                ポート: 9098
                host: localhost
              periodSeconds: 10
    
    ---
    
    apiVersion: policy/v1# クラスターのKubernetesバージョンが1.21より前の場合、apiVersionパラメーターの値をpolicy/v1beta1に設定します。 
    kind: PodDisruptionBudget
    メタデータ:
      名前: calico-typha
      namespace: kube-system
      ラベル:
        k8s-app: calico-typha
    spec:
      maxUnavailable: 1
      セレクタ:
        matchLabels:
          k8s-app: calico-typha
    
    ---
    
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    メタデータ:
      名前: bgppeers.crd.projectcalico.org
    spec:
      scope: クラスター
      グループ: crd.projectcalico.org
      バージョン:
      -name: v1
        サーブ: true
        ストレージ: true
        スキーマ:
          openAPIV3Schema:
            type: object
            プロパティ:
              apiVersion:
                タイプ: string
      名前:
        種類: BGPPeer
        複数: bgppeers
        単数形: bgppeer 
    説明
    • {REGION-ID} を指定されたリージョンIDに置き換えます。

    • クラスターサイズに基づいてreplicasパラメーターの値を変更します。 200ノードごとに1つのレプリカを作成します。 少なくとも3つのレプリカを作成する必要があります。

    • クラスターのKubernetesバージョンに基づいて、PodDisruptionBudgetapiVersionパラメーターの値を変更します。 クラスターのKubernetesバージョンが1.21以降の場合、apiVersionパラメーターの値をpolicy/v1に設定します。 クラスターのKubernetesバージョンが1.21より前の場合、apiVersionパラメーターの値をpolicy/v1beta1に設定します。

  4. 次のコマンドを実行して、Typhaをリピーターとして展開します。

    kubectl apply -f calico-typha.yaml
  5. 次のコマンドを実行して、Terwayプラグインのeni-config設定ファイルを変更します。

    kubectl edit cm eni-config -n kube-system

    felix_relay_service: calico-typhaリピーター設定をファイルに追加し、disable_network_policyパラメーターの値を "false" に設定します。 このパラメーターが使用できない場合、設定は必要ありません。 2つのパラメーターの設定は、eni_confパラメーターと一致する必要があります。

    felix_relay_service: calico-typha
      disable_network_policy: "false"# このパラメーターが使用できない場合は、設定を追加する必要はありません。
  6. 次のコマンドを実行してTerwayを再起動します。

    kubectl get pod -n kube-system | grep terway | awk '{print $1}' | xargs kubectl delete -n kube-system pod

    期待される出力:

    ポッド「terway-eniip-8hmz7」を削除
    ポッド "terway-eniip-dclfn" を削除
    ポッド "terway-eniip-rmctm" を削除
    ... 

NetworkPolicy機能の無効化

ネットワークポリシーを使用する必要がなくなった場合は、NetworkPolicy機能を無効にして、APIサーバーの負荷を軽減できます。 重い負荷は、NetworkPolicyプロキシによって引き起こされます。

  1. 次のコマンドを実行して、eni-configTerwayプラグインの設定ファイルを作成し、disable_network_policy: "true" 設定を追加してNetworkPolicy機能を無効にします。

    kubectl edit cm -n kube-system eni-config
    # 次の設定を追加または変更します (このキーが存在する場合) 。disable_network_policy: "true" 
  2. 次のコマンドを実行してTerwayを再起動します。

    kubectl get pod -n kube-system | grep terway | awk '{print $1}' | xargs kubectl delete -n kube-system pod

    期待される出力:

    ポッド「terway-eniip-8hmz7」を削除
    ポッド "terway-eniip-dclfn" を削除
    ポッド "terway-eniip-rmctm" を削除
    ... 

結果

上記の操作が完了すると、NetworkPolicyプロキシはTyphaコンポーネントの使用を開始します。 これにより、APIサーバーの負荷が軽減されます。 Server Load Balancer (SLB) インスタンスに配信されるトラフィックを監視して、APIサーバーの負荷が軽減されているかどうかを確認できます。