containerd與kubernetes集成部署


概念介紹

cri (Container runtime interface)
cri is a containerd plugin implementation of Kubernetes container runtime interface (CRI).
cri是 kubernetes的容器運行時接口的容器插件實現。
containerd
containerd is an industry-standard container runtime with an emphasis on simplicity, robustness and portability.
containerd完全支持運行容器的的CRI運行時規范。
cri在containerd1.1以上的版本的原生插件。它內置於containerd並默認啟用。

containerd與kubernetes集成部署containerd與kubernetes集成部署

cri-o
OCI-based implementation of Kubernetes Container Runtime Interface.
kubernetes為了兼容cri和oci孵化了項目cri-o。為了架設在cri和oci之間的一座橋梁。由此cri-o既兼容cri插件實現又兼容oci的容器運行時標准。
oci (Open Container Initiative)
oci是由多家公司成立的項目,並由linux基金會進行管理,致力於container runtime 的標准的制定和runc的開發等工作。
runc
runc is a CLI tool for spawning and running containers according to the OCI specification.
runc,是對於OCI標准的一個參考實現,是一個可以用於創建和運行容器的CLI(command-line interface)工具。

containerd與kubernetes集成部署containerd與kubernetes集成部署

概述

由於docker嵌入了太多自身內容,為了減輕容器負擔。此次選用containerd作為kubernetes的容器實現方案。本文將帶大家講述如何搭建一個集成了containerd的k8s集群。

環境准備

下載containerd二進制包。我這里已經編譯並打包了好了,內含containerd、runc、crictl、ctr等。

下載鏈接:https://github.com/cuisongliu/containerd-dist/releases/download/v1.2.4/containerd-v1.2.4.tar.gz

runc版本: 1.0.1-dev

containerd版本: v1.2.4
安裝containerd

解壓二進制包並生成默認文件

  tar -C /usr/local/bin -xzf containerd-v1.2.4.tar.gz
  chmod a+x /usr/local/bin/*
  containerd config default > /etc/containerd/config.toml

生成的默認配置文件注意 [grpc] 的 address 字段默認為 /run/containerd/containerd.sock

配置文件其他參數含義參照github地址: https://github.com/containerd/containerd/blob/master/docs/man/containerd-config.toml.5.md

在 /etc/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
  Restart=always
  RestartSec=5
  Delegate=yes
  KillMode=process
  OOMScoreAdjust=-999
  LimitNOFILE=1048576
  # 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
  
  [Install]
  WantedBy=multi-user.target
啟動containerd
  systemctl enable containerd
  systemctl restart containerd
  systemctl status containerd

看containerd啟動狀態如果是running就沒有問題。下面我們測試拉取一下hub的鏡像。

測試containerd
  ctr images pull docker.io/library/nginx:alpine

看到輸出done,說明containerd運行一切正常。

使用crictl連接containerd,下一步我們使用crictl連接containerd。

修改crictl的配置文件,在 /etc/crictl.yaml 寫入以下內容:

  runtime-endpoint: unix:///run/containerd/containerd.sock
  image-endpoint: unix:///run/containerd/containerd.sock
  timeout: 10
  debug: false

這里注意runtime-endpoint 和image-endpoint 必須與/etc/containerd/config.toml中配置保持一致。

驗證一下cri插件是否可用

  crictl  pull nginx:alpine
  crictl  rmi  nginx:alpine
  crictl  images

其中 crictl images 會列出所有的cri容器鏡像。

到此我們的cri + containerd已經完成整合了。下一步我們需要修改kubeadm配置進行安裝。

導入kubenetes離線鏡像包

這里我們就需要導入k8s的離線鏡像包了。這里需要注意一下,kubernetes是調用的cri接口,所以導入時也需要從cri插件導入鏡像。

cri導入鏡像命令(cri導入鏡像):

   ctr cri load  images.tar

containerd導入鏡像命令(containerd導入鏡像):

   ctr images import images.tar 
修改kubelet配置和kubeadm安裝時配置

在 kubelet配置文件 10-kubeadm.conf 的[Service] 結點加入以下配置:

  Environment="KUBELET_EXTRA_ARGS=--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"

在kubeadm配置文件 kubeadm.yaml 中加入

  apiVersion: kubeadm.k8s.io/v1beta1
  kind: InitConfiguration
  nodeRegistration:
    criSocket: /run/containerd/containerd.sock
    name: containerd

到此containerd和kubernetes的集成就完成了。下面可以直接安裝即可。

原文來自:https://sealyun.com/post/containerd/

本文地址:https://www.linuxprobe.com/containerd-kubernetes.html編輯:吳向平,審核員:逄增寶

Linux命令大全:https://www.linuxcool.com/


免責聲明!

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



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