Containerd 学习

Containerd 学习

 

 

一、Containerd 介绍

Containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。

在containerd中镜像是分namespace存放的

1、命令行工具

ctr:containerd 相比于docker , 多了namespace概念, 每个image和container 都会在各自的namespace下可见, 目前k8s会使用k8s.io 作为命名空间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#删除镜像
ctr -n k8s.io i rm k8s.gcr.io/pause:3.2
 
#拉取镜像
ctr -n k8s.io i pull -k k8s.gcr.io/pause:3.2
 
#推送镜像
ctr -n k8s.io i push -k k8s.gcr.io/pause:3.2
 
#导出镜像
ctr -n k8s.io i export pause.tar k8s.gcr.io/pause:3.2
 
#导入镜像
ctr -n k8s.io i import pause.tar
 
不支持 build,commit 镜像

crictl:是为k8s使用containerd而制作的, 其他非k8s的创建的 crictl是无法看到和调试的, 也就是说用ctr run 运行的容器无法使用crictl 看到

crictl 使用命名空间 k8s.io

nerdctl :(替代docker cli)

自从 Containerd 发布 1.5 以后,nerdctl 工具配合 Containerd 的情况下基本已经可以替换掉 Docker 和 Docker Compose;

nerdctl 官方发布包包含两个安装版本:

  • Minimal: 仅包含 nerdctl 二进制文件以及 rootless 模式下的辅助安装脚本
  • Full: 看名字就能知道是个全量包,其包含了 Containerd、CNI、runc、BuildKit 等完整组件

nerdctl 项目地址

https://github.com/containerd/nerdctl/releases/

 GitHub - containerd/nerdctl: Docker-compatible CLI for containerd, with support for Compose

2、nerdctl的下载安装

在k8s高版本中,采用Containerd 运行时,docker被舍弃,构建images将采用buildkit服务

1
2
3
4
5
6
7
8
9
##下载
wget  https://github.com/containerd/nerdctl/releases/download/v0.11.1/nerdctl-full-0.11.1-linux-amd64.tar.gz
 
##解压
tar Cxzvvf /usr/local nerdctl-full-0.11.1-linux-amd64.tar.gz
 
## 启动 containerd 和 buildkitd
systemctl enable --now containerd
systemctl enable --now buildkit

二、nerdctl 运用

1、pull  images

1
2
ctr image  pull  docker.io/cnrancher/rancher:v2.4.17-ent
nerdctl pull  rancher/cluster-proportional-autoscaler-amd64:1.0.0

2、查看所有的名称空间

nerdctl namespace ls

1
2
3
4
NAME        CONTAINERS    IMAGES    VOLUMES
buildkit    0             0         0
default     0             2         0
k8s.io      26            28        0

3、查看某个名称空间下的镜像

nerdctl   -n   k8s.io  images

4、指定名称空间重新打tag

1
nerdctl --namespace k8s.io   tag    calico/cni:v3.19.1  docker.harbor.com/ops/cni:v3.19.1

5、设置nerdctl子命令可以使用tab键

1
2
3
4
5
vim /etc/profile
source <(nerdctl completion bash)
 
# 让其生效
source /etc/profile

6、run 一个容器

1
nerdctl   run -d --privileged --restart=always  --name zjz-rancher  -p 80:80 -p 443:443  docker.io/cnrancher/rancher:v2.4.17-ent

三、配置加速地址

1、生成默认配置

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

2、修改镜像存储位置

1
2
3
cat /etc/containerd/config.toml
 
root = "/home/images/containerd"

3、镜像加速地址

1
2
3
4
5
6
7
[plugins."io.containerd.grpc.v1.cri".registry]
 
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
 
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
 
      endpoint = ["https://q5bgvr7l.mirror.aliyuncs.com"]

4、ctr 相当于核心组件,通过加载插件的方式来支持各种操作。

 使用 ctr plugins ls 来查看当前加载的插件和支持的操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@zjz ~]# ctr plugins ls
TYPE                            ID                       PLATFORMS      STATUS
io.containerd.content.v1        content                  -              ok
io.containerd.snapshotter.v1    aufs                     linux/amd64    skip
io.containerd.snapshotter.v1    devmapper                linux/amd64    error
io.containerd.snapshotter.v1    native                   linux/amd64    ok
io.containerd.snapshotter.v1    overlayfs                linux/amd64    ok
io.containerd.snapshotter.v1    zfs                      linux/amd64    skip
io.containerd.metadata.v1       bolt                     -              ok
io.containerd.differ.v1         walking                  linux/amd64    ok
io.containerd.gc.v1             scheduler                -              ok
io.containerd.service.v1        introspection-service    -              ok
io.containerd.service.v1        containers-service       -              ok
io.containerd.service.v1        content-service          -              ok
io.containerd.service.v1        diff-service             -              ok
io.containerd.service.v1        images-service           -              ok
io.containerd.service.v1        leases-service           -              ok
io.containerd.service.v1        namespaces-service       -              ok
io.containerd.service.v1        snapshots-service        -              ok
io.containerd.runtime.v1        linux                    linux/amd64    ok
io.containerd.runtime.v2        task                     linux/amd64    ok
io.containerd.monitor.v1        cgroups                  linux/amd64    ok
io.containerd.service.v1        tasks-service            -              ok
io.containerd.internal.v1       restart                  -              ok
io.containerd.grpc.v1           containers               -              ok
io.containerd.grpc.v1           content                  -              ok
io.containerd.grpc.v1           diff                     -              ok
io.containerd.grpc.v1           events                   -              ok
io.containerd.grpc.v1           healthcheck              -              ok
io.containerd.grpc.v1           images                   -              ok
io.containerd.grpc.v1           leases                   -              ok
io.containerd.grpc.v1           namespaces               -              ok
io.containerd.internal.v1       opt                      -              ok
io.containerd.grpc.v1           snapshots                -              ok
io.containerd.grpc.v1           tasks                    -              ok
io.containerd.grpc.v1           version                  -              ok
io.containerd.grpc.v1           cri                      linux/amd64    ok

四、 containerd连接harbor仓库

1、github项目地址介绍

cri/registry.md at master · containerd/cri · GitHub

2、containerd的配置文件(docker 的 daemon.json)

vim   /etc/containerd/config.toml

1
2
3
4
5
6
7
8
9
10
11
12
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io"] //到此为配置文件默认生成,之后为需要添加的内容
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."10.10.20.71:9998"]
endpoint = ["https://10.10.20.71:9998"]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."10.10.20.71:9998".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.configs."10.10.20.71:9998".auth]
username = "admin"
password = "Harbor12345"

其中“10.10.20.71.9998”是私人仓库地址。
insecure_skip_verify = true 意为跳过证书认证。

加速和对接harbor

保存并重启containerd服务即可

1
systemctl restart containerd

五、buildkit对接私有仓库

(1条消息) buildkit对接私有仓库_nangonghen的博客-CSDN博客 

 

 

 

 

 终于可以像使用 Docker 一样丝滑地使用 Containerd 了!-InfoQ 

https://github.com/containerd/containerd/releases   containerd的github项目地址

https://www.cnblogs.com/sparkdev/p/9063042.html    技术介绍和测试

实战:Containerd高级命令行工具nerdctl安装及使用-20211025 - mdnice 墨滴

posted @ 2022-06-06 12:01  有小熊陪着你看月亮  阅读(627)  评论(0编辑  收藏  举报