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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM