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

2021-01-05 華科教育小白

右上角"設為星標"好文章送達比別人快

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

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

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

容器化時代來了

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

虛擬化技術演進(1)物理機時代:多個應用程式可能會跑在一臺機器上。

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

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

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

測試人員:你這個功能有問題。開發人員:我本地是好的啊。

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

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

容器化技術的尖刀武器

容器化技術的特點可移植性:不依賴具體的作業系統或雲平臺,比如在阿里雲或騰訊雲直接隨意遷移。佔地小:容器只需要其應用程式以及它需要運行的所有容器和庫的依賴清單,不需要將所有的依賴庫都打包在一起。共享 bin 和 lib:不同的容器可以共享 bin 和 lib,進一步節省了空間。Docker 橫空出世

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

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

Docker新logo2013年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江湖恩怨

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 managernodespods

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 在業務達到一定規模後也得啟用。學會了嗎?

相關焦點

  • 容器|Docker 如此之好,你為什麼還要用k8s
    我是小小,我們又見面了,今天是本周的第五篇,本篇將會著重講解關於為什麼要使用k8s 前言 左圖,應用直接部署在宿主機中,造成環境相互幹擾,不利於運維和維護,右邊,應用直接打包在docker中,應用之間互相互不幹擾,可以任意運行。
  • 容器:Docker 如此之好,你為什麼還要用k8s?
    k8s,現在已經被多家公司支持,例如微軟,紅帽,藍色巨人。只要能打包進入容器,容器能夠運行,那麼k8s 就一定能運行。,這將會是一件相當簡單的事情,k8s,會讓你無縫遷移雲環境,從google的cloud到aws再到微軟的環境,任意遷移。
  • Kind + Docker 一鍵部署K8s集群
    所以業界也除了一些簡易版的K8s集群環境,比如K3S(5 less than k8s),本文蟲蟲給大家介紹也是這樣一個項目Kind,一鍵部署的單機K8S環境,可以用於學習、本地開發和CI環境。另外kind操作依賴docker,需要先安裝docker。
  • 用rancher2分分鐘搭建k8s集群
    Kubernetes簡單介紹先簡單介紹下Kubernetes,簡稱k8s。k8s擴展docker單個容器的管理功能,實現誇多主機的問題,容器編排要負責網絡,存儲,安全等問題。具體來講包括以下幾點,可以讓應用的管理和部署得到巨大紅利,實現devops故障遷移:當某一個node節點關機或掛掉後,node節點上的服務會自動轉移到另一個node節點上,這個過程所有服務不中斷。
  • 企業微服務項目如何進入K8S的全過程
    image,可以使用腳本注意點:jenkins結點需要安裝docker哦,不要忘了docker images | grep none | awk &39; | xargs docker rmi只能用命令方式控制k8s,是很不方便的,所以我們還需要安裝一個界面控制臺,我們這裡選擇強大的kuboardwget https://github.com/sealstore/dashboard/releases/download/v1.0-1/kuboard.tarsealos install --pkg-url kuboard.tar
  • K8S棄用Docker了?Docker 不能用了?別逗了!
    從 DevOps 人員的角度,一面用 kubctl 命令、k8s API 來操作集群,一面在單機用 Docker 命令來管理鏡像、運行鏡像。 單獨用 Docker 的情況,在一些公司的場景裡面也是有的。一種場景是「只分不合」,把一臺機器用 Docker 做資源隔離,但是不需要將多容器「編排」。
  • 阿里雲內部獨家的K8s+Docker套餐,有內味了
    細心的網友會發現網.上關於k8s的資料非常非常的多,可90%的資料都是教你怎麼安裝部署k8s,那麼部署好了之後呢? ? ?,於是乎你的小編(雷鋒)在這個星期也沒閒著整理了這份關於K8s+Docker源碼+筆記+項目實戰的資料。
  • 14 - MLSQL on k8s(2) - Spark on k8s
    下面筆者將基於spark native方式部署,分別講解如下三種模式:spark submit從物理機cluster模式提交spark submit從物理機client模式提交spark submit從container client模式提交首先,先構建spark的鏡像,因為鏡像要被共享,因此要放到一個鏡像庫中,筆者用docker搭了一個鏡像庫:
  • k8s集群搭建
    、k8s-node1、k8s-node2啟動3臺虛擬機,並設置好網絡設置linux環境(三個節點都執行)關閉防火牆systemctl stop firewalldsystemctl、kubeadm、kubelet、kubectl安裝docker卸載舊版本的dockeryum remove docker \ docker-client
  • Centos7搭建k8s環境教程,一次性成功,收藏了!
    為什麼是k8s v1.16.0?最新版的v1.16.2試過了,一直無法安裝完成,安裝到kubeadm init那一步執行後,報了很多錯,如:node xxx not found等。centos7都重裝了幾次,還是無法解決。用了一天都沒安裝完,差點放棄。後來在網上搜到的安裝教程基本都是v1.16.0的,我不太相信是v1.16.2的坑所以先前沒打算降級到v1.16.0。
  • 詳解kubeadm安裝k8s集群常見問題
    網上通常都是從阿里雲下載,但是阿里雲的好像不一定能用了,我在docker hub上發現了kubernetes的同步庫gotok8s,應該是官方同步過來了,更新比較及時,版本也相互對應,配置好加速器下載也非常快。如果對應版本的庫不存在,就找版本相近的(kube開頭的幾個庫版本要相同),在安裝的時候指定好對應的版本。
  • 記一次Gitlab-CI集成K8S實錄
    那現在為什麼不行了呢?由於k8s環境還原,helm values.xml文件也丟失了,憑藉印象,還特地把privileged改為false,不知其所以然,實在是尷尬。按照說法,docker需要掛載/var/run/docker.sock與docker daemon通信,docker容器內默認是普通用戶權限,這時需要提升到root權限。
  • K8S工作節點的演變:由Docker到CRI-O
    docker主導這些功能分為2個層次:高級別功能:鏡像管理,傳輸,鏡像解壓縮和API,發送命令來運行容器,網絡,存儲(例如:rkt,docker,LXC等)。低級別功能: 運行容器。這些功能可以拆分獨立出各個部分來,各個部分可以選用各種開源組件,並搭配成更合理更高效的組合。
  • 從kubectl top看K8S監控原理
    最後會解釋常見的一些問題:kubectl top 為什麼會報錯?kubectl top pod 怎麼計算,包含 pause 嗎?kubectl top pod 和 docker stats得到的值為什麼不同?
  • 乾貨|帶您了解k8s
    一、Docker編排工具Docker的第一類編排工具:1)docker compose(docker原生):只能對一個主機上的容器進行編排,無法編排多個主機上的容器;2)docker swarm(docker原生):可以對多個主機上的容器進行編排。
  • 容器化的最佳實踐:阿里內部出品,Docker+K8S實戰文檔
    而對於k8s與Docker的相關問題,Alibaba肯定還是很有話語權的。只有實踐了才能對其有深入理解,所謂「紙上得來終覺淺,絕知此事要躬行」,今天分享的正是阿里巴巴內部出品的k8s+docker實戰文檔。
  • macOS上Docker啟動Kubernetes
    https://github.com/gotok8s/k8s-docker-desktop-for-macwget https://github.com/gotok8s/k8s-docker-desktop-for-mac/blob/master/imagesload_images.sh
  • 搭建最新的k8s集群
    ;       centos7.6     docker:18.09.6     node1192.168.106.103         centos7.6     docker:18.09.6     node2
  • kubeadm安裝kubernetes/k8s的詳細筆記(包括各種坑和注意事項)
    上一篇文章(),筆者簡單的介紹了k8s已經用rancher來快速安裝k8s集群,非常簡單,因為中間的安裝過程極其中的細節rancher都幫我們封裝好了,但是建議對於k8s的初學者不要通過這樣的方式去學習k8s,當然不是說rancher封裝的不好,相反是rancher做的太好,封裝的太好了,把安裝細節,把k8s涉及到的基本概念,設計思想都隱藏掉了,對應初學者去理解k8s是不好的。
  • 全網第一篇k8s,讓它在國內愉快的航行
    容器鏡像庫目前常用的K8S鏡像庫有docker.io (docker hub公共鏡像庫)gcr.io (Google container registry)k8s.gcr.io (等同於 gcr.io/google-containers)