containerd與kubernetes集成部署

概念介紹node

cri (Container runtime interface)linux

cri is a containerd plugin implementation of Kubernetes container runtime interface (CRI).
cri是 kubernetes的容器運行時接口的容器插件實現。

containerdnginx

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-ogit

OCI-based implementation of Kubernetes Container Runtime Interface.
kubernetes爲了兼容cri和oci孵化了項目cri-o。爲了架設在cri和oci之間的一座橋樑。由此cri-o既兼容cri插件實現又兼容oci的容器運行時標準。

oci (Open Container Initiative)github

oci是由多家公司成立的項目,並由linux基金會進行管理,致力於container runtime 的標準的制定和runc的開發等工做。

runcdocker

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集成部署

概述api

因爲docker嵌入了太多自身內容,爲了減輕容器負擔。這次選用containerd做爲kubernetes的容器實現方案。本文將帶你們講述如何搭建一個集成了containerd的k8s集羣。工具

環境準備測試

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

下載連接: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的集成就完成了。下面能夠直接安裝便可。

相關文章
相關標籤/搜索