天天看點

Centos7二進制部署k8s-v1.20.2 ipvs版本(docker、etcd)

一、iptables和ipvs對比

1、概念

  從k8s的1.8版本開始,kube-proxy引入了ipvs模式,ipvs模式與iptables同樣基于netfilter,但是ipvs采用的hash表,iptables采用一條條的規則清單。iptables又是為了防火牆設計的,叢集數量越多iptables規則就越多,而iptables規則是從上到下比對,是以效率就越是低下。是以當service數量達到一定規模時,hash查表的速度優勢就會顯現出來,進而提高service的服務性能

  每個節點的kube-proxy負責監聽api server中service和endpoint的變化情況。将變化資訊寫入本地userspace、iptables、ipvs來實作service負載均衡,使用nat将vip流量轉至endpoint中。由于userspace模式因為可靠性和性能(頻繁切換核心/使用者空間)早已經淘汰,所有的用戶端請求svc,先經過iptables,然後再經過kube-proxy到pod,是以性能很差。

ipvs和iptables都是基于netfilter的,兩者差别如下:

  ipvs 為大型叢集提供了更好的可擴充性和性能

  ipvs 支援比 iptables 更複雜的負載均衡算法(最小負載、最少連接配接、權重等等)

  ipvs 支援伺服器健康檢查和連接配接重試等功能

2、iptables模式

在這種模式下,kube-proxy監視api server中service和endpoint的變化情況。對于每個service,它都生成相應的iptables規則,這些規則捕獲到service的clusterip和port的流量,并将這些流量随機重定向到service後端pod。對于每個endpoint對象,它生成選擇後端pod的iptables規則。

如果選擇的第一個pod沒有響應,kube-proxy将檢測到到第一個pod的連接配接失敗,并将自動重試另一個後端pod。

拓撲圖:

Centos7二進制部署k8s-v1.20.2 ipvs版本(docker、etcd)
Centos7二進制部署k8s-v1.20.2 ipvs版本(docker、etcd)

缺點:

iptables 因為它純粹是為防火牆而設計的,并且基于核心規則清單,叢集數量越多性能越差。

一個例子是,在5000節點叢集中使用 nodeport 服務,如果我們有2000個服務并且每個服務有10個 pod,這将在每個工作節點上至少産生20000個 iptable 記錄,這可能使核心非常繁忙。

3、ipvs模式(nat模式)

在這種模式下,kube-proxy監聽api server中service和endpoint的變化情況,調用netlink接口建立相應的ipvs規則,并定期将ipvs規則與kubernetes服 services和endpoints同步。保證ipvs狀态。當通路services時,ipvs将流量定向到後端pod之一。

ipvs代理模式基于netfilter hook函數,該函數類似于iptables模式,但使用hash表作為底層資料結構,在核心空間中工作。這意味着ipvs模式下的kube-proxy使用更低的重定向流量。其同步規則的效率和網絡吞吐量也更高。

Centos7二進制部署k8s-v1.20.2 ipvs版本(docker、etcd)
Centos7二進制部署k8s-v1.20.2 ipvs版本(docker、etcd)

4、ipvs代理模  這種模式,kube-proxy會監視kubernetesservice對象和endpoints。,調用netlink接口以相應ipvs規則并定期與kubernetes service對象和endpoints對象同步ipvs規則,以確定ipvs狀态與期望一緻,通路服務時,流量将重定向到具中一個後端pod與iptables類似,ipvs于netfilter的hook功能,但使用希表作為底層資料結構并在核心空間中工作。這意ipvs可以更快地重定向流量,并且在同步代理規則時貝有更好的性能。此外,ipvs為負載均衡算法提供了更多選頂,

冽如:

  rr :輪詢排程 

  lc :最小連接配接數

  dh:目标哈希

  sh:源哈希

  sed:最短期望延遲

  np:不排隊排程

說明:

ipvs依賴iptables進行包過濾、snat、masquared(僞裝)。 使用 ipset 來存儲需要 drop 或 masquared 的流量的源或目标位址,以確定 iptables 規則的數量是恒定的,這樣我們就不需要關心我們有多少服務了

如果沒有加載并啟用ipvs子產品,或者沒有配置ipvs相關配置,則會被降級成iptables模式。

二、安裝前期準備

本次叢集的規劃:

1、作業系統初始化配置

三、安裝etcd叢集

1、準備自簽證書工具

2、配置ca請求檔案

注:

cn:common name,kube-apiserver 從證書中提取該字段作為請求的使用者名 (user name);浏覽器使用該字段驗證網站是否合法;

o:organization,kube-apiserver 從證書中提取該字段作為請求使用者所屬的組 (group)

3、配置ca證書政策

4、配置etcd請求csr檔案

5、部署etcd叢集,下載下傳etcd軟體包

6、建立配置檔案

etcd_name:節點名稱,叢集中唯一

etcd_data_dir:資料目錄

etcd_listen_peer_urls:叢集通信監聽位址

etcd_listen_client_urls:用戶端通路監聽位址

etcd_initial_advertise_peer_urls:叢集通告位址

etcd_advertise_client_urls:用戶端通告位址

etcd_initial_cluster:叢集節點位址

etcd_initial_cluster_token:叢集token

etcd_initial_cluster_state:加入叢集的目前狀态,new是新叢集,existing表示加入已有叢集

7、建立啟動服務檔案

8、同步相關檔案到各個節點

9、啟動etcd叢集

10、檢視叢集狀态

四、部署docker

繼續閱讀