1、Docker和K8S
Docker 是一個開源的、輕量級的容器引擎,和 VMware 虛擬機相比,Docker 使用容器承載應用程式,而不使用作業系統,所以它的開銷很少,性能很高,但是,Docker 對應用程式的隔離不如虛擬機徹底,所以它并不能完全取代 VMware,
在傳統的開發程序中(我之前的開發程序),以Java為例,一般都是本地(開發機)開發運行然后打成jar、war包放到服務器上,然后在服務器上部署相關環境(JDK、Redis、Mysql、Nginx等),非常麻煩,一款產品開發–上線是兩套不同的環境,應用環境,應用配置都是不同的,很容易導致的問題是:為什么在本地可以運行,部署后出現問題,版本更新后為什么導致服務不可用,對于運維來說考驗十分大,
環境配置是十分的麻煩(對Linux不熟悉的同學經常會出現各種各樣奇葩的問題,甚至把環境搞臟),對于集群每一個都要部署環境(集群Redis、ES、Hadoop…) 費事費力,發布一個專案( jar + (Redis MySQL JDK ES) ),專案能不能帶上環境安裝打包,
基于以上問題,Dokcer提出了解決方案,
相信很多人都用過虛擬機,虛擬機,就是在你的作業系統里面,裝一個軟體,然后通過這個軟體,再模擬一臺甚至多臺“子電腦”出來, 在“子電腦”里,你可以和正常電腦一樣運行程式,例如開QQ,如果你愿意,你可以變出好幾個“子電腦”,里面都開上QQ,“子電腦”和“子電腦”之間,是相互隔離的,互不影響,虛擬機屬于虛擬化技術,而Docker這樣的容器技術,也是虛擬化技術,屬于輕量級的虛擬化,

虛擬機雖然可以隔離出很多“子電腦”,但占用空間更大,啟動更慢,虛擬機軟體可能還要花錢(例如VMWare),而容器技術恰好沒有這些缺點,它不需要虛擬出整個作業系統,只需要虛擬一個小規模的環境(類似“沙箱”),
比較Docker和虛擬機技術的不同:
傳統虛擬機,虛擬出一條硬體,運行一個完整的作業系統,然后在這個系統上安裝和運行軟體,
Docker:容器內的應用直接運行在宿主機的內容,容器是沒有自己的內核的,也沒有虛擬我們的硬體,所以就輕便了
每個容器間是互相隔離,每個容器內都有一個屬于自己的檔案系統,互不影響
但需要注意的是: Docker本身并不是容器,它是創建容器的工具,是應用容器引擎,
Docker技術的三大核心概念,分別是:
- 鏡像(Image)
- 容器(Container)
- 倉庫(Repository)
對于Docker來說,其作用可概況為:搭建,發送,運行,即將相關內容包括環境等等打包成一個鏡像,然后放到倉庫里,需要時進行下載運行即可,
2、既然有了 Docker, 為什么還要 Kubernetes ?
在尚未開始學習Kubernetes之前,我認為它是一套非常復雜的系統,各種抽象概念以及復雜的安裝程序,差點因為安裝不順,打算就此放棄,

單看圖示上部分,發生的變化僅僅是HOST換成了Pod,底層網路由真實網路換成了覆寫網路,即虛擬網路,對于APP應用開發者而言,即使你完全不懂容器技術也沒關系,Kubernetes提供的抽象層對于APP應用開發者而言是完全透明的,應用在POD中和在HOST主機上并沒有本質區別, k8s是一個開源的容器集群管理系統,可以實作容器集群的自動化部署、自動擴縮容、維護等功能,
也就是說k8s跟Docker的粒度是不同的,k8s用于對Docker及容器進行更高級更靈活的管理 ,
簡單了解一下K8s
一個K8S系統,通常稱為一個K8S集群(Cluster),
這個集群主要包括兩個部分:
-
一個Master節點(主節點)
-
一群Node節點(計算節點)
其中Master節點:

Master節點包括API Server、Scheduler、Controller manager、etcd,
API Server是整個系統的對外介面,供客戶端和其它組件呼叫,相當于“營業廳”,
Scheduler負責對集群內部的資源進行調度,相當于“調度室”,
Controller manager負責管理控制器,相當于“大總管”,
Node節點:

Node節點包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可選),還有就是Pod,
Pod是Kubernetes最基本的操作單元,一個Pod代表著集群中運行的一個行程,它內部封裝了一個或多個緊密相關的容器,
如果用一句話做個總結,就是:容器,提供應用級的主機抽象;Kubernetes,提供應用級的集群抽象,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287124.html
標籤:其他
