k8s 介绍

kubernetes 具备完善的集群管理能力,包括:

  • 多层次的安全防护和准入机制
  • 多租户应用支撑能力

多租户其实是一种架构,目的是为了让多用户环境下使用同一套程序,且保证用户间数据隔离。

  • 透明的服务注册和服务发现机制

 服务注册:将提供某个服务的模块信息(通常是这个服务的 ip 和端口)注册到1个公共的组件上去(比如: ETCD)。

 服务发现: 新注册的这个服务模块能够及时的被其他调用者发现。不管是服务新增和服务删减都能实现自动发现。

  • 负载均衡

负载均衡:将用户访问请求,通过某种算法,分发到集群中的节点,目标是 尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。

  • 故障发现和自我修复能力
  • 服务滚动升级和在线扩容

滚动升级:当副本数量大于1时,当需要升级时,会将副本逐个升级,而不是全部停掉,统一升级,好处是升级过程中,服务不会停止提供。

  • 可扩展的资源自动调度机制
  • 多粒度的资源配额管理能力

k8s 分层架构

k8s 外部负载均衡器 k8s 负载均衡原理_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 外部负载均衡器 k8s 负载均衡原理_数据_02

 

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提供集群日志采集、存储与查询。