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機能を無効にすると、ネットワークポリシーを使用してポッド間の通信を制御できなくなります。
前提条件
Terwayがインストールされ、100を超えるノードを含むACKクラスターが作成されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。
リピーターとしてTyphaを展開する
ACKコンソールにログインします。
Terwayを最新バージョンに更新します。 詳細については、「コンポーネントの管理」をご参照ください。
異なるTerwayモードで使用されるコンポーネントは異なります。 詳細については、「Terwayモードの比較」をご参照ください。
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バージョンに基づいて、
PodDisruptionBudget
のapiVersion
パラメーターの値を変更します。 クラスターのKubernetesバージョンが1.21以降の場合、apiVersion
パラメーターの値をpolicy/v1
に設定します。 クラスターのKubernetesバージョンが1.21より前の場合、apiVersion
パラメーターの値をpolicy/v1beta1
に設定します。
次のコマンドを実行して、Typhaをリピーターとして展開します。
kubectl apply -f calico-typha.yaml
次のコマンドを実行して、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"# このパラメーターが使用できない場合は、設定を追加する必要はありません。
次のコマンドを実行して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プロキシによって引き起こされます。
次のコマンドを実行して、eni-configTerwayプラグインの設定ファイルを作成し、disable_network_policy: "true" 設定を追加してNetworkPolicy機能を無効にします。
kubectl edit cm -n kube-system eni-config # 次の設定を追加または変更します (このキーが存在する場合) 。disable_network_policy: "true"
次のコマンドを実行して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サーバーの負荷が軽減されているかどうかを確認できます。