k8s(一) 基本概念与组件原理

一. 什么是kubernetes?

kubernetes是一个可移植的,可扩展的开源平台,是Google开源的容器集群管理系统(谷歌内部:Borg),用于管理容器化的工作负载和服务,可促进声明式配置和自动化。

二. 为什么使用kubernetes?

k8s在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。同时Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。

三. 集群架构及组件

1. 集群架构
k8s(一) 基本概念与组件原理_第1张图片
公众号: 前行技术圈
Master

负责管理集群,部署集群所需组件etcd,apiserver,controller manager,scheduler。master 协调集群中的所有活动,例如调度应用程序、维护应用程序的所需状态、扩展应用程序和滚动更新。

Node

节点是 Kubernetes 集群中的工作节点,用于托管正在运行的应用程序,可以是物理机或虚拟机。 每个工作节点都有一个 kubeletkube-proxy,它是管理节点并与 Kubernetes Master 节点进行通信的代理。节点上还应具有处理容器操作的容器运行时,例如 Docker 或 rkt。一个 Kubernetes 工作集群至少有三个节点。

2. 集群组件
  • etcd: 键值存储数据库,维护集群内各个节点状态的一致性,保存集群的状态及配置;
  • apiserver:处理资源操作的请求,并提供认证、授权、访问控制、API 注册和发现等机制;
  • controller manager: 控制器管理,负责维护集群的状态,如故障检测、自动扩展、滚动更新等;
  • scheduler:调度器,负责资源的调度,按照预定的调度策略将 Pod 调度到相应的节点;
  • kubelet:负责维护容器的生命周期, Pod 的创建、启动、监控、重启、销毁等工作,处理Master节点下发到本节点的任务;
  • Container runtime: 负责镜像管理以及 Pod 和容器的真正运行(CRI);
  • kube-proxy: 负责为 Service 提供 cluster 内部的服务发现和负载均衡;
  • Flannel/calico:网络插件, 负责为整个集群提供 IP 服务;
  • kube-dns/coredns: 负责为整个集群提供 DNS 服务;
  • Ingress Controller: 为服务提供外网入口;

四. 工作流程

集群各组件的通信原理,以创建Pod为例:


k8s(一) 基本概念与组件原理_第2张图片
公众号:前行技术圈
  1. 使用REST API 创建Pod,即(kubectl create pod)请求apiserver。
  2. apiserver接收到pod创建请求后,写入到Etcd,会存在记录但不会创建。
  3. scheduluer 检测到有未绑定 Node 的 Pod,查找集群中资源充足的Node绑定,并将调度信息写入到Etcd。
  4. kubelet 通过监测etcd数据库,检测到有绑定该节点的Pod调度过来需要创建,调用container runtime 运行该 Pod。
  5. kubelet 通过 container runtime 取到 Pod 状态,并更新到 apiserver 中。

五. 基本概念

Kubernetes中的绝大部分概念都会被抽象成Kubernetes管理的一种资源对象,下图为k8s资源对象全景图

k8s(一) 基本概念与组件原理_第3张图片
公众号:前行技术圈
NameSpace

Namespace 命名空间是对一组资源和对象的抽象集合, 是 Linux 内核用来隔离内核资源的方式。NameSpace做隔离,Cgroups 做限制,rootfs 做文件系统。

Pod

Pod是 Kubernetes 项目中最小的 API 资源对象,Pod可以由一个或多个业务容器和一个根容器(Pause容器)组成。一个Pod表示某个应用的一个实例。Kubernetes 项目的调度器,是统一按照 Pod 而非容器的资源需求进行计算的,凡是调度、网络、存储,以及安全相关的属性,基本上是 Pod 级别的。

可以这样理解,云计算系统的操作系统是 k8s ,容器就相当于是其进程,而 Pod 则是进程组,容器镜像就是这个系统里的“.exe”安装包。Pod 里的所有容器,它们共享PID、IPC、Network和UTS namespace,可以声明共享同一个 Volume。

Label

Label 标签以 key/value 的方式附加到资源对象上如Pod, 其他对象可以使用 Label Selector 来选择一组相同 label 的对象。

ReplicaSet

ReplicaSet是Pod副本的抽象,用于解决Pod的扩容和伸缩。

Deployment

Deployment通常用来部署无状态应用,在内部使用ReplicaSet来实现Pod副本的创建。Deployment确保指定数量的Pod“副本”在运行,并且支持回滚和滚动升级。
创建Deployment时,需要指定 Pod模板和Label标签。

HPA

HPA全称Horizontal Pod Autoscaling 负责Pod水平自动伸缩,HPA通过监控分析RC或者Deployment控制的所有Pod的负载变化情况来确定是否需要调整Pod的副本数量。

Service

Service是应用服务的抽象,通过Label Selector匹配后端的Pod副本来建立关系,为应用提供负载均衡和服务发现。每个Service都会自动分配一个cluster IP(仅在集群内部可访问的虚拟地址)和DNS名,由kube-proxy负责将服务IP负载均衡到这些后端Pod上。其他容器可以通过该地址或DNS来访问服务,而不需要了解后端容器的运行。

后面会详细介绍各类资源对象的使用,敬请关注。

k8s(一) 基本概念与组件原理_第4张图片
获取视频教程公众号回复k8s视频

你可能感兴趣的:(k8s(一) 基本概念与组件原理)