首页 > 其他分享 >containerd环境搭建指南

containerd环境搭建指南

时间:2024-02-23 23:12:38浏览次数:21  
标签:指南 containerd elk92 etc runC usr root 搭建

目录

一.container概述

1.什么是containerd

- 早在2016年3月,Docker 1.11的Docker Engine里就包含了containerd,而现在则是把containerd从Docker Engine里彻底剥离出来,作为一个独立的开源项目独立发展,目标是提供一个更加开放,稳定的容器运行基础设施。和原先包含在Docker Engine里containerd相比,独立的containerd将具有更多的功能,可以涵盖整个容器运行时管理的所有需求。

- 然而,containerd并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如Swarm,kubernetes,Mesos等容器编排系统。

- containerd以Daemon的形式运行在系统上,通过暴露底层的gRPC API,上层系统可以通过这些API管理机器上的容器。

- 每个containerd只负责一台机器,pull精选,对容器的操作(启动,停止等),网络,存储都是由containerd完成。具体运行容器由runC负责,实际上只要是负责OCI规范的容器都可以支持。

- 对于容器编排服务来说,运行时只需要使用containerd + runC,更加轻量,容易管理。
	- contained更专注于容器的生命周期管理,容器的存储管理,容器的网络管理。
	- runC是实际的容器运行工具。

- 独立之后containerd的特性严禁可以和Docker Engine分开,专注容器运行时管理,可以更稳定。

2.为什么要学习containerd

众所周知,K8S已经是云原生的基础设施,对于传统运维在就业找工作时,都会或多或少接触到K8S相关面试题。

而在K8S 1.24之后的版本官方已经将原有的docker-shim容器运行时弃用,而是改用containerd作为容器运行时。

因此,很多企业也在转型使用containerd,因此课程设计上,也要紧跟企业的步伐,我们要对标企业。因此在Docker的后续课程中引入containerd的知识板块。

当然,并不是说学习containerd就不用学习docker了,事实上,大多数公司依旧是在使用docker作为容器管理工具哟。小孩子才做选择题,咱们成年人自然都得学习。

二.基于yum方式安装containerd

1.获取软件源

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


参考链接:
	https://developer.aliyun.com/mirror/docker-ce

2.查看yum源中containerd软件版本

yum list | grep containerd

3.安装containerd的

yum -y install containerd.io

4.查看containerd的版本信息

[root@elk91 ~]# rpm -qa | grep containerd
containerd.io-1.6.28-3.1.el7.x86_64
[root@elk91 ~]# 
[root@elk91 ~]# ctr --version 
ctr containerd.io 1.6.28
[root@elk91 ~]# 

5.设置containerd开机自启动

[root@elk91 ~]# systemctl enable --now containerd
[root@elk91 ~]# 
[root@elk91 ~]# systemctl status containerd

6.查看containerd的客户端和服务端的版本信息

[root@elk91 ~]# ctr version 
Client:
  Version:  1.6.28
  Revision: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
  Go version: go1.20.13

Server:
  Version:  1.6.28
  Revision: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
  UUID: 53513094-c77e-430b-8b58-377f8e50daf1
[root@elk91 ~]# 

三. 基于二进制方式安装

1.二进制安装包说明

containerd有两种安装包:
	- containerd-xxx:
		这种安装包用于单机测试没问题,不包含runC,需要提前安装。
		
	- cri-containerd-cni-xxx:
		包含runc及符合K8S的CNI接口的相关软件包。
		虽然包含runC,但是依赖系统中的Seccomp(用于系统资源调用的相关模块)来配合使用。因此建议大家手动安装runC即可。

2.下载containerd

[root@elk92 ~]# wget https://github.com/containerd/containerd/releases/download/v1.7.13/cri-containerd-cni-1.7.13-linux-amd64.tar.gz


推荐阅读:
	https://github.com/containerd/containerd/releases

3.解压软件包

[root@elk92 ~]# tar xf cri-containerd-cni-1.7.13-linux-amd64.tar.gz 
[root@elk92 ~]# 
[root@elk92 ~]# ls etc opt usr
etc:
cni  crictl.yaml  systemd

opt:
cni  containerd

