k8s入門

 

  一個目標:容器操做;兩地三中心;四層服務發現;五種Pod共享資源;六個CNI經常使用插件;七層負載均衡;八種隔離維度;九個網絡模型原則;十類IP地址;百級產品線;千級物理機;萬級容器;相如無億,K8s有億:億級日服務人次。node

一個目標:容器操做
Kubernetes(k8s)是自動化容器操做的開源平臺。這些容器操做包括:部署,調度和節點集羣間擴展。
具體功能:
自動化容器部署和複製。
實時彈性收縮容器規模。
容器編排成組,並提供容器間的負載均衡。
調度:容器在哪一個機器上運行。
組成:
kubectl:客戶端命令行工具,做爲整個系統的操做入口。
kube-apiserver:以REST API服務形式提供接口,做爲整個系統的控制入口。
kube-controller-manager:執行整個系統的後臺任務,包括節點狀態情況、Pod個數、Pods和Service的關聯等。
kube-scheduler:負責節點資源管理,接收來自kube-apiserver建立Pods任務,並分配到某個節點。
etcd:負責節點間的服務發現和配置共享。
kube-proxy:運行在每一個計算節點上,負責Pod網絡代理。定時從etcd獲取到service信息來作相應的策略。
kubelet:運行在每一個計算節點上,做爲agent,接收分配該節點的Pods任務及管理容器,週期性獲取容器狀態,反饋給kube-apiserver。
DNS:一個可選的DNS服務,用於爲每一個Service對象建立DNS記錄,這樣全部的Pod就能夠經過DNS訪問服務了。
下面是K8s的架構拓撲圖:
圖片描述redis

兩地三中心
兩地三中心包括本地生產中心、本地災備中心、異地災備中心。
圖片描述
兩地三中心要解決的一個重要問題就是數據一致性問題。k8s使用etcd組件做爲一個高可用、強一致性的服務發現存儲倉庫。用於配置共享和服務發現。
它做爲一個受到Zookeeper和doozer啓發而催生的項目。除了擁有他們的全部功能以外,還擁有如下4個特色:
簡單:基於http+json的api讓你用curl命令就能夠輕鬆使用。
安全:可選SSL客戶認證機制。
快速:每一個實例每秒支持一千次寫操做。
可信:使用Raft算法充分實現了分佈式。算法

四層服務發現
先一張圖解釋一下網絡七層協議:
圖片描述
k8s提供了兩種方式進行服務發現:
環境變量:當建立一個Pod的時候,kubelet會在該Pod中注入集羣內全部Service的相關環境變量。須要注意的是,要想一個Pod中注入某個Service的環境變量,則必須Service要先比該Pod建立。這一點,幾乎使得這種方式進行服務發現不可用。
好比,一個ServiceName爲redis-master的Service,對應的ClusterIP:Port爲10.0.0.11:6379,則對應的環境變量爲:
圖片描述
DNS:能夠經過cluster add-on的方式輕鬆的建立KubeDNS來對集羣內的Service進行服務發現。
以上兩種方式,一個是基於tcp,衆所周知,DNS是基於UDP的,它們都是創建在四層協議之上。docker

五種Pod共享資源
Pod是K8s最基本的操做單元,包含一個或多個緊密相關的容器,一個Pod能夠被一個容器化的環境看做應用層的「邏輯宿主機」;一個Pod中的多個容器應用一般是緊密耦合的,Pod在Node上被建立、啓動或者銷燬;每一個Pod裏運行着一個特殊的被稱之爲Volume掛載卷,所以他們之間通訊和數據交換更爲高效,在設計時咱們能夠充分利用這一特性將一組密切相關的服務進程放入同一個Pod中。
圖片描述
同一個Pod裏的容器之間僅需經過localhost就能互相通訊。一個Pod中的應用容器共享五種資源:
PID命名空間:Pod中的不一樣應用程序能夠看到其餘應用程序的進程ID。
網絡命名空間:Pod中的多個容器可以訪問同一個IP和端口範圍。
IPC命名空間:Pod中的多個容器可以使用SystemV IPC或POSIX消息隊列進行通訊。
UTS命名空間:Pod中的多個容器共享一個主機名。
Volumes(共享存儲卷):Pod中的各個容器能夠訪問在Pod級別定義的Volumes。
Pod的生命週期經過Replication Controller來管理;經過模板進行定義,而後分配到一個Node上運行,在Pod所包含容器運行結束後,Pod結束。
Kubernetes爲Pod設計了一套獨特的網絡配置,包括:爲每一個Pod分配一個IP地址,使用Pod名做爲榮期間通訊的主機名等。json

六個CNI經常使用插件
CNI(Container Network Interface)容器網絡接口,是Linux容器網絡配置的一組標準和庫,用戶須要根據這些標準和庫來開發本身的容器網絡插件。CNI只專一解決容器網絡鏈接和容器銷燬時的資源釋放,提供一套框架,因此CNI能夠支持大量不一樣的網絡模式,而且容易實現。
下面用一張圖表示六個CNI經常使用插件:
圖片描述api

七層負載均衡
提負載均衡就不得不先提服務器之間的通訊。
IDC(Internet Data Center),也可稱 數據中心、機房,用來放置服務器。IDC網絡是服務器間通訊的橋樑。
圖片描述
上圖裏畫了不少網絡設備,它們都是幹啥用的呢?
路由器、交換機、MGW/NAT都是網絡設備,按照性能、內外網劃分不一樣的角色。
內網接入交換機:也稱爲TOR(top of rack),是服務器接入網絡的設備。每臺內網接入交換機下聯40-48臺服務器,使用一個掩碼爲/24的網段做爲服務器內網網段。
內網核心交換機:負責IDC內各內網接入交換機的流量轉發及跨IDC流量轉發。
MGW/NAT:MGW即LVS用來作負載均衡,NAT用於內網設備訪問外網時作地址轉換。
外網核心路由器:經過靜態互聯運營商或BGP互聯美團統一外網平臺。
先說說各層負載均衡:
二層負載均衡:基於MAC地址的二層負載均衡。
三層負載均衡:基於IP地址的負載均衡。
四層負載均衡:基於IP+端口的負載均衡。
七層負載均衡:基於URL等應用層信息的負載均衡。
這裏用一張圖來講說四層和七層負載均衡的區別:
圖片描述
上面四層服務發現講的主要是k8s原生的kube-proxy方式。K8s關於服務的暴露主要是經過NodePort方式,經過綁定minion主機的某個端口,而後進行pod的請求轉發和負載均衡,但這種方式有下面的缺陷:
Service可能有不少個,若是每一個都綁定一個node主機端口的話,主機須要開放外圍的端口進行服務調用,管理混亂。
沒法應用不少公司要求的防火牆規則。
理想的方式是經過一個外部的負載均衡器,綁定固定的端口,好比80,而後根據域名或者服務名向後面的Service ip轉發,Nginx很好的解決了這個需求,但問題是若是有的心得服務加入,如何去修改Nginx的配置,而且加載這些配置?Kubernetes給出的方案就是Ingress。這是一個基於7層的方案。安全

八種隔離維度
圖片描述
K8s集羣調度這邊須要對上面從上到下從粗粒度到細粒度的隔離作相應的調度策略。服務器

九個網絡模型原則
K8s網絡模型要符合4個基礎原則,3個網絡要求原則,1個架構原則,1個IP原則。
每一個Pod都擁有一個獨立的IP地址,並且假定全部Pod都在一個能夠直接連通的、扁平的網絡空間中,不論是否運行在同一Node上均可以經過Pod的IP來訪問。
K8s中的Pod的IP是最小粒度IP。同一個Pod內全部的容器共享一個網絡堆棧,該模型稱爲IP-per-Pod模型。
Pod由docker0實際分配的IP,Pod內部看到的IP地址和端口與外部保持一致。同一個Pod內的不一樣容器共享網絡,能夠經過localhost來訪問對方的端口,相似同一個VM內不一樣的進程。
IP-per-Pod模型從端口分配、域名解析、服務發現、負載均衡、應用配置等角度看,Pod能夠看作是一臺獨立的VM或物理機。
全部容器均可以不用NAT的方式同別的容器通訊。
全部節點均可以在不一樣NAT方式下同全部容器心痛,反之亦然。
容器的地址和別人看到的地址是同一個地址。
要符合下面的架構:
圖片描述網絡

由上圖架構引伸出來IP概念從集羣外部到集羣內部
圖片描述架構

十類IP地址
你們都知道IP地址分爲ABCDE類,另外還有5類特殊用途的IP。

    1. A類
      1.0.0.0-1226.255.255.255,默認子網掩碼/8,即255.0.0.0
      2.B類
      128.0.0.0-191.255.255.255,默認子網掩碼/16,即255.255.0.0
      3.C類
      192.0.0.0-223.255.255.255,默認子網掩碼/24,即255.255.255.0
      4.D類
      224.0.0.0-239.255.255.255,通常用於組播
      5.E類
      240.0.0.0-255.255.255.255(其中255.255.255.255爲全網廣播地址),E類地址通常用於研究用途
    2. 0.0.0.0
      嚴格來講,0.0.0.0已經不是一個真正意義上的IP地址了。它表示的是這樣一個集合:全部不清楚的主機和目的網絡。這裏的不清楚是指在本機的路由表裏沒有特定條目指明如何到達。做爲缺省路由。
      7.127.0.0.1
      本機地址
    3. 224.0.0.1
      組播地址。若是你的主機開啓了IRDP(internet路由發現,使用組播功能),那麼你的主機路由表中應該有這樣一條路由。
    4. 169.254.x.x
      使用了DHCP功能自動獲取了IP的主機,DHCP服務器發生故障,或響應時間太長而超出了一個系統規定的時間,系統會爲你分配這樣一個IP,表明網絡不能正常運行。
    5. 10.xxx、172.16.x.x~172.31.x.x、192.168.x.x
      私有地址,大量用於企業內部。保留這樣的地址是爲了不亦或是哪一個接入公網時引發地址混亂。

      百級產品線接入;千級物理機部署;萬級容器儲備;億級日服務人次是咱們的近期目標,歡迎新美大兄弟部門試用(^__^)

相關文章
相關標籤/搜索