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

【部署K8S集群】 1、安装前环境准备配置

操作系统:Ubuntu 22.04 TLS
Kubernetes版本:1.29.15
三节点高可用集群

更新系统软件

sudo apt-get update && sudo apt-get upgrade -y

修改软件仓库源

/etc/apt/sources.list

# ubuntu 22.04 LTS (jammy)
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

关闭防火墙

关闭 ubuntu 使用的ufw防火墙,否则后面部署节点间的通信可能失败

不关闭也行,但要放通 kubernetes 集群所需的端口

sudo systemctl disable --now ufw.service

关闭swap交换分区

# 永久关闭
sudo sed -ri 's/.*swap.*/#&/' /etc/fstab# 临时关闭,(一般选永久关闭)
sudo swapoff -a# 调整内核参数,swap的依赖值(0-100)越大越依赖,默认60
cat <<EOF | sudo tee /etc/sysctl.d/swap.conf
vm.swappiness = 0
EOF

设置 host 解释记录

根据部署规划设置主机名、host 文件解释记录,确保所有节点 主机名能互通

设置时间同步

集群内所有节点时间必须保持一致

# 设置时区
timedatectl set-timezone Asia/Shanghai# 开记 NTP 时间同步
timedatectl set-ntp ture

开启转发 IPv4 并让 iptables 看到桥接流量

# 创建模块配置文件
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF# 手动加载模块
sudo modprobe overlay
sudo modprobe br_netfilter# 验证 br_netfilter 模块是否加载成功
lsmod | grep overlay
lsmod | grep br_netfilter
lsmod | grep 'br_netfilter\|overlay'# 开启 iptables 能够正确查看桥接流量,设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF# 应用 sysctl 参数而不重新启动
sudo sysctl -p /etc/sysctl.d/k8s.confsudo sysctl --system# 查看内核参数值,确认修改生效
sysctl net.bridge.bridge-nf-call-iptables# 值变为 “1”
cat /proc/sys/net/ipv4/ip_forward

开启ipvs

为了高效地处理负载均衡,Kubernetes 提供了多种代理模式, IPVS(IP Virtual Server)是其中一种高效的负载均衡实现。

IPVS 是 Linux 内核中的一种负载均衡技术,它主要用于将来自用户空间的请求转发到多个后端服务器。相较于其他负载均衡方式,IPVS 具有高效性和灵活性,能够处理大规模的连接。

IPVS的主要优点:

  • 高性能:基于内核的实现,可以处理数百万的连接。
  • 灵活性:支持多种负载均衡算法,如轮询、最少连接等。
  • 透明性:工作在7层(应用层),用户几乎感觉不到后端服务器的变化。

使用 kubeadm 部署的集群, kube-proxy 默认是 iptables 模式。

# 在所有节点安装ipset和ipvsadm:
sudo apt -y install ipvsadm ipset sysstat conntrack libseccomp-dev# 配置ipvs
sudo tee /etc/modules-load.d/ipvs.conf << EOF
modprobe -- ip_vs
modprobe -- ip_vs_rr     # 轮询算法,按顺序依次将请求分发到每个后端 Pod;
modprobe -- ip_vs_wrr    # 加权轮询算法,根据 Pod 的权重(默认相同)分发请求,权重高的 Pod 接收更多流量;
modprobe -- ip_vs_sh     # 源哈希算法,根据客户端 IP 哈希值固定分发到特定 Pod,确保同一客户端请求始终路由到同一 Pod;
modprobe -- ip_vs_dh     # 目标哈希算法,根据目标 IP 哈希值分发请求,适合缓存服务(如同一目标 IP 对应固定缓存节点);
modprobe -- ip_vs_lc     # 最少连接,优先将请求分发到当前连接数最少的 Pod;
modprobe -- ip_vs_wlc    # 加权最少连接,结合权重和当前连接数,权重高且连接少的 Pod 优先接收请求;
modprobe -- ip_vs_lblc   # 基于本地的最少连接,优先将请求分发到同一本地节点的 Pod(若存在),减少跨节点网络开销;
modprobe -- nf_conntrack     #内核小于4.18,把这行改成nf_conntrack_ipv4
EOF# 手动加载模块
sudo modprobe -- ip_vs
sudo modprobe -- ip_vs_rr
sudo modprobe -- ip_vs_wrr
sudo modprobe -- ip_vs_sh
sudo modprobe -- ip_vs_dh
sudo modprobe -- ip_vs_lc
sudo modprobe -- ip_vs_wlc
sudo modprobe -- ip_vs_lblc# 内核版本大于4.19,使用nf_conntrack,之前版本用nf_conntrack_ipv4模块,
# 否则会提示modprobe: FATAL: Module nf_conntrack_ipv4 not found in directory lib/modules/5.15.0-40-generickernel_version=$(uname -r | cut -d- -f1) && echo $kernel_version
if [ `expr $kernel_version \> 4.19` -eq 1 ]thensudo modprobe -- nf_conntrackelsesudo modprobe -- nf_conntrack_ipv4
fi# 加载并查看模块
sudo bash /etc/modules-load.d/ipvs.conf && lsmod | grep -e ip_vs -e nf_conntrack# 查看当前ipvs的配置
sudo ipvsadm -L -n
http://www.lryc.cn/news/621853.html

相关文章:

  • k8s1.28.2集群部署istioctl的1.20.0版本(X86架构)
  • Mac(一)常用的快捷键整理
  • Mac Mysql 卸载
  • 18- 网络编程
  • Java ArrayList的介绍及用法
  • 单片机闪烁灯实验
  • HDFS数据倾斜导致MapReduce作业失败的排查与优化实践
  • 3分钟解锁网页“硬盘“能力:离线运行VSCode的新一代Web存储技术
  • 【数据分享】2022 年黑龙江省小麦、玉米和水稻幼苗影像数据集
  • 经典回顾:Hive执行原理、MapReduce执行流程、Spark执行流程
  • 系统思考:情绪内耗与思维模式
  • 学习笔记与效率提升指南:编程、记忆与面试备考
  • 腾讯云开发小程序工具箱使用心得
  • LeetCode Hot100:递归穿透值传递问题
  • 三天速通 Vue+Flask+SQLite 项目+阿里云轻量应用级服务器【宝塔面板】①
  • 【Unity3D实例-功能-拔枪】角色拔枪(一)动态创建武器
  • 非中文语音视频自动生成中文字幕的完整实现方案
  • 【HarmonyOS】鸿蒙应用迁移实战指南
  • STM32传感器模块编程实践(十四)DIY语音+满溢检测智能垃圾桶模型
  • 开源 Arkts 鸿蒙应用 开发(十五)自定义绘图控件--仪表盘
  • 17.3 删除购物车商品
  • 【科研绘图系列】R语言绘制多种饼图
  • 20day-人工智能-机器学习-线性回归
  • 超高车辆碰撞预警系统如何帮助提升城市立交隧道安全?
  • 【机器学习深度学习】生成式评测
  • 金融项目高可用分布式TCC-Transaction(开源框架)
  • 服装企业客户满意度调查:民安智库的市场调研赋能实践(北京市场调查)
  • 汽车行业 AI 视觉检测方案(二):守护车身密封质量
  • 指针类型:解引用与运算的关键
  • 电子电气架构 --- 探索软件定义汽车(SDV)的技术革新