Docker與k8s

前言

隨著k8s 作為容器編排解決方案變得越來越流行,有些人開始拿 Docker 和 k8s進行對比,不禁問道:Docker 不香嗎?

都快2021年了,Docker不香嗎?為什么還要使用K8s?

?

k8s 是kubernets的縮寫,’8‘代表中間的八個字符。

其實 Docker 和 k8s 并非直接的競爭對手,它倆相互依存。Docker 是一個容器化平臺,而 k8s 是 Docker 等容器平臺的協調器。

容器化時代來了

虛擬化技術已經走過了三個時代,沒有容器化技術的演進就不會有 Docker 技術的誕生。

都快2021年了,Docker不香嗎?為什么還要使用K8s?

?

虛擬化技術演進

(1)物理機時代:多個應用程序可能會跑在一臺機器上。

都快2021年了,Docker不香嗎?為什么還要使用K8s?

?

物理機時代

(2)虛擬機時代:一臺物理機器安裝多個虛擬機(VM),一個虛擬機跑多個程序。

?

虛擬機時代

(3)容器化時代:一臺物理機安裝多個容器實例(container),一個容器跑多個程序。

?

容器化時代

容器化解決了軟件開發過程中一個令人非常頭疼的問題,用一段對話描述:

測試人員:你這個功能有問題。

開發人員:我本地是好的啊。

開發人員編寫代碼,在自己本地環境測試完成后,將代碼部署到測試或生產環境中,經常會遇到各種各樣的問題。明明本地完美運行的代碼為什么部署后出現很多 bug,原因有很多:不同的操作系統、不同的依賴庫等,總結一句話就是因為本地環境和遠程環境不一致。

容器化技術正好解決了這一關鍵問題,它將軟件程序和運行的基礎環境分開。開發人員編碼完成后將程序打包到一個容器鏡像中,鏡像中詳細列出了所依賴的環境,在不同的容器中運行標準化的鏡像,從根本上解決了環境不一致的問題。

容器化技術的尖刀武器

?容器化技術的特點

  • 可移植性:不依賴具體的操作系統或云平臺,比如在阿里云或騰訊云直接隨意遷移。
  • 占地小:容器只需要其應用程序以及它需要運行的所有容器和庫的依賴清單,不需要將所有的依賴庫都打包在一起。
  • 共享 bin 和 lib:不同的容器可以共享 bin 和 lib,進一步節省了空間。

Docker 橫空出世

2010年一位年輕小伙子在美國舊金山成立了一家名叫【dotCloud】的公司, 開發了 Docker的核心技術,從此開啟了容器技術的時代。

?

都快2021年了,Docker不香嗎?為什么還要使用K8s?

?Docker原公司名

后面 dotCloud 公司將自己的容器技術進行了簡化和標準化,取名為 Docker,就是大家熟悉的鯨魚 logo。

?

都快2021年了,Docker不香嗎?為什么還要使用K8s?

?Docker新logo

2013年dotCloud 公司宣布將 Docker 開源,隨著越來越多的工程師發現了它的優點, Docker 的人氣迅速攀升,成為當時最火爆的開源技術之一。

當前有30%以上的企業在其AWS環境中使用Docker,并且這個數字還在繼續增長。

?

?

Docker使用率越來越高

Docker怎么用?

其實大多數人談論 Docker 時說的是 Docker Engine,這只是一個構建和運行的容器。

在運行容器前需要編寫Docker File,通過 dockerFile 生成鏡像,然后才能運行 Docker 容器。

Docker File 定義了運行鏡像(image)所需的所有內容,包括操作系統和軟件安裝位置。一般情況下都不需要從頭開始編寫 Docker File,在 Docker Hub 中有來自世界各地的工程師編寫好的鏡像,你可以基于此修改。

編排系統的需求催生 k8s

盡管Docker為容器化的應用程序提供了開放標準,但隨著容器越來越多出現了一系列新問題:

  • 如何協調和調度這些容器?
  • 如何在升級應用程序時不會中斷服務?
  • 如何監視應用程序的運行狀況?
  • 如何批量重新啟動容器里的程序?

解決這些問題需要容器編排技術,可以將眾多機器抽象,對外呈現出一臺超大機器。現在業界比較流行的有:k8s、Mesos、Docker Swarm。

在業務發展初期只有幾個微服務,這時用 Docker 就足夠了,但隨著業務規模逐漸擴大,容器越來越多,運維人員的工作越來越復雜,這個時候就需要編排系統解救opers。?

?

應用程序的聲明周期

一個成熟的容器編排系統需要具備以下能力:

  • 處理大量的容器和用戶
  • 負載均衡
  • 鑒權和安全性
  • 管理服務通信
  • 多平臺部署

k8s與Docker Swarm江湖恩怨

?

都快2021年了,Docker不香嗎?為什么還要使用K8s?

?k8s VS Docker Swarm

