一、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。
拓撲圖:
缺點:
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使用更低的重定向流量。其同步規則的效率和網絡吞吐量也更高。
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