Kubernetes?K8s?
Kubernetes經常被寫作K8s。其中的數字8替代了K和s中的8個字母——這一點倒是方便了發推,也方便了像我這樣懶惰的人。
什么是云原生?
云原生: 它是一種構建和運行應用程序的方法,它包含(容器
,容器編排
,微服務構架
),優勢是快速迭代部署應用,自動擴縮容資源,因為容器化與微服務化變得高可用與容錯。讓應用具備像在“云”上那樣運行的能力 —— 彈性、快速部署、自動擴縮、故障自愈、高可用、可觀察……這些能力并不要求必須部署在公有云上,你可以在:
- ?? 公有云(AWS、阿里云、騰訊云……)
- 🏢 私有云(公司內部的數據中心 + 云平臺)
- 🖥? 本地機房(只要能跑容器和 Kubernetes)
- 💻 開發者本地環境(比如用 Minikube 跑個小型集群)
- 🌍 邊緣設備 / 混合云 / 多云環境
容器,容器編排
- **容器:**簡單來說就是它可以將應用程序與其運行需要依賴的庫,容器運行時環境等打包封裝(Docker 就是一種容器)。就像一個杯子?可以將他們裝在一起,方便隨時隨地部署安裝和運行。
- **容器編排:**就是對剛剛說到的容器進行管理,包含將容器分配到合適地方運行,對各容器進行調度,實現容器之間的負載均衡,健康檢查與故障恢復等等。最常用最大名鼎鼎的就是 kubernetes(k8s)
微服務
簡單來說,一個服務可以由很多
小而專
的服務組件,通過互相通信組成一套完整的業務系統,例如 web 前端,分類服務,購物車,日志服務,付款服務…… 他們這些服務組件各司其職,各自的功能都很專一,他們組合起來就構成了一個購物軟件,這個購物軟件就是微服務架構的軟件,而這些小而專
的組件就是微服務。
kubernetes 與 Docker 的關系
Docker:首先,Docker 是一個廣泛使用的容器平臺,它不僅提供了容器技術,還包含了鏡像構建、運行、管理的一整套工具。我們平時說的 “Docker 容器”,其實就是由 Docker 構建并運行的容器(也叫容器實例)。
**Kubernetes:**而 Kubernetes 是一個容器編排平臺,它的作用是自動化地部署、管理、擴展和調度容器。不過這里有一個細節:Kubernetes 實際上并不是直接控制單個容器實例,而是以 Pod 為最小單位進行調度。Pod 可以理解為一個邏輯上更大的“容器組”,通常包含一個主容器(有時也會有多個),這些容器共享同一個網絡和存儲空間。
Pod 的中文意思是“豆莢”,這個比喻也很形象 —— Docker 容器實例就像豆莢(Pod)里的豆子,Pod 是 Kubernetes 中運行容器的最小調度單位,Kubernetes 實際編排的是這些 Pod。
另外需要注意,現在 Kubernetes 通常使用像 containerd
、CRI-O
這樣的容器運行時來運行容器,而不是直接使用 Docker。但只要鏡像是標準格式(OCI),就還是可以用 Docker 構建鏡像后讓 Kubernetes 調用運行
如上圖,Docker并非Kubernetes唯一支持的容器運行時。事實上,Kubernetes基于一系列特性實現了對容器運行時的抽象(從而可以兼容不同的底層容器運行時)。在 Kubernetes 中,容器運行時(如 containerd、CRI-O)需要和 Kubernetes 本身通信。這就引入了容器運行時接口
(CRI, Container Runtime Interface)。
? 容器運行時接口(如 CRI,Container Runtime Interface):
- 是 Kubernetes 和容器運行時之間通信的標準規范。
- 它就像一個“接口(interface)”,規定了一個容器運行時應該提供哪些功能(比如創建容器、啟動容器、獲取狀態、刪除容器等)。
? 容器運行時(如 Docker、containerd、CRI-O):
- 是這些接口的具體實現者(類)。
- 它們按照接口定義的方法和規范,寫好了實際的代碼邏輯,可以真正創建、運行和管理容器實例。
小知識-容器運行時
說到Docker容器的運行,就不得不說到容器運行時了,首先它與容器實例1的關系就是工具
和產物
的關系(更抽象一點的理解:容器鏡像就像房子圖紙,容器實例就是房子,容器運行時就是造房子或者裝修房子的工具),容器鏡像是由 構建工具(如 Docker CLI、BuildKit、Podman 等) 來構建和打包的,容器運行時將鏡像轉化為可運行的容器實例1,管理已經運行的容器實例的生命周期(啟動,停止,刪除,監控……)
Docker 是最常見的一種容器技術,它提供的容器運行時可以通過容器鏡像創建并運行容器實例。不過,除了 Docker 之外,還有其他廠商提供的類似容器技術,比如 Kata、gVisor 等。雖然這些不同的技術實現方式各異,使用的容器運行時也不同,但它們都具備相似的功能:通過容器鏡像創建和管理容器實例。
注意:在業內,一般“容器”就默認指運行時狀態的實例,不再單獨區分“容器”和“容器實例”,在這里為了初學者能夠分清楚,特此解釋。
小知識-容器技術
容器技術是指一系列技術、工具和方法,它們共同幫助我們創建、管理、運行和隔離容器。容器技術包括但不限于以下幾個核心組成部分:
- 容器鏡像:容器的藍圖或模板。
- 容器運行時:創建并管理容器實例的工具。
- 容器編排:自動化管理容器生命周期的系統。
- 容器網絡:實現容器間通信的網絡機制。
- 容器存儲:為容器提供持久化存儲的技術。
- 容器鏡像倉庫:存儲和分發鏡像的系統。
- 容器安全:保護容器和應用程序的安全機制。
容器鏡像和容器實例的關系可以類比為類與對象的關系。容器鏡像類似于類,是靜態定義和模板,而容器實例則像類的對象,是鏡像的運行時實例。容器鏡像必須經過容器運行時(如 Docker)創建容器實例后,才能被執行和運行。 ?? ??