概念介紹
-
cri (Container runtime interface)
-
cri
is a containerd plugin implementation of Kubernetes container runtime interface (CRI). - cri是 kubernetes的容器運(yùn)行時(shí)接口的容器插件實(shí)現(xiàn)诚隙。
-
-
containerd
- containerd is an industry-standard container runtime with an emphasis on simplicity, robustness and portability.
- containerd完全支持運(yùn)行容器的的CRI運(yùn)行時(shí)規(guī)范。
- cri在containerd1.1以上的版本的原生插件。它內(nèi)置于containerd并默認(rèn)啟用势篡。
-
cri-o
- OCI-based implementation of Kubernetes Container Runtime Interface.
- kubernetes為了兼容cri和oci孵化了項(xiàng)目cri-o渤昌。為了架設(shè)在cri和oci之間的一座橋梁惨撇。由此cri-o既兼容cri插件實(shí)現(xiàn)又兼容oci的容器運(yùn)行時(shí)標(biāo)準(zhǔn)葵萎。
-
oci (Open Container Initiative)
- https://www.opencontainers.org/about/oci-scope-table
- oci是由多家公司成立的項(xiàng)目,并由linux基金會(huì)進(jìn)行管理,致力于container runtime 的標(biāo)準(zhǔn)的制定和runc的開(kāi)發(fā)等工作分蓖。
-
runc
-
runc
is a CLI tool for spawning and running containers according to the OCI specification. - runc异吻,是對(duì)于OCI標(biāo)準(zhǔn)的一個(gè)參考實(shí)現(xiàn)裹赴,是一個(gè)可以用于創(chuàng)建和運(yùn)行容器的CLI(command-line interface)工具。
-
概述
由于docker嵌入了太多自身內(nèi)容,為了減輕容器負(fù)擔(dān)诀浪。此次選用containerd作為kubernetes的容器實(shí)現(xiàn)方案棋返。本文將帶大家講述如何搭建一個(gè)集成了containerd的k8s集群。
環(huán)境準(zhǔn)備
下載containerd二進(jìn)制包雷猪。我這里已經(jīng)編譯并打包了好了睛竣,內(nèi)含containerd、runc求摇、crictl射沟、ctr等殊者。
下載鏈接:https://github.com/cuisongliu/containerd-dist/releases/download/v1.2.4/containerd-v1.2.4.tar.gz
- runc版本: 1.0.1-dev
- containerd版本: v1.2.4
安裝
安裝containerd
-
解壓二進(jìn)制包并生成默認(rèn)文件
tar -C /usr/local/bin -xzf containerd-v1.2.4.tar.gz chmod a+x /usr/local/bin/* containerd config default > /etc/containerd/config.toml
生成的默認(rèn)配置文件注意
[grpc]
的address
字段默認(rèn)為/run/containerd/containerd.sock
配置文件其他參數(shù)含義參照github地址: https://github.com/containerd/containerd/blob/master/docs/man/containerd-config.toml.5.md
-
在
/etc/systemd/system
目錄下編寫(xiě)文件containerd.service
內(nèi)容如下[Unit] Description=containerd container runtime Documentation=https://containerd.io After=network.target [Service] ExecStartPre=/sbin/modprobe overlay ExecStart=/usr/local/bin/containerd Restart=always RestartSec=5 Delegate=yes KillMode=process OOMScoreAdjust=-999 LimitNOFILE=1048576 # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNPROC=infinity LimitCORE=infinity [Install] WantedBy=multi-user.target
-
啟動(dòng)containerd
systemctl enable containerd systemctl restart containerd systemctl status containerd
看containerd啟動(dòng)狀態(tài)如果是running就沒(méi)有問(wèn)題。下面我們測(cè)試?yán)∫幌耯ub的鏡像验夯。
-
測(cè)試containerd
ctr images pull docker.io/library/nginx:alpine
看到輸出done猖吴,說(shuō)明containerd運(yùn)行一切正常。
使用crictl連接containerd
下一步我們使用crictl連接containerd挥转。
-
修改crictl的配置文件,在
/etc/crictl.yaml
寫(xiě)入以下內(nèi)容:runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false
這里注意runtime-endpoint 和image-endpoint 必須與/etc/containerd/config.toml中配置保持一致距误。
-
驗(yàn)證一下cri插件是否可用
crictl pull nginx:alpine crictl rmi nginx:alpine crictl images
其中
crictl images
會(huì)列出所有的cri容器鏡像。到此我們的cri + containerd已經(jīng)完成整合了扁位。下一步我們需要修改kubeadm配置進(jìn)行安裝准潭。
導(dǎo)入kubenetes離線(xiàn)鏡像包
這里我們就需要導(dǎo)入k8s的離線(xiàn)鏡像包了。這里需要注意一下域仇,kubernetes是調(diào)用的cri接口,所以導(dǎo)入時(shí)也需要從cri插件導(dǎo)入鏡像刑然。
-
cri導(dǎo)入鏡像命令(cri導(dǎo)入鏡像):
ctr cri load images.tar
-
containerd導(dǎo)入鏡像命令(containerd導(dǎo)入鏡像):
ctr images import images.tar
修改kubelet配置和kubeadm安裝時(shí)配置
-
在 kubelet配置文件 10-kubeadm.conf 的
[Service]
結(jié)點(diǎn)加入以下配置:Environment="KUBELET_EXTRA_ARGS=--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"
-
在kubeadm配置文件 kubeadm.yaml 中加入
apiVersion: kubeadm.k8s.io/v1beta1 kind: InitConfiguration nodeRegistration: criSocket: /run/containerd/containerd.sock name: containerd
到此containerd和kubernetes的集成就完成了。下面可以直接安裝即可暇务。
掃碼關(guān)注sealyun
探討可加QQ群:98488045