K8S基本概念与架构解析

1.K8S来源与功能

kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,即我们常说的容器编排工具,简单来说就是调度和管理容器及容器集群,范围包括容器的节点落点、创建部署、资源限制、网络及路由、存储管理、自动伸缩,包括再往外的负载均衡等方面。K8S的目标是让部署容器化的应用简单并且高效。

主要功能包括:
•基于容器的应用部署、维护和滚动升级
•自我修复
•负载均衡和服务发现
•跨机器和跨地区的集群调度
•自动伸缩、水平扩展
•无状态服务和有状态服务
•广泛的Volume存储卷的支持
•插件机制保证扩展性

2. K8S架构

K8S基本概念与架构解析
A.Master

  1. API server:提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心;
  2. Controlle Manager (kube-controller-manager):kubernets 里面所有资源对象的自动化控制中心,可以理解为资源对象的大总管;
  3. Scheduler(kube-scheduler):负责资源调度(pod调度)的进程,相当去公交公司的‘调度室’;
  4. Etcd:用于持久化存储集群中所有的资源对象,如Node、Service、Pod、RC、Namespace等;API Server提供了操作etcd的封装接口API,这些API基本上都是集群中资源对象的增删改查及监听资源变化的接口。
    B. Node
  5. Kubelet:负责pod对应的容器创建、启停等任务,同时与master 节点密切协作,实现集群管理的基本功能;
  6. kube-proxy:实现K8S Service的通信与负载均衡机制的重要组件;
  7. Docker Engine:Docker引擎,负责本机的容器创建和管理工作。

3. 基本逻辑概念

  1. pod

Pod是K8S中可以创建的最小部署单元,一个Pod代表集群上正在运行的一个进程。Pod代表部署的一个单位:K8S中单个应用的实例,它可能由单个容器或多个容器共享组成。

Pod提供两种共享资源:网络和存储。
a)每个Pod被分配一个独立的IP地址,Pod中的每个容器共享网络命名空间,包括IP地址和网络端口;
b)Pod可以指定一组共享存储volumes。

  1. 控制器

ReplicationController(副本控制器):确保Pod的数量始终保持设定的个数,也支持Pod的滚动更新。
ReplicaSet (副本集):它不直接使用,由一个声明式更新的控制器叫Deployment来负责管理,但是Deployment只能负责管理那些无状态的应用。
StatefulSet (有状态副本集):负责管理有状态的应用。
DaemonSet:如果需要在每一个Node上只运行一个副本,而不是随意运行,就需要DaemonSet。
Job:运行作业
Cronjob:周期性作业。

  1. 网络

节点网络:各主机(Master、Node、ETCD等)自身所属的网络,地址配置在主机的网络接口,用于各主机之间的通信,又称为节点网络。

Pod网络:专用于Pod资源对象的网络,它是一个虚拟网络,用于为各Pod对象设定IP地址等网络参数,其地址配置在Pod中容器的网络接口上。Pod网络需要借助kubenet插件或CNI插件实现。

Service网络:专用于Service资源对象的网络,它也是一个虚拟网络,用于为K8S集群之中的Service配置IP地址,但是该地址不会配置在任何主机或容器的网络接口上,而是通过Node上的kube-proxy配置为iptables或ipvs规则,从而将发往该地址的所有流量调度到后端的各Pod对象之上。
K8S基本概念与架构解析
4. Ingress Controller

Service是一种工作于4层的负载均衡器,而Ingress是在应用层实现的HTTP(S)的负载均衡。不过,Ingress资源自身并不能进行流量的穿透,,它仅仅是一组路由规则的集合,这些规则需要通过Ingress控制器(Ingress Controller)发挥作用。

K8S是集群管理的实用工具,在微服务架构和下容器部署中经常使用,上述仅对K8s的基本概念和通用架构进行了介绍,随着后续的深入学习,会对其应用部署,水平收缩,路由调度,持久化存储等内容逐渐阐述,

欢迎大家在评论去取交流,学习,