Docker与Kubernetes(K8s)发展简史及生产环境最佳实践
一、Docker与Kubernetes的时间轴
1. Docker的诞生与发展
- 2013年:Docker项目正式开源,基于Go语言开发,极大简化了应用容器化部署流程,推动了微服务架构的普及。
- 2014年:Docker生态逐步完善,出现了Docker Swarm等原生编排工具,但在大规模集群管理方面存在局限。
2. Kubernetes的崛起
- 2014年:Google开源Kubernetes(简称K8s),最初以Docker为默认容器运行时,旨在解决容器编排、调度、服务发现、弹性伸缩等问题。
- 2015年:Google将Kubernetes捐赠给CNCF(Cloud Native Computing Foundation),标志着K8s进入社区驱动发展阶段。Red Hat等公司成为重要贡献者,国内如阿里云、腾讯云、华为云等也积极参与。
3. 容器运行时的演进
- 2016年:Kubernetes市场份额迅速提升,成为容器编排事实标准。CNCF推动容器运行时接口(CRI, Container Runtime Interface)标准化,K8s支持多种容器运行时(如Docker、rkt)。
- 2017年:Docker将containerd项目捐赠给CNCF,containerd成为独立的高性能容器运行时。K8s社区开发了CRI插件,K8s v1.11起原生支持containerd。
- 2018年:Red Hat收购CoreOS,宣布停止维护rkt容器运行时。
- 2019年:Mirantis收购Docker企业业务,Docker Swarm逐步淡出主流,K8s成为业界主流。
- 2020年:CNCF宣布K8s弃用Docker作为默认运行时,全面转向containerd。
- 2022年:K8s v1.24正式移除对Docker运行时的内置支持,docker-shim组件停止维护。Mirantis和Docker官方承诺继续维护cri-dockerd以兼容K8s。
- 2024年:K8s v1.30发布,持续引领云原生基础设施发展。
4. 国内外主流云厂商K8s服务
- 阿里云:容器服务 Kubernetes 版(ACK)
- 腾讯云:Tencent Kubernetes Engine(TKE)
- 华为云:云容器引擎(CCE)
- 京东云:Kubernetes服务
二、Kubernetes生产环境版本选择建议
- 推荐版本:K8s v1.23.17(官方最后一个原生支持Docker运行时的LTS版本)。
- 更高版本:如需使用v1.24及以上版本且依赖Docker运行时,需手动部署cri-dockerd。
- 主流版本分布:目前生产环境常见K8s版本包括1.13、1.15、1.17、1.19、1.21、1.22、1.23等,建议根据业务需求和社区支持周期选择。
三、Kubernetes简介与核心价值
1. 什么是Kubernetes?
Kubernetes(简称K8s)是一个开源的容器编排平台,负责自动化容器化应用的部署、扩展、管理和维护。它为容器生命周期管理、服务发现、负载均衡、自动伸缩、滚动升级等提供了强大支持。
2. K8s解决了哪些问题?
- 容器IP漂移:容器重启后IP变化,K8s通过Service和网络插件(CNI)实现稳定访问。
- 集群调度与资源管理:自动调度容器到最优节点,提升资源利用率。
- 统一监控与日志管理:内置健康检查、事件追踪、日志采集能力。
- 高可用与自愈:支持Pod自动重启、故障转移、滚动升级。
- 跨节点存储与配置共享:支持持久化存储卷(PV/PVC)、ConfigMap、Secret等机制。
- 服务发现与负载均衡:通过ClusterIP、NodePort、LoadBalancer等多种Service类型实现。
四、为什么要学习Kubernetes?
- 解决Docker原生跨节点管理难题:如部署、监控、调度、配置等。
- 提升运维自动化水平:结合Jenkins等工具实现CI/CD流水线。
- 行业标配技能:K8s已成为云原生运维和开发岗位的必备技能。
- 知识积累与职业发展:掌握K8s有助于技术深造和职业晋升。
五、Kubernetes架构详解
1. 控制平面(Control Plane)
- etcd:分布式Key-Value存储,保存集群状态和配置,监听端口2379/2380。
- API Server:K8s集群的唯一入口,负责认证、授权、API聚合,监听端口6443(HTTPS)。
- Scheduler:负责Pod调度到合适的Node节点。
- Controller Manager:内置多种控制器,负责集群状态维护和自动化控制。
2. 工作节点(Worker Node)
- kubelet:负责Pod的生命周期管理,与API Server通信,汇报节点和容器状态。
- kube-proxy:实现Service的负载均衡和网络代理,支持iptables和ipvs模式(生产推荐ipvs)。
- 容器运行时:如containerd、CRI-O、Docker(需cri-dockerd)。
3. 网络插件(CNI)
- 实现跨主机容器网络互通,常见插件有Flannel、Calico、Cilium等。
六、Kubernetes三大网络类型
- 集群组件通信网络:通常为物理网卡,默认网段如10.0.0.0/24。
- Pod网络(容器互通网段):可自定义,如10.100.0.0/16,需根据业务规模合理规划。
- Service网络:为Service分配虚拟IP,用于负载均衡和服务发现,如10.200.0.0/16。
注意:大规模集群需提前规划IP网段,避免后期扩容受限。
七、Kubernetes主流部署方式及CNCF生态
1. 官方部署方式
- 二进制部署:手动安装各组件,适合高阶用户,灵活性高但复杂度大。
- kubeadm:官方推荐的快速部署工具,适合大多数生产环境,自动化程度高。
2. 第三方部署工具
- 国内
- KubeSphere、Kuboard:基于kubeadm,提供丰富的Web UI和多租户管理。
- kubeasz:基于二进制+Ansible Playbook,适合自动化大规模集群部署。
- 国外
- Rancher:企业级K8s发行版,支持多集群和多云管理,附带轻量级K3s版本。
- 云厂商
- 阿里云ACK、腾讯云TKE、华为云CCE、京东云Kubernetes等,提供托管K8s服务。
- 开发/测试环境
- minikube:本地单节点K8s,适合开发测试。
- kind:基于Docker容器运行K8s集群,适合CI/CD集成测试。
- yum/apt:不推荐,版本老旧,社区支持有限。
3. CNCF技术生态
- CNCF Landscape:https://landscape.cncf.io/
涵盖K8s相关的存储、网络、安全、监控、服务网格等全栈云原生技术。
八、结语
Kubernetes已成为现代云原生基础设施的核心,掌握其原理、架构与最佳实践,是每位DevOps工程师、后端开发者、SRE的必备技能。无论是自建集群还是使用云厂商托管服务,合理选择K8s版本、容器运行时和部署方式,结合CNCF生态工具链,能够极大提升企业IT系统的弹性、可扩展性和运维效率。
欢迎关注我的博客,获取更多Kubernetes与云原生技术干货!如有疑问或补充,欢迎留言交流。
版权声明:本文原创,转载请注明出处。
浙公网安备 33010602011771号