日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

一文带你理解云原生

發(fā)布時間:2024/2/28 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一文带你理解云原生 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:William 孟祥龍,騰訊 CDG 系統架構師,從事云原生技術賦能金融科技。

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

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

1、為什么需要上云?

2、上云有何弊端?

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

1 云原生-概述

1.1 云原生-定義

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

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

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

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

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

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

? 聲明式 API:讓系統更加健壯;

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

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

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

  • Culture :達成共識

  • Automation:基礎設施自動化

  • Measurement:可度量

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

【私人觀點】

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

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

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

1.3 云原生-關鍵技術

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

1.3.1 微服務

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

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

微服務典型架構包括:

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

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

  • 服務網關:身份認證、路由服務、限流防刷、日志統計;

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

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

1.3.2?容器

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

容器關鍵技術:namespac 視圖隔離,cgroups 資源隔離 ,Union File System 聯合文件系統。

容器優(yōu)勢

  • 更高效的利用資源;

  • 更快速的啟動時間;

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

1.3.3 容器編排

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

核心功能

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

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

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

  • 1.3.4 服務網格

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

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

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

    Service Mesh 特點

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

  • 輕量級網絡代理,應用程序無感知;

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

  • 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ài),直到與期望狀態(tài)保持一致。

    為什么聲明式使系統更加健壯?

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

    1.3.7?DevOps

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

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

    DevOps 是一組過程,方法和系統的統稱包括:

    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)重疊;

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

  • 容器(Container)

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

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

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

  • 倉庫(Repository)

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

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

  • 2.2 Docker 關鍵技術

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

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

    2.2.2 control groups(資源隔離)

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

    2.2.3 Union File System(聯合文件系統)

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

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

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

  • 2.3 Docker-網絡技術

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

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

    從設備會被“剝奪”調用網絡協議棧處理數據包的資格,從而“降級”成為網橋上的一個端口。

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

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

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

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

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

    • 路由 routing是通過互聯的網絡把信息從源地址傳輸到目的地址的活動,發(fā)生在 OSI 模型的第三層(網絡層)。Linux 內核提供 IPForwarding 功能,實現不同子網接口間轉發(fā) IP 數據包。

    路由器工作原理:

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

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

    3 容器編排-Kubernetes

    3.1 概述&架構&核心組件

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

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

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

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

    Self-healing(自我修復)

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

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

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

    Storage orchestration(存儲編排)

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

    Automatic bin packing(自動裝箱)

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

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

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

    API Service: Kubernetes 各組件通信中樞

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

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

    • 與 etcd 交互的唯一組件。

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

    • Predicates(斷言):淘汰制

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

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

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

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

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

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

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

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

    控制器模式的設計思想

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

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

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

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

    3.2 部署&資源控制&存儲

    Kubernetes-集群部署架構

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

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

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

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

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

  • 3.3 Kubernetes-網絡技術

    3.3.1 對外服務

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

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

    為什么需要 service?

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

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

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

  • Service Type 四種方式

  • Cluster IP:配置 endpoint 列表;

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

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

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

  • Service Type 為 Cluster IP

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

  • 類似通過 Nginx 實現集群的 VIP。

  • Service Type 為 Node Port

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

    注意事項

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

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

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

    Service Type 為 Load Balancer

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

    Service Type 為 External Name

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

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

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

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

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

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

    3.3.2 Underlay 與 Overlay 網絡

    Underlay 網絡模式: 底層承載網絡,是網絡通信的基礎

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

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

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

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

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

  • BridgeBridge:設備內核最早實現的網橋,性能與 OVS 相當,可以使用到所有場景;

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

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

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

  • Overlay 網絡:是一種建立在另一網絡之上的計算機網絡。

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

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

  • Kubernetes 相當于云原生的操作系統

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

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

    CNI 容器網絡統一標準

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

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

  • CNI 規(guī)范內容

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

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

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

  • 插件應用如

  • Bridge:Linux 網橋 CNI 實現,采用網卡對鏈接網橋和容器;

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

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

  • MacVlan:網卡多 Mac 地址虛擬技術完整支持 vlan;

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

  • IPVlan:網卡上基于 IP 實現流量轉發(fā)。

  • 3.3.3 Overlay 網絡-Flannel 方案

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

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

    Flannel 職責

  • 子網管理:每個主機分配唯一的子網;

  • 互聯方式:為同 Overlay 平面容器分配唯一 IP。

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

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

    • Backend:針對網絡互聯方式的接口定義。

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

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

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

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

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

  • AliVPC,對接阿里云 VPC 路由表實現網絡互聯;

  • AWSVPC,對接 Amazon VPC 路由表實現網絡互聯。

  • Flannel 的單機互聯方案

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

  • Bridge:通過 NAT 借助主機網絡實現外部服務訪問;

  • Veth pair:一端設置到容器網絡 namespace,一端鏈接 bridge 實現容器接入網絡;

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

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

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

    主要流程

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

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

  • 3.3.4 Overlay 網絡-Calico 方案

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

    Calico 優(yōu)勢

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

  • 網絡安全:支持 Kubernetes 網絡策略,支持自定義網絡策略;

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

  • Calico 不足

  • BGP 支持問題:需要網路設備支持 BGP 協議,否則需要追加 IPIP 隧道;

  • 規(guī)劃 2 層直連:需要節(jié)點做良好的規(guī)劃實現 2 層網絡直接互聯;

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

  • 關鍵組件

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

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

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

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

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

  • RouteReflector:對接 BGPclient 實現路由中轉;

  • Etcd/Kube-apiserver:Calico 數據存儲;

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

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

  • Calico 單機互聯方案

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

  • 路由策略:針對 IP 和設備設置路由條目,在主機上實現互聯。

  • Calico 跨機互聯方案

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

  • 跨網段 IPIP 互聯:網絡設備不支持 BGP 協議情況下,采用 IPIP 隧道實現跨網段互聯;

  • 跨網段 VxLAN 互聯(Cannel):集成 flannel,底層通過 VxLAN 實現跨機轉發(fā)。


  • 4 服務網格 Istio

    4.1 服務網格概述

    4.2 Istio 控制面

    4.3 Istio 數據面


    5 云原生-主流組件

    5.1 Prometheus

    5.2 Grafana

    5.3 Elasticsearch + Fluentd + Kibana

    5.4 Jaeger

    5.5 Chaos Engineering


    6 云原生-常用網絡技術

    6.1 主機網絡

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

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

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

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

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

  • 6.2 Underlay 網絡技術

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

    沒有劃分 VLAN:LAN 局域網

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

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

  • 劃分 VLAN:虛擬局域網

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

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

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

    6.3 Overlay 網絡技術

    VXLAN 虛擬擴展局域網

  • 是對傳統 VLAN 協議的一種擴展;

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

  • 解決哪些問題?

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

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

  • 不改變 IP 實現服務器遷移。

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

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

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

    VXLAN 網絡模型

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

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

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

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

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

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

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

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

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

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

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

    7 總結-云原生

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

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

  • 虛擬化:SDX,NFV;

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

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

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

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

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

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

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

  • 【私人觀點

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

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

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

  • 8 鳴謝

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

    • 鳴謝 CDG-FiT 線:Hawkliu、Cafeeqiu

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

    9 學習資料

    • 《SRE Google 運維解密》

    • 《Kubernetes 權威指南》

    • 《Kubernetes in Action》

    • 《深入剖析 Kubernetes》

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

    • 《云原生服務網格 Istio》華為叢書

    • 《Kubernetes 開源協同技術課程》

    • CNCF 官網:https://www.cncf.io/

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

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

    • Kubernetes 官網:https://kubernetes.io/

    • Istio 官網:https://istio.io/

    10 英雄帖

    歡迎對 云原生或金融科技 感興趣的小伙伴隨時交流,更歡迎加入我們團隊

    郵箱地址:williammeng@tencent.com

    視頻號最新視頻

    總結

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

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