沈天真
作者沈天真·2021-06-09 00:56
售前支持·IPS

Docker被K8S“废了”? ----Containerd on k1 power

字数 2277阅读 3485评论 0赞 0

Docker被”废了”?

关注K8S的同学都知道Kubernetes官方已经宣布从 v1.20版本之后,放弃对docker的容器运行时的支持,具体见链接

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation

这个消息,其实并没有听起来那么吓人,请参考K8S的官方解释

https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/

在 Kubernetes 集群中,有一个称为”容器运行时”的东西,负责提取和运行容器映像。Docker 是该运行时的热门选择,其他常见选项包括Containerd和 CRI-O。

Docker 的设计并非旨在嵌入 Kubernetes 中。而站在更广泛的角度来看,我们日常称之为"Docker"的技术实际上是一个完整的容器技术堆栈,它本身就是一个高级容器运行时。此外,Docker 还包含了许多 UX 增强功能,使得我们在进行开发工作时很容易与之交互,但这些 UX 增强功能对于 Kubernetes 来说并不是必需的。

在常规应用中,Docker 不符合 CRI(Container Runtime Interface容器运行时接口)规范,用户使用 Kubernetes 集群必须借助另一个名为 Dockershim 的中间件工具来获取其真正需要的内容,该工具已被容器化。这意味着,官方必须要在 Docker 和 Kubernetes 之间再多走一步,这无疑增加了复杂性与成本。

实际上,Kubernetes 早在 v1.23 发行版中就已将 Dockershim 从 Kubelet 中删除,从而删除了对 Docker 作为容器运行时的支持。

因此,作为用户,接下来,只需要将容器运行时从 Docker 更改为另一个受支持的容器运行时即可。

Docker 还能用吗 ?

实际上,在开发中使用的 Docker 安装与 Kubernetes 集群中的 Docker 运行时无关。

或许这样说,依旧让很多人感到困惑。简而言之, Docker 生成的镜像实际上是一个 OCI (Open Container Initiative)镜像,使用Docker生成的镜像仍然可以在Kubernetes集群中使用。任何与 OCI 兼容的镜像,对于 Kubernetes 而言,都是一样的。

对于CRI和OCI在K8S中的位置,请仔细研究下图。

在 K1 Power Linux 上编译 Containerd

编译环境:Power9+Ubuntu 18.04 ppc64le+Go 1.16

Step 1: 安装必须的依赖文件

export DEBIAN_FRONTEND=noninteractive

apt-get update -y

apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade -yq

apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install -yq build-essential btrfs-tools libseccomp-dev unzip pkg-config

Step 2: 安装 Go

从官网下载 https://golang.org/dl/ ppc64le 架构,并配置好Go语言环境,包括GO_HOME ,GO_ROOT

Step 3: 安装 Protoc

wget https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/protoc-3.7.1-linux-ppcle_64.zip

unzip ./protoc-3.7.1-linux-ppcle_64.zip -d protoc-3.7.1

mv ./protoc-3.7.1/bin/protoc /usr/local/bin

Step 4: 安装 runc

go get github.com/opencontainers/runc

cd $GOPATH/src/github.com/opencontainers/runc

make

make install

Step 5: 编译 Containerd

go get github.com/containerd/containerd

cd $GOPATH/src/github.com/containerd/containerd

make

make install

make integration

Step 6: 配置 Containerd 为系统服务

cp ./containerd.service /etc/systemd/system/

chmod 700 /etc/systemd/system/containerd.service

systemctl enable containerd.service

service containerd start

service containerd status

containerd config default > /etc/containerd/config.toml

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

0

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广