在k8s取消内置dockershim代码,取消了对docker的支持后,用户无非重新选择一个运行时,不必过度惊慌!

8f94d3d8ed5ea081873340b7888e78b5.png

现有的各种运行中,containerd必然成为大家后续的选择,docker也将会将一些功能复制到containerd,这里为大家介绍下containerd以及k8s如何使用containerd作为容器运行时。docker本身也是调用containerd进行容器管理。

containerd也是行业标准的容器运行时,由docker捐献,具有简单性,健壮性和可移植性等特点。可作为Linux和Windows的守护程序使用,可以管理其主机系统的完整容器生命周期:镜像传输和存储,容器执行和监控,低级存储和网络附件等。

containerd是CNCF毕业项目

containerd旨在嵌入到更大的系统中,而不是由开发人员或最终用户直接使用。

8ede74ddd921ec84d0235d3b558bb792.png

containerd部署

•部署

这里选用centos8 yum安装

yum-config-manager \    --add-repo \    https://download.docker.com/linux/centos/docker-ce.repoyum install -y containerd.iomkdir -p /etc/containerdcontainerd config default > /etc/containerd/config.toml

•启用systemd作为cgroup driver

修改/etc/containerd/config.toml

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]  ...  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]    SystemdCgroup = true

kubeadm使用containerd

对于k8s来说只需要指定kubelet参数

--container-runtime-endpoint=unix:///run/containerd/containerd.sock

对于kubeadm来说指定参数cri-socket

kubeadm init --image-repository=registry.aliyuncs.com/google_containers --cri-socket=/run/containerd/containerd.sock --node-name=192.168.9.235

或指定配置

nodeRegistration:  criSocket: /run/containerd/containerd.sock

对于国内同学来说需要注意,我们通常通过--pod-infra-container-image为kubelet指定pause镜像地址,这里需要注意该参数的说明

--pod-infra-container-image string                         The image whose network/ipc namespaces containers in each pod will use. This docker-specific flag only works when container-runtime is set to docker. (default "k8s.gcr.io/pause:3.2")

只针对docker生效,所以我们无法修改pause镜像的地址,必须要使用名为k8s.gcr.io/pause:3.2的镜像,当我们使用containerd时,需要先拉好镜像。

ctr --namespace k8s.io image pull registry.aliyuncs.com/google_containers/pause:3.2ctr --namespace k8s.io image tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2

containerd的管理

crictl

crictl 是 CRI 兼容的容器运行时命令行接口。你可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序。crictl 和它的源代码在 cri-tools 代码库。可以从 cri-tools的发布页面[1] 获取

crictl可以通过以下方式指定配置

•通过设置全局选项标志--runtime-endpoint(-r)和--image-endpoint(-i)•通过设置环境变量CONTAINER_RUNTIME_ENDPOINT和IMAGE_SERVICE_ENDPOINT•通过在配置文件中设置端点 --config=/etc/crictl.yaml

配置示例:

/etc/crictl.yamlruntime-endpoint: unix:///run/containerd/containerd.sockimage-endpoint: unix:///run/containerd/containerd.socktimeout: 10debug: true

其他功能大家看help都能get到要点

ctr

ctr是用于与containerd守护程序进行交互,用于不受支持的调试和管理功能的客户端。因为不受支持,所以不能保证命令,选项和操作的向后兼容性。它可以实现一些cri不支持的功能,例如上面提到的tag功能。ctr还有namespace概念,对于crictl默认namespace是k8s.io

--namespace 与命令一起使用的名称空间

查看命名空间

ctr ns lsNAME    LABELSdefaultk8s.io

命名空间之间镜像/容器时不可见的,所以不指定命名空间ctr命令就不能看到k8s的容器和镜像。

扫描关注我:

bf11f219602d7d6c821c93a9b42fdee5.png
微信
引用链接

[1] cri-tools的发布页面: https://github.com/kubernetes-sigs/cri-tools/releases

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