专栏首页sealyuncontainerd与kubernetes集成

containerd与kubernetes集成

概念介绍

  • cri (Container runtime interface)
  • containerd
    • containerd is an industry-standard container runtime with an emphasis on simplicity, robustness and portability.
    • containerd完全支持运行容器的的CRI运行时规范。
    • cri在containerd1.1以上的版本的原生插件。它内置于containerd并默认启用。
  • cri-o
    • OCI-based implementation of Kubernetes Container Runtime Interface.
    • kubernetes为了兼容cri和oci孵化了项目cri-o。为了架设在cri和oci之间的一座桥梁。由此cri-o既兼容cri插件实现又兼容oci的容器运行时标准。
  • oci (Open Container Initiative)
  • runc
    • runc is a CLI tool for spawning and running containers according to the OCI specification.
    • runc,是对于OCI标准的一个参考实现,是一个可以用于创建和运行容器的CLI(command-line interface)工具。

概述

由于docker嵌入了太多自身内容,为了减轻容器负担。此次选用containerd作为kubernetes的容器实现方案。本文将带大家讲述如何搭建一个集成了containerd的k8s集群。

环境准备

下载containerd二进制包。我这里已经编译并打包了好了,内含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

  • 解压二进制包并生成默认文件
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

生成的默认配置文件注意 [grpc]address 字段默认为 /run/containerd/containerd.sock

配置文件其他参数含义参照github地址: https://github.com/containerd/containerd/blob/master/docs/man/containerd-config.toml.5.md

  • /etc/systemd/system 目录下编写文件 containerd.service内容如下

1 2 3 4 5 6 7 8 9101112131415161718192021

[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

  • 启动containerd
systemctl enable containerd  systemctl restart containerd  systemctl status containerd

看containerd启动状态如果是running就没有问题。下面我们测试拉取一下hub的镜像。

  • 测试containerd

1

ctr images pull docker.io/library/nginx:alpine

看到输出done,说明containerd运行一切正常。

使用crictl连接containerd

下一步我们使用crictl连接containerd。

  • 修改crictl的配置文件,在 /etc/crictl.yaml 写入以下内容:
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中配置保持一致。

  • 验证一下cri插件是否可用
crictl  pull nginx:alpine  crictl  rmi  nginx:alpine  crictl  images

其中 crictl images 会列出所有的cri容器镜像。

到此我们的cri + containerd已经完成整合了。下一步我们需要修改kubeadm配置进行安装。

导入kubenetes离线镜像包

这里我们就需要导入k8s的离线镜像包了。这里需要注意一下,kubernetes是调用的cri接口,所以导入时也需要从cri插件导入镜像。

  • cri导入镜像命令(cri导入镜像):
ctr cri load  images.tar
  • containerd导入镜像命令(containerd导入镜像):

1

ctr images import images.tar

修改kubelet配置和kubeadm安装时配置

  • 在 kubelet配置文件 10-kubeadm.conf 的[Service] 结点加入以下配置:

1

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的集成就完成了。下面可以直接安装即可。

致谢,

感谢cuisongliu对containerd技术的梳理与总结

本文分享自微信公众号 - sealyun(gh_f33fe7b0c869),作者:cuisongliu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于overlay2存储驱动的磁盘配额问题

    你需要一个高版本的内核推荐4.9以上,我们用的是4.14,如果使用低内核可能你一些FROM别的基础镜像就跑不了,如用overlay2在centos系统上跑FRO...

    sealyun
  • Docker架构分析

    大家一定很困惑 dockerd, containerd, ctr,shim, runc,等这几个进程的关系到底是啥

    sealyun
  • Tekton Pipeline教程

    Tekton Pipeline,是一个k8s native的pipeline, 任务跑在pod中,通过自定义CRD去管理任务与工作流等等,我看完tekton之后...

    sealyun
  • 弃用docker之后你的k8s用哪种容器runtime?

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

    有点技术
  • 扩展 Kubernetes 之 CRI

    使用 cri-containerd 的调用流程更为简洁, 省去了上面的调用流程的 1,2 两步

    王磊-AI基础
  • CNCF发布containerd项目旅程报告

    今天我们非常兴奋地发布我们的containerd项目旅程报告。这是我们为毕业阶段项目发布的第四份这样的报告。

    CNCF
  • containerd项目

    说明:containerd是一个行业标准的容器运行引擎,强调简单、健全和可移植性。它可用作Linux和Windows的守护程序,管理主机系统的完整容器生命周期:...

    CNCF
  • 【Pod Terminating原因追踪系列之三】让docker事件处理罢工的cancel状态码

    岳家瑞,腾讯云后台开发工程师,日常负责K8s生态和运行时相关工作,包括K8s插件开发和运行时问题排查。

    腾讯云原生
  • Containerd 1.1.0 尝鲜记

    下载 cri-containerd 1.1.0,并解压,其中包含 /usr、/etc 以及 opt 三个目录,这里我们只是用前两个目录的内容,目录结构如下,直接...

    崔秀龙
  • 探索通用可编程数据平面

    相比传统网络数据平面,通用可编程数据平面让网络用户可以自定义数据包的完整处理流程,实现理想的协议无关网络数据处理。而当下的OpenFlow模型还无法成为一种完全...

    博文视点Broadview

扫码关注云+社区

领取腾讯云代金券