0 Kubernetes 介绍
0.1 应用部署演进
- 传统物理机部署 多应用直接跑在物理服务器;没有资源隔离;单个应用抢占 CPU / 内存,挤压其他业务;硬件资源利用率低,维护成本高。
- 虚拟化 VM 部署 一台物理机上运行多台完整虚拟机;每台虚拟机拥有独立完整操作系统;资源强隔离;但是虚拟机操作系统开销大,启动慢,资源损耗高。
- 容器部署时代 容器共享宿主机内核,拥有独立文件系统、CPU、内存、进程空间;轻量级,秒级启动;镜像一次构建到处运行,开发测试生产环境保持一致。
容器优势:快速部署、CI/CD、开发运维分离、环境一致性、可移植、微服务适配、资源隔离、资源利用率高。
0.2 Kubernetes 前世今生
K8s 是Kubernetes缩写,去掉中间 8 个字母 ubernete;源自 Google 内部 Borg/Omega 容器调度系统,2014 开源。
- 定位:开源容器编排平台,自动化部署、扩缩容、管理容器化应用。
0.3 K8s 核心特性
- 自动化上线与回滚:分批次更新应用,异常自动回滚
- 服务发现与负载均衡:Pod 分配独立 IP,Service 实现负载均衡
- 存储编排:自动挂载本地 / NFS / 云存储
- 配置与密钥管理 Secret:更新配置无需重建镜像,敏感信息加密保存
- 自动调度装箱:按照资源需求调度 Pod,提升硬件利用率
- 批处理任务:支持一次性任务、定时任务
- 自我修复:容器崩溃自动重启、异常 Pod 重建
- 水平扩缩容:命令 / 监控指标自动增减实例数量
- IPv4/IPv6 双栈;高可扩展架构。
0.4 Kubernetes 不是什么
- 不是完整 PaaS 平台,不限制应用语言、框架;
- 不内置数据库、消息队列等中间件,但可以部署在 K8s 之上;
- 不会编译源代码,不提供完整 CI 流水线;
- 不强制指定日志监控告警组件;
- 不做底层机器操作系统维护。
0.5 K8s 集群架构
集群分为控制平面 Master(Control‑Plane) 和 工作节点 Worker Node。
控制平面组件(Master)
- kube‑apiserver:集群唯一入口,REST API,所有组件 / 客户端都和 apiserver 交互;鉴权、校验。
- etcd:分布式键值存储,保存集群全部配置、元数据,集群数据库。
- kube‑scheduler:调度器,按照策略把 Pod 分配到合适 worker 节点。
- kube‑controller‑manager:控制器管理器,维持集群期望状态,故障检测、副本管理。
Worker 工作节点组件(所有节点都运行)
- kubelet:节点代理;接收 Pod 配置,管理本节点 Pod 生命周期,管理 CNI 网络、CSI 存储。
- kube‑proxy:网络代理,维护 iptables/ipvs 规则,实现 Service 服务发现、集群内部负载均衡。
- 容器运行时 containerd/docker:真正拉取镜像、运行容器。
1 K8s 多种安装方式对比
表格
| 安装方式 | 特点 | 难度 | 适用场景 |
|---|---|---|---|
| kubeadm | 官方标准,无魔改 | 中等 | 考试、自建标准生产集群⭐⭐⭐⭐⭐ |
| 二进制手工部署 | 完全底层可控 | 极高 | 原理研究教学 |
| Sealos/KubeKey | 一键自动化部署 | 低 | 快速搭建测试生产 |
| k3s/k0s | 轻量裁剪版 | 低 | 边缘、低配机器开发测试 |
| minikube/kind/k3d | 单机模拟集群 | 极低 | 本地学习实验 |
| 云厂商 ACK/EKS | 托管 master 免运维 | 低 | 云上生产,成本高 |
| RKE/OpenShift | 企业发行版 | 中高 | 大型企业商用 |
学习 + 未来上生产优先选择 kubeadm。
2 集群节点环境准备(Ubuntu24.04)
2.1 系统基础配置
-
修改 apt 软件源为国内镜像源。
-
设置静态 IP,使用netplan yaml 配置 ,只能空格,禁止 Tab;
netplan apply生效。 -
/etc/hosts主机名解析,集群所有节点互相解析主机名。 -
关闭 swap,K8s 要求禁用 swap 分区
swapoff -a
sed -i '/swap/d' /etc/fstab -
时间同步 chrony。
-
ssh 优化:关闭 UseDNS,关闭 StrictHostKeyChecking,配置免密 ssh。
2.2 内核模块与内核参数
-
加载内核模块:
overlay、br_netfilter;ipvs 模块 (ip_vs、ip_vs_rr、ip_vs_wrr、ip_vs_lc、ip_vs_sh、nf_conntrack),写入/etc/modules‑load.d/k8s‑net.conf开机自动加载。 -
sysctl 内核参数
/etc/sysctl.d/k8s.confnet.bridge.bridge‑nf‑call‑iptables=1
net.bridge.bridge‑nf‑call‑ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
执行sysctl -p /etc/sysctl.d/k8s.conf生效。
2.3 安装 containerd 容器运行时
- 安装
containerd.io cri‑tools - 生成默认配置:
containerd config default > /etc/containerd/config.toml - 修改配置:
SystemdCgroup = true使用 systemd cgroup 驱动;- 修改 pause 镜像版本;
- 配置镜像 mirrors 镜像加速器(docker.io、registry.k8s.io 私有 hub 仓库)
- 重启
systemctl restart containerd - crictl 配置 runtime 端点指向 containerd。
- nerdctl:containerd 的 docker 兼容客户端,需要配置镜像加速,必须设置环境变量
CONTAINERD_NAMESPACE=k8s.io。
2.4 安装 kubernetes 组件
安装kubeadm kubelet kubectl指定版本 v1.30.2;设置 kubelet 开机自启。
kubelet 刚安装状态 activating,集群初始化完成才会 active。
2.5 配置命令补全
配置 bash_completion.d:kubectl、kubeadm、crictl、nerdctl命令自动补全。
3 kubeadm 初始化集群
3.1 master 控制平面节点操作
-
预拉取镜像
kubeadm config images pull --kubernetes-version=v1.30.2
-
kubeadm init 初始化控制平面
kubeadm init --kubernetes-version=v1.30.2 --pod‑network‑cidr=10.224.0.0/16 --image‑repository=镜像仓库
主要参数:
--kubernetes‑version指定 k8s 版本--pod‑network‑cidrPod 网络网段,要和 Calico 网络插件匹配--image‑repository指定镜像仓库地址,国内加速。
-
配置 kubectl 访问凭据
mkdir -p HOME/.kube sudo cp -i /etc/kubernetes/admin.conf HOME/.kube/config
sudo chown (id -u):(id -g) $HOME/.kube/config
也可以使用环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf。
- 部署网络插件 Calico
- 下载 calico.yaml,修改
CALICO_IPV4POOL_CIDR和 pod‑network‑cidr 保持一致10.224.0.0/16 - 所有节点提前下载 calico 镜像
kubectl apply -f calico.yaml部署- 等待 calico pod 全部 Running,节点状态变为 Ready。
3.2 worker 工作节点加入集群
-
在 worker 节点执行 join 命令加入集群
kubeadm join 10.1.8.30:6443 --token xxx --discovery‑token‑ca‑cert sha256:xxx
-
token 过期,master 重新生成 join 命令:
kubeadm token create --print‑join‑command
3.3 集群验证命令
kubectl cluster-info #查看集群信息
kubectl version #客户端服务端版本
kubectl get nodes #查看所有节点状态,状态Ready代表正常
kubectl get pods -A #查看所有命名空间全部Pod状态,全部Running
节点 Ready 条件:kubelet 正常运行、swap 关闭、CNI 网络插件正常。
4 Node 节点管理(节点查看、维护、删除、重置、集群销毁重建)
4.1 查看节点
kubectl get nodes #查看节点简要信息
kubectl describe node worker31.laoma.cloud #查看节点详细信息
4.2 下线维护节点(drain 驱逐 Pod)
节点要停机维护,驱逐节点上所有 Pod,设置节点不可调度 SchedulingDisabled
#--ignore‑daemonsets忽略DaemonSet类型pod(如calico‑node、kube‑proxy)
kubectl drain worker31.laoma.cloud --ignore‑daemonsets
drain 执行后,节点状态 Ready,SchedulingDisabled,新 Pod 不会调度到此节点。
4.3 删除集群内节点对象
kubectl delete node worker31.laoma.cloud
4.4 在被删除的节点本机执行 kubeadm reset 重置
在待重置节点本机执行,清理本机 k8s 所有组件数据
kubeadm reset -f
清理内容:etcd 数据目录、kubelet 目录、证书、kubeconfig 配置文件。
reset不会清理 CNI 配置 /etc/cni/net.d、iptables/ipvs 规则,需要手动清理。
4.5 完整删除整个集群流程
- 所有 worker 节点执行 drain 驱逐 Pod,kubectl delete node 删除节点对象。
- worker 本机执行
kubeadm reset -f重置。 - master 控制平面节点执行 kubectl delete node 删除 master 节点对象,本机
kubeadm reset -f,删除.kube/config。
4.6 重建集群
- master 节点:
kubeadm init初始化集群,拷贝 admin.conf 凭据。 - 部署 calico 网络插件。
- worker 节点执行 kubeadm join 重新加入集群。
思维导图文本
