1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        K8s 超詳細總結!

        共 4678字,需瀏覽 10分鐘

         ·

        2021-10-17 08:45

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

        一個目標:容器操作



        Kubernetes(k8s)是自動化容器操作的開源平臺。這些容器操作包括:部署、調度和節(jié)點集群間擴展。

        具體功能:

        • 自動化容器部署和復制。

        • 實時彈性收縮容器規(guī)模。

        • 容器編排成組,并提供容器間的負載均衡。

        調度:容器在哪個機器上運行。

        組成:

        • kubectl:客戶端命令行工具,作為整個系統(tǒng)的操作入口。

        • kube-apiserver:以REST API服務形式提供接口,作為整個系統(tǒng)的控制入口。

        • kube-controller-manager:執(zhí)行整個系統(tǒng)的后臺任務,包括節(jié)點狀態(tài)狀況、Pod個數(shù)、Pods和Service的關聯(lián)等。

        • kube-scheduler:負責節(jié)點資源管理,接收來自kube-apiserver創(chuàng)建Pods任務,并分配到某個節(jié)點。

        • etcd:負責節(jié)點間的服務發(fā)現(xiàn)和配置共享。

        • kube-proxy:運行在每個計算節(jié)點上,負責Pod網絡代理。定時從etcd獲取到service信息來做相應的策略。

        • kubelet:運行在每個計算節(jié)點上,作為agent,接收分配該節(jié)點的Pods任務及管理容器,周期性獲取容器狀態(tài),反饋給kube-apiserver。

        • DNS:一個可選的DNS服務,用于為每個Service對象創(chuàng)建DNS記錄,這樣所有的Pod就可以通過DNS訪問服務了。

        下面是K8s的架構拓撲圖:


        兩地三中心



        兩地三中心包括本地生產中心、本地災備中心、異地災備中心。

        兩地三中心要解決的一個重要問題就是數(shù)據(jù)一致性問題。k8s使用etcd組件作為一個高可用、強一致性的服務發(fā)現(xiàn)存儲倉庫。用于配置共享和服務發(fā)現(xiàn)。

        它作為一個受到Zookeeper和doozer啟發(fā)而催生的項目。除了擁有他們的所有功能之外,還擁有以下4個特點:

        • 簡單:基于http+json的api讓你用curl命令就可以輕松使用。

        • 安全:可選SSL客戶認證機制。

        • 快速:每個實例每秒支持一千次寫操作。

        • 可信:使用Raft算法充分實現(xiàn)了分布式。


        四層服務發(fā)現(xiàn)



        先一張圖解釋一下網絡七層協(xié)議:

        k8s提供了兩種方式進行服務發(fā)現(xiàn):

        環(huán)境變量:當創(chuàng)建一個Pod的時候,kubelet會在該Pod中注入集群內所有Service的相關環(huán)境變量。需要注意的是,要想一個Pod中注入某個Service的環(huán)境變量,則必須Service要先比該Pod創(chuàng)建。這一點,幾乎使得這種方式進行服務發(fā)現(xiàn)不可用。

        比如,一個ServiceName為redis-master的Service,對應的ClusterIP:Port為10.0.0.11:6379,則對應的環(huán)境變量為:

        DNS:可以通過cluster add-on的方式輕松的創(chuàng)建KubeDNS來對集群內的Service進行服務發(fā)現(xiàn)。

        以上兩種方式,一個是基于tcp,眾所周知,DNS是基于UDP的,它們都是建立在四層協(xié)議之上。


        五種Pod共享資源



        Pod是K8s最基本的操作單元,包含一個或多個緊密相關的容器,一個Pod可以被一個容器化的環(huán)境看作應用層的“邏輯宿主機”;一個Pod中的多個容器應用通常是緊密耦合的,Pod在Node上被創(chuàng)建、啟動或者銷毀;每個Pod里運行著一個特殊的被稱之為Volume掛載卷,因此他們之間通信和數(shù)據(jù)交換更為高效,在設計時我們可以充分利用這一特性將一組密切相關的服務進程放入同一個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名作為榮期間通信的主機名等。


        六個CNI常用插件



        CNI(Container Network Interface)容器網絡接口,是Linux容器網絡配置的一組標準和庫,用戶需要根據(jù)這些標準和庫來開發(fā)自己的容器網絡插件。CNI只專注解決容器網絡連接和容器銷毀時的資源釋放,提供一套框架,所以CNI可以支持大量不同的網絡模式,并且容易實現(xiàn)。

        下面用一張圖表示六個CNI常用插件:


        七層負載均衡



        提負載均衡就不得不先提服務器之間的通信。

        IDC(Internet Data Center),也可稱 數(shù)據(jù)中心、機房,用來放置服務器。IDC網絡是服務器間通信的橋梁。

        上圖里畫了很多網絡設備,它們都是干啥用的呢?

        路由器、交換機、MGW/NAT都是網絡設備,按照性能、內外網劃分不同的角色。

        • 內網接入交換機:也稱為TOR(top of rack),是服務器接入網絡的設備。每臺內網接入交換機下聯(lián)40-48臺服務器,使用一個掩碼為/24的網段作為服務器內網網段。

        • 內網核心交換機:負責IDC內各內網接入交換機的流量轉發(fā)及跨IDC流量轉發(fā)。

        • MGW/NAT:MGW即LVS用來做負載均衡,NAT用于內網設備訪問外網時做地址轉換。

        • 外網核心路由器:通過靜態(tài)互聯(lián)運營商或BGP互聯(lián)美團統(tǒng)一外網平臺。

        先說說各層負載均衡:

        • 二層負載均衡:基于MAC地址的二層負載均衡。

        • 三層負載均衡:基于IP地址的負載均衡。

        • 四層負載均衡:基于IP+端口的負載均衡。

        • 七層負載均衡:基于URL等應用層信息的負載均衡。

        這里用一張圖來說說四層和七層負載均衡的區(qū)別:

        上面四層服務發(fā)現(xiàn)講的主要是k8s原生的kube-proxy方式。K8s關于服務的暴露主要是通過NodePort方式,通過綁定minion主機的某個端口,然后進行pod的請求轉發(fā)和負載均衡,但這種方式有下面的缺陷:

        • Service可能有很多個,如果每個都綁定一個node主機端口的話,主機需要開放外圍的端口進行服務調用,管理混亂。

        • 無法應用很多公司要求的防火墻規(guī)則。

        理想的方式是通過一個外部的負載均衡器,綁定固定的端口,比如80,然后根據(jù)域名或者服務名向后面的Service ip轉發(fā),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模型從端口分配、域名解析、服務發(fā)現(xiàn)、負載均衡、應用配置等角度看,Pod可以看做是一臺獨立的VM或物理機。

        • 所有容器都可以不用NAT的方式同別的容器通信。

        • 所有節(jié)點都可以在不同NAT方式下同所有容器心痛,反之亦然。

        • 容器的地址和別人看到的地址是同一個地址。

        要符合下面的架構:

        由上圖架構引申出來IP概念從集群外部到集群內部


        十類IP地址



        大家都知道IP地址分為ABCDE類,另外還有5類特殊用途的IP。

        第一類

        A?類:1.0.0.0-1226.255.255.255,默認子網掩碼/8,即255.0.0.0。
        B 類:128.0.0.0-191.255.255.255,默認子網掩碼/16,即255.255.0.0。
        C 類:192.0.0.0-223.255.255.255,默認子網掩碼/24,即255.255.255.0。
        D 類:224.0.0.0-239.255.255.255,一般用于組播。
        E 類:240.0.0.0-255.255.255.255(其中255.255.255.255為全網廣播地址)。E 類地址一般用于研究用途。

        第二類

        0.0.0.0
        嚴格來說,0.0.0.0?已經不是一個真正意義上的?IP?地址了。它表示的是這樣一個集合:所有不清楚的主機和目的網絡。這里的不清楚是指在本機的路由表里沒有特定條目指明如何到達。作為缺省路由。
        127.0.0.1?本機地址。

        第三類

        224.0.0.1?組播地址。
        如果你的主機開啟了IRDPinternet路由發(fā)現(xiàn),使用組播功能),那么你的主機路由表中應該有這樣一條路由。

        第四類

        169.254.x.x
        使用了?DHCP?功能自動獲取了?IP?的主機,DHCP?服務器發(fā)生故障,或響應時間太長而超出了一個系統(tǒng)規(guī)定的時間,系統(tǒng)會為你分配這樣一個?IP,代表網絡不能正常運行。

        第五類

        10.xxx、172.16.x.x~172.31.x.x、192.168.x.x?私有地址。
        大量用于企業(yè)內部。保留這樣的地址是為了避免亦或是哪個接入公網時引起地址混亂。


        如喜歡本文,請點擊右上角,把文章分享到朋友圈
        如有想了解學習的技術點,請留言給若飛安排分享


        作者:stackpush

        來源:blog.csdn.net/huakai_sun/article/details/82378856

        版權申明:內容來源網絡,版權歸原創(chuàng)者所有。除非無法確認,我們都會標明作者及出處,如有侵權煩請告知,我們會立即刪除并表示歉意。謝謝!

        ?關注公眾號:Java后端編程,回復下面關鍵字?

        要Java學習完整路線,回復??路線?

        缺Java入門視頻,回復?視頻?

        要Java面試經驗,回復??面試?

        缺Java項目,回復:?項目?

        進Java粉絲群:?加群?


        PS:如果覺得我的分享不錯,歡迎大家隨手點贊、在看。

        (完)




        加我"微信"?獲取一份 最新Java面試題資料

        請備注:666,不然不通過~


        最近好文


        1、GitHub 近兩萬 Star,可一鍵生成前后端代碼

        2、Spring 官方為什么建議構造器注入?

        3、10000 字講清楚 Spring Boot 注解原理

        4、13個優(yōu)秀的 Vue 開源項目及合集推薦

        5、Java項目實戰(zhàn):利用注解 + 反射消除重復代碼



        最近面試BAT,整理一份面試資料Java面試BAT通關手冊,覆蓋了Java核心技術、JVM、Java并發(fā)、SSM、微服務、數(shù)據(jù)庫、數(shù)據(jù)結構等等。
        獲取方式:關注公眾號并回復?java?領取,更多內容陸續(xù)奉上。
        明天見(??ω??)??
        瀏覽 47
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            操大屁股视频 | 欧成人精品一区二区三区 | 亚洲三级黄色视频 | www亚洲视频 | 一及黄片 | 亚洲字幕在线观看 | 国产91高潮流白浆在线麻豆 | 国产黄色免费视频 | 伊人色淫湿 | 系统快穿双性浪荡受h |