系统的学习了一遍Kubernetes,发现概念太多,使用的时候有的概念容易混淆或记不清,写一篇文章做一个记录和梳理。
Master
关键进程:
- API Server:集群控制的入口进程,提供了Rest接口
- Controller Manager:所有资源对象的自动化控制中心,“大总管”
- Scheduler:负责资源调度,“调度室”
Node
关键进程:
- kubelet:负责Pod的创建、启停,实现集群管理的基本功能
- kube-proxy:实现Kubernetes Service的通信与负载均衡机制
- Docker Engine:Docker引擎,容器创建与管理
每个Node都是一台物理机,都有自己的Node IP
Pod
有一个根容器--Pause,剩下的就是业务容器。
有一个唯一的Pod IP,因为存在虚拟二层网络,所以Node间的Pod是可以通信的
Service
通过Label Selector关联一组Pod来组成一个Service。
有一个全局唯一的虚拟IP,称为Cluster IP。
Endpoint
暴露的端口和Cluster IP组成一个Endpoint,一个Service可以有多个Endpoint
RC
全名Replication Controller,定义了一个期望的Pod场景,比如始终保持Pod数量为3个
RS
全名Replica Set,是RC的升级版,一般与Deployment搭配使用
Deployment
可以知道当前Pod“部署”的进度,因为从Pod到Node是一个连续变化的状态
StatefulSet
顾名思义:有状态的Pod集合。
必须与Headless Service配合使用,Headless Service是一个无负载均衡器的Service,它没有Cluster IP,解析他的域名,会返回对应全部Pod的Endpoint列表。
HPA
全称Horizontal Pod Autoscaler,实现K8s的自动水平扩容和缩容
Job
批处理的工作项
Kubernetes Volume
Volume定义在Pod上,与Pod生命周期相同,同时还支持分布式文件系统
Persistent Volume
PV是一个独立的网盘,可以在每个Node访问
Pod使用PersistentVolumeClaim来申请PV,PVC会根据容量进行自动绑定
Namespace
实现多租户的隔离
Annotation
与Label类似,但不是用于Label Selector,而是用于用户任意定义的附加信息,以便于外部工具查找
ConfigMap
所有配置项都当成是key-value字符串,放到etcd中。
然后Kubernetes将存储在etcd中的ConfigMap通过Volume映射的方式变成目标Pod内的配置文件
DaemonSet
为每个Node上都调度一个Pod
Ingress
如果要向外暴露服务,上面讲到可以通过NodePort的方式来完成。弊端是每个Node上都会开放这个端口
用Nginx的话,又需要Rolling Update
所以k8s弄了一个Nginx的抽象层Ingress
使用Ingress进行负载分发时,Ingress Controller会跳过kube-proxy,而直接转发到后端Endpoint上。Ingress Controller对外提供服务,可以看做实现的是边缘路由器的功能
kube-proxy
在Kubernetes集群的每个Node上都会运行一个kube-proxy服务进程,我们可以把这个进程看做Service的透明代理兼负载均衡器,核心功能是将某个Service的访问请求转发到后端的多个Pod实例上
StorageClass
StorageClass作为对存储资源的抽象定义,对用户设置的PVC申请,屏蔽后端存储的细节,实现了动态的资源供应。PVC找到合适的StorageClass后,将自动创建一个PV并完成与PVC的绑定
StorageClass被创建出来后,则无法修改。如需修改,则只能删除。