searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

containerd介绍

2023-05-19 09:40:59
49
0

背景

来源

containerd(与runc)首次出现在docker1.11中,并在后来从docker中分离出来并开源

containerd实现了docker的主要功能,可以作为一个独立的进程运行容器

发展

docker不兼容CRI(Container Runtime Interface),而containerd开源后反而支持了CRI,可以直接替代docker作为k8s的容器运行时

另一方面,k8s 从v1.20开始逐步废弃docker,并将在v1.24中移除对docker(dockershim)的支持,届时需要把docker切换到containerd,cri-o,rktlet等其他符合CRI规范的容器运行时

k8s对docker的移除已经是板上钉钉的事情了,containerd也逐渐成为docker的替代品

系统架构

与k8s的集成

 

containerd-shim:负责监视容器的生命周期和重连,与容器一对一(或者与sandbox一对一)

dockershim:docker本身不支持CRI,而k8s的运行时必须满足CRI规范,因此k8s维护了docker-shim作为垫片来兼容docker

cri-containerd:containerd本身也是不支持CRI的,需要通过cri-containerd来兼容CRI,而在containerd v1.1之后,cri-containerd作为插件的形式集成到containerd二进制文件中

命令

ctr --containerd官方cli工具

参考:https://www.mankier.com/8/ctr#run

# 创建容器
ctr containers start redis /containers/redis
# 查看容器
ctr containers list
ctr --namespace k8s.io containers ls
# 删除容器
ctr containers kill xxx
# 查看镜像
ctr images list
# 拉镜像
ctr images pull image
# 打tag
ctr images tag souce_image:source_tag target_image:target_tag

crictl --兼容CRI的容器运行时cli工具

参考:https://kubernetes.io/zh/docs/tasks/debug-application-cluster/crictl/#mapping-from-docker-cli-to-crictl

需要在 /etc/crictl.yaml 设置运行时sock文件,命令与docker相似

crictl --runtime-endpoint="unix:///run/containerd/containerd.sock" ps -a
crictl pull busybox
crictl images

使用containerd部署k8s

# 创建containerd配置文件
containerd config default > /etc/containerd/config.toml
vi /etc/containerd/config.toml
...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true
...
# 增加kubelet参数
vi /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock"
systemctl daemon-reload
systemctl restart containerd
systemctl restart kubelet
 
# kubeadm 的config文件加上下面配置
cat <<EOF > kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
clusterName: kubernetes
imageRepository: ehub.ctcdn.cn/cpdn
kind: ClusterConfiguration
kubernetesVersion: v1.18.9
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
nodeRegistration:
  criSocket: /run/containerd/containerd.sock
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF
 
kubeadm init --config kubeadm-config.yaml
 
# join 要加上 --cri-socket="unix:///run/containerd/containerd.sock", 否则会报错 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
kubeadm join 192.168.0.58:6443 --token ti1zir.rb1vykqocs9dyy7c     --discovery-token-ca-cert-hash sha256:ca056c6f12075a4fcc0895acbd6f6fe533938fdf3c3ca6bb3125abaa404a815b  --cri-socket="unix:///run/containerd/containerd.sock"
0条评论
0 / 1000
卖肥料的老父亲
4文章数
1粉丝数
卖肥料的老父亲
4 文章 | 1 粉丝
卖肥料的老父亲
4文章数
1粉丝数
卖肥料的老父亲
4 文章 | 1 粉丝
原创

containerd介绍

2023-05-19 09:40:59
49
0

背景

来源

containerd(与runc)首次出现在docker1.11中,并在后来从docker中分离出来并开源

containerd实现了docker的主要功能,可以作为一个独立的进程运行容器

发展

docker不兼容CRI(Container Runtime Interface),而containerd开源后反而支持了CRI,可以直接替代docker作为k8s的容器运行时

另一方面,k8s 从v1.20开始逐步废弃docker,并将在v1.24中移除对docker(dockershim)的支持,届时需要把docker切换到containerd,cri-o,rktlet等其他符合CRI规范的容器运行时

k8s对docker的移除已经是板上钉钉的事情了,containerd也逐渐成为docker的替代品

系统架构

与k8s的集成

 

containerd-shim:负责监视容器的生命周期和重连,与容器一对一(或者与sandbox一对一)

dockershim:docker本身不支持CRI,而k8s的运行时必须满足CRI规范,因此k8s维护了docker-shim作为垫片来兼容docker

cri-containerd:containerd本身也是不支持CRI的,需要通过cri-containerd来兼容CRI,而在containerd v1.1之后,cri-containerd作为插件的形式集成到containerd二进制文件中

命令

ctr --containerd官方cli工具

参考:https://www.mankier.com/8/ctr#run

# 创建容器
ctr containers start redis /containers/redis
# 查看容器
ctr containers list
ctr --namespace k8s.io containers ls
# 删除容器
ctr containers kill xxx
# 查看镜像
ctr images list
# 拉镜像
ctr images pull image
# 打tag
ctr images tag souce_image:source_tag target_image:target_tag

crictl --兼容CRI的容器运行时cli工具

参考:https://kubernetes.io/zh/docs/tasks/debug-application-cluster/crictl/#mapping-from-docker-cli-to-crictl

需要在 /etc/crictl.yaml 设置运行时sock文件,命令与docker相似

crictl --runtime-endpoint="unix:///run/containerd/containerd.sock" ps -a
crictl pull busybox
crictl images

使用containerd部署k8s

# 创建containerd配置文件
containerd config default > /etc/containerd/config.toml
vi /etc/containerd/config.toml
...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true
...
# 增加kubelet参数
vi /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock"
systemctl daemon-reload
systemctl restart containerd
systemctl restart kubelet
 
# kubeadm 的config文件加上下面配置
cat <<EOF > kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
clusterName: kubernetes
imageRepository: ehub.ctcdn.cn/cpdn
kind: ClusterConfiguration
kubernetesVersion: v1.18.9
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
nodeRegistration:
  criSocket: /run/containerd/containerd.sock
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
EOF
 
kubeadm init --config kubeadm-config.yaml
 
# join 要加上 --cri-socket="unix:///run/containerd/containerd.sock", 否则会报错 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
kubeadm join 192.168.0.58:6443 --token ti1zir.rb1vykqocs9dyy7c     --discovery-token-ca-cert-hash sha256:ca056c6f12075a4fcc0895acbd6f6fe533938fdf3c3ca6bb3125abaa404a815b  --cri-socket="unix:///run/containerd/containerd.sock"
文章来自个人专栏
容器运行时
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
1