一、K8s节点划分
K8s集群包含Master(控制节点)和Node(工作节点),应用部署在Node节点上。
集群架构图:
二、Master节点
Master节点分成四个组件:scheduler、ApiServer、Controller Manager、ETCD。类似三层结构,controller,service,dao,scheduler。
2.1 shceduler
负责应用调度组件。
2.2 ApiServer
组件间互相通信,接受外部请求,将配置信息保存到ETCD中。
2.3 Controller Manager
执行集群级功能,如复制组件,跟踪Node节点,处理故障等。
2.4 ETCD
分布式存储组件,负责存储集群的配置信息。
三、Node工作节点
集群的工作节点,容器实际运行的节点。
kubelet: 负责与Container runner和Api Server交互,调度节点上的容器。
kube-proxy: 组件间访问代理,解决节点上访问问题。
Container runner: 节点中容器实际运行的地方。
四、Kubernetes的扩展性
4.1 扩展接口
容器运行时接口(CRI)、容器网络接口(CNI)和容器存储接口(CSI)。
- CRI(Container Runtime Interface):容器运行时接口,提供计算资源,CRI隔离了各个容器引擎之间的差异,而通过统一的接口与各个容器引擎之间进行互动。
- CNI(Container Network Interface):容器网络接口,提供网络资源,通过CNI接口,Kubernetes可以支持不同网络环境。例如CCE就是开发的CNI插件支持Kubernetes集群运行在VPC网络中。
- CSI(Container Storage Interface):容器存储接口,提供存储资源,通过CSI接口,Kubernetes可以支持各种类型的存储。例如CCE就可以方便的对接块存储(EVS)、文件存储(SFS)和对象存储(OBS)。
五、K8s基本对象
图3 Kubernetes基本对象
5.1 Pod
Pod是k8s调度的最小单元,一个Pod可以包含多个容器(Conatiner),存储资源(Volume),一个独立的网络IP及控制容器的策略选项。
5.2 Deployment
Deployment对Pod的服务化封装。可以通多Deployment创建多个相同的Pod。
5.3 Stateful
有状态的对象。相同容器定义的一组Pod,StatefulSet为它们的每个Pod维护了一个固定的ID。每个Pod都有一个永久不变的ID。
5.4 Job
Job是用来控制批处理型任务的对象。
5.5 CronJob
CronJob是基于时间控制的Job,在指定的时间周期运行指定的任务。
5.6 DaemonSet
DaemonSet是这样一种对象(守护进程),它在集群的每个节点上运行一个Pod,且保证只有一个Pod,这非常适合一些系统层面的应用,例如日志收集、资源监控等,这类应用需要每个节点都运行,且不需要太多实例,一个比较好的例子就是Kubernetes的kube-proxy。
5.7 Service
Service是用来解决Pod访问问题的。Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以给这些Pod做负载均衡。
5.8 Ingress
Service是基于四层TCP和UDP协议转发的,Ingress可以基于七层的HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分。
5.9 ConfigMap(资源配置)
ConfigMap是一种用于存储应用所需配置信息的资源类型,用于保存配置数据的键值对。通过ConfigMap可以方便的做到配置解耦,使得不同环境有不同的配置。
5.10 Secret(加密存储)
Secret是一种加密存储的资源对象,您可以将认证信息、证书、私钥等保存在Secret中,而不需要把这些敏感数据暴露到镜像或者Pod定义中,从而更加安全和灵活。
5.11 PersistentVolume(PV)(持久化存储卷)
PV指持久化数据存储卷,主要定义的是一个持久化存储在宿主机上的目录,比如一个NFS的挂载目录。
5.12 PersistentVolumeClaim(PVC)(持久化存储卷声明)
Kubernetes提供PVC专门用于持久化存储的申请,PVC可以让您无需关心底层存储资源如何创建、释放等动作,而只需要申明您需要何种类型的存储资源、多大的存储空间。