当前位置: 首页 > news >正文

kubeadm 部署 K8S(v1.23.1)集群

kubeadm 和二进制安装的适用场景分析

kubeadm 部署方式

  • kubeadm 是官方提供的开源工具,是一个开源项目,用于快速搭建 kubernetes 集群,目前是比较方便和推荐使用的。kubeadm init 以及 kubeadm join 这两个命令可以快速创建 kubernetes 集群。
  • Kubeadm 初始化k8s,所有的组件都是以pod形式运行的,具备故障自恢复能力。
  • kubeadm 是工具,可以快速搭建集群,也就是相当于用程序脚本帮我们装好了集群,属于自动部署,简化部署操作。证书、组件资源清单文件都是自动创建的,自动部署屏蔽了很多细节,使得对各个模块感知很少,如果对k8s架构组什理解不深的话,遇到问题比较难排。
  • kubeadm适合需要经常部署k8s,或者对自动化要求比较高的场景下使用。

二进制 部署方式

  • 在官网下载相关组件的二进制包,手动安装方式,对 kubernetes 理解也会更全面。

总结:Kubeadm 和二进制都适合生产环境,在生产环境运行都很稳定,且体如何选择,可以根据实际项目进行评估。

kubeadm 方式部署 k8s 集群

部署 3 个节点 K8S 集群,1台 master 节点和 2 台 work 节点,集群各个节点的主机配置如下:

台服务器:3 台

操作系统:CentOS 7.6

配置:CPU:4C、内存:6G、存储:50G

1、集群节点环境初始化
1.基础环境准备

(1)配置节点主机名和解析

在各个节点上修改主机名并配置 hosts 文件,确保主机名解析正确(通过 /etc/hosts ),使集群各个节点之间可以直接通过主机名互访。

  • 修改各个节点的主机名
$ hostnamectl set-hostname master1
$ hostnamectl set-hostname work1
$ hostnamectl set-hostname work2
  • 配置主机名解析,在各个节点的 /etc/hosts 文件中添加集群所有节点的 IP 和主机名映射
$ cat /etc/hosts
192.168.168.10 master1
192.168.168.20 work1
192.168.168.30 work2

(2)设置免密登录

  • 在各个节点上配置免密登录
$ ssh-keygen
$ ssh-copy-id master1
$ ssh-copy-id work1
$ ssh-copy-id work2
 2.系统服务与内核参数调整

(1)禁用 Swap 分区​​

  • kubeadm 部署 k8s 集群时要求禁用 Swap分区,否则部署时无法通过环境检查,kubelet 无法启动,因此各个节点都需要关闭 Swap 分区
$ swapoff -a
$ vim /etc/fstab
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

ps:为什么要关闭 swap 交换分区?
答:Swap 是交换分区,如果机器内有不够,会使用swap分区,但是 swap 分区的性能较低,k8s设计的时候为了能提升性能,默认是不允许使用交换分区的,Kubeadm初始化的时候会检测swap是否关闭,如果没关闭,那就初始化失败,如果不想要关闭交换分区,安装 k8s 的时候可以指定--ignore preflight-errors=Swap来解决。

 (2)关闭防火墙和 selinux

  • 所有节点需禁用防火墙(firewalld/ufw)和 SELinux,避免与 Kubernetes 网络规则冲突
$ systemctl stop firewalld && systemctl disable firewalld
$ vim /etc/selinux/config
SELINUX=disabled

(3)内核参数优化​​

1)启用桥接流量转发和 netfilter 规则

  • 加载 br_netfilter 模块​​,并设置每次用户登录时自动加载该模块(加载 br_netfilter 内核模块,使桥接流量能够通过 iptables/ip6tables 规则过滤,这是容器间通信和 NAT 的关键。)
$ modprobe br_netfilter
$ echo "modprobe br_netfilter" >> /etc/profile
  • 创建  /etc/sysctl.d/k8s.conf  文件​​,添加如下网络配置
$ cat > /etc/sysctl.d/k8s.conf <<EOF> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> EOF
$ sysctl -p /etc/sysctl.d/k8s.conf

参数说明​​:

bridge-nf-call-iptables=1:允许桥接流量经过 iptables 规则(K8s Pod 网络必需)
ip_forward=1:启用 IPv4 数据包转发(容器跨节点通信必需)。

​​注意​​:若执行时报错 No such file or directory,需先加载 br_netfilter 模块

2)开启 ipvs 

  • 加载 IPVS 所需的内核模块,确保 kube-proxy 能够使用 IPVS 实现高性能负载均衡
$ vim /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do/sbin/modinfo -F filename ${kernel_module} > 
http://www.lryc.cn/news/590958.html

相关文章:

  • 直播带货与开源AI智能名片链动2+1模式S2B2C商城小程序:重塑电商营销新格局
  • python 【技术面试题和HR面试题】➕列表操作、条件判断、循环、函数定义编程题
  • 从0开始学习R语言--Day49--Lasso-Cox 回归
  • 十五、K8s可观测能力:日志收集
  • 【41】MFC入门到精通——MFC中 GetLBText()、GetWindowText()、SetWindowText区别
  • PyTorch笔记8----------卷积神经网络
  • 魔术公式轮胎simulink模型建立及参数拟合
  • 【机器学习】第三章 分类算法
  • HANA SQLScript中的变量类型汇总
  • 从现场出发:能源系统中的智能设备与实际落地工具解读
  • ClickHouse 多表 JOIN 时 SELECT * 语法错误解析与解决方案
  • 不同相机CMOS噪点对荧光计算的影响
  • AWS WebRTC:RTP讲解
  • 磁盘分区(D盘分给C盘)
  • 学习笔记(39):结合生活案例,介绍 10 种常见模型
  • IPC进程间通信 interprocess communicate
  • 09-three.js Materials
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘flask’问题
  • 串口232通讯数据传输丢失的原因、不可靠性及底层原理分析
  • 12.9 Mixtral-8x7B核心技术解密:如何用1/3参数实现4倍推理速度碾压LLaMA2?
  • RabbitMQ概述和工作模式
  • 苍穹外卖项目日记(day11)
  • 优先队列的实现
  • vue中的this.$set
  • Spring Cloud LoadBalancer 详解
  • 理解 PS1/PROMPT 及 macOS iTerm2 + zsh 终端配置优化指南
  • javaScript中数组常用的函数方法
  • 【Java开发日记】我们来说说 LockSupport 的 park 和 unpark
  • python Flask 框架入门
  • stack,queue,priority_queue的模拟实现及常用接口