usr:
local
[root@elk92 ~]# 



如上所示,解压软件包后会声场三个目录,作用说明如下:
	- etc
		存放的是containerd服务管理配置文件及cni虚拟网卡配置文件。
	
	- opt
		存放的是GCE环境中使用containerd配置文件及CNI插件。
		
	- usr
		存放的是containerd运行时文件,包含runC。
		
		

[root@elk92 ~]# ls etc opt usr -R
etc:
cni  crictl.yaml  systemd

etc/cni:
net.d

etc/cni/net.d:
10-containerd-net.conflist

etc/systemd:
system

etc/systemd/system:
containerd.service

opt:
cni  containerd

opt/cni:
bin

opt/cni/bin:
bandwidth  dhcp   firewall     host-local  loopback  portmap  sbr     tuning  vrf
bridge     dummy  host-device  ipvlan      macvlan   ptp      static  vlan

opt/containerd:
cluster

opt/containerd/cluster:
gce  version

opt/containerd/cluster/gce:
cloud-init  cni.template  configure.sh  env

opt/containerd/cluster/gce/cloud-init:
master.yaml  node.yaml

usr:
local

usr/local:
bin  sbin

usr/local/bin:
containerd  containerd-shim  containerd-shim-runc-v1  containerd-shim-runc-v2  containerd-stress  crictl  critest  ctd-decoder  ctr

usr/local/sbin:
runc
[root@elk92 ~]# 

4.拷贝containerd运行时文件到宿主机指定路径

[root@elk92 ~]# ll /usr/local/bin/
total 0
[root@elk92 ~]# 
[root@elk92 ~]# cp usr/local/bin/containerd /usr/local/bin/
[root@elk92 ~]# 
[root@elk92 ~]# ll -h /usr/local/bin/
total 38M
-rwxr-xr-x. 1 root root 38M Feb 17 18:17 containerd
[root@elk92 ~]# 

5.拷贝containerd的systemd的配置文件

[root@elk92 ~]#  cp etc/systemd/system/containerd.service  /usr/lib/systemd/system/
[root@elk92 ~]# 
[root@elk92 ~]# ll -h /usr/lib/systemd/system/containerd.service 
-rw-r--r--. 1 root root 1.4K Feb 17 18:20 /usr/lib/systemd/system/containerd.service
[root@elk92 ~]# 

6.查看containerd帮助信息

