日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一文带你理解云原生|云原生全景指南

發(fā)布時間:2024/4/11 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一文带你理解云原生|云原生全景指南 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

hi, 大家好,如今幾乎所有大廠都將容器和K8s列入未來的戰(zhàn)略重心,K8s可能將成為下一代分布式操作系統(tǒng),今天分享一篇很經(jīng)典云原生文章(萬字雄文),希望可以幫大家徹底了解到底什么是云原生。

本文是一篇云原生的關鍵知識科普,希望給大家提供一扇云原生的“窗戶”,傳達三個目標:1、透過窗戶看到一棵大樹代表:云原生的藍圖全貌;2、樹上會有很多核心樹干代表:云原生的關鍵技術;3、希望樹干上能摘到果實代表:云原生對我的啟發(fā)

開始閱讀文章前,請角色切換:設想你作為一位中小型 IT 公司 CTO,面對云原生技術決策,你需要回答兩個問題:

1、為什么需要上云?

2、上云有何弊端?

作為一家公司的技術決策者,必須理解上云的利與弊,并結合公司各階段發(fā)展目標給出最適合的技術方案

1 云原生-概述

1.1 云原生-定義

云原生的定義,業(yè)界也是“百家爭鳴”各持觀點,從技術視角理解云原生會相對清晰。云原生的關鍵技術包括:

? 微服務架構:服務與服務之間通過高內聚低耦合的方式交互;

? 容器:作為微服務的最佳載體,提供了一個自包含的打包方式;

? 容器編排:解決了微服務在生產(chǎn)環(huán)境的部署問題;

? 服務網(wǎng)絡:作為基礎設施,解決了服務之間的通信;

? 不可變基礎:設施提升發(fā)布效率,方便快速擴展;

? 聲明式 API:讓系統(tǒng)更加健壯;

  • 命令式 API:可以直接發(fā)出讓服務器執(zhí)行的命令,例如:“運行容器”、”停止容器”等;

  • 聲明式 API:可以聲明期望的狀態(tài),系統(tǒng)將不斷地調整實際狀態(tài),直到與期望狀態(tài)保持一致。

? DevOps:縮短研發(fā)周期,增加部署頻率,更安全地方便:

  • Culture :達成共識

  • Automation:基礎設施自動化

  • Measurement:可度量

  • Sharing:你中有我,我中有你

【私人觀點】

  • 云原生的定義:應用因云而生,即云原生

  • 應用原生被設計為在云上以最佳方式運行,充分發(fā)揮云的優(yōu)勢,是上云的最短路徑

1.2 云原生-技術生態(tài)

1.3 云原生-關鍵技術

云原生關鍵技術包括:微服務,容器,容器編排,服務網(wǎng)絡,不可變基礎,聲明式 API

1.3.1 微服務

微服務是一種用于構建應用的架構方案

將一個復雜的應用拆分成多個獨立自治的服務,服務與服務間通過“高內聚低耦合”的形式交互。

微服務典型架構包括:

  • 服務重構:單體改造成符合業(yè)務的微服務架構;

  • 服務注冊與發(fā)現(xiàn):微服務模塊間的服務生命周期管理;

  • 服務網(wǎng)關:身份認證、路由服務、限流防刷、日志統(tǒng)計;

  • 服務通信:通信技術方案如,RPC vs REST vs 異步消息;

  • 可靠性:服務優(yōu)雅降級,容災,熔斷,多副本。

1.3.2?容器

容器是一種打包應用的方式,可以打包應用中的所有軟件和軟件所依賴的環(huán)境,并可實現(xiàn)跨平臺部署。

容器關鍵技術:namespac 視圖隔離,cgroups 資源隔離 ,Union File System 聯(lián)合文件系統(tǒng)。

容器優(yōu)勢

  • 更高效的利用資源;

  • 更快速的啟動時間;

  • 一致性的運行環(huán)境。

1.3.3 容器編排

容器編排包括:自動化管理和協(xié)調容器的系統(tǒng),專注于容器的生命周期管理和調度。

核心功能

  • 容器調度:依據(jù)策略完成容器與母機綁定;

  • 資源管理:CPU、MEM、GPU、Ports、Device;

  • 服務管理:負載均衡、健康檢查。

  • 1.3.4 服務網(wǎng)格

    服務網(wǎng)格(Service Mesh)是致力于解決服務間通訊的基礎設施層

    • Service Mesh 應對云原生應用的復雜服務拓撲,提供可靠的通信傳遞;

    • 通過一組輕量級網(wǎng)絡代理(Sidecar proxy),與應用程序代碼部署在一起來實現(xiàn),且對應用程序透明。

    Service Mesh 特點

  • 應用程序間通訊的中間層;

  • 輕量級網(wǎng)絡代理,應用程序無感知;

  • 解耦應用的重試、監(jiān)控、追蹤、服務發(fā)現(xiàn)。

  • Service Mesh 主流組件:Istio、MOSN(Modular Open Smart Network)Linkerd。

    1.3.5 不可變基礎設施

    不可變基礎設施(Immutable Infrastructure)(寵物 VS 牲畜)

    • 任何基礎設施實例(服務器、容器等各種軟硬件)一旦創(chuàng)建之后便成為一種只讀狀態(tài),不可對其進行任何更改;

    • 如果需要修改或升級實例,唯一方式是創(chuàng)建一批新實例以替換。

    不可變基礎設施的優(yōu)勢

  • 提升發(fā)布應用效率;

  • 沒有雪花服務器;

  • 快速水平擴展。

  • 1.3.6 聲明式 API

    • 命令式 API:可直接發(fā)出讓服務器執(zhí)行的命令,例如:“運行容器”、“停止容器”等;

    • 聲明式 API:可聲明期望的狀態(tài),系統(tǒng)將不斷地調整實際狀態(tài),直到與期望狀態(tài)保持一致。

    為什么聲明式使系統(tǒng)更加健壯?

    可以類比理解成自動化工程學的閉環(huán)自適應模型

    1.3.7?DevOps

    DevOps 目標 :縮短開發(fā)周期,增加部署頻率,更可靠地發(fā)布

    • 從歷史上開發(fā)和運維相對孤立到開發(fā)和運維之間建立合作,可以增加信任,更快速地發(fā)布新版本。

    DevOps 是一組過程,方法和系統(tǒng)的統(tǒng)稱包括:

    Culture

    文化是 DevOps 中的第一成功要素

    • 由于目標不同,開發(fā)和運維形成一堵墻,DevOps 通過建立開發(fā)和運維之間合作和溝通的文化來消除墻。

    Automation

    • 自動化軟件的開發(fā)和交付,通常包含持續(xù)集成,持續(xù)交付和持續(xù)部署,云原生時代還包括基礎架構的自動化,即 IaC(Infrastructureas code)。

    Measurement

    • 度量尤其重要,通過客觀的測量來確定正在發(fā)生的事情的真實性,驗證是否按預期進行改變。并為不同職能部門達成一致建立客觀基礎。

    Sharing

    • 開發(fā)和運維團隊之間長期存在摩擦的主要原因是缺乏共同的基礎。

    • 開發(fā)參與運維值班,參與軟件的部署和發(fā)布,運維參與架構設計。

    2 容器-Docker

    2.1 Docker 概述

    為什么學習容器技術?

    云時代從業(yè)者:Docker 已成云平臺運行分布式、微服務化應用的行業(yè)標準

    作為有技術追求的程序員,有必要理解云原生的關鍵技術:容器。

    Docker 核心概念:鏡像、容器、倉庫

    鏡像(Image)

  • 一個只讀模板;

  • 由一堆只讀層(read-only layer)重疊;

  • 統(tǒng)一文件系統(tǒng)(UnionFileSystem)整合成統(tǒng)一視角。

  • 容器(Container)

  • 通過鏡像創(chuàng)建的相互隔離的運行實例;

  • 容器與鏡像區(qū)別:最上面那一層可讀可寫層;

  • 運行態(tài)容器定義:一個可讀寫的統(tǒng)一文件系統(tǒng),加上隔離的進程空間,以及包含在其中的應用進程。

  • 倉庫(Repository)

  • 集中存放鏡像文件的地方;

  • Docker Registry 可包含多個倉庫(Repository),每個倉庫可包含多個標簽(Tag),每個標簽對應一個鏡像。

  • 2.2 Docker 關鍵技術

    2.2.1 Namespace 視圖隔離
    • Linux namespace 是一種內核級別的環(huán)境隔離機制,使得其中的進程好像擁有獨立的系統(tǒng)環(huán)境。

    Network namespace 在 Linux 中創(chuàng)建相互隔離的網(wǎng)絡視圖,每個網(wǎng)絡名字空間都有自己獨立的網(wǎng)絡配置,包括:網(wǎng)絡設備、路由表、IPTables 規(guī)則,路由表、網(wǎng)絡協(xié)議棧等。(默認操作是主機默認網(wǎng)絡名字空間)

    2.2.2 control groups(資源隔離)

    Linux Control Group 是內核用于限制進程組資源使用的功能。資源包括:CPU,內存,磁盤 IO 等。

    2.2.3 Union File System(聯(lián)合文件系統(tǒng))

    Union File System, 聯(lián)合文件系統(tǒng):將多個不同位置的目錄聯(lián)合掛載(union mount)到同一個目錄下。

  • Docker 利用聯(lián)合掛載能力,將容器鏡像里的多層內容呈現(xiàn)為統(tǒng)一的 rootfs(根文件系統(tǒng));

  • Rootfs 打包整個操作系統(tǒng)的文件和目錄,是應用運行所需要的最完整的“依賴庫”

  • 2.3 Docker-網(wǎng)絡技術

    Bridge 模式:Docker0 充當網(wǎng)橋,在默認情況下,被限制在 Network Namespace 里的容器進程,是通過 Veth Pair 設備 +宿主機網(wǎng)橋的方式,實現(xiàn)跟同其他容器的數(shù)據(jù)交換。

    一旦一張?zhí)摂M網(wǎng)卡被“插”在網(wǎng)橋上,它就會變成該網(wǎng)橋的“從設備”

    從設備會被“剝奪”調用網(wǎng)絡協(xié)議棧處理數(shù)據(jù)包的資格,從而“降級”成為網(wǎng)橋上的一個端口。

    而這個端口唯一的作用,就是接收流入的數(shù)據(jù)包,然后把這些數(shù)據(jù)包全部交給對應的網(wǎng)橋,由網(wǎng)橋完成轉發(fā)或者丟棄。

    Veth 提供一種連接兩個 network namespace 的方法。Veth 是 Linux 中一種虛擬以太設備,總是成對出現(xiàn)常被稱為 Veth pair。

    可以實現(xiàn)點對點的虛擬連接,可看成一條連接兩張網(wǎng)卡的網(wǎng)線。一端網(wǎng)卡在容器的 Network Namespace 上,另一端網(wǎng)卡在宿主機 Network Namespace 上。任何一張網(wǎng)卡發(fā)送的數(shù)據(jù)包,都可以對端的網(wǎng)卡上收到。

    在物理網(wǎng)絡中,如果需要連接多個主機,會用交換機。在 Linux 中,能夠起到虛擬交換機作用的網(wǎng)絡設備,是網(wǎng)橋(Bridge)。它是一個工作在數(shù)據(jù)鏈路層的設備,主要功能是根據(jù) MAC 地址學習來將數(shù)據(jù)包轉發(fā)到網(wǎng)橋的不同端口(Port)上。

    Bridge 網(wǎng)橋類似交換機,兩個以上 namespace 接入同一個二層網(wǎng)絡。veth pair 一端虛擬網(wǎng)卡加入到 namespace,另一端到網(wǎng)橋上。

    • 路由 routing是通過互聯(lián)的網(wǎng)絡把信息從源地址傳輸?shù)侥康牡刂返幕顒?#xff0c;發(fā)生在 OSI 模型的第三層(網(wǎng)絡層)。Linux 內核提供 IPForwarding 功能,實現(xiàn)不同子網(wǎng)接口間轉發(fā) IP 數(shù)據(jù)包。

    路由器工作原理:

    • 路由器上有多個網(wǎng)絡接口,每個網(wǎng)絡接口處于不同的三層子網(wǎng)上。

    • 根據(jù)內部路由轉發(fā)表將從一個網(wǎng)絡接口中收到的數(shù)據(jù)包轉發(fā)到另一個網(wǎng)絡接口,實現(xiàn)不同三層子網(wǎng)間互通。

    3 容器編排-Kubernetes

    3.1 概述&架構&核心組件

    我認為 Kubernetes 最大成功:讓容器應用進入大規(guī)模工業(yè)生產(chǎn)

    • Kubernetes 的提供特性,幾乎覆蓋一個分布式系統(tǒng)在生產(chǎn)環(huán)境運行的所有關鍵事項。包括:

    Automated rollouts and rollbacks(自動化上線和回滾)

    • 使用 Kubernetes 描述已部署容器的所需狀態(tài),受控的速率將實際狀態(tài)更改為期望狀態(tài)。

    Self-healing(自我修復)

    • Kubernetes 重新啟動失敗的容器、替換容器、殺死不響應用戶定義的運行狀況檢查的容器,并且在準備好服務之前不將其通告給客戶端。

    Service discovery and load balancing(服務發(fā)現(xiàn)與負載均衡)

    • Kubernetes 可以使用 DNS 名稱或自己的 IP 地址公開容器,如果進入容器的流量很大,Kubernetes 可以負載均衡并分配網(wǎng)絡流量,從而實現(xiàn)部署穩(wěn)定。

    Storage orchestration(存儲編排)

    • Kubernetes 允許你自動掛載選擇的存儲系統(tǒng),例如本地存儲、公廠商等。

    Automatic bin packing(自動裝箱)

    • Kubernetes 允許指定每個容器所需 CPU 和內存(RAM)。當容器指定資源請求時,Kubernetes 可以做出更好的決策來管理容器的資源。

    Secret and configuration management(安全和配置管理)

    • Kubernetes 允許存儲和管理敏感信息,例如密碼、OAuth 令牌和 ssh 密鑰。你可在不重建容器鏡像的情況下部署和更新密鑰和應用程序配置,也無需在堆棧配置中暴露密鑰。

    API Service: Kubernetes 各組件通信中樞

    • 資源操作的唯一入口,并提供認證、授權、訪問控制、API 注冊和發(fā)現(xiàn)等機制;

    • 為 Pod, Deployment, Service 等各種對象提供 Restful 接口;

    • 與 etcd 交互的唯一組件。

    Scheduler:負責資源調度,按照預定調度策略將 Pod 調度到相應的機器。

    • Predicates(斷言):淘汰制

    • Priorities(優(yōu)先級):權重計算總分。

    Controller manager:負責維護集群的狀態(tài),比如故障檢測、自動擴展、滾動更新等。

    etcd:分布式的 K-V 存儲,獨立于 Kubernetes 的開源組件

    • 主要存儲關鍵的原數(shù)據(jù),支持水平擴容保障元數(shù)據(jù)的高可用性;

    • 基于Raft 算法實現(xiàn)強一致性,獨特的watch 機制是 Kubernetes 設計的關鍵。

    kubelet :負責維護 Pod 的生命周期,同時負責 Volume(CVI)和網(wǎng)絡(CNI)的管理。

    kube-proxy:負責為 Service 提供 cluster 內部的服務發(fā)現(xiàn)和負載均衡

    • kube-proxy 通過在節(jié)點上添加 iptables 規(guī)則以及從中移除這些規(guī)則來管理此端口重新映射過程。

    控制器模式的設計思想

    容器類比集裝箱,集裝箱固然好用,但是如果它各面光禿禿的,吊車還怎么把它吊起來擺放好呢?

    Pod 對象其實就是容器的升級版,對容器進行組合,添加更多屬性和字段。就好比在集裝箱上安裝了吊環(huán),Kubernetes 這臺“吊車”可以更輕松操作容器。

    然而Kubernetes 操作這些“集裝箱”的邏輯都是由控制器完成的

    Kubernetes 通過“控制器模式” 的設計思想,來統(tǒng)一編排各種對象和資源

    3.2 部署&資源控制&存儲

    Kubernetes-集群部署架構

  • 所有組件通過 kubelet staticpod 的方式啟動保證宿主機各組件的高可用,systemd 提供 kubelet 的高可用;

  • 每個 Master 的使用 hostNetwork 網(wǎng)絡,controller-manager 和 scheduler 通過 localhost 連接到本節(jié)點 apiserver;

  • controller-manager 和 scheduler 的高可用通過自身提供的 leader 選舉功能(--leader-elect=true);

  • apiserver 高可用,可通過經(jīng)典的 haporxy+keepalived 保證,集群對外暴露 VIP;

  • 外部訪問通過 TLS 證書,在 LB 節(jié)點做 TLS Termination,LB 出來 http 請求到對應 apiserver 實例。apiserver 到 kubelet、kube-proxy 類似。

  • 3.3 Kubernetes-網(wǎng)絡技術

    3.3.1 對外服務

    Service是一個邏輯概念一組提供相同功能 Pods 的邏輯集合,并提供四層負載統(tǒng)一入口和定義訪問策略

    交互流程:Service 可通過標簽選取后端服務。匹配標簽的 Pod IP 和端口列表組成 endpoints,有 kube-proxy 負責均衡到對應 endpoint。

    為什么需要 service?

  • 對外提供入口(容器如何被外部訪問);

  • 克服 Pod 動態(tài)性(Pod IP 不一定可以穩(wěn)定依賴);

  • 服務發(fā)現(xiàn)和穩(wěn)定的服務( Pod 服務發(fā)現(xiàn)、負載、高可用)。

  • Service Type 四種方式

  • Cluster IP:配置 endpoint 列表;

  • NodePort:默認端口范圍:30000-32767,通過 nodeIP:nodePort 訪問 ;

  • LoadBalancer:適用于公有云,云廠商實現(xiàn)負載,配置 LoadBalance 到 podIP ;

  • ExternalName:服務通過 DNS CNAME 記錄方式轉發(fā)到指定的域名。

  • Service Type 為 Cluster IP

  • Kubernetes 的默認服務,配置 endpoint 列表,可以通過 proxy 模式來訪問該對應服務;

  • 類似通過 Nginx 實現(xiàn)集群的 VIP。

  • Service Type 為 Node Port

    在集群所有節(jié)點上開放特定端口,任何發(fā)送到該端口流量借助 Service 的 Iptables 規(guī)則鏈發(fā)送到后端 Pod。

    注意事項

  • 每個服務對應一個端口,端口范圍只有 30000–32767;

  • 需要感知和發(fā)現(xiàn)節(jié)點變化,流量轉發(fā)增加 SNAT 流程,Iptables 規(guī)則會成倍增長。

  • 適用場景:服務高可用性要求不高或成本不敏感,例如:樣例服務或臨時服務。

    Service Type 為 Load Balancer

    對公網(wǎng)暴露服務建議采用此方式,Service 沒有對其行為做任何規(guī)范,依賴云廠商 LB 具體實現(xiàn)(云廠商收費服務)如:騰訊公有云:CLB

    Service Type 為 External Name

    DNS 作為服務發(fā)現(xiàn)機制,在集群內提供服務名到 Cluster IP 的解析。

    CoreDNS :DNS 服務,CNCF 第 04 個畢業(yè)項目,KUBERNETES 的 1.11 版本已支持

    CoreDNS 實現(xiàn)的高性能、插件式、易擴展的 DNS 服務端,支持自定義 DNS 記錄及配置 upstream DNS Server,可以統(tǒng)一管理 Kubernetes 基于服務的內部 DNS。

    Ingress Controller:定義入流量規(guī)則,可做七層 HTTP 負載君合。

    Egress Controller:定義出流量規(guī)則。

    交互流程:通過與 Kubernetes API 交互,動態(tài)感知集群 Ingress 規(guī)則,按照自定義的規(guī)則生成(負載均衡器)配置文件,并通過 reload 來重新加載。

    3.3.2 Underlay 與 Overlay 網(wǎng)絡

    Underlay 網(wǎng)絡模式: 底層承載網(wǎng)絡,是網(wǎng)絡通信的基礎

  • 優(yōu)勢:復用基建,網(wǎng)絡扁平,性能優(yōu)勢;

  • 劣勢:協(xié)作復雜,安全問題,管理成本。

  • 很多場景下業(yè)務方希望容器、物理機和虛擬機可以在同一個扁平面中直接通過 IP 進行通信,通過 Floating-IP 網(wǎng)絡實現(xiàn)。

    Floating-IP 模式將宿主機網(wǎng)絡同一網(wǎng)段的 IP 直接配置到容器中。

    這種模式為了保證容器與宿主機的交換機二層連通,需要在物理機上搭一個虛擬網(wǎng)橋。具體選擇哪種網(wǎng)橋,主流有:Linux bridge、MacVlan、SRIOV 三種模式。

  • BridgeBridge:設備內核最早實現(xiàn)的網(wǎng)橋,性能與 OVS 相當,可以使用到所有場景;

  • MacVlan:一個簡化版的 bridge 設備,為了隔離需要內核,實現(xiàn)時不允許 MacVlan 容器訪問其宿主機 IP 和 ServiceCluster IP;

  • SR-IOV 技術:一種基于硬件的虛擬化解決方案,可提高性能和可伸縮性;

    SR-IOV 標準允許在虛擬機之間高效共享 PCIe(快速外設組件互連)設備,并且它是在硬件中實現(xiàn)的,可以獲得能夠與本機性能媲美的 I/O 性能。

  • Overlay 網(wǎng)絡:是一種建立在另一網(wǎng)絡之上的計算機網(wǎng)絡。

  • 優(yōu)勢:獨立自治,快速擴展,網(wǎng)絡策略;

  • 劣勢:復雜層級,性能損失,定制成本。

  • Kubernetes 相當于云原生的操作系統(tǒng)

    有人會問,憑什么云原生的操作系統(tǒng)這桿大旗?

    主要原因是:Kubernetes 解決了一個分布式操作系統(tǒng)最核心的計算、存儲、網(wǎng)絡三種資源

    CNI 容器網(wǎng)絡統(tǒng)一標準

  • CNCF 項目,為 Linux 容器提供配置網(wǎng)絡接口的標準和以該標準擴展插件提供基礎函數(shù)庫;

  • CNI 命令行調用規(guī)范,其插件在主機上直接切換進入容器網(wǎng)絡命名空間,為容器創(chuàng)建網(wǎng)絡設備,配置 IP,路由信息。

  • CNI 規(guī)范內容

  • 輸入:ADD/DEL 控制指令,CNI 目錄,容器 ID,網(wǎng)絡命名空間,網(wǎng)卡名稱。

  • 配置文件:標準部分:cniVersion,Name,Type,IPAM。

  • 輸出:設備列表、IP 資源列表、DNS 信息。

  • 插件應用如

  • Bridge:Linux 網(wǎng)橋 CNI 實現(xiàn),采用網(wǎng)卡對鏈接網(wǎng)橋和容器;

  • Host-device:將主機設備直接移動到容器命名空間中;

  • PTP:創(chuàng)建虛擬網(wǎng)卡對,采用路由方式實現(xiàn)對外互聯(lián);

  • MacVlan:網(wǎng)卡多 Mac 地址虛擬技術完整支持 vlan;

  • Vlan:Vlan 設備 CNI 實現(xiàn),允許容器和主機分屬不同 LAN;

  • IPVlan:網(wǎng)卡上基于 IP 實現(xiàn)流量轉發(fā)。

  • 3.3.3 Overlay 網(wǎng)絡-Flannel 方案

    CoreOS(被 Red Hat 收購)為 Kubernetes 專門定制設計的 overlay 網(wǎng)絡方案。

    03 層網(wǎng)絡方案實現(xiàn):在每臺主機部署 flanneld 進程實現(xiàn)網(wǎng)段分配,路由控制,采用多種轉發(fā)機制實現(xiàn)流量跨機交互。

    Flannel 職責

  • 子網(wǎng)管理:每個主機分配唯一的子網(wǎng);

  • 互聯(lián)方式:為同 Overlay 平面容器分配唯一 IP。

    • Etcd 存儲:容器之間路由映射;

    • SubNetManager:子網(wǎng)資源劃分、IP 資源申請釋放的接口定義;

    • Backend:針對網(wǎng)絡互聯(lián)方式的接口定義。

  • UDP,UDP 封包轉發(fā),建議僅調試使用;

  • VxLAN(建議),使用內核 vxlan 特性實現(xiàn)封包轉發(fā);

  • Host-GW,主機 2 層互聯(lián)情況下較高性能互聯(lián)方式;

  • IPIP,使用 IPIP 隧道完成封包和轉發(fā);

  • IPSec,使用 IPSecurity 實現(xiàn)加密封包轉發(fā);

  • AliVPC,對接阿里云 VPC 路由表實現(xiàn)網(wǎng)絡互聯(lián);

  • AWSVPC,對接 Amazon VPC 路由表實現(xiàn)網(wǎng)絡互聯(lián)。

  • Flannel 的單機互聯(lián)方案

  • 子網(wǎng)分配:充當虛擬交換機/網(wǎng)關角色,連接所有本機容器,完成虛擬子網(wǎng)構建;

  • Bridge:通過 NAT 借助主機網(wǎng)絡實現(xiàn)外部服務訪問;

  • Veth pair:一端設置到容器網(wǎng)絡 namespace,一端鏈接 bridge 實現(xiàn)容器接入網(wǎng)絡;

  • 對外訪問:為每個節(jié)點分配獨立不沖突的 24 位子網(wǎng)。

  • Overlay 解決方案:跨 Node 的 Pod 之間通信通過 Node 之間的 Overlay 隧道。

    職責:路由控制,數(shù)據(jù)轉發(fā)。

    主要流程

  • 本節(jié)點設置:設備創(chuàng)建、本地路由創(chuàng)建、回寫本地信息;

  • 監(jiān)聽其他節(jié)點信息:更新 ARP 信息、更新 FDB、更新路由信息。

  • 3.3.4 Overlay 網(wǎng)絡-Calico 方案

    Calico 項目:是純三層的虛擬網(wǎng)絡解決方案,旨在簡化、擴展和保護云網(wǎng)絡的容器方案。

    Calico 優(yōu)勢

  • 可擴展性:采用 IP 路由支持大規(guī)模網(wǎng)絡。擴展便利,容錯性高;

  • 網(wǎng)絡安全:支持 Kubernetes 網(wǎng)絡策略,支持自定義網(wǎng)絡策略;

  • 廣泛集成:集成 Kubernetes ,Mesos,支持 OpenStack,AWS,GCE,Azure。

  • Calico 不足

  • BGP 支持問題:需要網(wǎng)路設備支持 BGP 協(xié)議,否則需要追加 IPIP 隧道;

  • 規(guī)劃 2 層直連:需要節(jié)點做良好的規(guī)劃實現(xiàn) 2 層網(wǎng)絡直接互聯(lián);

  • 大規(guī)模配置復雜:網(wǎng)絡規(guī)劃,手動部署 Route Reflector,增加 API 代理。

  • 關鍵組件

  • BGP Client:和其他節(jié)點互聯(lián),發(fā)布當前節(jié)點路由并學習其他節(jié)點路由;

  • Confd:同步節(jié)點配置信息啟動 BGPClient;

  • Felix:負責虛擬設備監(jiān)控,ACL 控制、狀態(tài)同步的 agent;

  • Calico:CNI 插件,負責容器設備創(chuàng)建;

  • Calico-IPAM:CNI 插件,負責容器網(wǎng)段管理與 IP 地址管理;

  • RouteReflector:對接 BGPclient 實現(xiàn)路由中轉;

  • Etcd/Kube-apiserver:Calico 數(shù)據(jù)存儲;

  • typha:應對大規(guī)模節(jié)點接入時作為數(shù)據(jù)緩存 proxy;

  • RouteReflector 安裝:集群超過100 個節(jié)點時強烈建議啟用,通過 RR 中轉全局路由信息。

  • Calico 單機互聯(lián)方案

  • Veth-pair:一端設置到容器,一端放置在主機上,為容器提供網(wǎng)絡出入口;

  • 路由策略:針對 IP 和設備設置路由條目,在主機上實現(xiàn)互聯(lián)。

  • Calico 跨機互聯(lián)方案

  • 同網(wǎng)段/BGP 支持:主機之間通過 2 層直連或者網(wǎng)絡支持路由轉發(fā)至目標主機;

  • 跨網(wǎng)段 IPIP 互聯(lián):網(wǎng)絡設備不支持 BGP 協(xié)議情況下,采用 IPIP 隧道實現(xiàn)跨網(wǎng)段互聯(lián);

  • 跨網(wǎng)段 VxLAN 互聯(lián)(Cannel):集成 flannel,底層通過 VxLAN 實現(xiàn)跨機轉發(fā)。


  • 4 服務網(wǎng)格 Istio

    4.1 服務網(wǎng)格概述

    4.2 Istio 控制面

    4.3 Istio 數(shù)據(jù)面


    5 云原生-主流組件

    5.1 Prometheus

    5.2 Grafana

    5.3 Elasticsearch + Fluentd + Kibana

    5.4 Jaeger

    5.5 Chaos Engineering


    6 云原生-常用網(wǎng)絡技術

    6.1 主機網(wǎng)絡

    iptables是運行在用戶空間的應用軟件,通過控制Linux 內核 netfilter,來管理網(wǎng)絡數(shù)據(jù)包的處理和轉發(fā)

    存在“表(tables)”、“鏈(chain)”和“規(guī)則(rules)”三個層面:

  • 每個“”指的是不同類型的數(shù)據(jù)包處理流程,例如 filter 表表示進行數(shù)據(jù)包過濾,而 NAT 表針對連接進行地址轉換操作;

  • 每個表中又可以存在多個“”,系統(tǒng)按照預訂的規(guī)則將數(shù)據(jù)包通過某個內建鏈,例如將從本機發(fā)出的數(shù)據(jù)通過 OUTPUT 鏈;

  • 在“鏈”中可以存在若干“規(guī)則”,這些規(guī)則會被逐一進行匹配,如果匹配,可以執(zhí)行相應的動作,例如修改數(shù)據(jù)包,或者跳轉。

  • 6.2 Underlay 網(wǎng)絡技術

    VLAN 虛擬局域網(wǎng):是將一個物理 LAN 在邏輯上劃分成多個廣播域的通信技術。每個 VLAN 是一個廣播域,VLAN 內的主機間通信就和在一個 LAN 內一樣。

    沒有劃分 VLAN:LAN 局域網(wǎng)

  • 優(yōu)勢:簡單,靜態(tài),IP 地址與交換機關聯(lián);

  • 劣勢:遷移域受限,不能機房內隨意遷移。交換機下 IP 需要提前規(guī)劃好,約束虛擬比。

  • 劃分 VLAN:虛擬局域網(wǎng)

  • 優(yōu)勢:IP 地址與交換機無關,虛擬機可以在機房范圍內遷移。VLAN 間則不能直接互通,這樣廣播報文就被限制在一個 VLAN 內。

  • 有人會問:交換如何區(qū)分不同 VLAN?

    • 交換機能夠分辨不同 VLAN 的報文,需要在報文中添加標識 VLAN 信息的字段。數(shù)據(jù)幀中的VID(VLAN ID)字段標識了該數(shù)據(jù)幀所屬的 VLAN,數(shù)據(jù)幀只能在其所屬 VLAN 內進行傳輸。

    6.3 Overlay 網(wǎng)絡技術

    VXLAN 虛擬擴展局域網(wǎng)

  • 是對傳統(tǒng) VLAN 協(xié)議的一種擴展;

  • 是一種網(wǎng)絡虛擬化技術,試圖改善云計算部署的可擴展性問題。

  • 解決哪些問題?

  • vlan 的數(shù)量限制(12bit->24bit),VLAN 報文 Header 預留長度只有 12bit,只支持 4096 個終端;

  • VNI(VXLAN Network Index)標識某條指定隧道;

  • 不改變 IP 實現(xiàn)服務器遷移。

  • 傳統(tǒng)二三層網(wǎng)絡架構限制了虛擬機的動態(tài)遷移范圍

    VXLAN 在兩臺 TOR 交換機之間建立一條隧道,將服務器發(fā)出的原始數(shù)據(jù)幀加以“包裝”,好讓原始報文可以在承載網(wǎng)絡(比如 IP 網(wǎng)絡)上傳輸。

    當?shù)竭_目的服務器所連接的 TOR 交換機后,離開 VXLAN 隧道,并將原始數(shù)據(jù)幀恢復出來,繼續(xù)轉發(fā)給目的服務器。VXLAN 將整個數(shù)據(jù)中心基礎網(wǎng)絡虛擬成了一臺巨大的“二層交換機”

    VXLAN 網(wǎng)絡模型

  • UDP 封裝(L2 over L4):將 L2 的以太幀封裝到 UDP 報文即(L2overL4)中,并在 L3 網(wǎng)絡中傳輸;

  • VTEP,VXLAN 隧道端點,對 VXLAN 報文進行封裝和解封裝;

  • VNI,VXLAN 隧道標識,用于區(qū)分不同 VXLAN 隧道。

  • 矢量性協(xié)議:使用基于路徑、網(wǎng)絡策略或規(guī)則集來決定路由;

  • AS(自治域):AS 是指在一個實體管轄下的擁有相同選路策略的 IP 網(wǎng)絡;

    BGP 網(wǎng)絡中的每個 AS 都被分配一個唯一的 AS 號,用于區(qū)分不同的 AS;

  • eBGP(域外 BGP):運行于不同 AS 之間的 BGP,為了防止 AS 間產(chǎn)生環(huán)路;

    為了防止 AS 間產(chǎn)生環(huán)路,當 BGP 設備接收 EBGP 對等體發(fā)送的路由時,會將帶有本地 AS 號的路由丟棄;

  • iBGP(域內 BGP):運行于同一 AS 內部的 BGP,為了防止 AS 內產(chǎn)生環(huán)路;

  • RR(路由反射器):通過集中反射同步,解決全連通的網(wǎng)狀網(wǎng)格結構路由同步問題。

  • EBGP+IBGP 實現(xiàn) AS 間的路由傳遞:一個常見的 IP 骨干網(wǎng)的拓撲結構,骨干層和匯聚層分別是兩個自治系統(tǒng),AS100 有兩個出口設備 SwitchC 和 SwitchD,兩個 AS 之間需要進行路由互通。

    7 總結-云原生

    云原生應用:docker 應用打包、發(fā)布、運行,Kubernetes 服務部署和集群管理,Istio 構建服務治理能力

    云計算以“資源”為中心,關鍵技術:

  • 虛擬化:SDX,NFV;

  • 資源池化:彈性快速擴縮容;

  • 多租化:提升云廠商的資源利用率;

    典型代表:計算、網(wǎng)絡、存儲三大基礎設施的云化。

  • 云計算以“應用”為中心,關鍵導向:

  • 設計之初,關注更好適應云,充分發(fā)揮云優(yōu)勢;

  • 云原生已成為企業(yè)數(shù)字創(chuàng)新的最短路徑;

  • 云原生一系列 IAAS、PAAS、SAAS 層技術,支撐產(chǎn)品高效交付、穩(wěn)定運維、持續(xù)運營。

  • 【私人觀點

  • 以“資源”為中心的云,將成為“底層基礎設施”,利用云原生以“應用”為中心賦能自身業(yè)務

  • 云的時代,已經(jīng)來臨。作為云的使用者、從業(yè)者,更多思考如何利用云賦能業(yè)務產(chǎn)品

  • 商業(yè)市場模式從“大魚吃小魚”靠信息不對稱,向“快魚吃慢魚”轉變。我們必須利用趨勢,擁抱云原生

  • 8 鳴謝

    以下小伙伴給出寶貴建議,非常感謝。

    • 鳴謝 CDG-FiT 線:Hawkliu、Cafeeqiu

    • 鳴謝騰訊 OTeam:Kubernetes 開源協(xié)同技術講師

    9 學習資料

    • 《SRE Google 運維解密》

    • 《Kubernetes 權威指南》

    • 《Kubernetes in Action》

    • 《深入剖析 Kubernetes》

    • 《Docker 容器與容器云》-浙大

    • 《云原生服務網(wǎng)格 Istio》華為叢書

    • 《Kubernetes 開源協(xié)同技術課程》

    • CNCF 官網(wǎng):https://www.cncf.io/

    • Huawei-Cloud Native : https://github.com/huawei-cloudnative

    • Docker 官方文檔:https://docs.docker.com/

    • Kubernetes 官網(wǎng):https://kubernetes.io/

    • Istio 官網(wǎng):https://istio.io/

    - END -


    看完一鍵三連在看轉發(fā),點贊

    是對文章最大的贊賞,極客重生感謝你

    推薦閱讀

    TCP/IP協(xié)議精華指南pdf發(fā)布

    大規(guī)模微服務利器:eBPF + Kubernetes

    Linux網(wǎng)絡新技術基石 |eBPF and XDP

    總結

    以上是生活随笔為你收集整理的一文带你理解云原生|云原生全景指南的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。