Kubernetes介绍

K8S概述和特性

Kubernetes的官网:https://kubernetes.io/

发音

有很多人不知道kubernetes应该怎么发音,正确的发音是[kubə’netis],重音在第三个音节,读音:库伯耐踢死

那为什么很多场景称为 是 k8s呢?

这个其实和硅谷的人起名有关系,他们有一个坏习惯,就是喜欢把一个单词首字母+跳过的字母数来进行缩写,比如亚马逊的Algorithms被缩写成A9,而kubernetes缩写为k8s,意思就是k后面跳过8个字母后到s,就变成了k8s

概述

1. 什么是 Kubernetes?

  • 定义
    Kubernetes 是一个开源的 容器编排平台,用于自动化部署、扩展和管理容器化应用。
    由 Google 基于其内部系统 Borg 的经验设计,2014 年开源并捐赠给 CNCF(云原生计算基金会)。

  • 核心目标

    • 自动化运维:简化容器化应用的部署、扩缩容、故障恢复等操作。
    • 跨环境一致性:提供一致的运行环境(开发、测试、生产)。
    • 资源高效利用:优化计算、存储、网络资源的分配与调度。

2. Kubernetes 解决了什么问题?

  • 容器化应用的挑战
    • 编排困难:手动管理成百上千的容器(启动顺序、依赖关系、网络通信)。
    • 高可用性:容器故障时需自动恢复,避免服务中断。
    • 动态扩缩容:根据流量自动调整应用实例数量。
    • 跨环境迁移:开发环境与生产环境配置差异导致部署问题。
  • 传统运维的局限性
    • 人工操作易出错,难以应对微服务架构的复杂性。
    • 虚拟机资源利用率低,启动速度慢。

3. Kubernetes 核心设计思想

  • 声明式 API(Declarative API)
    • 用户通过 YAML/JSON 声明“期望状态”(如运行 3 个副本),K8S 自动驱动系统达到该状态。
    • 与“命令式”(手动一步步执行)形成对比,更适应动态变化的环境。
  • 控制循环(Control Loop)
    • 持续监控系统状态,通过控制器(Controller)不断调整实际状态,直到与期望状态一致。
    • 例如:Deployment 控制器确保 Pod 副本数符合预期。
  • 松耦合架构
    • 组件模块化设计,可替换或扩展(如替换容器运行时、自定义调度器)。
    • 通过标准接口(如 CRI、CSI)支持多种插件。

4. Kubernetes 核心特性

特性说明典型场景
自动化部署与回滚支持滚动更新、蓝绿发布、金丝雀发布,并可一键回滚到历史版本。持续交付(CI/CD)
服务发现与负载均衡通过 Service 和 DNS 自动暴露服务,流量均匀分发到后端 Pod。微服务间通信
存储编排动态挂载持久化存储(如本地磁盘、云存储),支持有状态应用。数据库(MySQL)、消息队列(Kafka)
弹性伸缩水平扩缩(HPA)基于 CPU/内存或自定义指标;集群节点自动扩缩(Cluster Autoscaler)。应对突发流量
自我修复自动重启失败的容器、替换不可用节点、杀死不健康的 Pod。保障服务 SLA
密钥与配置管理通过 ConfigMap 和 Secret 管理配置与敏感信息,支持动态注入。不同环境(开发/生产)配置分离
批处理任务支持一次性任务(Job)和定时任务(CronJob)。数据备份、报表生成

5. Kubernetes 的适用场景

  • 适合场景
    • 微服务架构:管理大量松散耦合的服务。
    • CI/CD 流水线:与 Jenkins、GitLab 集成实现自动化部署。
    • 混合云/多云部署:统一管理跨云厂商的资源。
    • 机器学习与批处理:运行 TensorFlow 训练任务或 Spark 批处理作业。
  • 不适用场景
    • 单机简单应用(直接使用 Docker 即可)。
    • 对实时性要求极高的场景(如高频交易系统)。

6. Kubernetes 的优缺点

优点缺点
自动化运维,降低人工干预学习曲线陡峭,概念复杂(Pod、Service 等)
高可用性和故障自愈能力初始部署和配置复杂(尤其生产环境)
灵活的扩展机制(CRD、Operator)资源消耗较高(Master 节点需要一定配置)
庞大的生态系统(Helm、Istio 等)网络和存储配置对底层设施依赖较强

K8S架构组件

K8S架构组件

Master组件

  1. API Server
    • API Server是Kubernetes控制程序的前端。
    • 唯一与etcd交互的组件,提供RESTful API。
    • 集群的统一入口,以RESTful API方式提供集群管理功能,交给etcd存储。
    • 支持认证(Authentication)、鉴权(Authorization)、准入控制(Admission Control)。
  2. etcd
    • 键值存储(也称为etcd)是Kubernetes用来备份所有集群数据的数据库
    • 它存储集群的整个配置和状态。主节点查询etcd以检索节点,容器和容器的状态参数。
  3. Controller Manager
    • 控制器的作用是从API Server获得所需状态
    • 它检查要控制的节点的当前状态,确定是否与所需状态存在任何差异,并解决它们(如果有)。
  4. Scheduler
    • 调度程序会监视来自API Server的新请求,并将其分配给运行状况良好的节点
    • 它对节点的质量进行排名,并将Pod部署到最适合的节点
    • 如果没有合适的节点,则将Pod置于挂起状态,直到出现合适的节点。

Worker节点组件

  • kubelet
    • 管理Pod生命周期(创建、销毁)、上报节点状态。
    • 与容器运行时(如containerd)交互。
    • 它监视从API Server发送来的任务,执行任务,并报告给主节点
  • kube-proxy
    • 确保每个节点都获得其IP地址,维护节点网络规则(iptables/IPVS),实现Service的负载均衡。
  • Container Runtime
    • 容器运行时从容器镜像库中拉取镜像,然后启动和停止容器
    • 容器运行时由第三方软件或插件,如Docker、containerd、CRI-O等(通过CRI接口)。

K8S核心概念

Pod

Controller

Service