部署k8s(一)


二進制部署

環境准備:

 

 

 

 

 

 

 部署etcd集群

etcd是CoreOs團隊發起的開源項目,它的目標是構建一個高可用的分布式鍵值(key-value)數據庫。etcd內部采用raft協議作為一致性算法,etcd是go語言編寫的。

etcd是服務發現系統,有以下特點:

  • 簡單:安裝配置簡單,而且提供了HTTP API 進行交互,使用也很簡單
  • 安全:支持SSL證書驗證
  • 快速:單實例支持每秒2k+讀操作
  • 可靠:采用raft算法,實現分布式系統數據的可用性和一致性

etcd目前默認使用2379端口提供HTTP API服務,2380端口和peer通信,etcd默認使用2379端口對外為客戶端提供通訊,使用端口2380來進行服務間內部通訊。etcd在生產環境中一般推薦集群方式部署。由於etcd的leader選舉機制,要求至少為3台或以上奇數台。

准備簽發證書環境

CFSSL是CloudFlare公司開源的一款PKI/TLS工具。CFSSL包含一個命令行工具和一個用於簽名、驗證和捆綁TLS證書的HTTP API服務。使用Go語言編寫。

CFSSL使用配置文件生成證書,因此自簽之前,需要生成它識別的json格式的配置文件,CFSSL提供了方便的命令行生成配置文件。CFSSL用來為etcd提供TLS證書,它支持簽三種類型的證書:

  1. client證書:服務端連接客戶端時攜帶的證書,用於客戶端驗證服務端身份,如kube-apiserver訪問etcd
  2. server證書:客戶端連接服務端時攜帶證書,用於服務端驗證客戶端身份,如etcd對外提供服務
  3. peer證書:相互之間連接時使用的證書,如etcd節點之間進行驗證和通信。

在master01節點上操作

下載證書制作工具

創建k8s工作目錄

 啟動etcd服務

 進入卡住狀態等待其他節點加入,這里需要三台etcd服務同時啟動

 

 部署docker引擎

所有node節點部署docker引擎

 

 

 

 finnel網絡配置

k8s中Pod網絡通信

①、Pod內容器與容器之間的通信

在同一個Pod內的容器(Pod內的容器是不會跨宿主機的)共享同一個網絡命令空間,相當於它們在同一台機器上一樣,可以用localhost地址訪問彼此的端口。

②、同一個Node內Pod之間的通信

每個Pod都有一個真實的全局IP地址,同一個Node內的不同Pod之間可以直接采用對方Pod的IP地址進行通信,Pod1與Pod2都是通過Veth連接到同一個docker0網橋,網段相同,所以它們之間可以直接通信。

③、不同Node上Pod之間通信

Pod地址與docker0在同一個網段,docker0網段與宿主機網卡是兩個不同的網段,且不同Node之間的通信只能通過宿主機的物理網卡進行。要想實現不同Node上Pod之間的通信,就必須想辦法通過主機物理網卡IP地址進行尋址和通信。因此要滿足兩個條件:Pod的IP不能沖突,將Pod的IP所在的Node的IP關聯起來,通過這個關聯讓不同Node上Pod之間直接通過內網IP地址通信

Overlay Network:

疊加網絡,在二層或者三層基礎網絡上疊加的一種虛擬網絡技術模式,該網絡中的主機通過虛擬鏈路隧道連接起來(類似於VPN)。

VXLAN:

將源數據包封裝到UDP中,並使用基礎網絡的IP/MAC作為外層報文頭進行封裝,然后再以太網上傳輸,到達目的地后由隧道端點解封轉並將數據發送給目標地址。

Flannel:

Flannel的功能是讓集群中的不同節點主機創建的Docker容器都具有全集群唯一的虛擬IP地址。

Flannel是Overlay網絡的一種,也是將TCP源數據包封裝在另外一種網絡包里面進行路由轉發和通信,目前支持UDP、VXLAN、host-GW3種數據轉發方式。

Kubernetes工作流程:

首先運維人員/用戶發送請求給APIserver,APIserver把用戶的請求信息寫入到etcd分布式存儲中,然后APIserver找controller-manager創建pod,controller-manager通過etcd讀取用戶的請求,根據用戶的請求來創建pod;controller-manager通過APIserver找到scheduler來調度pod,scheduler會通過兩種策略:一種優選策略,一種預算策略篩選出node節點,然后把pod送到對應的node節點上;scheduler通過APIserver找到node對應節點上的kubelet,然后由kubelet創建pod,kubelet會監控node節點上的資源信息(包括pod的狀態);監控到的信息也會通過APIserver存儲到etcd。如果需要把pod發送出去,通過proxy創建轉發規則把服務發布出去供用戶來訪問。proxy承載service,把用戶的請求負載均衡轉發給他所關聯的pod上。

 

 

Flannel工作原理:

 數據從源node節點的pod發出后,會經由docker0網卡轉發到flannel0網卡,在flannel0網卡有個flanneld服務會把這個數據包封裝到udp報文中,然后根據自己在etcd中維護路由表通過物理網卡轉發到目標node節點,數據包到達目標node節點后會被flanneld服務解封裝,然后經由flannel0網卡和docker0網卡轉發到目標pod的容器。

 

 ETCD之Flannel提供說明:

存儲管理Flannel可分配的IP地址段資源,監控ETCD中每個Pod的實際地址,並在內存中建立維護Pod節點路由表。

master01節點上操作

添加flannel網絡配置信息,寫入分配的子網段到etcd中,供flannel使用

 

 查看寫入信息

 

 在所有node節點上操作

 

 創建k8s工作目錄

 

 啟動flannel服務,開啟flannel網絡功能

 

 

 

 這里上面的mtu=1450比別的少了50字節,因為要留給VXLAN50字節來封裝

查看

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM