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使用的命名空間不同,鏡像物理隔離目錄完全不同。
命令
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)
