Kubernetes CKA課程筆記 13

Container Runtime Interface(CRI)

ZONGRU Li
Oct 10, 2021

前一篇(12)我已經將機台做好的安裝K8s Cluster的以下準備:

link

接著該頁面往下拉首先看到 — 安裝runtime(i.e. Container Runtime)

Container Runtime就是接下來第一個要安裝的應用程式

  • Container Runtime 不是 Kubernetes元件
  • Kubernetes卻需要Container Runtime來做Schedule Container

首先問題是 →什麼是Container Runtime?

Container Runtime:

第二篇筆記(Kubernetes Architecture)有提到

  • 我們的應用程式將運作為Container
  • 甚至K8s有些運算也是要運行成Container
  • (ex:API Server,Schedule,Controller Manager,etcd…etc)
  • 所以K8s的master Node 與 worker Node都需要Container Runtime

該如何挑選Container Runtime:

  • 現今的K8s其實不care使用何種runtime
  • 但是最初K8s僅支援Docker為其Container Runtime
  • 在早期方式是K8s的kubelet程式碼內直接地寫入DockerCode
  • (記得kubelet是裝在master & worker都有)
  • 所以kubelet直接地操作Docker去操作Container
  • 而現今已經有其他熱門的Container Runtime
  • 1.containerd
  • 2.cri-o

(還有其他Container Runtime可能沒那麼熱門)

但是K8s開發者總不可能寫出支援各種runtime的kubelet程式出來

所以K8s開發出了一個kubeletContainer Runtime中間的介面:

Container Runtime Interface(CRI):

  • 其定義了各種Container Runtime技術要實作的介面規格
  • 就可以達成以下

但是Docker卻是第一個不實作CRI規格的Container Runtime

所以前不久版本的K8s若仍使用DockerContainer Runtime則還要多一層

中間隔一個dockershim,shim的意思就是橋,或連接的意思

所以在上述結構中kubelet還能操作Docker

Docker本身除了Container Runtime外還有其他功能:

  1. build Docker image
  2. Docker CLI
  3. Docker UI
  4. Docker API
  5. …etc

但是K8s僅需要DockerContainer Runtime

所以越來越多比Docker輕量化的Container Runtime提供給K8s引用

其中兩個前面有講到:

  1. containerd
  2. cri-o

然後最終Dockershim也漸漸不再支援(v1.20)

並在1.23版完全移除Dockershim

而我最想知道的講師解說:

  1. 若使用一些公司繼續維護的Dockershim(或相近的Service)

我們就仍然可以繼續使用Docker當作Container Runtime

2.但還是建議直接選要其他輕量化的Container Runtime

3.並且我們仍然可以使用Docker去pull Docker images,並使用其他(非Docker)輕量化Container Runtime來執行

(我最想知道第三點!!!Docker 製作或Dockerhub的image能不能給其他非Docker的Container Runtime使用!!!!)

所以舉例我們仍可以透過Docker建立images

並在K8s中使用如containerd這個Container Runtime來運行

基於以上理由,各家雲端平台的K8s Cluster整合方案也都採用containerd

  1. Amazon的EKS(Elastic)
  2. Azure的AKS(Azure Kubernetes Service)
  3. Google的GKE(Google Kubernetes Service)

所以接著下一篇就將進行containerd的實機安裝

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet