PVE 上 Debian 12 虚拟机部署 Kubernetes 1.31 简要记录

status
Published
type
Post
slug
pve-debian-12-vm-deploy-kubernetes-1-31-brief-record
date
Sep 23, 2024
tags
PVE
Linux
Config
K8s
DevOps
summary
文章记录了在 PVE 虚拟机上部署 Kubernetes 1.31 集群的操作过程,包括环境准备,安装并配置 containerd 作为容器运行时,使用 kubeadm 初始化 Kubernetes 集群,并部署 Cilium 。最后,文章验证了集群功能并展示了如何删除集群。
Kubernetes 近期发布了 1.31 版本,正好之前 PVE 中已有的 Kubernetes 测试环境版本有点旧了。干脆重新创建虚拟机部署 Kubernetes 吧!

参照上方的链接👆,使用 Terraform 来创建四台虚拟机,一台作 Master Node,其余三台作 Worker Node。(资源限制,此处采用单节点控制面,不做高可用)
集群主机配置

前置准备工作

卸载 Docker (全新环境或未安装过可跳过)

关闭服务

内核参数设置

内核模块

CRI (Containerd)

containerd 安装
containerd 服务
containerd.service
CNI-Plugins 安装

nerdctl

nerdctl 是一个操作 containerd 的命令行工具,提供类似 docker 命令的操作,可以提升运维操作体验。

安装 Kubernetes 组件

更新软件包

初始化集群

在要作为主节点的机器上通过 Kubeadm 命令初始化集群
kubeadm init
此命令初始化一个 Kubernetes 控制平面节点。 运行此命令以安装 Kubernetes 控制平面。 概要 运行此命令来搭建 Kubernetes 控制平面节点。 "init" 命令执行以下阶段: preflight 预检 certs 生成证书 /ca 生成自签名根 CA 用于配置其他 kubernetes 组件 /apiserver 生成 apiserver 的证书 /apiserver-kubelet-client 生成 apiserver 连接到 kubelet 的证书 /front-proxy-ca 生成前端代理自签名CA(扩展apiserver) /front-proxy-client 生成前端代理客户端的证书(扩展 apiserver) /etcd-ca 生成 etcd 自签名 CA /etcd-server 生成 etcd 服务器证书 /etcd-peer 生成 etcd 节点相互通信的证书 /etcd-healthcheck-client 生成 etcd 健康检查的证书 /apiserver-etcd-client 生成 apiserver 访问 etcd 的证书 /sa 生成用于签署服务帐户令牌的私钥和公钥 kubeconfig 生成建立控制平面和管理所需的所有 kubeconfig 文件 /admin 生成一个 kubeconfig 文件供管理员使用以及供 kubeadm 本身使用 /super-admin 为超级管理员生成 kubeconfig 文件 /kubelet 为 kubelet 生成一个 kubeconfig 文件,*仅*用于集群引导 /controller-manager 生成 kubeconfig 文件供控制器管理器使用 /scheduler 生成 kubeconfig 文件供调度程序使用 etcd 为本地 etcd 生成静态 Pod 清单文件 /local 为本地单节点本地 etcd 实例生成静态 Pod 清单文件 control-plane 生成建立控制平面所需的所有静态 Pod 清单文件 /apiserver 生成 kube-apiserver 静态 Pod 清单 /controller-manager 生成 kube-controller-manager 静态 Pod 清单 /scheduler 生成 kube-scheduler 静态 Pod 清单 kubelet-start 写入 kubelet 设置并启动(或重启) kubelet upload-config 将 kubeadm 和 kubelet 配置上传到 ConfigMap /kubeadm 将 kubeadm 集群配置上传到 ConfigMap /kubelet 将 kubelet 组件配置上传到 ConfigMap upload-certs 将证书上传到 kubeadm-certs mark-control-plane 将节点标记为控制面 bootstrap-token 生成用于将节点加入集群的引导令牌 kubelet-finalize 在 TLS 引导后更新与 kubelet 相关的设置 /experimental-cert-rotation 启用 kubelet 客户端证书轮换 addon 安装用于通过一致性测试所需的插件 /coredns 将 CoreDNS 插件安装到 Kubernetes 集群 /kube-proxy 将 kube-proxy 插件安装到 Kubernetes 集群 show-join-command 显示控制平面和工作节点的加入命令 kubeadm init [flags] 选项 --apiserver-advertise-address string API 服务器所公布的其正在监听的 IP 地址。如果未设置,则使用默认网络接口。 --apiserver-bind-port int32     默认值:6443 API 服务器绑定的端口。 --apiserver-cert-extra-sans strings 用于 API Server 服务证书的可选附加主题备用名称(SAN)。可以是 IP 地址和 DNS 名称。 --cert-dir string     默认值:"
kubeadm init
  • 命令行方式:
    • 配置文件方式
      • 生成默认配置文件
        kubeadm config print init-defaults > kubeadm.yaml
    初始化过程截图
    notion image
    notion image
    初始化完成后会显示加入集群的相关命令,如下所示:
    根据提示在其余节点执行 kubeadm join 命令。
    此时未安装pod网络插件,所以集群状态是 NotReady 未就绪的。
    notion image
    由于集群节点通常是按顺序初始化的,CoreDNS Pod 很可能都运行在第一个控制面节点上。 为了提供更高的可用性,请在加入至少一个新节点后使用 kubectl -n kube-system rollout restart deployment coredns 命令,重新平衡这些 CoreDNS Pod。

    CNI 网络组件

    Cilium

    既然是测试环境,就体验下基于 eBPF 的 Cilium,下面为安装过程
    notion image
    此时发现有 Pod 无法启动,通过 kubectl desc 命令得到启动失败原因如下:
    执行如下命令解决:
    notion image
    notion image

    Calico

    这里附带一下之前 calico 的安装方式
    修改 CALICO_IPV4POOL_CIDR 为自定义的网段,修改 CALICO_IPV4POOL_IPIP 为 Always 启用 ipip 协议。
    验证 coredns dns 转发是否正常

    验证集群

    删除集群

     
     

    参考资料

    使用 kubeadm 创建集群
    使用 kubeadm,你能创建一个符合最佳实践的最小化 Kubernetes 集群。 事实上,你可以使用 kubeadm 配置一个通过 Kubernetes 一致性测试的集群。 kubeadm 还支持其他集群生命周期功能, 例如启动引导令牌和集群升级。 kubeadm 工具很棒,如果你需要: 一个尝试 Kubernetes 的简单方法。 一个现有用户可以自动设置集群并测试其应用程序的途径。 其他具有更大范围的生态系统和/或安装工具中的构建模块。 你可以在各种机器上安装和使用 kubeadm:笔记本电脑、一组云服务器、Raspberry Pi 等。 无论是部署到云还是本地,你都可以将 kubeadm 集成到 Ansible 或 Terraform 这类预配置系统中。 准备开始 要遵循本指南,你需要: 一台或多台运行兼容 deb/rpm 的 Linux 操作系统的计算机;例如:Ubuntu 或 CentOS。 每台机器 2 GB 以上的内存,内存不足时应用会受限制。 用作控制平面节点的计算机上至少有 2 个 CPU。 集群中所有计算机之间具有完全的网络连接。你可以使用公共网络或专用网络。 你还需要使用可以在新集群中部署特定 Kubernetes 版本对应的 kubeadm。 Kubernetes 版本及版本偏差策略适用于 kubeadm 以及整个 Kubernetes。 查阅该策略以了解支持哪些版本的 Kubernetes 和 kubeadm。 该页面是为 Kubernetes v1.31 编写的。 kubeadm 工具的整体功能状态为一般可用性(GA)。一些子功能仍在积极开发中。 随着工具的发展,创建集群的实现可能会略有变化,但总体实现应相当稳定。 说明: 根据定义,在 kubeadm alpha 下的所有命令均在 Alpha 级别上受支持。
    使用 kubeadm 创建集群

    2024 © HK