[root@elk92 ~]# containerd --help
NAME:
   containerd - 
                    __        _                     __
  _________  ____  / /_____ _(_)___  ___  _________/ /
 / ___/ __ \/ __ \/ __/ __ `/ / __ \/ _ \/ ___/ __  /
/ /__/ /_/ / / / / /_/ /_/ / / / / /  __/ /  / /_/ /
\___/\____/_/ /_/\__/\__,_/_/_/ /_/\___/_/   \__,_/

high performance container runtime


USAGE:
   containerd [global options] command [command options] [arguments...]

VERSION:
   v1.7.13

DESCRIPTION:
   
containerd is a high performance container runtime whose daemon can be started
by using this command. If none of the *config*, *publish*, *oci-hook*, or *help* commands
are specified, the default action of the **containerd** command is to start the
containerd daemon in the foreground.


A default configuration is used if no TOML configuration is specified or located
at the default file location. The *containerd config* command can be used to
generate the default configuration for containerd. The output of that command
can be used and modified as necessary as a custom configuration.

COMMANDS:
   config    Information on the containerd config
   publish   Binary to publish events to containerd
   oci-hook  Provides a base for OCI runtime hooks to allow arguments to be injected.
   help, h   Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --config value, -c value     Path to the configuration file (default: "/etc/containerd/config.toml")
   --log-level value, -l value  Set the logging level [trace, debug, info, warn, error, fatal, panic]
   --address value, -a value    Address for containerd's GRPC server
   --root value                 containerd root directory
   --state value                containerd state directory
   --help, -h                   show help
   --version, -v                print the version
[root@elk92 ~]# 

7.生成配置文件

	1.创建配置文件目录
[root@elk92 ~]# mkdir /etc/containerd


	2.生成默认的配置文件
[root@elk92 ~]# containerd config default > /etc/containerd/config.toml
 
 
	3.修改Cgroup的管理者为systemd组件
[root@elk92 ~]# grep SystemdCgroup /etc/containerd/config.toml
            SystemdCgroup = false
[root@elk92 ~]# 
[root@elk92 ~]# sed -ri 's#(SystemdCgroup = )false#\1true#' /etc/containerd/config.toml 
[root@elk92 ~]# 
[root@elk92 ~]# grep SystemdCgroup /etc/containerd/config.toml
            SystemdCgroup = true
[root@elk92 ~]# 


	4.修改pause的基础镜像名称
[root@elk92 ~]# grep sandbox_image /etc/containerd/config.toml
    sandbox_image = "registry.k8s.io/pause:3.8"
[root@elk92 ~]# 
[root@elk92 ~]# sed -i 's#registry.k8s.io/pause:3.8#registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8#' /etc/containerd/config.toml
[root@elk92 ~]# 
[root@elk92 ~]# grep sandbox_image /etc/containerd/config.toml
    sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8"
[root@elk92 ~]# 


	5.添加私有仓库信息
[root@elk92 ~]# grep registry.mirrors /etc/containerd/config.toml -A 2  # 修改前
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]

    [plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming]
[root@elk92 ~]# 
[root@elk92 ~]# 
[root@elk92 ~]# vim /etc/containerd/config.toml 
[root@elk92 ~]# 
[root@elk92 ~]# 
[root@elk92 ~]# grep registry.mirrors /etc/containerd/config.toml -A 3  # 修改后
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.yinzhengjie.com"]
        endpoint = [
          "https://harbor.yinzhengjie.com"
        ]
[root@elk92 ~]# 

8.启动containerd服务

	1.启动containerd服务
[root@elk92 ~]# systemctl enable --now containerd


	2.查看服务的状态
[root@elk92 ~]# systemctl status containerd

9.拷贝ctr客户端工具

	1.拷贝ctr客户端工具到PATH环境变量
[root@elk92 ~]# cp usr/local/bin/ctr /usr/bin/


	2.查看contrainerd服务版本信息
[root@elk92 ~]# ctr --version
ctr github.com/containerd/containerd v1.7.13
[root@elk92 ~]# 
[root@elk92 ~]# 
[root@elk92 ~]# ctr version
Client:
  Version:  v1.7.13
  Revision: 7c3aca7a610df76212171d200ca3811ff6096eb8
  Go version: go1.20.13

Server:
  Version:  v1.7.13
  Revision: 7c3aca7a610df76212171d200ca3811ff6096eb8
  UUID: 15867631-9deb-4064-b8b3-78a02f98378b
[root@elk92 ~]# 

10.安装runC

10.1 为什么要单独安装runC

由于二进制包中提供的runC默认需要安装seccomp支持,需要单独安装,且不同runC对seccomp版本要求不尽相同。这回导致安装后无法使用runC的情况。

所以建议单独下载runC二进制包进行安装,里面会包含seccomp模块的支持。

如上图所示,我们发现直接在containerd中下载的runC软件包大小仅仅只有13MB,而我们单独安装的runC要比这个软件包大哟~

10.2 下载runC软件包

[root@elk92 ~]# wget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64


参考链接:
	https://github.com/opencontainers/runc/releases

10.3 拷贝runC到环境变量

	1.查看runC软件包大小
[root@elk92 ~]# ll -h runc.amd64 
-rw-r--r--. 1 root root 11M Feb 17 19:16 runc.amd64
[root@elk92 ~]# 

	2.移动runc软件包到PATH环境变量
[root@elk92 ~]# mv runc.amd64 /usr/sbin/runc
[root@elk92 ~]# 


	3.为runc程序添加执行权限
[root@elk92 ~]# chmod +x /usr/sbin/runc
[root@elk92 ~]# 

	4.查看runC的版本信息
[root@elk92 ~]# runc -v
runc version 1.1.12
commit: v1.1.12-0-g51d5e946
spec: 1.0.2-dev
go: go1.20.13
libseccomp: 2.5.4
[root@elk92 ~]# 

标签:指南,containerd,elk92,etc,runC,usr,root,搭建
From: https://www.cnblogs.com/yinzhengjie/p/18030527

相关文章

  • linux(ubuntu22.04)+PicGo(gui版)+阿里云oss搭建图床教程
    linux(ubuntu22.04)+PicGo(gui版)+阿里云oss搭建图床教程资源库PicGo下载链接:山东镜像源github原版阿里云oss链接linux下PicGo(gui版)的安装从资源库链接里下载后缀为.AppImage的安装包,版本可以选择稳定版2.3.1也可以用更新的beta版。修改文件权限,打开文......
  • 互联网人的副业探索指南
    这几年的就业环境和经济形势,身处其中的各位想必深有体会,年后刚开工不久,技术群里大家都在讨论如何做副业提高收入来源的话题。其实关于如何做副业,如何开源节流开启个人职业生涯的第二曲线,已经不是什么新鲜话题,只不过在经济下行和裁员降薪潮之下,大家才能感同身受,意识到副业对个人......
  • Linux搭建SFTP
    Linux搭建SFTP一、 创建sftp用户组(注:通常选择home路径下,按需自行调整)1、 创建sftp用户组根目录(详情看第4点)mkdir/home/sftpUsers/name创建单个用户name:addusername//新建name用户passwdname//给name用户设置密码—部分需要设置复杂密码包含数字,且长度不小于8位nam......
  • 迅为RK3568开发板驱动开发指南-输入子系统
     《iTOP-RK3568开发板驱动开发指南》更新,本次更新内容对应的是驱动(第十三篇输入子系统)视频,帮助用户快速入门,大大提升研发速度。 第13篇-输入子系统目录第1篇驱动基础篇第2篇字符设备基础第3篇并发与竞争第4篇高级字符设备进阶第5篇中断第6篇平台总线第7篇设备树......
  • Unity xLua开发环境搭建与基础进阶
    Unity是一款非常流行的游戏开发引擎,而xLua是一个为Unity开发者提供的Lua框架,可以让开发者使用Lua语言来进行游戏开发。在本文中,我们将介绍如何搭建UnityxLua开发环境,并进行基础进阶的学习。 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正......
  • 02-23整理 MySQL主从库搭建过程
    主从库搭建需要主库从库均有配置,井号#之后部分为注释主库:#创建数据同步用户账号,自行替换变量createuser${slaveuser}@'${ip}'identifiedby'${password}';grantreplicationslaveon*.*to${slaveuser}@'ip';#查看用户被授权限:showgrantsfor${slaveuser}@'ip';......
  • 洛谷题单指南-贪心-P1478 陶陶摘苹果(升级版)
    原题链接:https://www.luogu.com.cn/problem/P1478题意解读:题目的本质是任务安排问题,有n件任务,每件任务耗时不同,在一定的时间内,如何安排任务使得完成的任务越多越好。解题思路:对于这类问题,贪心策略是优先完成容易的。回到摘苹果问题,要优先摘耗费力气小的,如果高度够不着,就跳过,......
  • 搭建私有的 PyPI 服务器
    安装教程安装pypi-server:pipinstallpypiserver创建一个存储PyPI包的目录:mkdir~/pypi-packages启动pypi-server,需要生成用户名密码文件及安装配套服务pypi-serverrun-p8080-P~/.htpasswd--overwrite~/pypi-packages配置PyPI客户端以使用你的......
  • OpenSceneGraph环境搭建
    OpenSceneGraph开发环境搭建环境说明windows10visualstudio2019qt5.15预编译库与资源这是最省事的方式,本人懒得走cmake编译那套,而且有现成的为何不用,省点时间研究OSG不香吗?下载预编译库,点此进入,可看到如下页面,点击StableReleasesStableReleases页面如下:......
  • 洛谷题单指南-贪心-P1106 删数问题
    原题链接:https://www.luogu.com.cn/problem/P1106题意解读:如何删数,让剩下的数最小,贪心选择问题。解题思路:先看样例:1754384第1次遍历:删掉7,剩下15438第2次遍历:删掉5,剩下1438第3次遍历:删掉4,剩下138第4次遍历:删掉8,剩下13,即为结果所以,贪心策略如下:1、遍历每一个数,如果前一......