一、Kubernetes是什么
Kubernetes,或简称K8s,是一个很容易地部署和管理容器化的应用软件系统,使用Kubernetes能够方便对容器进行调度和编排。
对应用开发者而言,可以把Kubernetes看成一个集群操作系统。Kubernetes提供服务发现、伸缩、负载均衡、自愈甚至选举等功能,让开发者从基础设施相关配置等解脱出来。 Kubernetes可以把大量的服务器看做一台巨大的服务器,在一台大服务器上面运行应用程序。无论Kubernetes的集群有多少台服务器,在Kubernetes上部署应用程序的方法永远一样。
二、Kubernetes集群架构
Kubernetes集群包含Master节点(控制节点)和Node节点(计算节点/工作节点),应用部署在Node节点上,且可以通过配置选择应用部署在某些特定的节点上。
1、Master节点
Master节点是集群的控制节点,由API Server、Scheduler、Controller Manager和ETCD四个组件构成。
- API Server(大脑):各组件互相通讯的中转站,接受外部请求,并将信息写到ETCD中。
- Controller Manager(控制器):执行集群级功能,例如复制组件,跟踪Node节点,处理节点故障等等。
- Scheduler(调度器):负责应用调度的组件,根据各种条件(如可用的资源、节点的亲和性等)将容器调度到Node上运行。
- ETCD(kv数据库):一个分布式数据存储组件,负责存储集群的配置信息。 在生产环境中,为了保障集群的高可用,通常会部署多个Master。
2、Node节点
node节点是集群的计算节点,即运行容器化应用的节点。
- kubelet:kubelet主要负责同Container Runtime打交道,并与API Server交互,管理节点上的容器。
- kube-proxy:应用组件间的访问代理,解决节点上应用的访问问题。
- Container Runtime:容器运行时,如Docker,最主要的功能是下载镜像和运行容器。
三、Kubernetes中的基本对象
1、Pod
Pod是Kubernetes创建或部署的最小单位。一个Pod封装一个或多个容器(container)、存储资源(volume)、一个独立的网络IP以及管理控制容器运行方式的策略选项。
Pod学习传送站(kubernetes pod yaml文件解析-CSDN博客)
2、Deployment
Deployment是对Pod的服务化封装。一个Deployment可以包含一个或多个Pod,每个Pod的角色相同,所以系统会自动为Deployment的多个Pod分发请求。
Pod是Kubernetes创建或部署的最小单位,但是Pod是被设计为相对短暂的一次性实体,Pod可以被驱逐(当节点资源不足时)、随着集群的节点崩溃而消失。Kubernetes提供了Controller(控制器)来管理Pod,Controller可以创建和管理多个Pod,提供副本管理、滚动升级和自愈能力,其中最为常用的就是Deployment。
Deployment学习传送站(kubesphere deployment yml 参数详解-CSDN博客)
3、StatefulSet
StatefulSet是用来管理有状态应用的对象。和Deployment相同的是,StatefulSet管理了基于相同容器定义的一组Pod。但和Deployment不同的是,StatefulSet为它们的每个Pod维护了一个固定的ID。这些Pod是基于相同的声明来创建的,但是不能相互替换,无论怎么调度,每个Pod都有一个永久不变的ID。
- StatefulSet给每个Pod提供固定名称,Pod名称增加从0-N的固定后缀,Pod重新调度后Pod名称和HostName不变。
- StatefulSet通过Headless Service给每个Pod提供固定的访问域名。
- StatefulSet通过创建固定标识的PVC保证Pod重新调度后还是能访问到相同的持久化数据。
StatefulSet学习传送站(还没写)
4、Job
Job是用来控制批处理型任务的对象。批处理业务与长期伺服业务(Deployment)的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出(Pod自动删除)。
Job学习传送站(kubernetes Job yaml文件解析-CSDN博客)
5、CronJob
CronJob是基于时间控制的Job,类似于Linux系统的crontab,在指定的时间周期运行指定的任务。
CronJob学习传送站(cronjob.yml模板文件-CSDN博客)
6、DaemonSet
DaemonSet是这样一种对象(守护进程),它在集群的每个节点上运行一个Pod,且保证只有一个Pod,这非常适合一些系统层面的应用,例如日志收集、资源监控等,这类应用需要每个节点都运行,且不需要太多实例,一个比较好的例子就是Kubernetes的kube-proxy。
DaemonSet学习传送站(还没写)
7、Service
Service是用来解决Pod访问问题的。Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以给这些Pod做负载均衡。
Service学习传送站(kubernetes service详解-CSDN博客)
8、Ingress
Service是基于四层TCP和UDP协议转发的,Ingress可以基于七层的HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分。
Ingress学习传送站(还没写)
9、ConfigMap
ConfigMap是一种用于存储应用所需配置信息的资源类型,用于保存配置数据的键值对。通过ConfigMap可以方便的做到配置解耦,使得不同环境有不同的配置。
ConfigMap学习传送站(kubernetes volume 存储卷详解)
10、Secret
Secret是一种加密存储的资源对象,您可以将认证信息、证书、私钥等保存在Secret中,而不需要把这些敏感数据暴露到镜像或者Pod定义中,从而更加安全和灵活。
Secret学习传送站(kubernetes volume 存储卷详解)
11、PersistentVolume(PV)
PV指持久化数据存储卷,主要定义的是一个持久化存储在宿主机上的目录,比如一个NFS的挂载目录。
PersistentVolume学习传送站(kubernetes volume 存储卷详解)
12、PersistentVolumeClaim(PVC)
Kubernetes提供PVC专门用于持久化存储的申请,PVC可以让您无需关心底层存储资源如何创建、释放等动作,而只需要申明您需要何种类型的存储资源、多大的存储空间。
PersistentVolumeClaim学习传送站(kubernetes volume 存储卷详解)