kubernetes基本概念

Kubernetes核心组件

架构图

  • etcd分布式数据库,保存整个集群状态;
  • apiserver提供资源操作的唯一入口,提供认证、授权、访问控制、api注册和发现等机制;
  • controller manager负责维护集群的状态,如故障检测、自动扩展、滚动更新等;
  • scheduler负责资源的调度,按照预定的调度策略将pod调度到相应的node上;
  • kubelet,node上的管理组件,负责维持容器生命周期,负责存储卷Volume(CVI)和网络(CNI)管理;
  • container runtime负责镜像管理及pod和容器的真正运行(CRI);
  • kube-proxy负责为service低通内部的服务发现和负载均衡;
    其他推荐的插件:
  • kube-dns负责为整个集群提供DNS服务
  • Ingress Controller为服务提供外网入口
  • Heapster提供资源监控
  • Dashboard提供GUI
  • Federation提供跨可用区集群
  • Fluentd-elasticsearch提供集群日志采集存储与查询

核心技术概念和API对象

API对象是K8s集群中的管理操作单元。每个API对象有3大类属性:元数据metadata、规范spec和状态status。元数据是用来标识API对象的,每个对象都至少有3个元数据:namespace、name、uid;此外还有各种各样的标签labels用来标识和匹配不通的对象。规范spec描述了用户期望K8s集群中的分布式系统达到的理想状态,如设置pod副本数为3。status描述了系统当前达到的状态,如果与spec中的描述不一致,系统自动执行相关的动作,争取达到spec中的要求。

node

node为提供计算能力的节点,可以是虚拟机和物理机,上面运行了kubelet管理节点上运行的容器,与管理节点APIserver通信。默认情况下,kubelet在启动时会向master注册自己,并创建node资源。
node包括下面状态:
地址:hostname,外网ip,内网ip。状态:outiofdisk,memorypressure。容量及基本信息。

名字空间(namespace)

为集群提供虚拟机隔离作用。常用来隔离不同用户。pod、service、RC、Deployment都属于某个namespace,node、PV、namespace不属于任何namespace。

User Account和Service Account

用户账户是为人提供账户标识,服务账户为计算机进程和pod提供账户表示。用户账户是跨namespace的服务账户不跨namespace

RBAC授权访问

基于角色的访问控制(Role-based Access Control),引入角色和角色绑定概念。与基于属性的访问控制(Attribute-based Access Control)相比,ABAC访问策略智能跟用户直接关联。RBAC中可以跟某个角色关联,用户跟一个和多个角色关联。

pod

pod是在K8s集群中部署应用或服务的最小单元,支持多个容器在一个pod中。pod是豆荚,容器是豌豆。同一个pod中共享网络和文件系统。有四种类型pod执行不通类型的任务:长期伺服行(long-running)、批处理行(batch)、节点后台支撑型(node-daemon)和有状态型;分别对应Deployment、Job、DaemonSet和StatefulSet。
pod:豆荚,kubnernetes管理的基本对象。pod是篮子,容器是篮子里的鸡蛋。pod里的容器共享一部分资源,包括network namespace,volume。
ip地址分配给pod。
标签labels标记在pod上。
labels由键/值对构成,可在一维里灵活组合筛选。

Delployment

无状态,长期运行的一组pod集。可以更新,滚动升级,回滚等。

job

有始有终的任务,任务完成后就退出。可以定制不通的spec.completions策略而不通:单pod型任务有一个pod成功就标识完成;定数成功型任务保证有N个任务全部成功;工作队列型任务根据应用确认的全局成功标识。

后台支撑服务集(DaemonSet)

每个node上都需要运行的pod,包括存储、日志和监控等。

有状态服务集(StatefulSet)

RC和SC主要控制提供无状态的服务,期控制的pod名字是随机的,一个pod故障了就被丢弃,在另一个地方重启一个新的pod,名字会改变,关心的是pod的总数。一般不挂载存储。
StatefulSet中每个pod名字是事先确认的,如果出现故障,会再其他地方重启一个相同名字的pod。一般挂载有独立的存储。适合于数据库服务MySQL、PostgreSQL,集群化管理服务Zookeeper,Etcd等有状态的服务。

复制控制器(Replication Controller,RC)

通过监控运行中的pod来保证集群中运行指定数目的pod。

副本集(Replica set ,RS)

RS是新一代的RC,支持更多类型的匹配模式。通常作为Delployment的理想状态参数使用。

服务(Service)

客户端需要访问的服务就是Service对象。一个pod只是一个运行服务的实例,多个实例构成一个高可用的服务。高可用由每个节点上的kube-proxy提供。

存储卷(Volume)

docker的存储卷作用范围为一个容器,K8s的存储卷和生命周期作用范围是一个pod。每个pod中声明的存储卷由pod中所有容器共享。

持久存储卷(Persistent Volume,PV)和持久存储卷声明(Persistent Volume Claim ,PVC)

PV和PVC使得K8s集群具备了存储的逻辑抽象能力。PV和node类是,是资源提供者,由集群管理员配置。PVC和pod是资源使用者,根据业务的需求变化而变化。