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


    sealyun
    289 声望56 粉丝

    技术填坑者,爬起来接着填