Kubeadm搭建高可用(k8s)Kubernetes v1.24.0集群

文章目录

  • 背景
  • Kubernetes 1.24新特性
  • 环境准备
  • 基础环境配置
  • Containerd 安装
  • api-server 高可用部署 (单master可跳过)
  • Kubeadm 安装配置
  • Kubectl 安装
  • Master节点配置
  • Node节点配置
  • 网络配置
  • CNI插件问题
  • 验证集群
  • 更新2022年08月25日

    背景

    Kubernetes 1.24新特性

  • 从kubelet中移除dockershim 自1.20版本被弃用之后,dockershim组件终于在1.24的kubelet中被删除。从1.24开始,大家需要使用其他受到支持的运行时选项(例如containerd或CRI-O);如果您选择Docker Engine作为运行时,则需要使用cri-dockerd。
  • 对于kubelet和containerd重要提示 在升级至1.24之前,请确认containerd版本

    #以下容器运行时已经或即将全面兼容Kubernetes 1.24:
    
    containerd v1.6.4及更高,v1.5.11及更高
    CRI-O 1.24及更高

    若CNI插件尚未升级且/或CNI配置文件中未声明CNI配置版本时,则containerd v1.6.0-v1.6.3版本将导致Pod CNI网络setup及tear down发生问题。containerd团队报告称,这些问题已经在containerd v1.6.4中得到解决。 在containerd v1.6.0-v1.6.3时,如果你未升级CNI插件且/或声明CNI配置版本,则可能遇到CNI版本不兼容或无法为沙箱删除网络等错误。

    Kubernetes 1.24新特性

  • 各beta API默认关闭 在默认情况下,新的各beta API不会在集群内得到启用。但全部原有beta API及其新版本将在1.24中继续默认启用
  • OpenAPI v3 Kubernetes 1.24开始为API的OpenAPI v3发布格式提供beta支持。
  • 存储容量与存储卷扩展双双迎来通用版本 存储容量跟踪通过CSIStorageCapacity对象公开当前可用的存储容量,并对使用后续绑定的CSI存储卷的pod进行调度增强。 存储卷扩展则新增对现有持久卷的重新调整功能。
  • NonPreemptingPriority迎来稳定版 此功能为PriorityClasses添加了新的选项,可开启或关闭Pod抢占机制
  • 存储插件迁移 目前Kubernetes开发团队正在迁移树内存储插件,希望在实现CSI插件的同时、保持原有API的正常起效。Azure Disk与OpenStack Cinder等插件已经完成了迁移。
  • gRPC探针升级至beta版 在1.24版本中,gRPC探针功能已经进入beta阶段且默认启用。现在,大家可以在Kubernetes中为自己的gRPC应用程序原生配置启动、活动与就绪探测,而且无需公开HTTP商战或者使用额外的可执行文件。
  • Kubelet证书提供程序升级至beta版 最初在Kubernetes 1.20版本中以alpha版亮相的kubelet镜像证书提供程序现已升级至beta版。现在,kubelet将使用exec插件动态检索容器镜像注册表的凭证,而不再将凭证存储在节点文件系统之上。
  • 避免为服务分配IP时发生冲突 Kubernetes 1.24引入了一项新的选择性功能,允许用户为服务的静态IP分配地址保留一个软范围。通过手动启用此项功能,集群将从您指定的服务IP池中自动获取地址,从而降低冲突风险。
  • 也就是说,服务的ClusterIP能够以下列方式分配:动态分配,即集群将在配置的服务IP范围内自动选择一个空闲IP。静态分配,意味着用户需要在已配置的服务IP范围内指定一个IP。

    服务ClusterIP是唯一的;因此若尝试使用已被分配的ClusterIP进行服务创建,则会返回错误结果。

    环境准备

    我本地有kubernetes 1.18环境,接下来对环境进行初始化

    #目前kubernetes版本
    [root@k8s-01 ~]# kubectl  get node
    NAME     STATUS   ROLES    AGE    VERSION
    k8s-01   Ready    master   243d   v1.18.3
    k8s-02   Ready    master   243d   v1.18.3
    k8s-03   Ready    master   243d   v1.18.3
    k8s-04   Ready       243d   v1.18.3
    k8s-05   Ready       243d   v1.18.3

    卸载集群命令

    #建议所有服务器都执行
    #!/bin/bash
    kubeadm reset -f
    modprobe -r ipip
    lsmod
    rm -rf ~/.kube/
    rm -rf /etc/kubernetes/
    rm -rf /etc/systemd/system/kubelet.service.d
    rm -rf /etc/systemd/system/kubelet.service
    rm -rf /usr/bin/kube*
    rm -rf /etc/cni
    rm -rf /opt/cni
    rm -rf /var/lib/etcd
    rm -rf /var/etcd
    yum -y remove kubeadm* kubectl* kubelet* docker*
    reboot

    基础环境配置

    IP地址 主机名 服务 配置
    192.168.31.10 k8s-01 k8s-master、containerd、keepalived、nginx 2c8g
    192.168.31.11 k8s-02 k8s-master、containerd、keepalived、nginx 2c8g
    192.168.31.12 k8s-03 k8s-master、containerd、keepalived、nginx 2c8g
    192.168.31.13 k8s-04 k8s-node、containerd 1c4g
    192.168.31.14 k8s-05 k8s-node、containerd 1c4g