【kubernetes - 1.28版本】-1 kubernetes基础

文章目录

  • [Kubernetes 基础](#Kubernetes 基础)
    • 一、云服务模式
    • [二、K8s 核心功能](#二、K8s 核心功能)
    • 三、集群架构与组件
      • [工作流程(list-watch 机制)](#工作流程(list-watch 机制))
    • 四、集群部署前置环境
      • [1. 主机规划](#1. 主机规划)
      • [2. 配置主机名](#2. 配置主机名)
      • [3. 配置主机名解析](#3. 配置主机名解析)
      • [4. 安装环境包](#4. 安装环境包)
      • [5. 关闭防火墙与 SELinux](#5. 关闭防火墙与 SELinux)
      • [6. 关闭 Swap](#6. 关闭 Swap)
      • [7. 关闭 NetworkManager(可选)](#7. 关闭 NetworkManager(可选))
      • [8. 调整内核参数](#8. 调整内核参数)
      • [9. 升级内核(可选)](#9. 升级内核(可选))
      • [10. 调整资源限制(可选)](#10. 调整资源限制(可选))
      • [11. 时间同步](#11. 时间同步)
      • [12. 加载 IPVS 内核模块](#12. 加载 IPVS 内核模块)
      • [13. 重启服务并验证](#13. 重启服务并验证)

Kubernetes 基础

一、云服务模式

按抽象层次从高到低,常见的云服务模式如下:

模式 全称 说明 代表技术
SaaS 软件即服务 直接提供可用的软件 ---
PaaS 平台即服务 提供数据库、容器、大数据(Hadoop、Spark)等平台能力 Kubernetes
IaaS 基础设施即服务 提供虚拟化、存储、网络等基础资源 OpenStack
MaaS 模型即服务 直接提供 AI 模型能力 ---
FaaS 函数即服务 即无服务器架构(Serverless),以函数为单位运行代码 ---

官方文档:https://kubernetes.io/zh-cn/docs/tasks/

二、K8s 核心功能

自我修复

在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。

弹性伸缩

使用命令、UI 或者基于 CPU 使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。

自动部署和回滚

K8s 采用滚动更新策略更新应用,一次更新一个 Pod,而不是同时删除所有 Pod。如果更新过程中出现问题,将回滚更改,确保升级不影响业务。

服务发现和负载均衡

K8s 为多个容器提供一个统一访问入口(内部 IP 地址和一个 DNS 名称),并且负载均衡关联的所有容器,使得用户无需考虑容器 IP 问题。

机密和配置管理

管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在 K8s 中,方便应用程序使用。

存储编排

挂载外部存储系统,无论是来自本地存储、公有云(如 AWS),还是网络存储(如 NFS、GlusterFS、Ceph),都作为集群资源的一部分使用,极大提高存储使用灵活性。

批处理

提供一次性任务、定时任务,满足批量数据处理和分析的场景。

三、集群架构与组件

工作流程(list-watch 机制)

1. 提交创建请求

用户通过客户端向 API Server 发送请求,API Server 接收请求后创建一批 Pod,并将 Pod 数据写入 etcd(只有 API Server 具备读写 etcd 的权限)。

2. 控制器与调度

  • Controller Manager 通过 API Server 读取 etcd 中的数据,按预设模板(实例数量、生命周期等)创建 Pod。
  • Controller Manager 再通过 API Server 读取 etcd 中的信息,交由 Scheduler 为新创建的 Pod 选择最合适的 Node 节点并完成调度。
  • 调度分为两个阶段:
    • 预选(Predicate):例如 Pod 需要 2C4G 资源,Scheduler 会在所有 Node 中筛选出资源满足要求的节点。各 Node 的剩余资源由 kubelet 上报给 API Server,并存储在 etcd 中。
    • 优选(Priority):在通过预选的节点中,再根据 CPU 负载、内存剩余量等因素打分,选出最合适的节点。

3. kubelet 执行创建

  • Scheduler 通过 API Server 触发 kubelet,由 kubelet 按调度结果在对应 Node 上执行 Pod 创建操作。
  • kubelet 会监视节点状态,定时向 API Server 汇报节点上运行的服务状态,并存储到 etcd 中。
  • 在此期间,Controller Manager 会根据 K8s 资源清单(manifest)中声明的副本数,保证 Pod 的实际副本数与期望一致。

4. 网络代理

每个 Node 上都运行 kube-proxy,负责 Pod 的网络代理。它是 Kubernetes Service 资源的载体,负责维护网络规则和四层负载均衡工作:

  • 在任一节点上访问 Service 的虚拟 IP,都能访问到后端 Pod,即提供 ClusterIP 访问入口。
  • 所有节点上的 kube-proxy 进程通过 API Server 查询并监听 Service 及其对应的 Endpoints 信息,建立软件方式的负载均衡器,实现 Service 到后端 Pod 的流量转发。

四、集群部署前置环境

以下操作如无特殊说明,均需在 master、node1、node2 三台节点上执行。

1. 主机规划

CPU 内存 硬盘 IP 主机名 软件
2 核 4G 200G 192.168.100.128 master docker
4 核 6G 400G 192.168.100.129 node1 docker
4 核 6G 400G 192.168.100.136 node2 docker

2. 配置主机名

在三台主机中分别执行对应命令:

bash 复制代码
# master 节点
hostnamectl set-hostname master

# node1 节点
hostnamectl set-hostname node1

# node2 节点
hostnamectl set-hostname node2

3. 配置主机名解析

所有节点都需配置 /etc/hosts,配置完成后互相 ping 测试:

bash 复制代码
vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.128 master
192.168.100.129 node1
192.168.100.136 node2

4. 安装环境包

bash 复制代码
yum -y install vim lrzsz unzip wget net-tools tree bash-completion conntrack \
  ntpdate ntp ipvsadm ipset iptables curl sysstat libseccomp git psmisc telnet \
  gcc gcc-c++ make
类别 软件包 核心功能
文件操作 vim、lrzsz、unzip 编辑 / 上传下载 / 解压 ZIP
网络管理 net-tools、ipvsadm 网络配置 / IPVS 负载均衡
系统监控 sysstat、psmisc 性能监控 / 进程管理
开发编译 gcc、make 代码编译 / 自动化构建
安全防护 iptables、libseccomp 防火墙 / 容器系统调用限制

5. 关闭防火墙与 SELinux

bash 复制代码
systemctl disable firewalld --now
sed -i 's/enforcing/disabled/g' /etc/selinux/config
setenforce 0

6. 关闭 Swap

启用 Swap 会对系统性能产生非常负面的影响,因此 Kubernetes 要求每个节点都禁用 Swap:

bash 复制代码
swapoff -a                                  # 立即关闭 Swap
sed -i '/swap/s/^/#/' /etc/fstab            # 注释 /etc/fstab 中的 swap 行,防止开机自动挂载

7. 关闭 NetworkManager(可选)

bash 复制代码
systemctl stop NetworkManager
systemctl disable NetworkManager

8. 调整内核参数

bash 复制代码
cat > /etc/sysctl.d/kubernetes.conf <<EOF
# 开启 Linux 内核的网络桥接功能,同时启用 iptables 和 ip6tables 的网络包过滤功能
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
# 开启路由转发,转发 IPv4 数据包
net.ipv4.ip_forward=1
# 尽可能避免使用交换分区,提升 k8s 性能
vm.swappiness=0
# 不检查物理内存是否够用
vm.overcommit_memory=1
EOF

配置立即生效:

bash 复制代码
sysctl --system

9. 升级内核(可选)

bash 复制代码
yum update -y kernel && reboot
部分 含义
yum update 升级指定软件包到仓库中的最新版本(此处只指定 kernel,并非全系统更新)
-y 自动回答 yes,全程无需手动确认
kernel 仅升级 Linux 内核包,不会更新其他系统软件
&& 前一条命令执行成功(返回 0)才执行后面的命令;升级失败时不会重启
reboot 重启服务器,新内核必须重启后才会加载生效

补充说明:

  • 新内核 rpm 包会安装到 /boot 并自动添加 GRUB 启动菜单,旧内核默认保留,重启时可在 GRUB 中选择旧内核启动。
  • K8s 部署通常要求较高的内核版本:CentOS 7 默认内核为 3.10,部分功能(IPVS、Overlay 网络、容器特性)需要更新内核。
  • 建议三台节点内核版本保持一致。
  • ⚠️ 生产环境谨慎执行:内核升级存在小概率驱动 / 模块不兼容,导致重启后无法开机,建议先做快照备份。
  • 注意区分:
    • yum update -y kernel:仅升级内核
    • yum update -y:升级系统全部软件包(风险更大,生产环境通常禁止随意全量更新)

重启后验证内核版本:

bash 复制代码
uname -r

10. 调整资源限制(可选)

bash 复制代码
# 设置当前会话中一个进程可以打开的最大文件句柄数(临时生效)
ulimit -SHn 65535

# Linux 默认情况下一个进程可打开的最大文件句柄数为 1024
cat >> /etc/security/limits.conf <<EOF
# 为所有用户设置文件描述符软限制
* soft nofile 655360
# 为所有用户设置文件描述符硬限制
* hard nofile 131072
# 为所有用户设置进程数软限制
* soft nproc 655350
# 为所有用户设置进程数硬限制
* hard nproc 655350
# 为所有用户设置内存锁定软限制为无限制
* soft memlock unlimited
# 为所有用户设置内存锁定硬限制为无限制
* hard memlock unlimited
EOF

说明:ulimit 命令只是临时生效,写入 limits.conf 后需要重新登录会话才会永久生效。

11. 时间同步

bash 复制代码
yum -y install chrony
systemctl restart chronyd
chronyc sources -v   # 列出 Chrony 当前配置和使用的所有时间源(NTP 服务器)及同步状态
hwclock -s           # 将硬件时钟的时间同步到系统时钟

12. 加载 IPVS 内核模块

bash 复制代码
cat >> /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
overlay
br_netfilter
EOF

各模块功能说明:

类别 模块 功能
核心调度 ip_vs IPVS 负载均衡基础模块
核心调度 ip_vs_rr 轮询(Round Robin)调度算法
核心调度 ip_vs_wrr 加权轮询(Weighted Round Robin)调度算法
核心调度 ip_vs_sh 源地址哈希(Source Hashing)调度算法
连接跟踪与过滤 nf_conntrack_ipv4 IPv4 连接跟踪(NAT / 防火墙依赖,内核 ≥ 4.19 时已合并至 nf_conntrack)
连接跟踪与过滤 ip_tables iptables 基础框架
连接跟踪与过滤 ipt_REJECT 实现数据包拒绝(REJECT 动作)
IP 集合管理 ip_set IP 地址集合管理
IP 集合管理 xt_set、ipt_set iptables 与 IP 集合的扩展匹配
隧道与桥接 ipip IP-over-IP 隧道协议
隧道与桥接 overlay Overlay 网络支持(如 Docker 跨主机网络)
隧道与桥接 br_netfilter 桥接网络流量过滤(需配合 net.bridge.bridge-nf-call-iptables=1 参数)
反向路径过滤 ipt_rpfilter 反向路径验证(防 IP 欺骗)

典型应用场景:

  • Kubernetes 节点初始化:IPVS 模式下的 kube-proxy 依赖这些模块
  • 负载均衡服务器:启用 IPVS 调度算法
  • 容器网络配置:Overlay 和桥接模块支持

13. 重启服务并验证

写入文件后,也可执行 modprobe --all /etc/modules-load.d/ipvs.conf 手动加载所有模块。

bash 复制代码
systemctl restart systemd-modules-load

systemd-modules-load 会读取 /etc/modules-load.d/ 目录下的配置,自动加载 ipvs.conf 中定义的所有模块。

验证模块是否成功载入内核:

bash 复制代码
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
相关推荐
时间售卖铺1 小时前
MySQL存储过程流程控制全解析
运维·数据库·mysql·云原生
Initialize-le1 小时前
PVC 一直 Pending?五步排查存储绑定
云原生·容器·kubernetes
9624562 小时前
一次 Kubernetes 临时存储压力引发的小程序授权雪崩:从 Pod 驱逐到定时任务漏执行
容器·小程序·kubernetes
SatanII2 小时前
Kubernetes 网络
网络·容器·kubernetes
知已难寻11 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
阿里云云原生15 小时前
车企数据隐私保护必修课:如何用 SLS mask 守住日志中的敏感信息
云原生
阿里云云原生16 小时前
切换模型会损失缓存,智能路由还省钱吗?
云原生
闲云野鹤在人间16 小时前
Kubernetes Service 与 kube-proxy 详解
云原生·容器·kubernetes
我不会起名字32217 小时前
节点 NotReady:kubelet 与容器运行时的 4 步排查
云原生·kubernetes·kubelet·排查