K8S-基础架构
Kubernetes
Kubernetes(常简称为 K8S)是一个开源的生产级别容器编排平台和集群管理系统,用于自动化容器化应用程序的部署、扩展和管理。它能够高效地管理跨多个主机的容器集群,实现资源管理的自动化,包括容器的创建、调度、监控和服务器管理。
核心功能特性
1. 自我修复
一旦某个容器崩溃,Kubernetes 能够在 1 秒左右迅速启动新的容器,确保服务的持续可用性。
2. 弹性伸缩
Kubernetes 可以根据负载需求,自动调整集群中正在运行的容器数量,支持水平自动扩缩容(HPA)。
3. 服务发现
服务可以通过内置的 DNS 或环境变量自动发现其所依赖的其他服务,无需硬编码 IP 地址或端口。
4. 负载均衡
如果一个服务启动了多个容器(Pod),Kubernetes 能够自动实现请求的负载均衡,将流量分发到不同的 Pod 实例。
5. 版本回退
如果新发布的程序版本出现问题,可以立即回退到之前的稳定版本,确保服务可靠性。
6. 存储编排
根据容器的需求自动创建和管理存储卷(Volume),支持多种存储类型(如本地存储、云存储等)。
基础架构
一个 Kubernetes 集群由控制节点(Master Node) 和工作节点(Worker Node) 组成,每个节点上安装不同的组件,共同协作完成容器编排任务。
控制节点(Master)
负责全局决策和资源调度
核心组件:
1. API Server
- 资源操作的唯一入口,提供一系列 RESTful API。
- 负责认证、授权、API 注册和发现机制。
- 所有组件之间的通信都通过 API Server 进行。
2. Scheduler
- 负责集群资源调度。
- 根据预定义的调度策略(如资源需求、亲和性等)将 Pod 分配到合适的 Node 上。
3. Controller Manager
- 负责维护集群状态,执行各种控制器逻辑。
- 包括节点控制器、副本控制器、端点控制器等,实现故障检测、自动扩展、滚动更新等功能。
4. etcd
- 分布式键值存储数据库,用于存储集群的所有状态和配置数据。
- 仅与 API Server 交互,确保数据一致性和高可用性。
工作节点(Node)
工作节点是集群的“手脚”,负责容器的实际运行。
核心组件:
1. Kubelet
- 负责维护容器的生命周期。
- 通过与容器运行时(如 Docker)交互,创建、更新、销毁容器。
- 定期向 Master 报告节点状态。
2. Kube Proxy
- 负责实现服务发现和负载均衡。
- 通过维护网络规则,将请求转发到正确的 Pod。
3. 运行容器
- 如 Docker、containerd 等,负责实际运行容器。
Kubernetes 工作流程
- 集群启动:Master 和 Node 节点启动后,将自身信息注册到 etcd 中。
- 接收请求:用户通过
kubectl
或 API 发送指令到 API Server。 - 调度决策:API Server 将请求转发给 Scheduler,Scheduler 查询 etcd 中的节点信息,选择合适的 Node。
- 执行部署:API Server 调用 Controller Manager 调度目标 Node 上的 Kubelet。
- 启动容器:Kubelet 通知容器(如 Docker)启动 Pod。
- 服务访问:通过 Kube Proxy 实现服务的负载均衡和代理访问。
核心概念
Pod
- Kubernetes 的最小调度单元,一个 Pod 可以包含一个或多个容器。
- 共享网络和存储资源,紧密关联的容器通常部署在同一 Pod 中。
Controller
- 控制器用于管理 Pod 的生命周期,包括创建、更新、扩缩容等。
- 常见类型:Deployment、StatefulSet、DaemonSet 等。
Service
- 为一组 Pod 提供统一的访问入口,实现服务发现和负载均衡。
- 通过 Label Selector 关联后端 Pod。
Label
- 键值对标签,用于标识和分类 Pod 等资源。
- 便于 Controller 和 Service 进行资源筛选和管理。
Namespace
- 命名空间用于隔离资源(如 Pod、Service 等),实现多租户资源管理。
- 默认命名空间包括
default
、kube-system
等。
总结
Kubernetes提供了一个高度自动化、可扩展的容器编排平台。无论是自我修复、弹性伸缩,还是服务发现和存储编排,Kubernetes 都能高效地管理容器化应用。
- Kubernetes 官方文档
- Kubernetes 中文官方文档