k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd

k8s笔记28--快速在ubuntu上基于二进制和源码安装containerd

  • 介绍
  • containerd 安装方法
    • 二进制文件安装
    • 源码构建安装
  • 注意事项
  • 说明

介绍

Containerd是一个工业标准的容器运行时,它强调简单、健壮和可移植性。它可作为Linux和Windows的守护进程,能管理主机系统上完整容器生命周期: 镜像传输和存储、容器执行和管理、容器底层存储和网络等。它是CNCF下“毕业”的项目,旨在嵌入到更大的系统中,而不是由开发人员或最终用户直接使用。
作为IT行业的人员最熟悉的容器产品大多是docker,可是docker较新的版本底层也在使用containerd来管理容器; k8s 早期大力支持docker作为其底层容器运行时,把相关代码都hardcode到组件中,指导1.24版本开始逐步废除kubelet中的 dockershim,转而通过cri来适配更多类型的容器运行时,包括知名的containerd和 CRI-O。
containerd作为知名、稳定、可靠的容器运行时,从事容器云领域的小伙伴都有必要了解一下它的基本原理和常见的安装部署方式,以便于解决工作、学习中遇到的相关问题…

containerd 安装方法

在安装之前我们可以想象一下运行起来一个容器需要哪些基础组件,类比docker run启动一个容器,我们 containerd 需要哪些基础工具组件呢?
首先, 需要命令行工具 nerdctl或者ctr来实现类似于docker run的功能(即docker-cli项目);其次, nerdctl等工具是需要和containerd的进行通信的,因此需要containerd组件;除此之外还需要一个low-level的运行时工具,它可以通过namespace隔离、cgroup限制来运行起一个实际的容器进程,这个组件就是runc了(当然可以用其它的low-level运行时工具,例如 youki);最后,容器运行是需要相关网络组件的,因此需要cni网络组件。
了解上述基础内容后,我们就能明白: 通过 runc、containerd、nerdctl、cni等4个主要模块就能玩转containerd容器运行时了,下面我们基于这4个模块分别用二进制和源码的方法安装containerd。

二进制文件安装

  1. runc
    在 github.com/opencontainers/runc/releases 下载指定系统和版本的 runc

  2. containerd
    在 github.com/containerd/containerd/releases 下载指定系统和版本的 containerd,笔者使用ubuntu比较多,下载 cri-containerd-cni-1.6.30-linux-amd64.tar.gz 版本,cri表示包含low-level的runc可执行文件,cni表示包含了常见的容器网络组件(例如bridge)。

  3. nerdctl
    在 github.com/containerd/nerdctl/releases 下载containerd的client程序,可以用来执行 nerdctl run|images|ps 等等价于docker的命令。

  4. cni
    在 github.com/containernetworking/plugins/releases 下载常见的容器网络组件可执行文件。

    如果不设置cni的话,新建容器会出现网络相关报错
    root@xg:/home/xg# nerdctl run -d --name=test-busybox busybox:1.32 sleep 3600
    FATA[0000] failed to verify networking settings: failed to create default network: needs CNI plugin "bridge" to be installed in CNI_PATH ("/opt/cni/bin"), see https://github.com/containernetworking/plugins/releases: exec: "/opt/cni/bin/bridge": stat /opt/cni/bin/bridge: no such file or directory 
    

    此处以cri-containerd-cni-1.6.30-linux-amd64.tar.gz 和 nerdctl-2.0.0-beta.2-linux-amd64.tar.gz 为例,将文件拷贝文件到指定目录,按照如下步骤即可运行期containerd容器服务:

    安装containerd
    $ tar -zxvf  cri-containerd-cni-1.6.30-linux-amd64.tar.gz
    # mv usr/local/bin/* /usr/local/bin/
    # mv opt/cni /opt/
    # mv usr/local/sbin/runc /usr/local/sbin/
    # mv etc/systemd/system/containerd.service /etc/systemd/system/containerd.service
    # systemctl daemon-reload
    # systemctl start containerd
    安装nerdctl
    $ tar -zxvf nerdctl-2.0.0-beta.2-linux-amd64.tar.gz
    # mv nerdctl /usr/local/bin/
    

    测试containerd
    在这里插入图片描述
    测试nerdctl在这里插入图片描述
    至此,我们已经通过二进制文件成功的运行起了containerd服务,并用nerdctl测试了容器运行时的可用性。如果后续碰到了内网机器无法访问公网的情况,大胆的使用这种二进制的方法安装containerd服务吧。

