• Kubernetes 笔记 / 任务 / 管理集群 / 用 kubeadm 管理集群 / 配置一个 cgroup 驱动


    目录、参考文献


    配置一个 cgroup 驱动

    需要为 kubeadm 集群配置 kubeletcgroup 驱动,使其与容器运行时的 cgroup 驱动匹配

    前提条件

    需要熟悉 Kubernetes 的容器运行时

    配置容器运行时的 cgroup 驱动

    基于 kubeadm 部署时,更推荐使用 systemd 驱动而不是 cgroupfs 驱动,详见容器运行时
    因为 kubeadm 会将 kubelet 当做 systemd 服务进行管理

    容器运行时中还提供了如何配置不同的容器运行时,使其默认使用 systemd 驱动的细节

    配置 kubelet 的 cgroup 驱动

    kubeadm 支持在执行 kubeadm init 时,传递一个 KubeletConfiguration 结构体
    KubeletConfiguration 包含 cgroupDriver 字段,可用于控制 kubeletcgroup 驱动

    说明:
    在版本 1.22 中,如果用户没在 KubeletConfiguration 中设置 cgroupDriver 字段
    kubeadm init 会设置为默认值 systemd

    一个最小化的示例,其中显式地配置了此字段

    # kubeadm-config.yaml
    kind: ClusterConfiguration
    apiVersion: kubeadm.k8s.io/v1beta3
    kubernetesVersion: v1.21.0
    ---
    kind: KubeletConfiguration
    apiVersion: kubelet.config.k8s.io/v1beta1
    cgroupDriver: systemd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    将配置文件就传递给 kubeadm 命令

    kubeadm init --config kubeadm-config.yaml
    
    • 1

    说明:
    kubeadm 对集群所有的节点使用相同的 KubeletConfiguration KubeletConfiguration 存放于 kube-system 命名空间下的某个 ConfigMap 对象中

    执行 initjoinupgrade 子命令会使 kubeadmKubeletConfiguration 写入到文件 /var/lib/kubelet/config.yaml 中并把它传递给本地节点的 kubelet

    使用 cgroupfs 驱动

    如要使用 cgroupfs 且要防止 kubeadm upgrade 修改现有配置中 KubeletConfigurationcgroup 驱动
    必须显式声明它的值
    显式声明使用 cgroupfs 后,kubeadm 不再默认使用 systemd 驱动

    修改 kubelet 的 ConfigMap 描述了显式设置该值的方法

    如果希望配置容器运行时使用 cgroupfs 驱动,需要参考所选容器运行时的文档

    迁移到 systemd 驱动

    要将现有 kubeadm 集群的 cgroup 驱动升级为 systemd
    需要执行一个与 kubelet 升级类似的过程
    该过程包含下面两个步骤:

    说明:
    还有一种方法,可以用已配置了 systemd 的新节点替换掉集群中的老节点
    按这种方法,在加入新节点、确保工作负载可以安全迁移到新节点、删除旧节点一系列操作之前
    只需执行下面的第一个步骤

    1)修改 kubelet 的 ConfigMap

    • 运行 kubectl edit cm kubelet-config -n kube-system
    • 修改现有 cgroupDriver 的值,或者新增如下字段:
    cgroupDriver: systemd
    
    • 1

    该字段必须出现在 ConfigMap 的 kubelet: 小节下

    2)更新所有节点的 cgroup 驱动

    对集群中的每个节点:

    • 执行命令 kubectl drain --ignore-daemonsets,以腾空节点
    • 执行命令 systemctl stop kubelet 以停止 kubelet
    • 停止容器运行时
    • 将容器运行时的 cgroup 驱动修改为 systemd
    • 在文件 /var/lib/kubelet/config.yaml 中添加设置 cgroupDriver: systemd
    • 启动容器运行时
    • 执行命令 systemctl start kubelet,以启动 kubelet
    • 执行命令 kubectl uncordon ,以取消节点隔离

    在节点上依次执行上述步骤,确保工作负载有充足的时间被调度到其它节点

    流程完成后,确认所有节点和工作负载均健康


    目录、参考文献

  • 相关阅读:
    Qt5开发及实例V2.0-第二章Qt模板库工具类及控件
    浏览器如何进行静态资源缓存?—— 强缓存 & 协商缓存
    function declared implicitly
    计算机网络:网络层
    SQL创建用户-非DM8.2环境(达梦数据库)
    Bert基础(十七)--Bert实战:中文情感识别
    Android学习笔记 1.7 Android应用的基本组件介绍
    STM32基础篇:EXTI × 事件 × EXTI标准库
    【图像分割】图像检测(分割、特征提取)、各种特征(面积等)的测量和过滤(Matlab代码实现)
    创建Zookeeper伪集群启动失败
  • 原文地址:https://blog.csdn.net/wdhlzd/article/details/126075953