使用 Kubernetes 对容器进行编排成为微服务时代的技术风向标。
更新记录
2023-08
- (08-11)「新增」更新 v1.28 相关说明;
2022-08
- (08-07)「新增」更新 v1.24 版本说明;
2020-08
- (08-17)「初始」版本;
使用 containerd 作为 CR
使用官方二进制包手动部署(推荐)
详细的官方英文指南可参考 Getting started with containerd。
安装 containerd
从官方项目地址中下载二进制包,格式为
containerd-<版本>-<系统>-<架构>.tar.gz
,然后解压到安装目录中。sudo tar Cxf /usr/local containerd-1.x.x-linux-amd64.tar.gz
配置系统守护
从项目仓库下载守护单元
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
安装 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
配置 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.toml
中 sandbox_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 版本开始,官方启用了全新的社区存储仓库,可以直观地体现版本号,同时也可防止用户错误升级大版本。旧版本的仓库将于九月十三日废弃。
安装依赖
sudo apt install -y ca-certificates curl gnupg
获取新公钥
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
使用新地址
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
安装
sudo apt-get install -y kubelet kubeadm kubectl
锁定版本
sudo apt-mark hold kubelet kubeadm kubectl
过时版本
CentOS
配置仓库(海外及港澳台特区可使用官方地址)
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF
中国大陆推荐使用国内镜像,比如阿里云:
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
安装
sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes sudo systemctl enable --now kubelet
小贴士:如果使用国内源安装时出现类似报错 GPG Error ,这是因为 GPG 密钥同步异常,请使用
sudo yum install -y --nogpgcheck
命令安装。Debian
安装依赖
sudo apt update sudo apt install -y ca-certificates curl gnupg
如果使用的系统是 Debian 12 以下或 Ubuntu 22.04 以下版本,则需要手动创建密钥目录
sudo install -m 0755 -d /etc/apt/keyrings
配置仓库(海外及港澳台特区可使用官方地址)
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
中国大陆推荐使用国内镜像,比如阿里云:
curl -fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
安装
sudo apt update sudo apt install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
指定版本安装
如果想指定某个版本安装,或者想安装旧版本,需要使用下面命令查询和安装。
CentOS
查询所有可用版本
sudo dnf list --showduplicates kubeadm
安装指定版本(注意三个组件版本需保持一致)
sudo dnf install -y kubeadm-1.25.3-0 kubelet-1.25.3-0 kubectl-1.25.3-0
Debian
查询所有可用版本
sudo apt list kubeadm -a
安装指定版本(注意三个组件版本需保持一致)
sudo apt install -y kubeadm=1.25.3-00 kubelet=1.25.3-00 kubectl=1.25.3-00
然后记得锁定版本,防止更新时误升级导致集群出错
sudo apt-mark hold kubelet kubeadm kubectl
配置及优化
命令行补全
为 kubectl
, kubeadm
命令配置命令行补全功能
需要创建目录
sudo mkdir /etc/bash_completion.d/
然后执行
kubectl
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl
kubeadm
kubeadm completion bash | sudo tee /etc/bash_completion.d/kubeadm
附录
相关链接
- 从零开始的 Kubernetes 学习笔记(一) - VVavE
- 从零开始的 Kubernetes 学习笔记(三) - VVavE
- 从零开始的 Kubernetes 学习笔记(四) - VVavE
- 从零开始的 Kubernetes 学习笔记(五) - VVavE
参考链接
- Enable kubectl completion - kubernetes
- Enable kubeadm completion - kubernetes
- Container Runtimes - kubernetes
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2023-11-22 17:47 PM