K8S工作節點的演變:由Docker到CRI-O

2020-10-17 蟲蟲安全

K8S工作節點的演變:由Docker到CRI-O

隨著K8S的崛起,OCI的推出,容器和雲架構逐漸發展完善,一個純開源的、社區的,完美的和高效的容器生態體系正在形成和在各個企業生產環境中使用。而生態體系中最重要的一環就是其Node,工作節點的演變,本文我們我說說K8S工作節點的演變和OCI標準下生態體系。

工作節點的演化

我們回顧一下K8S體系架構的發展,其中工作節點的運行時容器的已經發了重大的變化和調優,有以Docker為主導的容器發展成了有OCI標準的的CRI-O工具鏈形式。

docker主導

該階段主要以簡單的kubelet體系結構作為工作節點代理開始,作為工作節點代理通過api-server從主節點接收來管理的命令。Kubelet使用Docker運行時來啟動Docker容器(包括從註冊表中拉鏡像)。

CRI(容器運行時接口)

容器運行時接口(CRI)規範是在K8s 1.5中引入的。CRI規範還包括協議緩衝區,gRPC API和庫。通過在kubelet中運行的gRPC客戶端和在CRI Shim中運行的gRPC伺服器。該規範給K8S架構體系帶來抽象層,並充當了適配器。這允許以更簡單的方式運行各種容器運行時。

這些功能分為2個層次:

高級別功能:鏡像管理,傳輸,鏡像解壓縮和API,發送命令來運行容器,網絡,存儲(例如:rkt,docker,LXC等)。

低級別功能: 運行容器。

這些功能可以拆分獨立出各個部分來,各個部分可以選用各種開源組件,並搭配成更合理更高效的組合。

OCI、CRI-O 和工具鏈生態

OCI(開放容器倡議)提出了明確的容器運行時和鏡像規範,該規範有助於實現多平臺支持(Linux,Windows,VM等)。Runc是OCI的默認實現,它是容器運行時的底層。代的容器運行時基於該分層體系結構,其中Kubelet通過CRI-gRPC與容器運行時進行通信,而容器運行時通過OCI運行容器。CRI有多種實現,例如Docker shim,CRI-O,containerD。

podman

無守護程序容器引擎,用於開發管理和運行OCI容器,在一定程度上可以取代Docker CLI語言,可以docker命令大多數命令(RUN,PUSH,PULL等),甚至可以將其直接作為docker別名使用即可。

buildah

buuildah幫助構建OCI鏡像的工具。用戶不必關注象鏡像的組成,也不用編寫複雜的Dockerfile。相反,可以一次只構建一層鏡像,對其進行測試,然後回滾(如果需要),知道滿意,然後提交它到註冊表。

skopeo

完整的容器管理CLI工具。skopeo功能之一就是可以直接在遠程註冊表中無需下載或者解壓,就可以檢查鏡像。skopeo目前已經發展成為用於遠程註冊表的功能完善的鏡像管理工具,包括對鏡像進行籤名,在註冊表之間複製並保持遠程註冊表同步。這大大加快了容器構建,管理和部署管道速度。

CRI-O

CRI-O提供了可在OCI標準下一致的運行時和kubelet集成方式,提供一個kubelet容器運行時的接口:

支持更多鏡像的格式包括docker鏡像格式;

支持更多的方式來下載和驗證鏡像包;

容器鏡像管理(管理image的層,文件系統);

容器進程的生命周期管理;

CRI所需求的監控和日誌;

CRI需求的資源隔離;

OpenShift

OpenShift包括整個生態鏈工具的。紅帽去年發布的Red Hat OpenShift 4.x系統,其容器運行時默認為CRI-O。可以使用CoreOS構建不可變的基礎架構,並在該基礎架構上運行OpenShift4.x。CRI-O以CoreOS為基礎是好處顯而易見的,最更重要的一點是CRI-O由k8s社區控制,完全開源,非常精簡,直接實現k8s容器運行時接口。

相關焦點

  • kubeadm安裝kubernetes/k8s的詳細筆記(包括各種坑和注意事項)
    上一篇文章(),筆者簡單的介紹了k8s已經用rancher來快速安裝k8s集群,非常簡單,因為中間的安裝過程極其中的細節rancher都幫我們封裝好了,但是建議對於k8s的初學者不要通過這樣的方式去學習k8s,當然不是說rancher封裝的不好,相反是rancher做的太好,封裝的太好了,把安裝細節,把k8s涉及到的基本概念,設計思想都隱藏掉了,對應初學者去理解k8s是不好的。
  • 詳解kubeadm安裝k8s集群常見問題
    tag gotok8s/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0docker rmi gotok8s/etcd:3.4.3-0docker pull gotok8s/coredns:1.6.7docker tag gotok8s/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7docker rmi gotok8s/coredns:1.6.7
  • k8s集群搭建
    將一個Node節點加入到當前集群中kubernetes join <Master節點的IP和埠>前置要求一臺或多臺機器,作業系統CentOS7.x-86 _x64分別是k8s-master、k8s-node1、k8s-node2啟動3臺虛擬機,並設置好網絡設置linux環境(三個節點都執行)關閉防火牆
  • Kubernetes決定棄用Docker,到底會影響到誰?
    在 Kubernetes 的 dockershim、cri-containerd、cri-o 三種實現中,RedHat 推崇的 cri-o 已經比較主流,它雖然仍是「套娃「,但已經比較精簡。下面是從 kubernetes 集群運行的全景圖看 cri-o 的位置:Docker 本源於 Linux ContainerDocker 作為容器引擎,其實現的基礎是 Linux Container——從內核到用戶空間的機制。
  • K8S棄用Docker了?Docker 不能用了?別逗了!
    工程師們只需要簡單的 docker build 命令即可製作出自己的鏡像,並通過 docker push 將其發布至 DockerHub 上。通過簡單的 docker run命令即可快速的使用指定鏡像啟動自己的服務。 通過這種辦法,可以有效的解決軟體運行時環境差異帶來的問題,達到其 Build once, Run anywhere 的目標。
  • 教你一次性成功安裝K8S集群(基於一主兩從模式)
    # Please follow the guide at https://kubernetes.io/docs/setup/cri/ sed -i "s#^ExecStart=/usr/bin/dockerd.
  • kubeadm部署單master節點
    ~]# curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo~]# cat /etc
  • Kind + Docker 一鍵部署K8s集群
    概述kind是主要是為了測試和簡化K8S而設計的,項目基於Golang開發依賴極少,只需要Golang 1.11版本以上和docker既可。kind由以下組件構成:Go 實現集群創建,映鏡像構建等的軟體包。
  • 《蹲坑學K8S》之19-6:部署Weave網絡
    首先,wRouter集成了DNS功能,能夠動態地進行服務發現和負載均衡,另外,與libnetwork 的overlay driver類似,weave要求每個POD有兩個網卡,一個就連在lb/ovs上處理L2 流量,另一個則連在docker0上處理Service流量,docker0後面仍然是iptables
  • 每天5分鐘|輕鬆掌握開發工作中必會的k8s-基礎組件與架構
    k8s採用主從結構,將節點分為兩種類型,一種是matser節點,一種是worker節點,如下圖所示:master節點作為控制節點,主要工作是對worker節點們進行管理,該節點上不運行容器,且一個master節點可以管理上百甚至上千個worker節點。
  • 阿里雲內部獨家的K8s+Docker套餐,有內味了
    ,那麼作為運維、開發、測試或者架構師來說,必須要掌握這項技術,才能體現我們的工作價值,才能在行業具備保持較高的技術水平,kubernetes作為成熟的容器編排工具,具有容器集群的自動化部署、自動化伸縮和故障自恢復的能力,讓容器的部署和管理變得更加容易,能夠給企業和提供一個智能化的容器雲管理平臺,為企業快速上雲提供一個安全可靠的解決方案Docker
  • 每天5分鐘|輕鬆掌握開發工作中必會的k8s-pod介紹和安裝nginx
    之前在介紹k8s基本組成部分的時候,簡單的提到了pod,今天我們就來具體聊聊這個pod。00—舉一個生活中的例子先來一個生活中的例子!如果一個學校只有一個學生, 那學校的管理工作就會很容易。但要真是一個學校一個學生,那校長會哭死的,太虧了!!!
  • 使用kubeadm的方式搭建K8S高可用集群
    /linux/centos/docker-ce.repo查看是否有docker-ce包# yum list | grep docker-cecontainerd.io.x86_64         &
  • 乾貨|帶您了解k8s
    3)docker machine(docker原生):可以將一個主機迅速初始化到docker swarm集群裡。以上三個稱為docker三劍客。Docker的第二類編排工具:mesos:它不是docker的編排工具,而是資源分配工具。所以mesos必須要依賴於容器編排框架marathon。
  • 每天5分鐘|輕鬆掌握開發工作中必會的k8s-k8s安裝與部署
    準備好兩伺服器(系統是centos7.3),分別作為matser和node,如下:要讓k8s能夠管理我們的集群,需要在所有的節點上面分別安裝k8s的組件。在安裝之前,需要在兩臺節點上做如下的操作。注意,k8s的master節點上需要安裝很多組件,通過安裝kubernetes-master就可以幫我們把controller manager,schedule,apiserver等組件都安裝上。
  • 容器|Docker 如此之好,你為什麼還要用k8s
    雲環境無縫遷移 如果你有上雲的需求,那麼使用k8s,這間會是一件相當簡單的事情,k8s,會讓你無縫遷移雲環境,從google的cloud到aws
  • k8s從v1.15.1升級到v1.16.0
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.16.0 k8s.gcr.io/kube-apiserver:v1.16.0
  • Kubeadm部署CentOS8三節點Kubernetes V1.18.0集群實踐
    ,以及多節點安裝部署。採用三個節點部署,一個master節點,兩個node節點;三個節點分別綁定一個內網固定IP位址;Linux系統版本採用CentOS 8;Docker使用社區版19.03.12;基本網絡拓撲如下圖
  • 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。
  • 記一次Gitlab-CI集成K8S實錄
    由於k8s環境還原,helm values.xml文件也丟失了,憑藉印象,還特地把privileged改為false,不知其所以然,實在是尷尬。按照說法,docker需要掛載/var/run/docker.sock與docker daemon通信,docker容器內默認是普通用戶權限,這時需要提升到root權限。