云容器技术是一种将应用程序及其依赖项打包在轻量级、可移植的容器中的技术,这些容器可以在任何支持容器运行的环境中快速部署和运行。容器技术通过隔离应用程序及其运行环境,提高了应用的可移植性和可扩展性。在云环境中,容器可以轻松地在不同的云服务和数据中心之间迁移,实现资源的最优配置和成本效益。
1.Pod。Pod 是 K8s 的最小工作单元。每个 Pod 包含一个或多个容器。Pod 中的容器会作为一个整体被 Master 调度到一个Node 上运行。K8s 引入 Pod 主要基于如下两个目的:
(1)可管理性。有些容器需要紧密联系,Pod 提供了比容器更高层次的抽象,将它们封装到一个部署单元中。K8s 以 Pod为最小单位进行调度、扩展、共享资源、管理生命周期。
(2)通信和资源共享。Pod 中的所有容器使用同一个网络namespace,即相同的 IP 地址和 Port 空间。它们可以直接用localhost 通信,可以共享存储。
2.调度。 K8s 系统的核心任务是创建客户端请求创建的Pod 对象,并确保其以期望的状态运行。创建 Pod 对象时,调度器负责为每一个未经调度的 Pod 资源、基于一系列的规则集从集群中挑选一个合适的节点来运行它,因此它也可以称作 Pod 调度器。调度过程中,调度器不会修改 Pod 资源,而是从中读取数据,并根据配置的策略挑选出最适合的节点,而后通过 API 调用将Pod 绑定至挑选出的节点之上以完成调度过程。
k8s 内建了适合绝大多数场景 Pod 资源调度需求的默认调度器,它支持同时使用算法基于原生及可定制的工具来选出集群中最适合运行当前 Pod 资源的一个节点,其核心目标是基于资源可用性将各 Pod 资源公平地分布于集群节点之上。目前,K8s平台提供的默认调度器也称为“通用调度器”,它通过三个步骤完成调度操作:节点预选(Predicate)、节点优先级排序及节点择优。节点预选是基于一系列预选规则对每个节点进行检查,将那些不符合条件的节点过滤掉从而完成节点预选。节点优选是对预选出的节点进行优先级排序,以便选出最适合运行 Pod 对象的节点。最后,从优先级排序结果中挑出优先级最高的节点运行 Pod 象,当此类节点多于一个时,则从中随机选择一个。
3.Service。k8s 的 Service 是一个抽象层,它定义了一种访问 Pod 组的方法,通常跨多个容器和节点。Service 为这些 Pod组提供一个固定的 IP 地址和 DNS 名称,以便其他组件可以通过该地址和名称与它们通信,即使背后的 Pod 实例发生变化也不受影响。k8s 提供了几种类型的 Service:
ClusterIP:这是默认的 Service 类型,它为 Service 分配一个内部的 IP 地址,使得 Service 只能在集群内部访问,适用于集群内部通信。
NodePort:这种类型的 Service 会在集群的所有节点上开放一个端口(NodePort),外部客户端可以通过<NodeIP>:<NodePort>访问 Service。
LoadBalancer:这种 Service 在 NodePort 的基础上,通过云提供商的负载均衡器向外部暴露一个 Service。云提供商会在其负载均衡器上分配一个外部 IP 地址,流量会通过这个 IP 地址路由到集群中的 Service。
4.存储。k8s 提供了多种存储卷(Volume)类型,用于管理和持久化数据。存储卷可以挂载到 Pod 中,供容器使用。k8s Volume也支持多种 backend 类型,包括 emptyDir、hostPath、GCEPersistent Disk、AWS Elastic Block Store、NFS、Ceph 等。
其中 PersistentVolume 是集群中的一个存储资源,由管理员预先配置或由动态存储供应系统自动供应。它是集群中的一块存储,通常关联到底层的物理存储系统,如 NAS、SAN,云盘,分布式存储或者本地盘。PV 是与 Pod 生命周期独立的,这意味着当 Pod不再存在时,PV 中的数据仍然保持不变。




