阶段五:Kubernetes 容器编排之企业级集群部署
为什么需要Kubernetes容器编排
传统部署存在的问题
① 环境一致性差
- 问题表现:开发环境、测试环境和生产环境可能存在不同的操作系统版本、库依赖、配置文件等
- 影响:程序在测试环境运行正常,但上线生产环境容易出错,排查问题成本高
② 扩展性差
- 问题表现:应用部署在单台或少量服务器上,需要增加容量时只能手动加机器或升级硬件
- 影响:应对突发流量困难,无法实现弹性扩容,成本高且响应慢
③ 资源利用率低
- 问题表现:每个应用独占一台机器或虚拟机,CPU/内存可能无法充分利用
- 影响:硬件资源浪费,服务器闲置率高
④ 部署与升级复杂
- 问题表现:每次发布新版本需要人工拷贝文件、修改配置、重启服务
- 影响:容易出错,频繁部署耗时,升级频率受限
⑤ 运维成本高
- 问题表现:需要手动管理服务器、监控进程、处理日志、保证备份
- 影响:运维人员压力大,难以保证高可用性
⑥ 故障恢复能力弱
- 问题表现:单台服务器故障可能导致服务中断
- 影响:难以实现高可用和快速恢复,影响业务连续性
⑦ 依赖关系复杂
- 问题表现:不同服务之间的依赖手动管理(如数据库版本、第三方库)
- 影响:升级或迁移服务风险大,容易出现“依赖地狱”
总结来说,传统部署灵活性低、运维复杂、扩展困难、可靠性差,很难满足现代业务对高可用、弹性和快速迭代的要求。
Kubernetes 容器编排部署优势
① 自动化部署和发布
- 自动调度容器到合适节点
- 支持滚动升级、回滚,减少人工干预
② 弹性伸缩
- 根据 CPU/内存、请求量等指标自动扩容或缩容
- 解决传统部署扩展困难的问题
③ 高可用性
- 自动检测容器和节点状态,失败容器自动重启
- 多副本部署到不同的节点保证服务不中断
④ 资源利用率优化
- 集群统一调度,多个容器共享节点资源
- 避免单应用独占硬件,提高服务器利用率
⑤ 服务发现和负载均衡
- 内置 DNS 和服务发现机制
- 自动分发请求到健康的容器实例
⑥ 配置和密钥管理
- ConfigMap 和 Secret 管理应用配置和敏感信息
- 避免手动修改配置带来的风险
⑦ 多环境一致性
- 容器镜像保证开发、测试、生产环境一致
- 减少环境差异引发的问题
⑧ 依赖管理和微服务编排
- 支持声明式描述应用依赖
- 多服务协同部署和滚动更新
⑨ 存储管理(Persistent Storage)
- 支持将持久化存储挂载到 Pod(例如 PV/PVC)
- 支持多种存储后端(本地磁盘、网络存储、云存储)
- 容器重启或迁移时数据保持不丢失
Kubernetes 概述
什么是 Kubernetes
- Kubernetes(简称 K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。
它最初由 Google 开发,并由 Cloud Native Computing Foundation(CNCF)维护
核心功能
- 容器调度:自动将容器部署到最合适的节点上
- 自动伸缩:根据负载自动扩容或缩容容器实例
- 服务发现与负载均衡:内置服务发现机制和请求分发
- 自愈能力:检测失败容器,自动重启或替换
- 滚动更新与回滚:支持平滑升级和快速回滚
- 配置与密钥管理:通过 ConfigMap 和 Secret 管理应用配置
- 存储管理:支持持久化存储(PV/PVC),挂载到 Pod,容器重启或迁移时数据保持不丢失,支持多种存储后端(本地、网络、云存储)
Kubernetes 架构图
① 架构图

Kubernetes 核心组件(死记硬背必考题)
① 控制平面组件(Control Plane)
控制整个集群的大脑,负责调度、管理和协调。
- API Server
- 集群的入口,所有操作(kubectl、Dashboard、程序调用)都要通过它
- 提供 REST API,负责认证、鉴权和数据校验
- etcd
- 分布式键值存储,用来保存集群所有配置和状态数据
- 相当于 K8s 的“数据库”
- Controller Manager
- 运行各种控制器,确保集群状态与期望状态一致
- 控制器类型
<sheet sheet-id="2QMXDv" token="S98xsby2Hh77HktkzdQcn2jzn2c"></sheet>
- Scheduler
- 调度器,负责把 Pod 分配到合适的 Node
- 考虑资源使用率、亲和性/反亲和性、污点容忍等规则
② 工作节点组件(Node Components)
运行实际应用容器的地方。
- kubelet
- 每个 Node 上的代理,负责与 API Server 通信
- 接收调度下来的 Pod 任务,并保证容器按要求运行
- kube-proxy
- 负责 Node 上的网络代理
- 实现 Service 的负载均衡和网络转发
- 容器运行时(Container Runtime)
- 实际运行容器的软件,比如 Docker、containerd、CRI-O
- K8s 通过 CRI(Container Runtime Interface)与它交互
③ 其他常见附加组件(Add-ons)
增强集群功能,通常在生产环境必备。
- CNI (容器网络接口) 插件: 必需组件,用于为 Pod 分配 IP 地址并实现集群网络通信。
Calico: 提供网络和网络策略(Network Policy),性能强大,支持 BGP。
Flannel: 简单易用的 overlay 网络,提供最基本的网络功能。
Cilium: 基于 eBPF,提供高性能网络、可观测性和安全策略。
- DNS(CoreDNS):必需组件,为 Pod 和 Service 提供域名解析
- Dashboard:K8s 集群的可视化 Web 界面
- Metrics Server:资源指标采集,用于自动伸缩(HPA)
- Ingress Controller:提供 HTTP/HTTPS 访问入口
Kubernetes 集群安装部署
控制面板单MASTER集群(测试环境)
硬件规划
| IP地址 | 角色 | 用途 |
|---|---|---|
| 192.168.88.170 | master01(2核2G) | 控制平面 |
| 192.168.88.171 | worker01(2核2G) | 工作节点 |
| 192.168.88.172 | worker02(2核2G) | 工作节点 |
所有主机操作系统环境准备
#所有节点都要设置主机名
hostnamectl set-hostname master01
su
# 打开主机名文件,把master01、worker01、work02添加上
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.88.170 master01
192.168.88.171 worker01
192.168.88.172 worker02
192.168.88.170 lb.heimak8s.com
# 永久关闭 SELinux,需要编辑配置文件
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 停止 firewalld 服务,禁止 firewalld 服务开机自启
systemctl stop firewalld
systemctl disable firewalld
# 安装 iptables 和 iptables-services,清空 iptables 规则并保存
dnf install iptables iptables-services -y
iptables -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# 保存规则
iptables-save
# 所有节点时间同步
dnf -y install chrony
systemctl enable chronyd --now
# 加载 br_netfilter 和 overlay 内核模块
modprobe br_netfilter
modprobe overlay
cat <<EOF | tee /etc/sysctl.d/k8s.conf > /dev/null
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
echo "br_netfilter" | tee /etc/modules-load.d/k8s.conf
# 生效命令
sysctl --system
# 临时关闭交换区(非常重要)
swapoff -a
#永久关闭交换区
sed -i 's/.*swap.*/#&/g' /etc/fstab
reboot命令作用:
- 这条命令用于打开并编辑文件。进入编辑器后需要保存退出,修改才会写回文件。
- 这条命令用于批量替换文件内容。这里常见用途是把默认镜像地址、配置值或路径替换成当前环境可用的值。
- 使用 systemctl 对
firewalld服务执行stop操作:启动、停止、重启、查看状态或设置开机自启。
- 使用 systemctl 对
firewalld服务执行disable操作:启动、停止、重启、查看状态或设置开机自启。
- 使用
dnf包管理器执行install操作,对软件包进行安装、更新、删除或查询。
- 使用
dnf包管理器执行-y操作,对软件包进行安装、更新、删除或查询。
- 使用 systemctl 对
chronyd服务执行enable操作:启动、停止、重启、查看状态或设置开机自启。
- 读取并输出
<<EOF、|、tee、/etc/sysctl.d/k8s.conf、>、/dev/null的内容;使用>重定向时,输出会写入目标文件。
- 把命令后的文本或变量展开结果写到标准输出;配合
>或>>时会改为写入文件,前者覆盖、后者追加。
执行结果:
- 编辑器会打开目标文件;保存并退出后文件内容才会改变。
- 成功后应以该命令实际输出、生成的文件或目标服务状态为准;失败时先阅读终端报错,再核对命令参数和运行环境。
- 成功后会对
firewalld服务执行stop操作;restart会造成短暂中断,enable影响开机自启。
- 成功后会对
firewalld服务执行disable操作;restart会造成短暂中断,enable影响开机自启。
- 成功后软件包会按指定动作完成安装、更新、删除或查询;失败时检查仓库、网络和权限。
- 成功后会对
chronyd服务执行enable操作;restart会造成短暂中断,enable影响开机自启。
- 成功后会输出指定文件内容;文件不存在或权限不足时会报错。
- 成功后文本或变量展开结果会输出到终端;带重定向时会写入目标文件。
关键参数:
注意事项:
metadata:
spec:
containers:
ports:
volumeMounts:
volumes:
hostPath:
#配置nginx四层负载均衡nginx.conf
}
}
}
}
#重启kubelet服务
查看6443端口是否处在监听的状态注意事项:
**注意事项:**
**镜像拉取失败**
**容器异常退出**
https://kuboard.cn/install/v3/install-built-in.html#%E9%83%A8%E7%BD%B2%E8%AE%A1%E5%88%92
#在master01节点上面安装docker-ce
#安装完进行验证是否安装成功注意事项:
默认用户名:admin,密码:Kuboard123



从master主控节点上面复制集群的连接信息
**注意事项:**

可以切换成中文,查看文档。

准备一套K8s集群,可以是一主多从,也可以是三主多从。这里,我们以一主二从为例,在上面安装Rancher,实现集群的后台管理。
| IP地址 | 角色 | 用途 |
|---|---|---|
| 192.168.88.135 | master | 控制平面 |
| 192.168.88.136 | worker01 | 工作节点 |
| 192.168.88.137 | worker02 | 工作节点 |
IP地址、主机名不需要完全照抄,改成自己的即可。
注意事项:
**注意事项:**
metadata:
labels:
---
metadata:
labels:
---
metadata:
labels:
---
metadata:
labels:
rules:
resources:
verbs:
resources:
verbs:
resources:
verbs:
resources:
verbs:
resources:
verbs:
resources:
verbs:
resourceNames:
resources:
verbs:
resources:
verbs:
resources:
verbs:
resources:
verbs:
---
metadata:
labels:
rules:
resources:
verbs:
---
metadata:
labels:
rules:
resources:
verbs:
resources:
verbs:
resources:
verbs:
resources:
verbs:
resources:
verbs:
resources:
verbs:
resources:
verbs:
resources:
verbs:
resources:
verbs:
---
metadata:
labels:
rules:
resources:
verbs:
---
metadata:
labels:
roleRef:
subjects:
---
metadata:
labels:
roleRef:
subjects:
---
metadata:
labels:
roleRef:
subjects:
---
metadata:
labels:
roleRef:
subjects:
---
metadata:
labels:
---
metadata:
labels:
spec:
ipFamilies:
ports:
selector:
---
metadata:
labels:
spec:
ports:
selector:
---
metadata:
labels:
spec:
selector:
matchLabels:
strategy:
rollingUpdate:
template:
metadata:
labels:
spec:
containers:
env:
valueFrom:
fieldRef:
valueFrom:
fieldRef:
lifecycle:
preStop:
exec:
command:
livenessProbe:
httpGet:
ports:
readinessProbe:
httpGet:
resources:
requests:
securityContext:
capabilities:
add:
drop:
seccompProfile:
volumeMounts:
nodeSelector:
volumes:
secret:
---
metadata:
labels:
spec:
template:
metadata:
labels:
spec:
containers:
env:
valueFrom:
fieldRef:
securityContext:
capabilities:
drop:
seccompProfile:
nodeSelector:
---
metadata:
labels:
spec:
template:
metadata:
labels:
spec:
containers:
env:
valueFrom:
fieldRef:
securityContext:
capabilities:
drop:
seccompProfile:
nodeSelector:
---
metadata:
labels:
spec:
---
metadata:
labels:
webhooks:
clientConfig:
service:
rules:
apiVersions:
operations:
resources:注意事项:
**注意事项:**注意事项:
**注意事项:**注意事项:
**注意事项:**注意事项:
这里需要手动加上。
**注意事项:**
注意事项:
**注意事项:**注意事项:
**注意事项:**






点击会自动拷贝,保存生成的添加命令
说明:注意事项:
当访问域名时,提示 解决办法:把服务端的证书机构,添加到本地客户端的信任列表里。
**注意事项:**
注意事项:
**注意事项:**注意事项:
分发完成,更新客户端本地的信任列表库
**注意事项:**

验证测试注意事项:
**注意事项:**
注意事项:
**注意事项:**
注意事项:

回到页面上,集群也被纳管进来了


Rancher部署,涉及了 Helm、Ingress、CoreDNS、自签证书 等知识点。 其中,关于自签证书,不作为本节的重点,只需要了解即可。后面安全专题会进一步介绍。
本文由飞书云文档同步生成。涉及命令、SQL、配置示例时,请以飞书源文档和实际环境执行结果为准。