Kubernetes クラスターで Iptables を Ipvs に置き換える方法

Kubernetes クラスターで Iptables を Ipvs に置き換える方法

k8s の kube-proxy はネットワーク プロキシであり、Kubernetes クラスター内のサービスに対して負荷分散とサービス検出機能を提供する役割を担っていることは誰もが知っています。 kube-proxy はさまざまなモードで実行されますが、iptables モードと ipvs モードは 2 つの一般的なモードです。

iptables と ipvs はどちらも Linux カーネルのネットワーク プロキシ テクノロジであり、負荷分散とサービス検出を実装するために使用できます。ただし、2 つのモードにはいくつかの違いがあります。

さまざまな実装方法

Iptables は iptables ルールに基づいて実装されます。各ノードは、負荷分散とサービス検出を実現するために、iptables に一連のルールを追加します。一方、ipvs はカーネルレベルの負荷分散テクノロジに基づいており、より効率的なネットワーク プロキシ処理を実現できます。

異なるパフォーマンス

高負荷状態では、ipvs モードの kube-proxy はカーネル レベルでネットワーク負荷分散を処理し、より効率的であるため、パフォーマンスが向上します。ただし、シナリオによっては、Iptables モードの方がパフォーマンスが向上することもあります。

さまざまな機能

Iptables モードの Kube-proxy Kubernetes バージョン 1.16 より前では、ポート転送は iptables を使用して実装されていましたが、TCP ベースの負荷分散とサービス検出しか実装できず、レイヤー 4 の負荷分散をサポートできませんでした。 Kubernetes バージョン 1.16 では、レイヤー 4 の負荷分散をサポートするために新しい iptables-nat モードが追加されました。対照的に、ipvs モードは TCP、UDP、SCTP、および 4 層の負荷分散をサポートし、オンライン ハッシュ、IP ハッシュ、ラウンド ロビン、最小接続などの複数の負荷分散アルゴリズムをサポートします。

iptables の欠点の 1 つは、カーネル レベルで動作することです。 iptables ルールが複雑すぎると、システムのパフォーマンスに影響する可能性があります。さらに、iptables ルールはカーネルに集中しているため、変更することが困難です。

Kubernetes システムでは、kubeadm 管理ツールは、kube-proxy を処理するためにデフォルトで ipvs モードを選択します。同時に、Kubernetes は自動プルアップ、ロールバック、フェイルオーバーなどのさまざまな例外処理メカニズムも提供し、システムの信頼性、高可用性、フォールト トレランスを確保します。これにより、iptables 処理中に発生する可能性のある問題を回避し、障害処理とフォールト トレランスにおけるシステム全体のパフォーマンスが向上します。

操作はすべてのノードで実行されます

カーネルサポートを有効にする

cat >> /etc/sysctl.conf << EOF net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF

sysctl -p

ipvsサポートを有効にする

yum -y インストール ipvsadm ipset

一時的な効果

modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4

永続

cat > /etc/sysconfig/modules/ipvs.modules <<EOF modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF

kube-proxyを設定し、マスター上で操作する

インストールにはkubeadminを使用するので、操作は以下のようになります

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

次のように変更します

kind: MasterConfiguration apiVersion: kubeadm.k8s.io/v1alpha1 ... ipvs: excludeCIDRs: null minSyncPeriod: 0s scheduler: "" syncPeriod: 30s kind: KubeProxyConfiguration metricsBindAddress: 127.0.0.1:10249 mode: "ipvs" #修改

マスターでkube-proxyを再起動します

kubectl get ポッド -n kube-system | grep kube-proxy | awk '{print $1}' | xargs kubectl delete pod -n kube-system

ipvsが有効になっているかどうかを確認する

kubectl logs kube-proxy-cvzb4 -n kube-system I0409 03:37:29.194391 1 server_others.go:170] Using ipvs Proxier. W0409 03:37:29.194779 1 proxier.go:401] IPVS scheduler not specified, use rr by default I0409 03:37:29.194981 1 server.go:534] Version: v1.15.3 I0409 03:37:29.214255 1 conntrack.go:52] Setting nf_conntrack_max to 524288 I0409 03:37:29.216744 1 config.go:96] Starting endpoints config controller I0409 03:37:29.216812 1 controller_utils.go:1029] Waiting for caches to sync for endpoints config controller I0409 03:37:29.217445 1 config.go:187] Starting service config controller I0409 03:37:29.218320 1 controller_utils.go:1029] Waiting for caches to sync for service config controller I0409 03:37:29.318218 1 controller_utils.go:1036] Caches are synced for endpoints config controller I0409 03:37:29.318564 1 controller_utils.go:1036] Caches are synced for service config controller