源码构建安装

  1. runc
    在github clone containerd 源码,checkout到指定的版本,make all 编译生成二进制文件。
    $ git clone https://github.com/opencontainers/runc.git
    $ git checkout release-1.1
    $ make all命令执行成功后会在当前目录生产对应的runc文件,将其同步到目标机器上,然后mv 到 /usr/local/sbin/ 目录下即可
    
    如下图: 在这里插入图片描述
  2. containerd
    在github clone containerd 源码,checkout到指定的版本,make all 编译生成二进制文件。
    $ git clone https://github.com/containerd/containerd.git
    $ git checkout release/1.6
    $ make allmake all执行成功后就会在bin目录下生成一系列containerd相关的二进制文件,将bin文件打包后同步到指定的机器上,mv 到 /usr/local/bin/ 目录, 将 containerd.service mv到/etc/systemd/system/目录, 然后通过 systemctl 即可启动服务
    containerd.service放在项目的根目录下(截至2024-03-2日,分支release/1.6)
    
    如下图:
    在这里插入图片描述
  3. nerdctl
    在github clone nerdctl 源码,checkout到指定的版本,make all 编译生成二进制文件。
    $ git clone https://github.com/containerd/nerdctl.git
    $ git checkout release/1.7
    $ make allmake all执行成功后就会在当前目录/_output下生成nerdctl二进制文件,将其同步到目标机器上,mv到 /usr/local/bin/ 下即可
    
    如下图: 在这里插入图片描述
  4. cni
    在github clone containerd 源码,checkout到指定的版本,make all 编译生成二进制文件。
    $ git clone 
    $ git checkout release-1.1
    $ bash build_linux.sh
    $ ls bin
    bandwidth  bridge  dhcp  firewall  host-device  host-local  ipvlan  loopback  macvlan  portmap  ptp  sbr  static  tuning  vlan  vrf执行成功后会在当前目录下bin文件夹下生成一系列的网络插件二进制文件,将bin文件打包后同步到指定的机器上,将二进制文件 mv 到 /opt/cni/bin 目录即可
    
    如下图:
    在这里插入图片描述

