github编辑

14.1 使用 kubeadm 部署 Kubernetes (CRI 使用 containerd)

kubeadm 提供了 kubeadm init 以及 kubeadm join 这两个命令,作为快速创建 Kubernetes 集群的最佳实践。

版本说明:Kubernetes 版本更新较快 (约每 4 个月一个新版本),本文档基于 Kubernetes 1.35 编写。请访问 Kubernetes 官方发布页arrow-up-right获取最新版本信息。

14.1.1 安装 containerd

参考安装 Docker 一节添加 apt/yum 源,之后执行如下命令。

## debian 系

$ sudo apt install containerd.io

## rhel 系

$ sudo yum install containerd.io

14.1.2 配置 containerd

新建 /etc/systemd/system/cri-containerd.service 文件

[Unit]
Description=containerd container runtime for kubernetes
Documentation=https://containerd.io
After=network.target local-fs.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd --config /etc/cri-containerd/config.toml

Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
## 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
LimitNOFILE=infinity
## Comment TasksMax if your systemd version does not supports it.

## Only systemd 226 and above support this version.

TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target

新建 /etc/cri-containerd/config.toml containerd 配置文件

14.1.3 安装 kubeletkubeadmkubectlcri-toolskubernetes-cni

需要在每台机器上安装以下的软件包:

Ubuntu/Debian

运行以下命令:

CentOS/Fedora

运行以下命令:

14.1.4 修改内核的运行参数

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

加载内核模块

运行以下命令:

禁用 swap (必须)

kubelet 默认要求禁用 swap,否则可能导致初始化失败或节点无法加入集群。

运行以下命令:

14.1.5 配置 kubelet

为了让 kubelet 正确运行,我们需要对其进行一些必要的配置。

概述

总体概述了以下内容。

修改 kubelet.service

/etc/systemd/system/kubelet.service.d/10-proxy-ipvs.conf 写入以下内容

执行以下命令应用配置。

14.1.6 部署

安装配置完成后,我们将分别在 Master 节点和 Worker 节点上进行部署操作。

master

运行以下命令:

  • --pod-network-cidr 10.244.0.0/16 参数与后续 CNI 插件有关,这里以 flannel 为例,若后续部署其他类型的网络插件请更改此参数。

执行可能出现错误,例如缺少依赖包,根据提示安装即可。

执行成功会输出

node 工作节点

另一主机 重复 部署 小节以前的步骤,安装配置好 kubelet。根据提示,加入到集群。

14.1.7 查看服务

所有服务启动后,通过 crictl 查看本地实际运行的容器。这些服务大概分为三类:主节点服务、工作节点服务和其它服务。

主节点服务

  • apiserver 是整个系统的对外接口,提供 RESTful 方式供客户端和其它组件调用;

  • scheduler 负责对资源进行调度,分配某个 pod 到某个节点上;

  • controller-manager 负责管理控制器,包括 endpoint-controller (刷新服务和 pod 的关联信息) 和 replication-controller (维护某个 pod 的复制为配置的数值)。

工作节点服务

  • proxy 为 pod 上的服务提供访问的代理。

其它服务

  • Etcd 是所有状态的存储数据库;

14.1.8 使用

/etc/kubernetes/admin.conf 复制到 ~/.kube/config

执行 $ kubectl get all -A 查看启动的服务。

由于未部署 CNI 插件,CoreDNS 未正常启动。如何使用 Kubernetes,请参考后续章节。

14.1.9 部署 CNI

这里以 flannel 为例进行介绍。

概述

总体概述了以下内容。

flannel

检查 podCIDR 设置

14.1.10 master 节点默认不能运行 pod

如果用 kubeadm 部署一个单节点集群,默认情况下无法使用,请执行以下命令解除限制

14.1.11 参考文档

最后更新于