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

20250707-4-Kubernetes 集群部署、配置和验证-kubeconfig_笔记

一、Kubernetes将弃用Docker

1. Docker被弃用的原因



  • 性能问题: Docker内部调用链复杂,多层封装导致性能降低、故障率提升且不易排查
  • 安全隐患: Docker会在宿主机创建网络规则和存储卷,增加了系统安全风险
  • 功能冗余: 在Kubernetes环境中,Docker的镜像管理、网络规则等功能很少被使用,反而成为系统负担
  • 架构演变: Kubernetes通过CRI(容器运行时接口)标准化了容器运行时交互方式,Docker的架构不再是最优选择
  • 技术背景: Kubernetes早期通过dockershim组件与Docker Engine通信,但这种间接调用方式效率较低
  • 标准接口: CRI的出现使Kubernetes可以支持更多容器运行时,不再局限于Docker
2. Docker弃用时间

  • 版本计划: 预计在Kubernetes 1.23版本(当前为1.22)将移除对Docker的直接支持
  • 官方态度: 实际是"移除支持"而非"弃用",国内媒体报道存在夸大成分
  • 兼容方案: 旧版本Kubernetes仍可继续使用,不必强制升级到新版本
3. 应用案例



1)例题:Docker使用情况



  • containerd:
    • 与Docker完全兼容,从Docker中剥离出来的轻量级运行时
    • 移除了Docker的镜像管理、网络管理等非核心功能
    • 已被腾讯云、阿里云等主流云厂商广泛支持
  • CRI-O/Podman:
    • 红帽(RedHat)主导的项目,目前主推Podman
    • 缺乏大厂支持可能影响其长期发展前景
  • 过渡建议:
    • 生产环境建议优先考虑containerd
    • 学习环境仍可使用Docker,其单机容器功能依然优秀
    • 不必盲目追求新版本,稳定运行的旧版本系统可以继续使用
二、容器引擎切换注意事项

1. 切换步骤



  • 操作流程:
    • 关闭docker服务
    • 启动containerd服务
    • 修改kubelet配置:vi /etc/sysconfig/kubelet,添加KUBELET_EXTRA_ARGS=--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock
    • 重启kubelet服务:systemctl restart kubelet
2. 不能平滑升级



  • 本质区别:docker和containerd是两个不同的容器运行时产品,不是版本升级关系
  • 生产环境处理:
    • 需要将节点设置为不可调度
    • 驱逐节点上的容器
    • 逐个节点进行维护升级
  • 使用影响:切换后对k8s使用方式没有变化,因为k8s管理的是pod而非直接管理容器引擎
3. 测试环境验证



  • 验证方案:
    • 可以先部分节点使用containerd,部分使用docker
    • 最终全部切换到containerd进行完整验证
  • 共存说明:不同节点可以使用不同容器运行时,但不能在单个节点上同时运行docker和containerd
4. 镜像兼容性



  • 镜像支持:containerd完全兼容docker创建的容器镜像
  • 镜像仓库:
    • 使用原有镜像仓库(如Harbor)
    • 连接方式与docker相同,需要在containerd配置文件中配置认证信息
  • 容器重建:切换后k8s会基于containerd重新拉起原有容器
5. 容器管理工具



  • containerd工具:
    • 自带ctr命令行工具,但功能简单
    • 推荐使用crictl工具(k8s社区维护)
6. crictl工具介绍



  • 项目地址:https://github.com/kubernetes-sigs/cri-tools/
  • 功能特点:
    • 支持多种容器运行时(containerd、cri-o等)
    • 命令设计参考docker命令,便于迁移使用
7. crictl配置



  • 配置文件路径:/etc/crictl.yaml
  • 关键配置项:
8. crictl命令对照



  • 镜像操作:
    • docker images → crictl images
    • docker pull → crictl pull
    • docker rmi → crictl rmi
  • 容器操作:
    • docker ps → crictl ps
    • docker exec → crictl exec
    • docker logs → crictl logs
  • 特殊功能:
    • POD操作:crictl pods(docker无对应命令)
    • 查看容器详情:crictl inspect
9. 镜像构建与推送



  • 功能限制:crictl不支持镜像构建和推送
  • 替代方案:
    • 使用buildah等第三方工具构建镜像
    • 在专用节点保留docker环境用于镜像构建
    • 通过别名设置:alias docker='crictl'提高使用体验
