kubernetes里 一切都是资源
Master:
1.Kubenets里的集群控制节点,基本上 Kubernetes的所有控制命令都要发给它,它负责具体的执行过程。
2. Master通常占据一个独立的服务器,如果master宕机,那么集群内容器应用的管理都将失败
关键进程
- kube-apiserver: HTTP Rest接口的关键进程,Kubernetes里所有资源的增、删、改、查的唯一入口,集群控制的入口
- kube-controller-manage: 资源对象的自动化控制中心,可以理解为资源的 大总管
- kube-scheduler 资源调度(Pod调度)进程。
- etcd: 存储所有资源对象数据
Node:
1. Kubernetes里的其他机器都被称为Node。
2. Node是集群中的工作负载节点
3. 当某个Node宕机后,工作负载会被masetr 调度到其他Node上
Pod:
pod = Pause + 一个或多个用户业务容器组成
pod内容器共享ip(端口自然不能冲突)、volume
Label:
就是设置标签: key:value
方便后续rc、Deployment、Job、service的副本控制、配置、部署等管理
基于等式的label selector key=value,不支持 matchlabels、matchExpressions label选择器
其他筛选
Replication Controller(RC) (创建pod,实现 pod的数量控制)
实现 pod 的创建
通过 label selector 机制实现对pod副本的自动控制
Replica Set (RS) (RC的升级,一般不自己调用,由Deployment 调用)
基于集合的label selector,支持 matchlabels、matchExpressions label选择器
Deployment (RC、RS的升级)
内部调用RS
支持滚动升级,一个个pod升级、不暂停服务
支持回滚
Horizontal Pod Autoscaler(根据当前压力,自动调整Pod数量)自动扩缩容
可以指定pod副本最小数量和最大数量
指标
CPUUtilizationPercentage (由cpu压力指标扩缩容)
应用程序自动以指标(如服务的 TPS或QPS)
StatefulSet
RC、Deployment、DaemonSet、Job都是面向无状态的服务。
如 mysql集群、mongo集群等都是有状态的。
1. 每个节点都有固定的身份id,通过这个id,集群中的成员可以相互发现并通信
2. 规模是固定的,不能随意变动
3. 集群中的每个节点都是有状态的,数据要持久化存储
Service (微服务)
定义了服务的入口地址
比如 部署nginx的pod并暴露端口,虽然pod有ip,但pod可能会被重新调度到另一个node上,导致ip变化,多个pod直接也无法作负载均衡
通过label selector 绑定多个pod,实现负载均衡,并可以暴露统一的ip
Kuberneter的服务发现机制
1. cluster的信息 通过给 Pod容器添加 环境变量解决 (不用了)
2. 使用dns (最新)
Job (一次性的任务或定时任务)
1. Job所控制的Pod副本是短暂运行的。 Job的生成的 Pod副本是不能重启的。
2. 1.5版本后添加了 CronJob,解决了某些任务需要定时反复执行
Volume
1. volume 是pod中能够被多个容器访问的共享目录。
2. kubernetes 中 volume 被定义在Pod上,然后被一个Pod里多个容器挂载到具体的文件目录下。
3. kubernetes 中 volume 的生命周期和Pod生命周期一致。与容器生命周期不相干
4. 支持多种类型的文件系统
Persistent volume(持久化存储卷PV)
- PV只能是网络存储,不属于任何Node,但任何Node都可以访问
- PV并不是定义在Pod上的,而是独立于POd之外
- 支持多种类型
Namespace
实现多租户的资源隔离
Annotation (注解)
- 也使用key:value 键值对形式定义
- 它定义的是Kubernetes的元数据(Metadata)
ConfigMap
- ConfigMap 必须在Pod之前创建
- ConfigMap 受Namespace限制,只有处于Namespace中的Pod才可以引用
- 静态Pod无法使用ConfigMap
- 只能挂载为目录,不能挂载为文件
RC : Pod数量管理
RS: 针对RC增加了拥有集合式的选择器
develoyment: 滚动升级、回滚
DaemonSet: 在每个node上都调度一个pod