主頁 > 作業系統 > 容器編排器們的自我介紹

容器編排器們的自我介紹

2023-05-25 10:58:52 作業系統

哈嘍大家好,我是咸魚

咸魚在《一文帶你了解容器技術的前世今生》有介紹過容器技術的由來以及Docker專案的發展

我們知道,Docker 及其他容器技術能夠極大地簡化應用程式的部署,做到了”開箱即用“

俗話說:”凡是具有兩面性“,容器技術給我們帶來便利的同時,一些問題也隨之出現了

隨著企業規模或者說業務規模的不斷擴大,應用程式越來越多、而每個應用程式往往又由多個容器組成

例如想要實作一個簡單的資料庫 web 界面也可能需要為資料庫服務器和應用程式運行單獨的容器

于是容器的管理便成為了一個棘手的難題,工程師們為了解決這個問題,開發了一系列的容器編排器(container orchestrator),其中最有名的當屬 kubernetes

容器編排器可以將一組容器作為一個基本單元去進行管理(例如 K8s 里的 pod),而且容器編排器可以在集群之間自動分配容器作業負載

那么今天,咸魚將以自我介紹的形式來帶大家了解三個容器編排器——Docker Compose、Swarm、Kubernetes

Docker Compose

大家好,我叫 Docker Compose ,我的爸爸是一個名叫 Docker 的公司

我的前身是一個叫 Fig 的專案,Fig 專案可是大有來頭——因為它第一次提出了容器編排的概念

你只需要執行一條命令 fig up 就能夠依次創建一系列容器,并且容器之間的關系及依賴性,都會自動幫你解決

當時它在 Github 上的熱度可是比肩 Docker 的,后來我的爸爸秉承”打不過就加入“的理念,把 Fig 專案收購了

收購之后將名字改成了 Compose,于是我誕生了

我是根據一個 yaml 格式的組態檔來作業的,通常命名為 Docker-compose.yml

  • 首先我會去讀取這個檔案,然后通過 Docker API 創建這個檔案宣告的資源
  • 我還會為這些資源打上標簽,方便我創建之后將它們分組管理

實際上我并不能夠稱得上是一個容器編排器,因為我實際上是通過 Docker 命令列介面(Docker command-line interface )去操作一組組容器的

舉個例子,比如說在組態檔里有這三種型別的資源:

  • service:包含了要啟動的容器的宣告,里面的每一個條目都相當于一個 Docker run 命令
  • networks:包含了可以訪問到容器的網路,里面的每個條目都相當于一個 Docker network create 命令
  • volumes:包含了可以訪問到容器內部的容器卷(容器卷即能夠掛載到容器內部的持久存盤),里面的每一個條目都相當于一個 Docker vloume create 命令

盡管如此,我依舊能夠較好地管理容器之間的依賴關系,我還能夠為容器創建一個共享網路和卷,使它們可以相互通信和共享資料

但是我不能夠實作容器的高可用性,如果容器出現故障,需要手動進行恢復

Swarm

哈嘍大家好,我叫 Swarm

Docker Compose 雖然為大家提供了一種方便的方式去管理容器,但他在一開始的時候只能在單臺主機上作業

也就是說他創建的所有容器都在同一臺機器上面運行,拋開性能不談,如果所有應用都在一臺服務器上,要是這臺服務器宕了,后果可是不堪設想的

