containerd與kubernetes集成

kubernetes集羣三步安裝

概念介紹

<!--more-->

    • CRI
    • containerd

      • containerd is an industry-standard container runtime with an emphasis on simplicity, robustness and portability.
      • containerd完全支持運行容器的的CRI運行時規範。
      • cri在containerd1.1以上的版本的原生插件。它內置於containerd並默認啓用。
      • containerd
    • 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)

      • https://www.opencontainers.or...
      • 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)工具。

    概述

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

    環境準備

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

    下載鏈接:https://github.com/cuisongliu...

    • 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...

    • /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的集成就完成了。下面可以直接安裝即可。

    掃碼關注sealyun

    探討可加QQ羣:98488045

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章