確認する

ポッドに入ると、servicename を ping できるようになります。 iptables を使用する場合、ping を実行すると次のエラーが表示されます。上記の操作を実行すると、すべて正常になります。

 root@xxxxxx-cb4c9cb8c-hpzdl:/opt# ping xxxxxx PING xxxxxx.xxxxx.svc.cluster.local (172.16.140.78) 56(84) bytes of data. From 172.16.8.1 (172.16.8.1) icmp_seq=1 Time to live exceeded From 172.16.8.1 (172.16.8.1) icmp_seq=2 Time to live exceeded

間違い

写真

解決策 (kube-proxy のバージョンを下げる)

 kubectl -n kube-system set image daemonset/kube-proxy *=registry.aliyuncs.com/k8sxio/kube-proxy:v1.17.6

<<:  クラウドコンピューティングデータセンターの持続可能な開発の利点

>>:  Kubernetes 1.28 スケジューラ OOM の根本原因を探る

推薦する

SEOの秘密を探るのは時間の無駄

インターネットや QQ でよく聞かれる質問は、「検索エンジンの秘密は何ですか? どのウェブサイトがウ...

実用的な情報: Baidu のランキングにはキーワードデータの分析のみが必要です

Baidu ランキングは常に SEOER の焦点です。検索エンジン最適化は以前ほど重要ではなく、人気...

yyyhostはどうですか?ロサンゼルスのハイエンド最適化ラインサーバーの簡単なレビュー

yyyhost(~)は、主に中国本土向けに最適化されたロサンゼルス、香港、韓国ソウルのデータセンター...

あなたはいわゆる「SEO」にどれだけ毒されているか

「SEO」中毒事件1 Lu Songsongの記事を読んで、履歴書を提出していると、履歴書を書いてい...

Pacificrack の「Double 12」プロモーション VPS (年間 8.8 ドル、帯域幅 1Gbps) の簡単なレビューです。

Pacificrack はプロモーションを開始しました: 「Pacificrack: Double ...

「4つの強力なツール」がWeiboマーケティングを効果的にする

2009年、「マイクロブログ」という新しい言葉が圧倒的な勢いで世界を席巻し、オバマやH1N1などの言...

クラウド コンピューティングが企業の持続的な成長を支援する 5 つの方法

気候変動の証拠はこれまで以上に明白になっています。世界中で厳しい気象条件が経験され、破壊、大きな苦し...

エッジコンピューティングがトレンドである理由

この記事はLeiphone.comから転載したものです。再印刷が必要な場合は、Leiphone.co...

地域ポータル運営経験の利益分配

前回は「ローカルポータルの運用経験と収益モデルの共有」をさせていただきましたが、今回はオンラインとオ...

雷軍との独占インタビュー:周紅一は携帯電話を作ることでカスペルスキーの物語を再現したい

【序文】雷軍氏は次のように述べた。「360が伝統的なメーカーと提携して携帯電話を作るのは陰謀がある。...

skylakehost: $1.99/KVM/512 メモリ/14g SSD/Phoenix VPS+レビューデータ

2009年に設立された会社であるskylakehostの公式ウェブサイトには電話番号が記載されており...

おすすめ:conoha-日本の大型VPS関連の紹介

conoha.jpのVPSを強くお勧めします! conoha.jp は、日本の gmo.jp (19...

経験がなくても優れたウェブサイト SEO スペシャリストになれますか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています多くの S...

CrownCloud - 半年で 30 ドル / KVM / 2g メモリ / 40g SSD / 3T トラフィック / ロサンゼルス

CrownCloud は 4 年以上運用されています。独自のマシンと AS 番号を持つ標準的なワンマ...

ランキングを向上させるためにキーワードを適切に使用する方法を教える

ウェブマスターになるのは簡単ではありませんし、優れたウェブマスターになるのはさらに困難です。これは、...