20250707-2-第二章:Kubernetes 核心概念-K8s集群架构,生产部署K8s两_笔记
一、Kubernetes集群架构与组件
1. Master组件
- API Server:
- 集群统一入口,提供RESTful API接口服务
- 各组件协调者,所有对象资源的增删改查和监听操作都需经过API Server处理
- 处理后的数据会提交给Etcd存储
- 只有API Server能直接访问Etcd,减轻Etcd压力
- Controller Manager:
- 处理集群常规后台任务
- 采用控制器模式,一个资源对应一个控制器(如Deployment、Service控制器)
- 负责维护集群中各种资源对象的期望状态
- Scheduler:
- 根据调度算法为新创建的Pod选择合适Node节点
- 考虑因素包括资源需求、策略约束等
- 可以部署在任意节点,支持高可用部署
- Etcd:
- 分布式键值存储系统,保存集群所有状态数据
- 存储Pod、Service等对象信息
- 可组建高可用集群,需要定期备份
- 集群规模大时压力会增大(类似数据库压力)
2. Node组件
- kubelet:
- Master在Node节点上的Agent
- 管理本机运行容器的生命周期(创建容器、挂载数据卷等)
- 负责将Pod转换成一组容器
- 获取并上报容器和节点状态
- kube-proxy:
- 实现Pod网络代理
- 维护网络规则和四层负载均衡
- 保障Service的网络访问
- 容器引擎:
- 第三方组件(如docker、containerd、podman)
- 实际运行容器的引擎
- Kubernetes本身不包含容器运行时,需额外安装
3. 熟悉官方文档
- 学习重点:
- 概念部分:理解Kubernetes核心概念和架构
- 任务部分:掌握具体操作方法和实践技巧
- 这两部分是CKA认证考试的主要考点
- 使用技巧:
- 不适合新手按顺序学习,更适合针对性查询
- 遇到问题时直接搜索相关资源名称或关键字
- 文档会列出相关知识点供查阅
- 文档特点:
- 内容全面但缺乏循序渐进的学习路径
- 更适合作为参考手册而非系统教程
- 建议结合实践操作来加深理解
二、快速部署一个Kubernetes集群
1. 生产环境部署K8s的2种方式
1)kubeadm
- 工具特性:官方提供的集群部署工具,提供kubeadm init和kubeadm join命令
- 优点:
- 快速部署生产可用集群(2018年后成熟)
- 官方维护,稳定性高
- 适合初学者快速上手
- 缺点:
- 部署过程自动化程度高,不利于理解底层架构
- 故障排查时对部署细节掌握不足
- 参考文档:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
2)二进制
- 部署方式:手动下载二进制包部署每个组件
- 历史背景:2017-2018年前企业主流部署方式(占比80%-90%)
- 优点:
- 部署过程完全可控,配置透明
- 便于故障排查和问题定位
- 深度理解K8s架构和工作原理
- 缺点:
- 部署复杂度高(需手动"排雷")
- 对初学者不友好
- 资源地址:https://github.com/kubernetes/kubernetes/releases
3)第三方工具或者Web
- 实现原理:基于kubeadm或二进制方式的封装
- 典型形式:
- 脚本化部署工具
- Web管理系统(图形化操作)
- 优缺点:
- 优点:降低使用门槛,集成节点管理功能
- 缺点:工具层抽象导致问题排查困难
- 建议:初学者应优先掌握官方推荐方式
2. 服务器硬件配置推荐
- 实验环境:
- 单节点:2核CPU/2G内存(最低要求)
- 笔记本升级建议:优先考虑固态硬盘和内存扩容
- 测试环境:
- Master节点:2核/4G内存/20G硬盘
- Node节点:4核/8G内存/20G硬盘
- 生产环境:
- Master节点:8核/16G内存/100G硬盘(最低)
- Node节点:16核/64G内存/500G硬盘
- 性能参考:
- 32核/128G节点:约运行40个容器
- 16核/64G节点:约运行20个容器
- 特殊说明:实际容器数量取决于应用负载和资源配额配置
3. 使用kubeadm快速部署一个K8s集群
- 核心步骤:
- 安装Docker容器运行时
- Master节点初始化:kubeadm init
- Node节点加入:kubeadm join <MasterIP:Port>
- 部署CNI网络插件:kubectl apply -f calico.yaml
- 部署Web UI(Dashboard)
- 工具命令集:
- kubeadm upgrade:集群版本升级
- kubeadm token:管理join令牌
- kubeadm reset:清除集群配置
- kubeadm version:查看工具版本
- kubeadm alpha:预览新功能
1)部署Web UI
- 环境要求:
- 操作系统:CentOS 7.9_x64(minimal)
- Docker版本:19-ce
- Kubernetes版本:1.21
- 网络要求:
- 节点需能访问外网以下载镜像
- 离线环境需提前准备镜像包
- 资源获取:课程提供完整部署文档和配置文件
三、导航
1. 生产环境可部署Kubernetes集群的两种方式
- kubeadm方式:
- 功能:
- kubeadm init: 初始化Master节点
- kubeadm join: 将工作节点加入集群
- kubeadm upgrade: 升级K8s版本
- kubeadm token: 管理加入集群的令牌
- kubeadm reset: 卸载K8s安装
- kubeadm version: 打印版本信息
- kubeadm alpha: 预览新功能
- 特点: 官方推荐的快速部署工具,适合初学者
- 功能:
- 二进制包方式:
- 方法: 从GitHub下载二进制包,手动部署每个组件
- 特点: 灵活性高但复杂度高,适合高级用户
- 选择建议: 课程采用kubeadm方式搭建集群
2. 服务器要求
- 最小配置:
- CPU: 2核(实验环境足够使用)
- 内存: 2GB(实验环境最低要求)
- 硬盘: 20GB
- 网络要求:
- 外网访问: 强烈建议服务器能访问外网以下载镜像
- 离线方案: 若不能上网需提前下载镜像并导入节点
- 实验环境建议:
- 笔记本配置4核8G可虚拟2台2核2G节点
- 台式机配置i7/16G可虚拟3台2核4G节点
- 云主机三年约1000元/台性价比高
3. 软件环境
- 操作系统:
- 版本: CentOS 7.4-7.9 x64(推荐7.9 mini版)
- 验证命令: cat /etc/redhat-release
- Docker: 19-ce版本
- Kubernetes:
- 版本: 1.21(当前考试版本)
- 选择原因: 次新版更稳定,避免最新版的潜在bug
- 初始化配置:
4. 服务器规划
- 节点规划:
- 架构组成:
- 1个Master节点(包含API Server等控制平面组件)
- 2个Worker节点(运行实际工作负载)
- etcd集群自动部署
- 实验建议:
- Master节点建议2核4G配置
- Node节点可适当降低配置
- 所有节点需保持时间同步(ntpdate命令)
四、知识小结
知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
K8s集群架构 | Master组件(API Server/Controller Manager/Scheduler) + Node组件(kubelet/kube-proxy) + etcd存储 | etcd高可用配置 vs 单点部署 | ⭐⭐⭐ |
API Server | 集群统一入口、组件协调者、状态存储至etcd | 仅API Server可直接访问etcd | ⭐⭐ |
Controller Manager | 维护Deployment/Service等核心资源 | 后台任务处理机制 | ⭐⭐⭐ |
Scheduler | 为Pod选择运行节点 | 调度策略(资源需求/亲和性) | ⭐⭐ |
kubelet | Node节点Agent,管理容器生命周期 | 与容器引擎(Docker/containerd)交互 | ⭐⭐ |
部署方式对比 | kubeadm(快速部署) vs 二进制(深度可控) | 生产环境推荐kubeadm高可用 | ⭐⭐⭐⭐ |
硬件配置 | 测试环境:2C2G;生产环境:Master 8C16G+100G,Node 16C64G+500G | 资源配额对Pod数量的影响 | ⭐⭐ |
kubeadm功能 | 初始化集群、节点加入、版本升级、Token管理 | kubeadm reset 清理集群 | ⭐⭐⭐ |
实验环境准备 | CentOS 7.4-7.9,K8s v1.21,Docker最新版 | 外网访问对镜像拉取的关键性 | ⭐ |
学习建议 | 80%实操+20%理论,官方文档“概念与任务”重点查阅 | CKA考题来源 | ⭐⭐ |
维度 | kubeadm部署 | 二进制部署 | |
---------- | ------------- | ------------ | |
复杂度 | 低(自动化) | 高(手动配置) | |
适用场景 | 快速搭建/新手友好 | 深度定制/故障排查 | |
生产可用性 | ✅ 支持 | ✅ 更灵活 | |
学习价值 | 侧重使用 | 深入架构理解 |