注意事项

  1. 编译containerd报错的时候可能需要安装libbtrfs-dev
    报错信息:
    btrfs/ioctl.h: No such file or directory
    部分网友推荐 apt-get -y install btrfs-progs ,实测在ubuntu22.04及之后的系统上无效解决方法:
    有效: apt install libbtrfs-dev
    参考: https://ubuntu.pkgs.org/20.04/ubuntu-main-arm64/libbtrfs-dev_5.4.1-2_arm64.deb.html方法2: 编译的时候忽略 btrfs 
    make all BUILDTAGS=no_btrfs
    
  2. 编译runc报错的时候可能需要安装 pkg-config 和 libseccomp-dev
    报错信息1:
    # pkg-config --cflags  -- libseccomp
    pkg-config: exec: "pkg-config": executable file not found in $PATH
    解决方法:
    apt install pkg-config报错信息2:
    go build github.com/seccomp/libseccomp-golang:
    # pkg-config --cflags  -- libseccomp
    Package libseccomp was not found in the pkg-config search path.
    Perhaps you should add the directory containing `libseccomp.pc'
    to the PKG_CONFIG_PATH environment variable
    Package 'libseccomp', required by 'virtual:world', not found
    pkg-config: exit status 1
    解决方法:
    apt install libseccomp-dev
    
  3. 在新的server上执行 runc -v报错 GLIBC_2.38 not found
    报错:
    # /usr/local/sbin/runc -v
    /usr/local/sbin/runc: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.38' not found (required by /usr/local/sbin/runc)解决方法:
    确保编译系统的glibc版本和运行系统的glibc相同,或者比运行系统低一点。
    笔者最开始在ubuntu23.10 Desktop 上编译,在 ubuntu 22.04 server上运行, 而23.10 使用GLIBC 2.38,22.04使用的是GLIBC 2.35, 因此调整到22.04版本的系统上重新编译就可以正常使用了。可以通过 strings /lib/x86_64-linux-gnu/libc.so.6 |grep GLIBC_ 查看当前系统上的glibc版本
    通过 ldd --version 查看当前系统正在使用的glibc版本
    

说明

软件环境:
ubuntu 22.04 server
nerdctl-2.0.0-beta.2
cri-containerd-cni-1.6.30
runc 1.1.0
参考文档:
containerd -> BUILDING.md
Docker、Containerd、RunC分别是什么
功能解释:containerd.io、docker-ce、docker-ce-cli、docker-buildx-plugin、docker-compose-plugin、docker.io
ubuntu docker离线安装docker
How to install the Containerd runtime engine on Ubuntu Server 22.04
Containerd shim 原理深入解读
Containerd组件 – containerd-shim-runc-v2作用
Understanding the Container Runtime Containerd in one article

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/787462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[人工智能] AI为农业赋能:智能灌溉系统

前言 人工智能(AI)在农业方面具有广泛的应用前景,这主要得益于其在数据处理、预测分析和决策优化等方面的优势。 农业生产涉及到大量的数据,包括土壤湿度、气温、降雨量、植物生长情况等。人工智能可以利用先进的数据处理技术&…

设计模式之工厂方法模式精讲

工厂方法模式又叫虚拟构造函数(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建性工作推迟到子类中。 工厂模式可以分为简单工厂…

IMU参数辨识及标定

IMU参数辨识及标定 一、标定参数分析 标定的本质是参数辨识。首先明确哪些参数可辨识,其次弄清怎样辨识。 参数包括陀螺仪和加速度计各自的零偏、标度因数、安装误差。 IMU需要标定的参数主要是确定性误差和随机误差,确定性误差主要标定bias&#xff0…

C++刷题篇——04找等值元素

一、题目 二、解题思路 1、分割后放进二维数组 2、使用map,key为数值,value为其坐标 3、遍历二维数组元素,再在map中找该元素对应的value值(二维数组形式),倘若value.size为1,那直接返回-1&…

2024阿里云服务器ECS u1实例性能测评_CPU内存_网络_存储

阿里云服务器u1是通用算力型云服务器,CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器,ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

PostgreSql 01 安装,创建用户,创建数据库,创建关系

01.安装postgresql postgreSql 是在linux上 去官网找按照的方式 选择好postgreSql 的版本,已经Linux的发行版本 拿到命令,直接扔到Linux中运行即可 # 下载PGSQL的rpm包 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpm…

如何一键展示全平台信息?Python手把手教你搭建自己的自媒体展示平台

前言 灵感源于之前写过的Github中Readme.md中可以插入自己的js图片和动态api解析模块&#xff0c;在展示方面十分的美观&#xff1a; 这方面原理可以简化为&#xff0c;在Markdown中&#xff0c;你可以使用HTML标签来添加图像&#xff0c;就像这样&#xff1a; <tr><…

低噪声、轨至轨运算放大器芯片—— D721、D722、D724,适合用于音频领域

应用领域 D721、D722、D724是我们推荐的三款低噪声、轨至轨运算放大器芯片&#xff0c;其中D721为单运放&#xff0c;D722为双运放&#xff0c;D724为四运放。适合用于音频领域、传感器等的信号放大处理&#xff0c;比如K歌宝、音响、测距、滤波器、AD转换器前级信号处理等等。…

亚信安慧AntDB:激荡数据浪潮,塑造智能新纪元

亚信安慧AntDB一直秉承着“技术生态”的理念&#xff0c;不断进行技术创新和功能增强&#xff0c;以保持与先进数据库系统的竞争力。作为一款致力于提升数据库处理性能和稳定性的系统&#xff0c;AntDB在技术上始终保持敏锐的洞察力&#xff0c;不断汲取国内外先进技术的精华&a…

大模型之路2:继续趟一条小路

继续趟一条小路&#xff0c;可谓是充满了曲折&#xff0c;当然&#xff0c;必不可少的还是坑。 吐槽 看过的喷友&#xff0c;其实你看完以后&#xff0c;大概率也就是和我一起骂骂街&#xff0c;因为....我也的确没理清楚。 我也不知道做错了什么&#xff0c;就是运行不过去…

【讲解下Gitea】

&#x1f308;个人主页:程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

使用plasmo开发浏览器插件在网页指定位置添加自定义UI

使用plasmo开发浏览器插件的时候&#xff0c;有时候需要在指定网站的指定页面添加自定义的UI内容&#xff0c;如果通过content.js内容脚本去通过js创建的话&#xff0c;可就太麻烦了&#xff0c;要写不少的js代码。不过plasmo已经帮我们实现了这个功能&#xff0c;就是Content …

【CAD建模号】学习笔记(一)

一、概述 CAD建模号是一款用于在智能手机及平板电脑等移动设备上进行三维建模的app&#xff0c;最初发布于2019年。 二、基本操作 手指直接点按&#xff0c;拖动来粗略创建和操作对象&#xff1b;双指缩放视图&#xff0c;双指移动视图。手指长按屏幕&#xff0c;出现红色小…

css-盒子阴影

1.box-shadow: 10px 20px 10px 10px blue; 参数对应顺序&#xff1a;上下&#xff0c;左右 &#xff0c;模糊程度&#xff0c;颜色 &#xff0c;阴影大小 2.box-shadow: 10px 20px 10px 20px blue,-10px -20px 10px 50px red; 负号就是相反方向 支持多个阴影 在后面加逗号 3…

汽车充电桩主板购买渠道汇总

随着充电桩设施的迅速普及&#xff0c;充电桩作为其中关键组件之一&#xff0c;市场需求不断增长。在互联网科技飞速发展的背景下&#xff0c;充电桩主板的采购渠道更加多元化&#xff0c;下面我们来探讨消费者、充电桩运营商和生产商可以从何处购买充电桩主板。 直接联系制造商…

10-代码随想35搜索插入位置

35.搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6], 5 输出: 2 示例 2: 输入: [1,3,5…

AWS迁移教程,Redis迁移到Elasticache

当企业不断出海拓展业务&#xff0c;面临的挑战之一就是如何高效迁移应用程序及数据库至云端。为解决这一问题&#xff0c;AWS云专门提供多种简单且高效的迁移方式&#xff0c;进行帮助企业实现应用程序的平稳迁移&#xff0c;从而降低迁移过程中的风险和成本。下面九河云将为大…

小程序地理位置接口wx.getLocation申请审核解决方法(详细说明及避坑)

本人申请了三次才最终通过&#xff0c;简单说一下坑 前几天想实现定位功能改了一天代码手机上也不行。 晚上登上小程序管理界面才发现那个功能要申请。。。那就申请呗 1. 申请路径 小程序页面-开发-开发管理-接口设置-地理位置 之后就提交申请&#xff0c;两次都不过就不理解了…

67、yolov8目标检测和旋转目标检测算法batchsize=1/6部署Atlas 200I DK A2开发板上

基本思想:需求部署yolov8目标检测和旋转目标检测算法部署atlas 200dk 开发板上 一、转换模型 链接: https://pan.baidu.com/s/1hJPX2QvybI4AGgeJKO6QgQ?pwd=q2s5 提取码: q2s5 from ultralytics import YOLO# Load a model model = YOLO("yolov8s.yaml") # buil…

云智慧:拥抱AI算法驱动的智能运维服务创新引擎

随着信息化、数字化、智能化的加码&#xff0c;企业对人工智能、大数据等技术应用呈现出明显兴趣&#xff0c;海笔研究对国内中型规模企业调研表明&#xff0c;在2020年&#xff0c;54.1%的企业选择购买人工智能类应用&#xff0c;41.9%的企业选择购买大数据及BI类应用&#xf…