如果你非要拿 Docker 和 k8s 進行比較,其實你更應該拿 Docker Swarm 和 k8s 比較。

Docker Swarm 是 Docker 自家針對集群化部署管理的解決方案,優點很明顯,可以更緊密集成到 Docker 生態系統中。

雖說 Swarm 是 Docker 親兒子,但依舊沒有 k8s 流行,不流行很大程度是因為商業、生態的原因,不多解釋。

k8s是做什么用的?

K8s是Google研發的容器協調器,已捐贈給CNCF,現已開源。

Google 利用在容器管理多年的經驗和專業知識推出了 k8s,主要用于自動化部署應用程序容器,可以支持眾多容器化工具包括現在非常流行的Docker。

目前k8s 是容器編排市場的領導者,開源并公布了一系列標準化方法,主流的公有云平臺都宣布支持。

一流的廠商都在搶占標準的制高點,一堆小廠商跟著一起玩,這就叫生態了。國內的大廠商都在干嘛呢?搶社區團購市場,玩資本游戲,哎?!

K8s 架構和組件

k8s 由眾多組件組成,組件間通過 API 互相通信,歸納起來主要分為三個部分:

  • controller manager
  • nodes
  • pods

?

??K8s集群架構圖

Controller Manager,即控制平面,用于調度程序以及節點狀態檢測。

  • Nodes,構成了Kubernetes集群的集體計算能力,實際部署容器運行的地方。
  • Pods,Kubernetes集群中資源的最小單位。

Docker與k8s 難舍難分

Docker 和 k8s 在業界非常流行,都已經是事實上的標準。

Docker 是用于構建、分發、運行容器的平臺和工具。

而 k8s 實際上是一個使用 Docker 容器進行編排的系統,主要圍繞 pods 進行工作。Pods 是 k8s 生態中最小的調度單位,可以包含一個或多個容器。

Docker 和 k8s 是根本上不同的技術,兩者可以很好的協同工作。

開發實踐,靈魂追問

(1)沒有 k8s 可以使用 docker 嗎?

可以。實際上一些小型公司,在業務不太復雜的情況下都是直接使用 Docker。盡管 k8s 有很多好處,但是眾所周知它非常復雜,業務比較簡單可以放棄使用 k8s。

(2)沒有 Docker 可以使用 k8s 嗎?

k8s 只是一個容器編排器,沒有容器拿什么編排?!

k8s 經常與 Docker 進行搭配使用,但是也可以使用其他容器,如RunC、Containerted 等。

(3)Docker Swarm 和 k8s 怎么選?

選 k8s。2019年底Docker Enterprise已經出售給Mirantis,Mirantis聲明要逐步淘汰Docker Swarm,后續會將 k8s 作為默認編排工具。

最后一個問題

Docker 不香嗎?為什么還要用 k8s

Docker很香,但 k8s 在業務達到一定規模后也得啟用。學會了嗎?

來源:微信公眾號

作者:愛笑的架構師丨雷架


---------------------
作者:干貨很多的大飛
來源:CSDN
原文:https://blog.csdn.net/QAQFyl/article/details/111933641
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!
內容解析By:CSDN,CNBLOG博客文章一鍵轉載插件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/283928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283928.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux下啟動tomcat報java.lang.OutOfMemoryError: PermGen space

2019獨角獸企業重金招聘Python工程師標準>>> 一、錯誤信息 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav…

Redis安裝[Windows]

一. redis下載地址: https://github.com/ServiceStack/redis-windows/tree/master/downloads 根據需要的下載對應版本*.zip即可.(我這里是win7x64) 二.使用 1. 下載之后解壓到你相應的目錄下: 1 文件介紹: 2 redis-benchmark.exe #基準測試 3 redis-check-aof.e…

簡練軟考知識點整理-項目啟動過程組

