k8s入坑之路(3)containerd容器


containerd概念:

containerd主要是namebases與k8s docker不同 存放路徑不一致 沒有默認倉庫

容器運行時:

2020年未kubernetes宣布不再支持docker

 

docker由libcontainer及containerd組成將libcontainer捐贈給OCI開源基金會將libcontainer改名runc,OCI定義了鏡像規范,運行時規范。(鏡像標准鏡像組織結構包含各種文件目錄等,運行時如何啟動一個容器需要接受那些指定,配置生命周期等,如何划分cgroup等)runc實現。

CNCF(雲原生計算機協會)成立容器編排大戰中由kubernetes勝出,docker將containerd捐贈CNCF,containerd比runc更高一層的封裝。

kubernetes為了保持中立性在1.5版本推出CRI機制,CRI本質是GRPC接口的定義。容器操作接口,鏡像操作接口。第一個實現接口的是containerd。

 

 

 

 

 

kubernetes為了支持docker自己做了dockershim墊片,kubelet調用grpc接口調用dockershim,然后dockershim通過CRI去電泳docker api,docker去操作containerd。kubernetes宣布不再支持docker cri實現是把dockershim去掉。

 

缺點:各軟件需要適配,包括適配新版kubernetes及containerd。containerd鏡像拉取存在問題。盡量使用私有倉庫進行避免。

 containerd架構:

 

 

# 1. Container Runtime - Containerd
#### 1.1 軟件包下載
```bash
# 設定containerd的版本號
$ VERSION=1.4.3
# 下載壓縮包
$ wget https://github.com/containerd/containerd/releases/download/v${VERSION}/cri-containerd-cni-${VERSION}-linux-amd64.tar.gz
```
#### 1.2 整理壓縮文件
下載后的文件是一個tar.gz,是一個allinone的包,包括了runc、circtl、ctr、containerd等容器運行時以及cni相關的文件,解壓縮到一個獨立的目錄中
```bash
# 解壓縮
$ tar -xvf cri-containerd-cni-${VERSION}-linux-amd64.tar.gz
# 復制需要的文件
$ cp etc/crictl.yaml /etc/
$ cp etc/systemd/system/containerd.service /etc/systemd/system/
$ cp -r usr /
```
#### 1.3 containerd配置文件
```bash
$ mkdir -p /etc/containerd
# 默認配置生成配置文件
$ containerd config default > /etc/containerd/config.toml
# 定制化配置(可選)
$ vi /etc/containerd/config.toml
```
#### 1.4 啟動containerd
```bash
$ systemctl enable containerd
$ systemctl restart containerd
# 檢查狀態
$ systemctl status containerd
```
containerd安裝

  

 

  操作containerd使用的命名空間不同,鏡像物理隔離目錄完全不同。

命令

ctr i -h查看幫助

ctr i pull docker.io/library/redis:alpine 拉取鏡像(默認不帶鏡像倉庫地址) docker pull docker.io/library/redis:alpine docker倉庫會自動補全

ctr i ls 查看鏡像

ctr ns 查看命名空間 c 創建 ls 查看  rm刪除 label設置標簽

docker tag redis:alpine registry.cn-hangzhou.aliyuncs.com/imooc/redis:alpine將鏡像重新打標簽

docker push registry.cn-hangzhou.aliyuncs.com/imooc/redis:alpin上傳鏡像

ctr i pull registry.cn-hangzhou.aliyuncs.com/imooc/redis:alpin 拉取鏡像

ctr i ls查看鏡像

ctr run -t -d registry.cn-hangzhou.aliyuncs.com/imooc/redis:alpin redis 啟動容器

ctr c ls查看當前運行容器

ctr t ls 查看當前運行任務

ctr t kill 殺掉當前任務

ctr t rm 刪除任務

ctr c rm 刪除容器

ctr -n default t ls 查看當前命名空間任務

k8s給containerd提供crictl命令

crictl images 查看鏡像

crictl ps 查看進程

crictl pod 查看pod

crictl logs 查看日志

crictl exec 進入容器

alias docker=crictl 將crictl轉變為docker命令操作ctr

  ctr -n k8s.io i tag registry.cn-hangzhou.aliyuncs.com/kubernetes-kubespray/pause:3.2 k8s.gcr.io/pause:3.2 重新將鏡像打一個tag

 docker變成docker ce后默認命名空間moby containerd默認空間default kubernetes默認空間k8s.io

 

kubectl命令自動補全

linux:

# yum install -y bash-completion
# locate bash_completion
/usr/share/bash-completion/bash_completion
# source /usr/share/bash-completion/bash_completion
# source <(kubectl completion bash)


macos:

$ brew install bash-completion
$ source $(brew --prefix)/etc/bash_completion
$ source <(kubectl completion bash)
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM