k8s 介绍
kubernetes 具备完善的集群管理能力,包括:
- 多层次的安全防护和准入机制
- 多租户应用支撑能力
多租户其实是一种架构,目的是为了让多用户环境下使用同一套程序,且保证用户间数据隔离。
- 透明的服务注册和服务发现机制
服务注册:将提供某个服务的模块信息(通常是这个服务的 ip 和端口)注册到1个公共的组件上去(比如: ETCD)。
服务发现: 新注册的这个服务模块能够及时的被其他调用者发现。不管是服务新增和服务删减都能实现自动发现。
- 负载均衡
负载均衡:将用户访问请求,通过某种算法,分发到集群中的节点,目标是 尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。
- 故障发现和自我修复能力
- 服务滚动升级和在线扩容
滚动升级:当副本数量大于1时,当需要升级时,会将副本逐个升级,而不是全部停掉,统一升级,好处是升级过程中,服务不会停止提供。
- 可扩展的资源自动调度机制
- 多粒度的资源配额管理能力
k8s 分层架构
- 核心层:kubernetes 最核心的功能,对外提供 api 构建高层的应用,对内提供插件式应用执行环境。
- 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用)和路由(服务发现、DNS 解析)
- 管理层:系统度量(基础服务、容器和网络的度量),自动化(自动扩展、动态 Provision 等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy 等)
管理层,是 k8s 的精细控制,无论是监控,还是自动化,还是策略管理。
- 接口层: kubectl 命令行工具、客户端 sdk 以及集群联邦。
无状态应用:stateless Application 是指 不会在会话中保存下次会话中去要的客户端数据。每个会话都像首次执行,不会依赖之前的数据进行响应。
有状态应用:stateful Application 是指 绘在会话中保存客户端的数据,并在客户端下一次 的请求中来使用这些数据。
k8s 架构
k8s 借鉴了 Borg 的设计理念,比如 Pod、Service、Labels 和单 Pod单IP等。Kubernetes的整体架构跟Borg非常像。
k8s 主要由以下几个核心组件组成:
- etcd 保存了整个集群的状态;
- apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现 等机制;
- controller manager 负责维护集群的状态,比如:故障检测、自动扩展、滚动更新 等;
- kubelet 负责维护容器的生命周期,同时也负责 Volume ( CVI ) 和 网络 (CNI) 的管理;
- container runtime 负责镜像管理以及 Pod 和容器的真正运行 (CRI);
- kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡;
除了核心组件,还有一些推荐的附加组件:
- kube-dns 负责为整个集群提供 DNS 服务。
- ingress Controller 为服务提供外网入口。
- heapster 提供资源监控。
- Fluentd-elasticsearch提供集群日志采集、存储与查询。