这篇文章主要介绍“containerd怎么编译”,在日常操作中,相信很多人在containerd怎么编译问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”containerd怎么编译”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
编译containerd/runc
任意公有云厂商购买一台虚拟机,绑fip(116.196.115.229)
登录vm安装go,并设置GOROOT/GOPATH环境变量
[root@containerd bin]# wget https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz
[root@containerd bin]# tar -xvf go1.12.5.linux-amd64.tar.gz -C /usr/local
[root@containerd bin]# /usr/local/go/bin/go version
go version go1.12.5 linux/amd64
编辑/root/.bash_profile文件,添加如下设置后sourcePATH=$PATH:/usr/local/go/bin
export PATH
export GOROOT=/usr/local/go/
export GOPATH=/root/go[root@containerd ~]# source .bash_profile
Build the development environment
[root@containerd ~]# go get github.com/containerd/containerd
[root@containerd ~]# wget -c https://github.com/google/protobuf/releases/download/v3.5.0/protoc-3.5.0-linux-x86_64.zip
[root@containerd ~]# unzip protoc-3.5.0-linux-x86_64.zip -d /usr/local
[root@containerd ~]# yum install -y btrfs-progs-devel libseccomp-devel
编译runc
[root@containerd ~]# go get github.com/opencontainers/runc[root@containerd containerd]# cd $GOPATH/src/github.com/opencontainers/runc
[root@containerd runc]# make
go build -buildmode=pie -ldflags "-X main.gitCommit="eb4aeed24ffbf8e2d740fafea39d91faa0ee84d0">
[root@containerd runc]# make install
install -D -m0755 runc /usr/local/sbin/runc
[root@containerd runc]# ls -rtl /usr/local/sbin
total 11752
-rwxr-xr-x 1 root root 12031832 May 10 17:33 runc
[root@containerd runc]# runc --version
runc version 1.0.0-rc8+dev
commit: eb4aeed24ffbf8e2d740fafea39d91faa0ee84d0
spec: 1.0.1-dev
编译containerd
[root@containerd runc]# cd $GOPATH/src/github.com/containerd/containerd
[root@containerd containerd]# make
+ bin/ctr
+ bin/containerd
+ bin/containerd-stress
+ bin/containerd-shim
+ bin/containerd-shim-runc-v1
+ bin/containerd-shim-runc-v2
+ binaries
[root@containerd containerd]# make install
+ install bin/ctr bin/containerd bin/containerd-stress bin/containerd-shim bin/containerd-shim-runc-v1 bin/containerd-shim-runc-v2
[root@containerd containerd]# ls -rtl /usr/local/bin
total 133152
-rwxr-x--- 1 root root 4433736 Nov 14 2017 protoc
-rwxr-xr-x 1 root root 29709728 May 10 17:35 ctr
-rwxr-xr-x 1 root root 51831136 May 10 17:35 containerd
-rwxr-xr-x 1 root root 25094688 May 10 17:35 containerd-stress
-rwxr-xr-x 1 root root 7302016 May 10 17:35 containerd-shim
-rwxr-xr-x 1 root root 8980256 May 10 17:35 containerd-shim-runc-v1
-rwxr-xr-x 1 root root 8980320 May 10 17:35 containerd-shim-runc-v2
[root@containerd containerd]# containerd --version
containerd github.com/containerd/containerd v1.2.0-551-g57fbb16 57fbb16234fa6c8a61e5e907a4148ea3b05bce1d
containerd以daemon方式运行
准备containered.service文件
[root@containerd ~]# cat /usr/lib/systemd/system/containerd.service
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Delegate=yes
KillMode=process
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
[Install]
WantedBy=multi-user.target
enable设置开机自启动
[root@containerd system]# systemctl enable containerd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/containerd.service to /usr/lib/systemd/system/containerd.service.
准备containerd配置文件
[root@containerd ~]# cat /etc/containerd/config.toml
subreaper = true
oom_score = -999
[debug]
level = "debug"
[metrics]
address = "127.0.0.1:1338"
[plugins.linux]
runtime = "runc"
shim_debug = true
启动containerd服务
[root@containerd system]# systemctl start containerd.service
[root@containerd system]# systemctl status containerd.service
● containerd.service - containerd container runtime
Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2019-05-10 17:55:35 CST; 4s ago
Docs: https://containerd.io
Process: 18319 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 18321 (containerd)
Tasks: 13
Memory: 25.1M
CGroup: /system.slice/containerd.service
└─18321 /usr/local/bin/containerd
May 10 17:55:35 containerd containerd[18321]: time="2019-05-10T17:55:35.396003271+08:00" level=error msg="Failed to load cni during init, please check CRI plugin status before ... cni config"
May 10 17:55:35 containerd containerd[18321]: time="2019-05-10T17:55:35.396193437+08:00" level=info msg="loading plugin \"io.containerd.grpc.v1.introspection\"..." type=io.containerd.grpc.v1
May 10 17:55:35 containerd containerd[18321]: time="2019-05-10T17:55:35.396280636+08:00" level=info msg="Start subscribing containerd event"
May 10 17:55:35 containerd containerd[18321]: time="2019-05-10T17:55:35.396365663+08:00" level=info msg="Start recovering state"
May 10 17:55:35 containerd containerd[18321]: time="2019-05-10T17:55:35.396383092+08:00" level=info msg=serving... address=/run/containerd/containerd.sock.ttrpc
May 10 17:55:35 containerd containerd[18321]: time="2019-05-10T17:55:35.396415058+08:00" level=info msg=serving... address=/run/containerd/containerd.sock
May 10 17:55:35 containerd containerd[18321]: time="2019-05-10T17:55:35.396427216+08:00" level=info msg="containerd successfully booted in 0.003786s"
May 10 17:55:35 containerd containerd[18321]: time="2019-05-10T17:55:35.396435091+08:00" level=info msg="Start event monitor"
May 10 17:55:35 containerd containerd[18321]: time="2019-05-10T17:55:35.396459564+08:00" level=info msg="Start snapshots syncer"
May 10 17:55:35 containerd containerd[18321]: time="2019-05-10T17:55:35.396468105+08:00" level=info msg="Start streaming server"
Hint: Some lines were ellipsized, use -l to show in full.
准备rootfs和spec
找另外一台安装了整套docker的机器(此处用本地oracle linux vm 10.12.162.67),制作测试所需的rootfs(bundle)文件
创建 busybox/rootfs目录
[root@localhost ~]# mkdir -p busybox/rootfs
拉取busybox镜像
[root@localhost ~]# docker pull busybox
Using default tag: latest
latest: Pulling from library/busybox
53071b97a884: Pull complete
Digest: sha256:32f65f5aae307c171fc69ce52be3c8b09675164a610a88efa607449311186378
Status: Downloaded newer image for busybox:latest
创建docker
[root@localhost ~]# docker create --name tempbusybox busybox
85b6e32db75da001669656b452a9a65fc2de7f1a9faac95c5aedf6de1127fa15
导出rootfs和spec
[root@localhost ~]# docker export tempbusybox | tar -C busybox/rootfs -xf -
[root@localhost ~]# cd busybox/ && /usr/bin/docker-runc spec
[root@localhost busybox]# ls
config.json rootfs
[root@localhost busybox]# ls rootfs/
bin dev etc home proc root sys tmp usr var
将rootfs和spec 拷贝到containered测试节点 116.196.115.229
[root@localhost ~]# scp -r busybox/ root@116.196.115.229:/root
测试
[root@containerd busybox]# cd /root/busybox
利用containerd cli (/usr/local/bin/ctr)运行容器
[root@containerd busybox]# ctr run -t -d --rootfs rootfs busybox /bin/sh
[root@containerd busybox]# ctr container list
CONTAINER IMAGE RUNTIME
busybox - io.containerd.runtime.v1.linux
[root@containerd busybox]# ps -ef |grep container
root 9539 1 0 21:22 ? 00:00:03 /usr/local/bin/containerd
root 15285 9539 0 22:02 ? 00:00:00 containerd-shim -namespace default -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/default/busybox -address /run/containerd/containerd.sock -containerd-binary /usr/local/bin/containerd -debug
登录容器验证
[root@containerd busybox]# ctr tasks list
TASK PID STATUS
busybox 15301 RUNNING
[root@containerd busybox]# ctr tasks exec -t --exec-id 15301 busybox /bin/sh
/ # hostname
containerd
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
stop容器
[root@containerd busybox]# ctr tasks kill --signal 9 busybox
[root@containerd busybox]# ctr tasks list
TASK PID STATUS
busybox 15301 STOPPED
删除容器
[root@containerd busybox]# ctr container delete busybox
[root@containerd busybox]# ctr container list
CONTAINER IMAGE RUNTIME
到此,关于“containerd怎么编译”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注天达云网站,小编会继续努力为大家带来更多实用的文章!