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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

云原生初探

發布時間:2023/12/4 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 云原生初探 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 什么是云原生?
      • 第二講 容器的基本概念
        • 什么是容器?
        • 容器運行時的生命周期
        • 容器項目的架構
        • 容器和VM的差異
      • 第三講 Kubernetes核心概念
        • 什么是Kubernetes
        • Kubernetes架構
        • Kubernetes核心概念和API
      • 第四講 理解Pod和容器設計模式
        • 為什么Pod必須是原子調度單位?
        • Pod實現機制

什么是云原生?

不同企業對云原生有不同的解釋,最為廣泛接受的是:云原生是一類技術的統稱 或者 是一套指導進行軟件架構設計的思想,通過云原生技術,我們可以構建出更易于彈性擴展的應用程序。它包含了當前業界的一些熱門的技術,比如:容器、微服務、DevOps等。

第二講 容器的基本概念

什么是容器?

容器是一個視圖隔離(能夠看見部分進程等 namespace)、資源可限制(限制資源使用率 cgroup)、獨立文件系統(chroot)。

容器運行時所需要的所有文件集合稱為容器鏡像。通常采用Dockerfile構建鏡像。

容器運行時的生命周期

  • 單進程模型

    啟動容器時,會選擇相應的文件系統(鏡像來提供),以及指定相應的運行程序,那么這個運行程序我們稱為init進程。在容器運行過程中,我們會發現,當這個init進程啟動了,那么這個容器也啟動了,當這個init進程退出了,那么這個容器也就隨之退出了。所以,init進程的生命周期與容器生命周期一致。

  • 數據持久化

    數據卷volume,獨立于容器的生命周期;

容器項目的架構

  • moby容器引擎架構

    moby daemon會提供關于容器、鏡像、網絡以及volume的管理。它依賴的最重要的組件是containerd(容器運行時管理引擎),獨立于moby daemon,containerd-shim管理容器生命周期,可被containerd動態接管。

容器和VM的差異

VM是利用Hypervisor虛擬化技術來模擬硬件資源,需要Guest OS(裝在VM上的系統),可以提供更好的隔離效果。但是,我們需要將一部分的計算資源交給虛擬化,導致很難充分利用計算資源,并且每個Guest OS需要占用大量的磁盤空間。

容器無需Guest OS,只需要一個獨立的文件系統。所有的隔離級別都是進程級別的;啟動時間更快;但隔離效果較弱。

第三講 Kubernetes核心概念

什么是Kubernetes

自動化的容器編排平臺

核心功能:

  • 服務發現與負載均衡;
  • 容器自動裝箱(把一個容器放到某個集群的某個機器上);
  • 存儲編排;
    • 自動容器恢復(節點健康檢查,將有問題的節點上的容器遷移到其他節點上去);
  • 自動發布與回滾;
  • 配置與密文管理;
  • 批量執行;
  • 水平伸縮(業務負載檢查,可以對負載過高的服務進行擴容);

Kubernetes架構

  • API Server:消息傳送;
  • Controller:完成對集群狀態的管理;
  • Scheduler:調度;
  • etcd:分布式存儲,API Server中所需要的信息都放在etcd中;

用戶可以通過ui或cli向kubernetes提供一個pod進行部署,API Server會將相關信息存儲到etcd中,Scheduler會通過API Server的watch或者notification機制得到這個信息(有一個pod需要被調度),Scheduler會根據它的資源狀態進行一次調度決策,在完成這次調度之后,Scheduler會向API Server通知這個pob需要被調度到某個節點上,API Server會將調度的結果再次寫入到etcd中。然后,API Server會通知對應的節點進行pob的啟動和執行。相應節點的kubelet會得到這個通知,調用Container runtime來配置、啟動這個容器的運行環境,去調用Storage Plugin來配置存儲,調用Network Plugin來配置網絡。

Kubernetes核心概念和API

  • Pod

    • 最小的調度以及資源單位;
    • 由一個或者多個容器組成;
    • 在Pob中可以定義容器運行的方式(Command、環境變量等);
    • 提供給容器共享的運行環境(網絡、進程空間,pob與pob之間是有隔離的);
  • Volume

    • 用來聲明容器的訪問目錄(Pob中的容器可以訪問的文件目錄);
    • 一個volume可以被掛載在一個Pob中的一個或多個容器的指定路徑下;
    • volume是一個抽象的概念,它可以支持多種后端的存儲(分布式、云存儲…);
  • Deployment

  • 定義一組Pob的副本數目、版本等;

  • 通過Colltroller維持Pob的數目,Controller可以自動恢復失敗的Pod;Deployment中Pob的數目是通過Controller來指定的,當一個Pod失敗時,Controller可以檢測到,來生成新的Pob。

  • 可以通過Controller以指定的策略控制版本:滾動升級、重新生成、回滾;

  • Service

    • 提供訪問一個或多個Pod實現的穩定訪問地址(負載均衡);
  • Namespace

    • 一個集群內部的邏輯隔離機制(鑒權、資源調度);
    • 每個資源都屬于一個Namespace;
    • 同一個Namespace中的資源命名唯一;

第四講 理解Pod和容器設計模式

由四個進程共同組成的應用helloworld,在kubernates中會被定義為擁有四個容器的Pod。Pob只是一個邏輯單位,真正啟來的實際上是四個容器。

為什么Pod必須是原子調度單位?

舉例:兩個緊密協作(需要部署在一臺機器上)的容器App和LogCollector;

內存要求:App—1G、LogCollector:0.5G;

當前可用內存:Node_A:1.25G、Node_B:2G;

如果App先被調度到了Node_A上,那么就會導致LogCollector調度失敗。

這就是Task co-scheduling問題:

  • Mesos的解決辦法:資源囤積;所有設置了Affinity約束的任務都到達時,才開始同一進行調度;帶來的問題是:調度效率損失、死鎖;
  • Google Omega:樂觀調度;不管沖突,出現沖突之后回滾;
  • Kubernetes:Pod;不存在上面的問題;App和LogCollector屬于一個Pob,一起被調度;

親密關系:兩個應用需要運行在同一臺宿主機上(Pod之間);通過調度解決;

超親密關系:會發生直接的文件交換;使用localhost或者socket文件進行本地通信;會發生非常頻繁的RPC調用;會共享某些Linux Namespace(比如:一個容器要加入另一個容器的Network Namespace,就可以看到另一個容器的網絡設備以及網絡信息);通過Pod解決;

Pod實現機制

容器之間原本是被Linux Namespace和cgroups隔離開的,那么如何讓一個Pod里的多個容器之間最高效的共享某些資源和數據?

  • 共享網絡

    在每一個Pod里會啟動一個Infra container小容器來共享整個Pod的Network Namespace。Pob內部容器直接使用localhost進行通信;每個容器看到的網絡設備跟Infra容器看到的一樣;一個Pod只有一個IP地址,也就是這個Pod的Network Namespace對應的IP地址;所有網絡資源都是一個Pod一份,并且被該Pod中的所有容器共享;整個Pod的生命周期跟Infra容器一致,而與內部的其他容器無關;

  • 共享存儲

    掛載到同一個volume;

總結

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

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