安装containerd 环境信息 1 2 [root@ubuntu-22 ~] Linux ubuntu-22 6.5.0-41-generic
下载安装containerd 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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 [root@ubuntu-22 ~] [root@ubuntu-22 ~] cri-containerd.DEPRECATED.txt etc/ etc/systemd/ etc/systemd/system/ etc/systemd/system/containerd.service etc/cni/ etc/cni/net.d/ etc/cni/net.d/10-containerd-net.conflist etc/crictl.yaml usr/ usr/local/ usr/local/sbin/ usr/local/sbin/runc usr/local/bin/ usr/local/bin/containerd-shim usr/local/bin/crictl usr/local/bin/containerd-stress usr/local/bin/critest usr/local/bin/ctr usr/local/bin/ctd-decoder usr/local/bin/containerd-shim-runc-v2 usr/local/bin/containerd-shim-runc-v1 usr/local/bin/containerd opt/ opt/cni/ opt/cni/bin/ opt/cni/bin/tuning opt/cni/bin/firewall opt/cni/bin/loopback opt/cni/bin/macvlan opt/cni/bin/ptp opt/cni/bin/bridge opt/cni/bin/static opt/cni/bin/dhcp opt/cni/bin/dummy opt/cni/bin/sbr opt/cni/bin/vrf opt/cni/bin/host-local opt/cni/bin/bandwidth opt/cni/bin/vlan opt/cni/bin/host-device opt/cni/bin/portmap opt/cni/bin/ipvlan opt/containerd/ opt/containerd/cluster/ opt/containerd/cluster/version opt/containerd/cluster/gce/ opt/containerd/cluster/gce/configure.sh opt/containerd/cluster/gce/env opt/containerd/cluster/gce/cloud-init/ opt/containerd/cluster/gce/cloud-init/master.yaml opt/containerd/cluster/gce/cloud-init/node.yaml opt/containerd/cluster/gce/cni.template [root@ubuntu-22 ~] [root@ubuntu-22 ~] [root@ubuntu-22 ~] [root@ubuntu-22 ~] [root@ubuntu-22 ~] ● containerd.service - containerd container runtime Loaded: loaded (/etc/systemd/system/containerd.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2024-07-08 20:41:42 CST; 8s ago Docs: https://containerd.io Main PID: 36771 (containerd) Tasks: 8 Memory: 9.2M CPU: 89ms CGroup: /system.slice/containerd.service └─36771 /usr/local/bin/containerd 7月 08 20:41:42 ubuntu-22 containerd[36771]: time="2024-07-08T20:41:42.765403283+08:00" level=info msg="Start subscribing containerd event" 7月 08 20:41:42 ubuntu-22 containerd[36771]: time="2024-07-08T20:41:42.765841560+08:00" level=info msg="Start recovering state" 7月 08 20:41:42 ubuntu-22 containerd[36771]: time="2024-07-08T20:41:42.765436975+08:00" level=info msg=serving... address=/run/containerd/containerd.sock.ttrpc 7月 08 20:41:42 ubuntu-22 containerd[36771]: time="2024-07-08T20:41:42.766984892+08:00" level=info msg="Start event monitor" 7月 08 20:41:42 ubuntu-22 containerd[36771]: time="2024-07-08T20:41:42.767354311+08:00" level=info msg="Start snapshots syncer" 7月 08 20:41:42 ubuntu-22 containerd[36771]: time="2024-07-08T20:41:42.767367946+08:00" level=info msg="Start cni network conf syncer for default" 7月 08 20:41:42 ubuntu-22 containerd[36771]: time="2024-07-08T20:41:42.767378325+08:00" level=info msg="Start streaming server" 7月 08 20:41:42 ubuntu-22 containerd[36771]: time="2024-07-08T20:41:42.767648701+08:00" level=info msg=serving... address=/run/containerd/containerd.sock 7月 08 20:41:42 ubuntu-22 containerd[36771]: time="2024-07-08T20:41:42.767846800+08:00" level=info msg="containerd successfully booted in 0.046182s" 7月 08 20:41:42 ubuntu-22 systemd[1]: Started containerd container runtime. [root@ubuntu-22 ~] [root@ubuntu-22 ~]
查看状态 1 2 3 4 5 6 7 8 9 10 11 [root@ubuntu-22 ~] Client: Version: v1.7.18 Revision: ae71819c4f5e67bb4d5ae76a6b735f29cc25774e Go version: go1.21.11 Server: Version: v1.7.18 Revision: ae71819c4f5e67bb4d5ae76a6b735f29cc25774e UUID: 64bd2d8f-d225-40aa-82fd-874a0a06032b
查看默认配置 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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 [root@ubuntu-22 ~] disabled_plugins = [] imports = [] oom_score = 0 plugin_dir = "" required_plugins = [] root = "/var/lib/containerd" state = "/run/containerd" temp = "" version = 2 [cgroup] path = "" [debug] address = "" format = "" gid = 0 level = "" uid = 0 [grpc] address = "/run/containerd/containerd.sock" gid = 0 max_recv_message_size = 16777216 max_send_message_size = 16777216 tcp_address = "" tcp_tls_ca = "" tcp_tls_cert = "" tcp_tls_key = "" uid = 0 [metrics] address = "" grpc_histogram = false [plugins] [plugins."io.containerd.gc.v1.scheduler" ] deletion_threshold = 0 mutation_threshold = 100 pause_threshold = 0.02 schedule_delay = "0s" startup_delay = "100ms" [plugins."io.containerd.grpc.v1.cri" ] cdi_spec_dirs = ["/etc/cdi" , "/var/run/cdi" ] device_ownership_from_security_context = false disable_apparmor = false disable_cgroup = false disable_hugetlb_controller = true disable_proc_mount = false disable_tcp_service = true drain_exec_sync_io_timeout = "0s" enable_cdi = false enable_selinux = false enable_tls_streaming = false enable_unprivileged_icmp = false enable_unprivileged_ports = false ignore_deprecation_warnings = [] ignore_image_defined_volumes = false image_pull_progress_timeout = "5m0s" image_pull_with_sync_fs = false max_concurrent_downloads = 3 max_container_log_line_size = 16384 netns_mounts_under_state_dir = false restrict_oom_score_adj = false sandbox_image = "registry.k8s.io/pause:3.8" selinux_category_range = 1024 stats_collect_period = 10 stream_idle_timeout = "4h0m0s" stream_server_address = "127.0.0.1" stream_server_port = "0" systemd_cgroup = false tolerate_missing_hugetlb_controller = true unset_seccomp_profile = "" [plugins."io.containerd.grpc.v1.cri" .cni] bin_dir = "/opt/cni/bin" conf_dir = "/etc/cni/net.d" conf_template = "" ip_pref = "" max_conf_num = 1 setup_serially = false [plugins."io.containerd.grpc.v1.cri" .containerd] default_runtime_name = "runc" disable_snapshot_annotations = true discard_unpacked_layers = false ignore_blockio_not_enabled_errors = false ignore_rdt_not_enabled_errors = false no_pivot = false snapshotter = "overlayfs" [plugins."io.containerd.grpc.v1.cri" .containerd.default_runtime] base_runtime_spec = "" cni_conf_dir = "" cni_max_conf_num = 0 container_annotations = [] pod_annotations = [] privileged_without_host_devices = false privileged_without_host_devices_all_devices_allowed = false runtime_engine = "" runtime_path = "" runtime_root = "" runtime_type = "" sandbox_mode = "" snapshotter = "" [plugins."io.containerd.grpc.v1.cri" .containerd.default_runtime.options] [plugins."io.containerd.grpc.v1.cri" .containerd.runtimes] [plugins."io.containerd.grpc.v1.cri" .containerd.runtimes.runc] base_runtime_spec = "" cni_conf_dir = "" cni_max_conf_num = 0 container_annotations = [] pod_annotations = [] privileged_without_host_devices = false privileged_without_host_devices_all_devices_allowed = false runtime_engine = "" runtime_path = "" runtime_root = "" runtime_type = "io.containerd.runc.v2" sandbox_mode = "podsandbox" snapshotter = "" [plugins."io.containerd.grpc.v1.cri" .containerd.runtimes.runc.options] BinaryName = "" CriuImagePath = "" CriuPath = "" CriuWorkPath = "" IoGid = 0 IoUid = 0 NoNewKeyring = false NoPivotRoot = false Root = "" ShimCgroup = "" SystemdCgroup = false [plugins."io.containerd.grpc.v1.cri" .containerd.untrusted_workload_runtime] base_runtime_spec = "" cni_conf_dir = "" cni_max_conf_num = 0 container_annotations = [] pod_annotations = [] privileged_without_host_devices = false privileged_without_host_devices_all_devices_allowed = false runtime_engine = "" runtime_path = "" runtime_root = "" runtime_type = "" sandbox_mode = "" snapshotter = "" [plugins."io.containerd.grpc.v1.cri" .containerd.untrusted_workload_runtime.options] [plugins."io.containerd.grpc.v1.cri" .image_decryption] key_model = "node" [plugins."io.containerd.grpc.v1.cri" .registry] config_path = "" [plugins."io.containerd.grpc.v1.cri" .registry.auths] [plugins."io.containerd.grpc.v1.cri" .registry.configs] [plugins."io.containerd.grpc.v1.cri" .registry.headers] [plugins."io.containerd.grpc.v1.cri" .registry.mirrors] [plugins."io.containerd.grpc.v1.cri" .x509_key_pair_streaming] tls_cert_file = "" tls_key_file = "" [plugins."io.containerd.internal.v1.opt" ] path = "/opt/containerd" [plugins."io.containerd.internal.v1.restart" ] interval = "10s" [plugins."io.containerd.internal.v1.tracing" ] [plugins."io.containerd.metadata.v1.bolt" ] content_sharing_policy = "shared" [plugins."io.containerd.monitor.v1.cgroups" ] no_prometheus = false [plugins."io.containerd.nri.v1.nri" ] disable = true disable_connections = false plugin_config_path = "/etc/nri/conf.d" plugin_path = "/opt/nri/plugins" plugin_registration_timeout = "5s" plugin_request_timeout = "2s" socket_path = "/var/run/nri/nri.sock" [plugins."io.containerd.runtime.v1.linux" ] no_shim = false runtime = "runc" runtime_root = "" shim = "containerd-shim" shim_debug = false [plugins."io.containerd.runtime.v2.task" ] platforms = ["linux/amd64" ] sched_core = false [plugins."io.containerd.service.v1.diff-service" ] default = ["walking" ] [plugins."io.containerd.service.v1.tasks-service" ] blockio_config_file = "" rdt_config_file = "" [plugins."io.containerd.snapshotter.v1.aufs" ] root_path = "" [plugins."io.containerd.snapshotter.v1.blockfile" ] fs_type = "" mount_options = [] root_path = "" scratch_file = "" [plugins."io.containerd.snapshotter.v1.btrfs" ] root_path = "" [plugins."io.containerd.snapshotter.v1.devmapper" ] async_remove = false base_image_size = "" discard_blocks = false fs_options = "" fs_type = "" pool_name = "" root_path = "" [plugins."io.containerd.snapshotter.v1.native" ] root_path = "" [plugins."io.containerd.snapshotter.v1.overlayfs" ] mount_options = [] root_path = "" sync_remove = false upperdir_label = false [plugins."io.containerd.snapshotter.v1.zfs" ] root_path = "" [plugins."io.containerd.tracing.processor.v1.otlp" ] [plugins."io.containerd.transfer.v1.local" ] config_path = "" max_concurrent_downloads = 3 max_concurrent_uploaded_layers = 3 [[plugins."io.containerd.transfer.v1.local" .unpack_config]] differ = "" platform = "linux/amd64" snapshotter = "overlayfs" [proxy_plugins] [stream_processors] [stream_processors."io.containerd.ocicrypt.decoder.v1.tar" ] accepts = ["application/vnd.oci.image.layer.v1.tar+encrypted" ] args = ["--decryption-keys-path" , "/etc/containerd/ocicrypt/keys" ] env = ["OCICRYPT_KEYPROVIDER_CONFIG=/etc/containerd/ocicrypt/ocicrypt_keyprovider.conf" ] path = "ctd-decoder" returns = "application/vnd.oci.image.layer.v1.tar" [stream_processors."io.containerd.ocicrypt.decoder.v1.tar.gzip" ] accepts = ["application/vnd.oci.image.layer.v1.tar+gzip+encrypted" ] args = ["--decryption-keys-path" , "/etc/containerd/ocicrypt/keys" ] env = ["OCICRYPT_KEYPROVIDER_CONFIG=/etc/containerd/ocicrypt/ocicrypt_keyprovider.conf" ] path = "ctd-decoder" returns = "application/vnd.oci.image.layer.v1.tar+gzip" [timeouts] "io.containerd.timeout.bolt.open" = "0s" "io.containerd.timeout.metrics.shimstats" = "2s" "io.containerd.timeout.shim.cleanup" = "5s" "io.containerd.timeout.shim.load" = "5s" "io.containerd.timeout.shim.shutdown" = "3s" "io.containerd.timeout.task.state" = "2s" [ttrpc] address = "" gid = 0 uid = 0
查看service文件 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 38 39 40 41 42 43 [root@ubuntu-22 ~] [Unit] Description=containerd container runtime Documentation=https://containerd.io After=network.target local-fs.target [Service] ExecStartPre=-/sbin/modprobe overlay ExecStart=/usr/local/bin/containerd Type=notify Delegate=yes KillMode=process Restart=always RestartSec=5 LimitNPROC=infinity LimitCORE=infinity LimitNOFILE=infinity TasksMax=infinity OOMScoreAdjust=-999 [Install] WantedBy=multi-user.target
注意以下两点: 1)Delegate:该选项是为了允许containerd以及运行时管理自己创建容器的cgroups。 如果该值为no,则systemd就会将进程移到自己的cgroups中,从而导致containerd无法正确管理容器的cgroups以及正常获取容器的资源使用情况。 2)KillMode:该值用来设置systemd单元进程(即containerd进程)被杀死的方式,默认值是control-group,默认情况下systemd会在进程的cgroup中查找并杀死containerd的所有子进程。 KillMode字段可以设置的值如下:
control-group(默认值):当前控制组里面的所有子进程都会被杀掉。
process:只杀主进程;
mixed:主进程将收到SIGTERM信号,子进程收到SIGKILL信号。
none:没有进程被杀掉,只是执行服务的stop命令。containerd将KillMode的值设置为process,这样可以确保升级或重启containerd时不杀死现有的容器。