三、容器运行时引擎对比

1. 容器相关功能



  • 镜像操作:
    • 删除镜像:docker rmi对应crictl rmi
    • 查看详情:docker inspect IMAGE-ID对应crictl inspecti IMAGE-ID
  • 容器生命周期:
    • 列表查看:docker ps对应crictl ps
    • 创建启动:docker create/start对应crictl create/start
    • 停止删除:docker stop/rm对应crictl stop/rm
  • 容器交互:
    • 进入容器:docker attach/exec对应crictl attach/exec
    • 日志监控:docker logs/stats对应crictl logs/stats
  • POD特有功能:
    • 列表查看:Containerd特有crictl pods命令
    • 详情查看:crictl inspectp可查看POD详细信息(输出JSON格式)
    • 运行控制:crictl runp/stopp用于POD的启停管理
2. 切换引擎Containerd



  • 切换验证:
    • 执行crictl ps可查看Containerd创建的容器(如calico-node、kube-proxy)
    • 容器交互方式与Docker完全一致,如crictl exec进入容器,crictl logs查看日志
  • 资源监控:
    • crictl stats显示容器资源利用率,包括CPU%、内存、磁盘等指标
    • 示例输出:calico-node容器占用3.02% CPU和27.08MB内存
  • 回退操作:
    • 修改kubelet配置参数移除Containerd相关设置
    • 关闭Containerd服务后重启Docker服务
    • 验证:kubectl get node -o wide显示运行时恢复为docker
  • 注意事项:
    • 实验环境建议保持Docker运行时避免兼容性问题
    • 生产环境可搭建独立集群测试Containerd运行时
四、kubeconfig配置文件
1. kubeconfig文件概述



  • 文件位置: 默认存储在用户家目录下的.kube/config文件中
  • 核心功能: 作为kubectl连接Kubernetes集群的认证配置文件,包含集群连接信息和客户端认证凭据
  • 生成方式: 可通过kubectl config指令生成配置文件
2. kubeconfig文件内容



  • 基本结构: 采用YAML格式,包含clusters、contexts、users三个主要部分
  • 关键字段:
    • apiVersion: v1
    • kind: Config
    • current-context: 指定当前使用的上下文