為了解決這個問題,早在 2014 年我的哥哥 Classic Swarm (https://github.com/Docker-archive/classicswarm )

就已經開始提供跨主機運行容器的解決方案了,但不久之后我的爸爸就不管他了,在社區上不再維護

時間來到 2016 年,我誕生了

與我的哥哥 Classic Swarm 相比,我是直接被內置到了 Docker 當中

不但如此,我能夠提供更強大的功能和更好的性能,支持服務發現、負載均衡、滾動更新等特性

創建集群的時候,我只需要在初始節點上執行 Docker swarm init 命令,然后在每個要添加進集群的其他節點上面執行 Docker swarm join 命令就可以了

怎么樣,是不是非常方便

小伙伴們可能對我怎么管理集群比較關心,首先我會將集群中的節點分成兩類:

  • 管理節點(Manager nodes)

管理節點提供了一個 API ,可以通過這個 API 來啟動容器

而且管理節點之間使用基于 Raft 共識演算法的協議相互通信,便于同步集群的狀態,實作了高可用性和資料一致性

  • 作業節點(Worker nodes)

作業節點,顧名思義就是就負責干活的節點啦,它們負責執行實際的容器作業

而且我的爸爸跟我說管理節點最多只能設定七個,但作業節點數量不限制

別看我這么能干,其實我也有一些缺點,畢竟器無完器嘛

缺點一:集群里面不能夠實作跨節點共享存盤

雖然我支持集群里面跨節點網路通信(使用橋接方法),但是我不能夠支持跨節點的共享存盤,我必須依賴第三方的卷插件才能實作

缺點二:stack file 和 compose file 難以區分

自從我被集成到 Docker Engine 后,我發現我能夠通過 compose 檔案來部署服務了(部署 services、volumes等資源)

而你們也知道的,compose 檔案一開始是給 Docker Compose 用的

我們來看下對比,可以看到用法是很相似的

Docker-compose -f Docker-compose up

Docker stack deploy -c Docker-compose.yml somestackname

但實際上我是通過 stack file 來進行集群部署的,stack file 也是 YML 格式的檔案,它跟 compose file 極其相似

這樣就會導致一些初學者在學習的時候不知道該用 stack file 還是 compose file ,可以看下下面這個 issue

https://stackoverflow.com/questions/43099408/whats-the-difference-between-a-stack-file-and-a-compose-file

PS:一般來講,Stack file 和Compose file 的語法和功能非常相似,都可以用來定義和部署多個服務或容器

但是,Stack file 更加適合用來管理生產環境中的服務,而Compose file 更加適合用來管理開發和測驗環境中的容器

此外,Stack file 還支持一些 Compose file 不支持的功能,如服務發現、負載均衡、滾動更新等

我的器生并非一帆風順,我曾經可是 Docker Cloud 的支柱,但是 Docker Cloud 在 2018 年的時候就被關閉了

不但如此,隨著對手 Kubernetes 的發展,我的地位不斷地受到威脅,直到 2019 年,我的爸爸宣布停止對我的開發和維護,將重心轉向 Kubernetes

可謂是:”躋攀分寸不可上,失勢一落千丈強“

Kubernetes

哈嘍大家好,我叫 Kubernetes,為了方便,你們可以叫我 K8s

想必大家都聽說過我,作為迄今為止最受歡迎的容器編排器,我能夠在多達數千個節點的集群上管理和分配資源

請允許我驕傲一下,我在容器編排器中地位相當于谷歌在搜素引擎中的地位,可以說是我主導了容器編排

但我能有今天,一方面歸功于我的爸爸是谷歌,另一方面我得到了云原生計算基金會(Cloud Native Computing Foundation,CNCF)的支持

在 2014~2015 年間,整個容器社區可謂熱鬧非凡,但是熱鬧非凡的景象背后則是許多人的擔憂和不滿

那時候 Docker 專案已經成為 Docker 公司一個商業產品,當時我的爸爸找到了 Docker 公司,希望能夠跟 Docker 合作,但是強硬的 Docker 覺得這會消弱自己的地位,拒絕掉了這個請求

而且 Docker 公司在 Docker 開源專案的發展上,始終保持著絕對的權威和發言權,并在多個場合用實際行動挑戰到了其他玩家(比如,CoreOS、RedHat,甚至我爸爸和微軟)的切身利益

于是這些開源基礎設施領域巨頭們聯合我爸爸發起了一個名為CNCF(Cloud Native Computing Foundation)的基金會

這個基金會的目的就是希望以 Kubernetes 專案為基礎,建立一個由開源基礎設施領域廠商主導的、按照獨立基金會方式運營的平臺級社區,來對抗以 Docker 公司為核心的容器商業生態

于是在那個時候,我誕生了,我的前身是 Borg (一個谷歌內部工具)

如果你看過 Kubernetes 專案早期的 GitHub Issue 和 Feature 的話,就會發現它們大多來自于 Borg 和 Omega 系統的內部特性,這些特性落到 Kubernetes 專案上,就是 Pod、Sidecar 等功能和設計模式

我剛出生那會,因為操作太過復雜被很多人抱怨

如果你們想要配置集群,除了我本身,你們還需要選擇和配置一些第三方組件,這就跟 Linux 內核需要跟 GNU 相結合才能構成一個完整的作業系統一樣,我只是一個編排器,我需要跟其他軟體結合才能構成一個完整的集群

還記得上面說過的 CNCF 基金會不,RedHat 也在里面,它把它的那一套玩法搬到了我的身上

跟 Linux 發行版本一樣,我跟安裝程式和其他精心挑選的第三方組件捆綁在一起,搖身一變就成了 K8s 發行版

有了 K8s 發行版,你們對我的抱怨就少了很多

不但如此,我的爸爸開始在 K8s 社區上大力推行”民主化“變革,即從 API 到容器運行時的每一層,Kubernetes 專案都為開發者暴露出了可以擴展的插件機制,鼓勵用戶通過代碼的方式介入 Kubernetes 專案的每一個階段

這個民主化變革帶來的效果是巨大的,很快在整個容器社區中催生出了大量的、基于 Kubernetes API 和擴展介面的二次創新作業

隨著我不斷崛起不斷擴大,Docker 公司也不得不面對自己即將失敗的現實,從 2017 年開始,Docker 公司先是將 Docker 專案的容器運行時部分 Containerd 捐贈給 CNCF 社區

接著 10 月份的時候,Docker 公司出人意料地宣布,將我內置到它們的主打產品 Docker 企業版中,這標志著這場轟轟烈烈的”編排器之爭“至此落下帷幕

如果當初 Docker 公司選擇了跟我爸爸合作,那么如今的容器生態又會是一番怎樣的景象呢?

本文參考鏈接:https://lwn.net/Articles/905164/#t

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/553370.html

標籤:Linux

上一篇:linux yum安裝

下一篇:返回列表

標籤雲
其他(159669) Python(38169) JavaScript(25450) Java(18123) C(15231) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7211) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5341) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4576) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1976) 功能(1967) Web開發(1951) HtmlCss(1944) C++(1922) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1861) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • 容器編排器們的自我介紹

    哈嘍大家好,我是咸魚 咸魚在《[一文帶你了解容器技術的前世今生](https://mp.weixin.qq.com/s?__biz=MzkzNzI1MzE2Mw==&mid=2247484578&idx=1&sn=a8ae0d1c470351a8bbcb6891bae0ca23&chksm=c293 ......

    uj5u.com 2023-05-25 10:58:52 more
  • linux yum安裝

    目錄 一、yum安裝 二、yum安裝分類 三、yum命令 四、實驗 一、yum安裝 yum:1.基于rpm升級,彌補rpm只能一個一個安裝依賴檔案 2.yum可以自動安裝依賴檔案。 3.從倉庫中下載包 centos8:使用yum或者dhf(兩種命令格式基本一致,檔案格式.rpm) ubuntu:使用 ......

    uj5u.com 2023-05-24 07:44:05 more
  • linux nfs共享存盤服務

    目錄 一、nfs服務 二、nfs優點 三、組態檔 四、共享檔案配置程序 五、實驗 1.創建共享檔案(兩臺終端共享) 一、nfs服務 概念:網路上共享檔案系統的協議,運行多個服務器之間通過網路共享檔案和目錄 服務端:將指定目錄標記為共享目錄,服務段有訪問權限,共享目錄有全部權限 客戶端:通過nfs協 ......

    uj5u.com 2023-05-24 07:38:08 more
  • linux ssh遠程登錄

    目錄 一、ssh概念 二、組態檔 三、ssh組成結構 四、遠程控制程序 五、遠程復制 六、配置密鑰 七、wraooers防火墻 一、ssh概念 ssh:一種安全通道協議 功能:1.實作字符界面遠程登錄 2.遠程復制 3.ssh協議是對通信對方的資料傳輸進行加密出來,包括用戶口令(安全性) 4.客戶 ......

    uj5u.com 2023-05-24 07:30:21 more
  • Linux入門

    # 概述 Linux本質是一個OS,圖示是一只企鵝,叫Tux。 Linux發行版本: - Red Hat:收費版 RHEL(Red Hat Enterprise Linux),免費版 fedora(實驗版) 和 **CentOS**。 - debian?ubantu?Linux Mint,都免費。 ......

    uj5u.com 2023-05-23 06:51:14 more
  • 【Linux】(小白向)詳解VirtualBox網路配置-配置Linux網路

    本文時間 2023-05-18 作者:sugerqube漆瓷 本文面向新手,重在理解會舍棄不少精密的理論,還請大佬們見諒。 本文目標:成功使用ssh工具登錄linux,同時linux能連接外網。 網路基礎 關于局域網 ==一切網路的目的:為了鏈接兩臺計算機== 知識點1:每臺物理機應該有一個ip地址 ......

    uj5u.com 2023-05-19 07:51:20 more
  • 虛擬機linux系統密碼忘記了該怎么辦?

    當你的linux系統的密碼忘記了該怎么辦? 首先不要慌,重啟電腦,開機的時候 出現這個頁面的時候點擊e然后出現這個頁面 把里面的ro修改為 rw 修改為rw之后在這一行陳述句的最后面輸入enforcing=0 init=/bin/bash,然后ctrl加x進入單機模式, 進入單機模式之后,輸入修改密碼 ......

    uj5u.com 2023-05-19 07:50:55 more
  • linux DHCP

    目錄 一、DHCP概念 二、DHCP作業程序 三、DHCP實驗 一、DHCP概念 概念:動態主機配置協議,自動為計算機分配tcp/ip引數 DHCP的優點:1.減少管理員的作業難度 2.避免錯誤的可能 3.避免IP地址重合 4.更改IP地址時,不需要再重新配置 5.提高ip地址利用率 6.方便用戶使 ......

    uj5u.com 2023-05-19 07:50:32 more
  • linux 網路基礎

    目錄 一、查看網卡 二、創建虛擬網卡 三、修改主機名 四、管理路由表 五、管理埠 六、網路通信 七、配置網卡 一、查看網卡 命令:ifconfig :查看當前可用設備 主要查看ip地址和mac地址 ifconfig +設備名:表示查看指定設備狀態 ifconfig選項:-a表示查看所有設備(包含沒 ......

    uj5u.com 2023-05-19 07:49:26 more
  • IIS安裝與配置

    一、環境介紹 Windows Server 2019 64位 標準版 二、IIS安裝 2.1、打開服務器管理器,單擊添加角色和功能 在Windows Server 2019 服務器管理中,點擊角色和功能。 2.2、打開添加角色和功能向導】對話框,開始安裝 默認選擇,直接下一步。 2.3、打開安裝型別 ......

    uj5u.com 2023-05-19 07:42:33 more