从零开始的 Kubernetes 学习笔记(二)
后知后觉 暂无评论

使用 Kubernetes 对容器进行编排成为微服务时代的技术风向标。

更新记录

2023-08

2022-08

2020-08


使用 containerd 作为 CR

使用官方二进制包手动部署(推荐)

详细的官方英文指南可参考 Getting started with containerd

  1. 安装 containerd

    官方项目地址中下载二进制包,格式为 containerd-<版本>-<系统>-<架构>.tar.gz,然后解压到安装目录中。

    sudo tar Cxf /usr/local containerd-1.x.x-linux-amd64.tar.gz
  2. 配置系统守护

    从项目仓库下载守护单元

    sudo mkdir -p /usr/local/lib/systemd/system/
    sudo wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -O /usr/local/lib/systemd/system/containerd.service

    重载单元并启动

    sudo systemctl daemon-reload
    sudo systemctl enable --now containerd
  3. 安装 runC

    官方项目地址中下载二进制包,格式为 runc.<架构>,然后安装到安装目录中。

    wget https://github.com/opencontainers/runc/releases/download/v1.x.x/runc.amd64
    sudo install -m 755 runc.amd64 /usr/local/sbin/runc
  4. 配置 containerd

    生成默认配置文件并修改

    sudo install -m 0755 -d /etc/containerd/
    containerd config default | sudo tee /etc/containerd/config.toml

    修改 /etc/containerd/config.toml 配置,将默认 cgroup 引擎为 systemd,查找 containerd.runtimes.runc.options 字段下的 SystemdCgroup 改为 true

    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
           ...
           SystemdCgroup = true
           ...

    然后重启服务

    sudo systemctl restart containerd.service
    需要注意的是:此种方式部署不需要安装官方手册中的 CNI 插件,因为这部分插件可以由 kubernetes 官方仓库的 kubernetes-cni 包提供。

使用 Docker 仓库进行部署

可以使用 Docker 官方源安装 containerd (原因如上文),但需要注意的是 Docker 官方对于大版本更新比较保守,因此可能并不是最新的版本。

部署官方仓库可以参考官方说明,本文使用 Debian 为例进行演示:

sudo apt update
sudo apt install curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

配置仓库

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

与 Docker 官方的安装步骤略有不同,仅需安装 containerd 一个组件即可。

sudo apt update
sudo apt install containerd.io

配置 containerd,生成默认配置文件覆盖掉官方默认配置

containerd config default | sudo tee /etc/containerd/config.toml

配置默认 cgroup 引擎为 systemd,查找 containerd.runtimes.runc.options 字段下的 SystemdCgroup 改为 true

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
          ...
          SystemdCgroup = true
          ...

修正沙箱容器版本

还有一个问题需要注意,使用 systemd 引擎管理 containerd 时,默认的 sandbox 镜像版本将由配置文件提供,而默认的配置文件使用的版本与 kubeadm 使用的未必相同(实际使用的版本可用下述命令进行查询)

sudo kubeadm config images list | grep pause

因此需要修正配置文件 /etc/containerd/config.tomlsandbox_image 字段为上面查询命令结果中的版本。

## 原配置,需改为实际版本,v1.24 版本后使用的版本为 3.9
sandbox_image = "registry.k8s.io/pause:3.8"

然后重启 containerd 保证新配置文件生效

sudo systemctl restart containerd

检查进程状态

$ ps -ef | grep -v 'grep' | grep 'containerd'
root         517       1  0 Jul12 ?        00:20:36 /usr/bin/containerd

配置自动补全(可选)

containerd 自带命令行控制工具 ctr 命令,为了方便使用,可以配置自动补全。但是在 Kubernetes 中使用 containerd 完全无需使用此套件,被 crictl 套件完全取代了,因此该步骤仅供参考,按需操作。

sudo install -m 0755 -d /etc/bash_completion.d/
curl -s https://raw.githubusercontent.com/containerd/containerd/main/contrib/autocomplete/ctr | sudo tee /etc/bash_completion.d/ctr
sudo chmod 644 /etc/bash_completion.d/ctr

需要退出终端重新登陆才能生效。


部署 Kubernetes

Kubernetes 有多种部署方式,一般推荐使用 kubeadm 方式安装(但因为众所周知的原因在国内并不是很好用)。

部署 kubeadm

“船新”版本

从 v1.28 版本开始,官方启用了全新的社区存储仓库,可以直观地体现版本号,同时也可防止用户错误升级大版本。旧版本的仓库将于九月十三日废弃。

  1. 安装依赖

    sudo apt install -y ca-certificates curl gnupg
  2. 获取新公钥

    curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  3. 使用新地址

    echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
  4. 安装

    sudo apt-get install -y kubelet kubeadm kubectl
  5. 锁定版本

    sudo apt-mark hold kubelet kubeadm kubectl

过时版本

指定版本安装

如果想指定某个版本安装,或者想安装旧版本,需要使用下面命令查询和安装。

CentOS

  1. 查询所有可用版本

    sudo dnf list --showduplicates kubeadm
  2. 安装指定版本(注意三个组件版本需保持一致)

    sudo dnf install -y kubeadm-1.25.3-0 kubelet-1.25.3-0 kubectl-1.25.3-0

Debian

  1. 查询所有可用版本

    sudo apt list kubeadm -a
  2. 安装指定版本(注意三个组件版本需保持一致)

    sudo apt install -y kubeadm=1.25.3-00 kubelet=1.25.3-00 kubectl=1.25.3-00
  3. 然后记得锁定版本,防止更新时误升级导致集群出错

    sudo apt-mark hold kubelet kubeadm kubectl

配置及优化

命令行补全

kubectl, kubeadm 命令配置命令行补全功能

需要创建目录

sudo mkdir /etc/bash_completion.d/

然后执行


附录

相关链接

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。