啟動過程組包含定義一個新項目或現有項目的一個新階段,授權開始該項目或階段的一組過程。在啟動過程中,定義初步范圍和落實初步財務資源,識別那些將相互作用并影響項目總體結果的內外部干系人,選定項目經理(如果尚未安…

在 ASP.NET Core 中上傳文件

簡介文件上傳是指將媒體文件(本地文件或網絡文件)從客戶端上傳至服務器存儲。ASP.NET Core 支持使用緩沖的模型綁定(針對較小文件)和無緩沖的流式傳輸(針對較大文件)上傳一個或多個文件。緩沖和流式傳輸是上…

Paxos算法詳解

Paxos、Raft分布式一致性算法應用場景一文講述了分布式一致性問題與分布式一致性算法的典型應用場景。作為分布式一致性代名詞的Paxos算法號稱是最難理解的算法。本文試圖用通俗易懂的語言講述Paxos算法。 一、Paxos算法背景 Paxos算法是Lamport宗師提出的一種基于消息傳遞的分…

LeetCode 322. Coin Change

原題 You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, …

Teiid:數據虛擬化Data Virtualization平臺

2019獨角獸企業重金招聘Python工程師標準>>> Teiid介紹 http://teiid.jboss.org/ 數據虛擬化的定義 https://en.wikipedia.org/wiki/Data_virtualization http://www.denodo.com/en/data-virtualization/overview 數據虛擬化的文章 Sick of ETL? Database virtuali…

如何仿造一個websocket請求?

之前兩次singnalr、 websocket實時推送相關:? .NET WebSockets 核心原理初體驗[1]? SignalR 從開發到生產部署避坑指南[2]tag:瀏覽器--->nginx--> server其中提到nginx默認不會為客戶端轉發Upgrade、Connection標頭, 因為為了讓被代理…

【轉】為什么自動車完全不可以犯錯誤

為什么自動車完全不可以犯錯誤 有人跟我講,我對Google的自動車要求太苛刻了。人無完人,所以Google的產品也不需要是完美的,只要“夠好用”就有市場。世界上有那么多糟糕的司機,酒后駕車的,開車時發短信的,打…

從“互聯網+教育”到“教育+互聯網”——互聯網文化基因視域下的審思

作者信息 朱敬/廣西師范大學教育學部教授,教育學博士,博士生導師; 蔡建東/河南大學教育學部教授,教育學博士。 本文摘要 近年來國務院與教育部文件逐漸使用“教育互聯網”一詞,從“互聯網教育”到“教育互聯網”&a…

Node.js Stream - 基礎篇

背景 在構建較復雜的系統時,通常將其拆解為功能獨立的若干部分。這些部分的接口遵循一定的規范,通過某種方式相連,以共同完成較復雜的任務。譬如,shell通過管道|連接各部分,其輸入輸出的規范是文本流。 在Node.js中&am…

Axure RP使用攻略--動態面板的用途(8)

寫了幾個Axure教程之后發現,可能教程的起點有些高了,過分的去講效果的實現,而忽略了axure功能以及基礎元件的使用,那么從這個教程開始,把這些逐漸的展開講解。 關于動態面板 動態面板是axure原型制作中使用非常頻繁的一…

ABP 6.0.0-rc.1的新特性

2022-07-26官方發布ABP 6.0.0-rc.1版本,本文挑選了幾個新特性進行了介紹,主要包括LeptonX Lite默認主題、OpenIddict模塊,以及如何將Identity Server遷移到OpenIddict。據ABP官方公眾號介紹,ABP 6.0.0穩定版的計劃發布日期為2022-…

Java并發包--線程池框架

轉載請注明出處:http://www.cnblogs.com/skywang12345/p/3509903.html 線程池架構圖 線程池的架構圖如下: 1. Executor 它是"執行者"接口,它是來執行任務的。準確的說,Executor提供了execute()接口來執行已提交的 Runna…

c 試水解碼jpeg圖片比特流(已成功解碼)

找到一張采用霍夫曼通用DC,AC編碼表的圖片,提取出此圖片的比特流準備對它解碼,再反推怎樣編碼。 下圖是此圖片比特流前100個字節。解碼是每次讀一字節,對這8比特解碼,如8比特不能解碼,再讀入一字節。因為霍夫曼表最多…

Raft算法詳解

Raft算法屬于Multi-Paxos算法,它是在Multi-Paxos思想的基礎上,做了一些簡化和限制,比如增加了日志必須是連續的,只支持領導者、跟隨者和候選人三種狀態,在理解和算法實現上都相對容易許多 從本質上說,Raft算…

淘寶彈性布局方案lib-flexible研究

1. lib-flexible不能與響應式布局兼容 先說說響應式布局的一些基本認識: 響應式布局的表現是:網頁通過css媒介查詢判斷可視區域的寬度,在不同的范圍應用不同的樣式,以便在不同尺寸的設備上呈現最佳的界面效果。典型的例子是&#…

[No0000DB]C# FtpClientHelper Ftp客戶端上傳下載重命名 類封裝

using System; using System.Diagnostics; using System.IO; using System.Text; using Shared;namespace Helpers {public static class FileHelper{#region Methods/// <summary>/// 向文本文件的尾部追加內容/// </summary>/// <param name"filePa…

WPF效果第一百九十四篇之伸縮面板

前面一篇玩耍了一下登錄實現效果;今天在原來的基礎上來玩耍一下伸縮面板的效果;閑話不多扯直接看效果:1、關于前臺簡單布局:2、左側面板伸縮動畫&#xff1a;<Storyboard x:Key"ShowConfigSb"><ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty…

你不知道的JavaScript(二)

第三章 原生函數 JS有很多原生函數&#xff0c;為基本的數據類型值提供了封裝對象&#xff0c;String&#xff0c;Number&#xff0c;Boolean等。我們可以通過{}.call.toString()來查看所有typeof返回object的對象的內置屬性[[class]],這個屬性無法直接訪問。我們基本類型調用的…