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 技术介绍和测试