3. kubeconfig文件用途



  • 通用性: 不仅用于kubectl,也用于K8s其他组件连接API Server
  • 连接原理: 通过配置文件中的集群地址(如https://192.168.31.61:6443)和证书信息建立连接
  • 多集群管理: 单个配置文件可包含多个集群的连接信息
4. kubeconfig文件集群信息



  • cluster字段:
    • certificate-authority-data: 集群CA证书(base64编码)
    • server: API Server地址(如https://192.168.31.71:6443)
    • name: 集群名称标识
  • 默认端口: API Server默认监听6443端口
5. kubeconfig文件上下文



  • 作用: 建立用户、集群和命名空间之间的关联关系
  • context字段:
    • cluster: 关联的集群名称
    • user: 关联的用户名称
    • name: 上下文名称(如kubernetes-admin@kubernetes)
  • 多集群场景: 当配置文件包含多个集群时,上下文用于区分不同集群的连接配置
6. kubeconfig文件用户认证



  • user字段:
    • client-certificate-data: 客户端证书(base64编码)
    • client-key-data: 客户端私钥(base64编码)
  • 认证类型: 支持多种认证方式,此处展示的是客户端证书认证
7. kubeconfig文件安全性



  • 权限控制: 该文件包含管理员凭据,泄露会导致集群被完全控制
  • 防护措施:
    • 严格限制文件访问权限
    • 按最小权限原则分配配置文件
    • 可创建不同权限级别的kubeconfig文件
  • 网络要求: 只要能够访问API Server的6443端口,任何位置都可使用该配置文件连接集群
五、练习

1. 使用kubeadm搭建K8s集群

  • 当前任务重点:先搭建K8s集群,其他作业可暂缓
  • 作业提交方式:将结果截图提交至腾讯文档指定链接
2. kubectl命令行工具
  • 故障诊断命令:
    • describe:显示资源详细信息
    • logs:查看Pod日志(多容器需用-c指定)
    • attach/exec:附加容器/执行命令
    • port-forward:创建本地端口映射
    • cp:容器内外文件拷贝
  • 高级命令:
    • apply:从文件创建/更新资源
    • patch:补丁式更新字段
    • replace:替换资源
  • 设置命令:
    • label:设置资源标签
    • annotate:设置注解
    • completion:配置命令自动补全
3. 列出指定标签的pod



  • 操作要点:
    • 命名空间:kube-system
    • 标签筛选:k8s-app=kube-dns
  • 技术储备:
    • 强调技术预学习的重要性,不能等用时才学
    • 项目通常要求快速上手,没有长期学习窗口期
4. Docker与Containerd命令对比
  • 核心区别:
    • docker inspect → crictl inspect(容器)
    • docker inspect → crictl inspecti(镜像)
    • POD操作是containerd特有功能
  • 注意事项:
    • 练习后建议切回Docker引擎
    • V1.23后Docker可能被弃用
    • 切换运行时相当于节点维护操作
5. 学习建议
  • 问题处理态度:
    • 遇到问题应坚持解决,不要轻易放弃
    • 提倡在社群中积极交流提问
    • 技术问题没有高低之分,新手老手都是同一起点
  • 技术储备观念:
    • IT行业需要持续学习积累
    • 项目实践中往往没有充足学习时间
    • 能力储备决定职业发展机会
六、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

Docker与K8s关系演变

Docker功能冗余导致K8s弃用其作为默认运行时,转向轻量级方案

弃用≠不可用:仍可单机使用但需注意版本兼容性

⭐⭐⭐

容器运行时替代方案

containerd(主流选择,大厂支持)、CRI-O(红帽方案)、Podman(新兴方案)

containerd与Docker镜像完全兼容但无镜像构建功能

⭐⭐

containerd迁移实操

需关闭Docker→配置containerd→修改kubelet参数→驱逐节点Pod

非平滑升级:必须停机维护,需分批操作

⭐⭐⭐⭐

crictl工具使用

替代docker命令:crictl ps/exec/logs,不支持镜像推送

命令格式与docker相似但缺少build/push功能

⭐⭐

kubeconfig机制

存储集群连接凭证(API地址/证书),可跨节点分发实现管理

配置文件泄露=集群控制权泄露,需严格权限控制

⭐⭐⭐

技术演进趋势

Docker转向单机场景,K8s生态更倾向标准化CRI运行时

注意1.23版本后Docker支持变化,但旧版本仍可用

⭐⭐

http://www.dtcms.com/a/269145.html

相关文章:

  • 人工智能赋能极端气候事件管理:重构风险预警与应急响应体系
  • 汽车功能安全系统阶段开发【技术安全需求TSR】4
  • 多维度数据资产测绘技术在安全管控平台中的应用实践
  • RKAndroid11-系统设置新增开关选项
  • 1. http 有哪些版本,你是用的哪个版本,怎么查看
  • 构建分布式高防架构实现业务零中断
  • 2025最新如何解决VSCode远程连接开发机失败/解决方案大全
  • 提示工程(Prompt Engineering)研究进展
  • Spring Data JPA基本方法调用规律
  • web渗透之指纹识别1
  • Shader面试题100道之(1-20)
  • PX4无人机上的返航操作和参数解读
  • 华为OD机试 2025B卷 - 最长的指定瑕疵度的元音子串 (C++PythonJAVAJSC语言)
  • DCN2:大规模推荐系统中的碰撞权重与显式交叉层协同优化
  • C++ tcp客户端处理重连问题
  • 3S技术+ArcGIS/ENVI全流程实战:水文、气象、灾害、生态、环境及卫生等领域应用
  • 前端工程化速通——①ES6
  • OSPF路由过滤实验案例
  • severb
  • 大模型通用架构图
  • es性能优化
  • 国产ARM+FPGA工业开发平台——GM-3568JHF
  • LeetCode 151. 反转字符串中的单词
  • 软考(软件设计师)存储管理—存储空间管理,文件共享保护
  • 虚幻引擎Gameplay框架
  • STM32固件升级设计——串口IAP升级(基于YMODEM协议)
  • CosyVoice2.0整合包:免费一键启动,释放语音克隆的创意潜能
  • day048-系统负载高排查流程与前后端分离项目
  • 上传Vue3+vite+Ts组件到npm官方库保姆级教程
  • python高级变量XIV