zoukankan      html  css  js  c++  java
  • containerd学习

    1、containerd安装及下载链接

    github地址:https://github.com/containerd/containerd/releases

    crictl工具下载地址: https://github.com/kubernetes-sigs/cri-tools/releases/tag/v1.21.0

    先把上面两个下载下来。

    1.1、具体安装查看下面的ansible-playbook即可。

    2、学习使用

    2.1、containerd配置文件

    containerd的默认配置文件是/etc/containerd/config.toml,没有这个配置文件也没关系,我们可以自动的生成一个,比如下面这样的

    ~]# mkdir /etc/containerd
    ~]# containerd config default > /etc/containerd/config.toml
    
    # 此时查看config.toml文件内容即可
    

    这里给大家提供一份我自己使用的配置文件内容,是经过自己修改的

    root = "/var/lib/containerd"
    state = "/run/containerd"
    oom_score = -999
    
    [grpc]
      address = "/run/containerd/containerd.sock"
      uid = 0
      gid = 0
      max_recv_message_size = 16777216
      max_send_message_size = 16777216
    
    [debug]
      address = ""
      uid = 0
      gid = 0
      level = ""
    
    [metrics]
      address = ""
      grpc_histogram = false
    
    [cgroup]
      path = ""
    [plugins]
      [plugins.cgroups]
        no_prometheus = false
      [plugins.cri]
        stream_server_address = "127.0.0.1"
        stream_server_port = "0"
        enable_selinux = false
        sandbox_image = "easylab/pause-amd64:3.2"
        stats_collect_period = 10
        systemd_cgroup = false
        enable_tls_streaming = false
        max_container_log_line_size = 16384
        [plugins.cri.containerd]
          snapshotter = "overlayfs"
          no_pivot = false
          [plugins.cri.containerd.default_runtime]
            runtime_type = "io.containerd.runtime.v1.linux"
            runtime_engine = ""
            runtime_root = ""
          [plugins.cri.containerd.untrusted_workload_runtime]
            runtime_type = ""
            runtime_engine = ""
            runtime_root = ""
        [plugins.cri.cni]
          bin_dir = "/opt/containerd/bin"
          conf_dir = "/etc/cni/net.d"
          conf_template = "/etc/cni/net.d/10-default.conf"
        [plugins.cri.registry]
          [plugins.cri.registry.mirrors]
            # reference from https://www.ilanni.com/?p=14534
            [plugins.cri.registry.mirrors."docker.io"]
              endpoint = [
                "https://docker.mirrors.ustc.edu.cn",
                "http://hub-mirror.c.163.com"
              ]
            [plugins.cri.registry.mirrors."gcr.io"]
              endpoint = [
                "https://gcr.mirrors.ustc.edu.cn"
              ]
            [plugins.cri.registry.mirrors."k8s.gcr.io"]
              endpoint = [
                "https://gcr.mirrors.ustc.edu.cn/google-containers/"
              ]
            [plugins.cri.registry.mirrors."quay.io"]
              endpoint = [
                "https://quay.mirrors.ustc.edu.cn"
              ]
        [plugins.cri.x509_key_pair_streaming]
          tls_cert_file = ""
          tls_key_file = ""
      [plugins.diff-service]
        default = ["walking"]
      [plugins.linux]
        shim = "containerd-shim"
        runtime = "runc"
        runtime_root = ""
        no_shim = false
        shim_debug = false
      [plugins.opt]
        path = "/opt/containerd"
      [plugins.restart]
        interval = "10s"
      [plugins.scheduler]
        pause_threshold = 0.02
        deletion_threshold = 0
        mutation_threshold = 100
        schedule_delay = "0s"
        startup_delay = "100ms"
    

    2.1.1、镜像加速

    与我们之前配置docker镜像源的做法类似,在国内使用containerd依然需要更换成国内的镜像源。但是这里有一些坑需要说明一下:

    • 配置的镜像仓库在使用crictl工具调用或者kubernetes调用时才会生效,如果使用ctr命令拉取镜像是不生效的。crictl命令是我们上面提供的第二个github链接下载的哪个工具。这是客户端工具,通过grpc协议与containerd服务端进行通信。
    • Docker 只支持为 Docker Hub 配置 mirror,而 Containerd 支持为任意镜像仓库配置 mirror

    镜像加速的配置就在cri插件配置块下面的registry配置块里面,内容如下所示:

        [plugins.cri.registry]
          [plugins.cri.registry.mirrors]
            # reference from https://www.ilanni.com/?p=14534
            [plugins.cri.registry.mirrors."docker.io"]
              endpoint = [
                "https://docker.mirrors.ustc.edu.cn",
                "http://hub-mirror.c.163.com"
              ]
            [plugins.cri.registry.mirrors."gcr.io"]
              endpoint = [
                "https://gcr.mirrors.ustc.edu.cn"
              ]
            [plugins.cri.registry.mirrors."k8s.gcr.io"]
              endpoint = [
                "https://gcr.mirrors.ustc.edu.cn/google-containers/"
              ]
            [plugins.cri.registry.mirrors."quay.io"]
              endpoint = [
                "https://quay.mirrors.ustc.edu.cn"
              ]
    

    从配置文件里面我们看到的

    • plugins.cri.registry.mirrors."xxx"表示需要配置的mirror的镜像仓库,例如:plugins.cri.registry.mirrors."docker.io"表示配置的是docker.io的mirror,这是最基本的镜像。

    • endpoint:表示提供的mirror的镜像加速服务,可以使用中国科技大学的,也可以使用阿里云的镜像。

    2.1.2、存储配置

    contaierd有两个不同的存储路径,其中root用来持久化数据,而state则是用来保存容器的运行时状态

    root = "/var/lib/containerd"
    state = "/run/containerd"
    

    root 用来保存持久化数据,包括 Snapshots,Content,Metadata 以及各种插件的数据。每一个插件都有自己单独的目录,Containerd 本身不存储任何数据,它的所有功能都来自于已加载的插件

    state 用来保存临时数据,包括 sockets、pid、挂载点、运行时状态以及不需要持久化保存的插件数据。

    2.2、使用containerd

    建议站在kubelet的角度来使用containerd,也就是使用crictl工具,个人觉得ctr命令比较的鸡肋,只有一个ctr命令拉取镜像的时候比较好玩,比如

    ~]# ctr i pull docker.io/library/tomcat:10
    # 他打印出来的命令比较好玩,大家可以试一下,。
    

    ctr命令的缺点除了命令功能不多,还有就是拉取镜像的时候需要加上前面的docker.io/library这部分,比如拉取tomcat镜像就需要写成docker.io/library/tomcat:10这样的,个人觉得麻烦

    所以我个人都使用crictl命令,毕竟crictl主要是为了k8s的调试应运而生的,如果你是像使用docker的启动,删除容器的话使用ctr命令比较好,如果你是调试k8s的话还是建议使用crictl命令。先来说说他的配置文件/etc/crictl.yaml

    runtime-endpoint: unix:///run/containerd/containerd.sock
    

    仅此这么一行的内容就够了,containerd也是C/S架构,crictl就是client端,他需要与服务端进行通信,通信的基本方式是使用本地socket文件进行通信,所以这里需要和containerd的配置文件里面定义的address的地址保持一致才可以。

    比如拉取镜像

    ~]# crictl pull tomcat:10
    

    containerd 相比于docker , 多了namespace概念, 每个image和container 都会在各自的namespace下可见。

    学习的地址如下所示:

    https://blog.csdn.net/xixihahalelehehe/article/details/116591151
    
  • 相关阅读:
    [k8s微服务作业]-day2-Docker基础
    运维常用命令记录
    【莫比乌斯反演】学习笔记
    2021牛客OI赛前集训营-提高组(第一场)
    NOIP 计划 · 模拟赛 #10
    2021牛客OI赛前集训营-提高组(第二场)
    10.5 模拟赛题解报告
    组合数学
    线段树合并
    2021, 9,26 模拟赛
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/15057399.html
Copyright © 2011-2022 走看看