k8sでのkube-proxyのiptablesモードとipvsモードに関するディスカッション

著者:李漁

ipvsモードはk8sのバージョン1.8で追加されました。では、iptablesモデルと比較したこのモデルの長所と短所は何ですか。それについて説明しましょう。
まず、ポッドの情報がどのように変化するかを確認しましょう。

まず、kubectlがリクエストを開始し、リクエストがapi-serverに到達すると、api-serverは情報をetcdに保存します。次に、kube-proxyはapi-serverの変更を監視し、情報をサービスに送信してから、iptablesを介してバックエンドエンドポイントに送信します。
この一連のリクエストは、最終的にiptablesを介して渡されます。

バックグラウンドのエンドポイントごとに、どのエンドポイントに送信するかをどのように選択しますか?選択した最初のポッドが応答しない場合、彼は別のポッドを選択して開始します。

これにより問題が発生します。Iptablesはカーネルルールのリストに基づいています。クラスターノードが多いほど、パフォーマンスが低下します。たとえば、1000ノードでノードポートサービスを使用し、1000サービスのそれぞれに10個のポッドがあります。次に、各ノードに少なくとも10,000のiptablesルールがあり、カーネルが非常にビジーになります。マシンのパフォーマンスが大幅に低下します。

次に、ipvsモードを確認します。このモードでは、kube-proxyは引き続きサービスの変更を監視しています。また、ネットワークインターフェイスを介してipvsルールとサービス情報を定期的に同期します。サービスにアクセスすると、トラフィックはバックエンドエンドポイントアドレスに流れます。

ipvsは、基礎となるデータ構造としてハッシュテーブルを使用するnetfilterフック関数に基づいています。これは、ipvsがルールの同期に使用するトラフィックが少なくなり、ネットワークスループットがより効率的になることを意味します。

ここで、それを要約することができます。

ipvsとiptablesはどちらもnetfilterに基づいています。違いは次のとおりです
。ipvsは大規模クラスターに優れたスケーラビリティとパフォーマンスを提供します。ipvsは
iptablesよりも複雑なレプリケーションバランシングアルゴリズムをサポートします(最小負荷、最小接続、加重ラウンドロビンなど))
Ipvsはサーバーヘルスチェックと接続再試行機能をサポートします

パフォーマンスが非常に優れている理由については、K8Sは常にデフォルトでiptablesを使用していますか?ほとんどの企業はクラスターの大規模な使用を必要としないと彼らは考えていると推定されています。

次に、ipvsモードを試します。

最初に現在のモードを確認してください。私のものはK8S1.18バージョンです。

k8sでのkube-proxyのiptablesモードとipvsモードに関するディスカッション

ipvsモードに変更して、カーネルモジュールがロードされているかどうかを確認します。

[root@adm-master ~]# lsmod|grep ip_vs
ip_vs_sh               12688  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  0 
ip_vs                 145497  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139224  9 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4,nf_conntrack_ipv6
libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack

これは元々空で、ipvsモードに変更されています

[root@adm-master ~]# kubectl edit configmap kube-proxy -n kube-system
configmap/kube-proxy edited

k8sでのkube-proxyのiptablesモードとipvsモードに関するディスカッション

すべてのkube-proxyポッドを削除します

[root@adm-master ~]# kubectl delete pod/kube-proxy-84p9n -n kube-system
pod "kube-proxy-84p9n" deleted
[root@adm-master ~]# kubectl delete pod/kube-proxy-mkbk8 -n kube-system
pod "kube-proxy-mkbk8" deleted
[root@adm-master ~]# kubectl delete pod/kube-proxy-xzwxl -n kube-system
pod "kube-proxy-xzwxl" deleted

ビューモード

k8sでのkube-proxyのiptablesモードとipvsモードに関するディスカッション

ipvs関連のルールを表示します。

ipvsadmをインストールします

yum install -y ipvsadm

k8sでのkube-proxyのiptablesモードとipvsモードに関するディスカッション

おすすめ

転載: blog.51cto.com/14783669/2667539