安装和配置先决条件

网络配置

默认情况下,Linux 内核不允许 IPv4 数据包在接口之间路由。大多数 kubernetes 集群网络实现都会更改此配置

启用 IPv4 数据包转发

手动启用 IPv4 数据包转发:

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf

net.ipv4.ip_forward = 1

EOF

sudo sysctl --system   #应用 sysctl 参数而不重启启动

sysctl net.ipv4.ip_forward    #验证net.ipv4.ip_forward 是否设置为 1

cgroup 驱动

在 Linux 上,控制组(CGroup)用于限制分配给进程的资源。

kubelet 和底层容器运行时都需要对接控制组来强制执行为 Pod 和Container 管理资源并为诸如CPU、内存这类资源设置请求和限制。若要对接控制组,kubelet 和容器运行时需要使用一个 cgroup 驱动。关键一点是 kubelet 和容器运行时需要使用相同的 cgroup 驱动并且采用相同的配置。

可用的 cgroup 驱动有两个:

  • cgroupfs
  • systemd

cgroupfs 驱动

cgroupfs 驱动是 kubelet 中默认的 cgroup 驱动。当使用 cgroup 驱动时,kubelet 和容器运行时将直接对接 cgroup 文件系统来配置 cgroup。

当 systemd 是初始化系统时,不推荐使用 cgroupfs 驱动,因为 systemd 期望系统上只有一个 cgroup 管理器。此外,如果你使用 cgroup v2,则应用 systemd cgroup 驱动取代 cgroupfs。

systemd cgroup驱动

当某个 Linux 系统发行版使用 systemd 作为初始化系统时,初始化进程会生成并使用一个 root 控制组(croup),并充当 cgroup 管理器。

systemd 与 cgroup 集成紧密,并将为每个 systemd 单元分配一个 cgroup。因此,如果你把 systemd 用作初始化系统,同时使用 cgroupfs 驱动,则系统中会存在两个不同的 cgroup 管理器。

同时存在两个 cgroup 管理器将造成系统中针对可用的资源和使用中的资源出现两个视图。某些情况下,将 kubelet 和容器运行时配置为使用 cgroupfs、但为剩余的进程使用 systemd 的那些节点将在资源压力增大时变得不稳定。

当 systemd 是选定的初始化系统时,缓解这个不稳定问题的方法是针对 kubelet 和 容器运行时都将 systemd 用作 cgroup 驱动。

要将 systemd 设置为 cgroup 驱动,需编辑 kubeletconfiguration 的 cgroupDriver 选项,并将其设置为 systemd。例如:

apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
...
cgroupDriver: systemd

后者在"/var/lib/kubelet"路径下,编辑config.yaml文件中的 cgroupDriver 字段的值。

如果你将 systemd 配置为 kubelet 的 cgroup 驱动,你也必须将 systemd 配置为容器运行时的 cgroup 驱动。例如:

  • containerd

Containerd 容器运行时

安装 Containerd 运行时2.x版本

参看 《Containerd 运行时安装》文章

配置 systemd cgroup 驱动

要在 /etc/containerd/cofig.toml 中将 runc 配置为使用 systemd cgroup 驱动:

[plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc]
  ...
  [plugins.'io.containerd.cri.v1.runtime'.containerd.runtimes.runc.options]
    SystemdCgroup = true

重启启动 containerd:

systemctl restart containerd

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区